1 : C C20227 SOURCE CHAT 05/01/12 21:44:53 5004 2 : SUBROUTINE C20227 3 : IMPLICIT INTEGER(I-N) 4 : IMPLICIT REAL*8 (A-H,O-Z) 5 : C************************************************************************ 6 : C Ce sp transforme des elemnts quadratique d'un type pris 7 : C dans la liste ci-dessous 8 : C SEG3 TRI6 QUA8 CU20 PR15 TE10 PY13 9 : C 3 6 10 15 17 24 26 10 : C 11 : C en les éléments correspondant quadratique complet de la liste 12 : C ci-dessous 13 : C 14 : C SEG3 TRI7 QUA9 CU27 PR21 TE15 PY19 15 : C 3 7 11 33 34 35 36 16 : C************************************************************************ 17 : -INC SMELEME 18 : -INC SMCOORD 19 : -INC CCOPTIO 20 : -INC SMLENTI 21 : SEGMENT TRAV 22 : INTEGER IFAC4(4,NBFTM) 23 : ENDSEGMENT 24 : SEGMENT TRAV1 25 : INTEGER NUMF4(9,NBFTM) 26 : ENDSEGMENT 27 : SEGMENT SITAF 28 : INTEGER ITAF(NBFAX,MMMAX) 29 : ENDSEGMENT 30 : SEGMENT TRAV2 31 : INTEGER NUF(6,NBELT) 32 : ENDSEGMENT 33 : SEGMENT CARA 34 : INTEGER KM(6,NBSOU1) 35 : ENDSEGMENT 36 : 37 : 38 : DIMENSION IAR(3,35),IFR(4,20) 39 : DATA IAR /1,2,3,3,4,5,5,6,7,7,8,1, 40 : & 1,9,13,3,10,15,5,11,17,7,12,19, 41 : & 13,14,15,15,16,17,17,18,19,19,20,13, 42 : & 1,2,3,3,4,5,5,6,1,1,7,10,3,8,12,5,9,14, 43 : & 10,11,12,12,13,14,14,15,10, 44 : & 1,2,3,3,4,5,5,6,1,1,7,10,3,8,10,5,9,10, 45 : & 1,2,3,3,4,5,5,6,7,7,8,1,1,9,13,3,10,13, 46 : & 5,11,13,7,12,13/ 47 : 48 : DATA IFR /1,6,9,5, 2,7,10,6, 3,8,11,7, 4,5,12,8, 49 : & 1,2,3,4, 9,10,11,12, 50 : & 1,5,7,4, 2,6,8,5, 3,4,9,6, 1,2,3,0, 7,8,9,0, 51 : & 1,2,3,0, 1,5,4,0, 2,6,5,0, 3,6,4,0, 52 : & 1,2,3,4, 1,6,5,0, 2,7,6,0, 3,8,7,0, 4,5,8,0/ 53 : 54 : C Nb de pts par face par type elt 55 : DIMENSION KNPF(6,7) 56 : DATA KNPF/1,1,0,0,0,0, 57 : & 3,3,3,0,0,0, 58 : & 3,3,3,3,0,0, 59 : & 8,8,8,8,8,8, 60 : & 8,8,8,6,6,0, 61 : & 6,6,6,6,0,0, 62 : & 8,6,6,6,6,0/ 63 : 64 : C Nb d'arretes par face par type elt 65 : DIMENSION KNAF(6,7) 66 : DATA KNAF/0,0,0,0,0,0, 67 : & 0,0,0,0,0,0, 68 : & 0,0,0,0,0,0, 69 : & 4,4,4,4,4,4, 70 : & 4,4,4,3,3,0, 71 : & 3,3,3,3,0,0, 72 : & 4,3,3,3,3,0/ 73 : 74 : C? DIMENSION I12(35),J12(11) 75 : C? DATA I12 /1,2,3,4,5,6,7,8,10,12,14,16,19,20,21,22,23,24,25,26, 76 : C? & 1,2,3,4,5,6,8,10,12,15,16,17,18,19,20/ 77 : C? DATA J12 /11,13,15,17,9,27, 78 : C? & 9 ,11,13,7 ,21/ 79 : 80 : DIMENSION INF(8,20) 81 : C CU20 82 : DATA INF/1,2,3,10,15,14,13,9, 3,4,5,11,17,16,15,10, 83 : & 5,6,7,12,19,18,17,11, 7,8,1,9,13,20,19,12, 84 : & 1,8,7,6,5,4,3,2, 13,14,15,16,17,18,19,20, 85 : C PR15 86 : & 1,2,3,8 ,12,11,10,7, 3,4,5,9 ,14,13,12,8 , 87 : & 5,6,1,7,10,15,14,9 , 1,2,3,4,5,6,0,0, 88 : & 10,11,12,13,14,15,0,0, 89 : C TE15 90 : & 1,2,3,4,5,6,0,0, 1,2,3,8,10,7,0,0, 3,4,5,9,10,8,0,0, 91 : & 1,6,5,9,10,7,0,0, 92 : C PY15 93 : & 1,2,3,4,5,6,7,8, 1,2,3,10,13,9,0,0, 3,4,5,11,13,10,0,0, 94 : & 5,6,7,12,13,11,0,0, 7,8,1,9,13,12,0,0/ 95 : 96 : 97 : 98 : 99 : 100 : DIMENSION NUA(12),NUMA(4),XA(3,21),KTA(7,9) 101 : DATA KTA/3,6,10,15,17,24,26, 102 : & 3,7,11,33,34,35,36, 103 : C nb de faces 104 : & 2,3,4 ,6 ,5 ,4 ,5 , 105 : C nb d'arretes 106 : & 0,3,4 ,12,9 ,6 ,8, 107 : C Idec 108 : & 0,0,0 ,0 ,12,21,27, 109 : C Idc3 110 : & 0,0,0 ,0 ,6 ,11,15, 111 : C Nbnn 112 : & 3,7,9 ,27,21,15,19, 113 : C NP 114 : & 3,6,8 ,20,15,10,13, 115 : C IDF 116 : & 0,0,0 ,0 ,6 ,11,15/ 117 : 118 : C?Numero pt centre N18 119 : C? & 0,0,0 ,18,14,14,18/ 120 : C?Idc2 121 : C? & 0,0,0 ,0 ,20,35,45, 122 : 123 : C SEG3 TRI6 QUA8 CU20 PR15 TE10 PY13 124 : C 3 6 10 15 17 24 26 125 : C SEG3 TRI7 QUA9 CU27 PR21 TE15 PY19 126 : C 3 7 11 33 34 35 36 127 : 128 : 129 : C write(6,*)' C20227 dbut ' 130 : C************************************************************* 131 : 131 : CALL LIROBJ('MAILLAGE',MELEME,1,IRET) 132 : IF(IRET.EQ.0)RETURN 133 : 134 : SEGACT MELEME 135 : NBSOU1=LISOUS(/1) 136 : IF(NBSOU1.EQ.0)NBSOU1=1 137 : 138 : SEGINI CARA 139 : 140 : NBELT=0 141 : IKQF=1 142 : IK=1 143 : DO 11 L=1,NBSOU1 144 : IPT1=MELEME 145 : IF(NBSOU1.NE.1)IPT1=LISOUS(L) 146 : SEGACT IPT1 147 : ITYP=IPT1.ITYPEL 148 : 149 : DO 111 I=1,7 150 : IF(ITYP.EQ.KTA(I,1))THEN 151 : IK=I 152 : GO TO 110 153 : ENDIF 154 : 111 CONTINUE 155 : IK=0 156 : 110 CONTINUE 157 : 158 : DO 112 I=1,7 159 : IF(ITYP.EQ.KTA(I,2))GO TO 113 160 : 112 CONTINUE 161 : C write(6,*)' ITYP=',ityp 162 : IKQF=0 163 : 113 CONTINUE 164 : 165 : NP =IPT1.NUM(/1) 166 : NBELEM=IPT1.NUM(/2) 167 : IF(IK.GT.1)THEN 168 : NBELT=NBELT+NBELEM 169 : ENDIF 170 : KM(1,L)=NBELEM 171 : KM(2,L)=IPT1 172 : KM(3,L)=IK 173 : C nb d'aretes par element 174 : KM(4,L)=KTA(IK,4) 175 : C nb de faces 176 : KM(5,L)=KTA(IK,3) 177 : SEGDES IPT1 178 : 11 CONTINUE 179 : SEGDES MELEME 180 : 181 : IF(IDIM.EQ.3)THEN 182 : ONBN=FLOAT(NBELT)+(3.D0*(FLOAT(NBELT)**(2.D0/3.D0))) 183 : NBNO=INT(ONBN) 184 : ELSE 185 : ONBN=FLOAT(NBELT)+(2.D0*(FLOAT(NBELT)**(0.5D0))) 186 : NBNO=INT(ONBN) 187 : ENDIF 188 : 189 : C write(6,*)'IKQF=',ikqf,' IK=',ik 190 : IF(IKQF.NE.0)THEN 191 : C write(6,*)' C20227 il n y a rien a faire' 191 : CALL ECROBJ('MAILLAGE',MELEME) 192 : SEGSUP CARA 193 : RETURN 194 : ENDIF 195 : 196 : IF(IK.EQ.0)THEN 196 : CALL ERREUR(29) 197 : RETURN 198 : ENDIF 199 : 200 : C write(6,*)' C20227 on fait quekchose ' 201 : NBPT=XCOOR(/1)/(IDIM+1) 202 : JG=NBPT 203 : SEGINI MLENTI,MLENT1 204 : 205 : NBFAX=4+1 206 : MMMAX=3*NBELT+300 207 : SEGINI SITAF 208 : 209 : NBFTM=5*NBELT+500 210 : SEGINI TRAV,TRAV1,TRAV2 211 : 212 : SEGACT MELEME 213 : 214 : NBFT4=0 215 : NBAT=0 216 : NN=0 217 : MM=0 218 : 219 : NK=0 220 : DO 1 L=1,NBSOU1 221 : IK=KM(3,L) 222 : 223 : IPT1=MELEME 224 : IF(NBSOU1.NE.1)IPT1=LISOUS(L) 225 : SEGACT IPT1 226 : NBELEM=IPT1.NUM(/2) 227 : NP =IPT1.NUM(/1) 228 : C write(6,*)' ITYP,NBELEM=',ITYP,NBELEM 229 : 230 : IF(IK.EQ.1)GO TO 1 231 : IF(IK.EQ.2.OR.IK.EQ.3)THEN 232 : NK=NK+NBELEM 233 : GO TO 1 234 : ENDIF 235 : 236 : IDEC=KTA(IK,5) 237 : IDC3=KTA(IK,6) 238 : IDF =KTA(IK,9) 239 : NBA=KTA(IK,4) 240 : NBF=KTA(IK,3) 241 : C write(6,*)' NBA,NBF,NPF=',NBA,NBF 242 : 243 : DO 2 K=1,NBELEM 244 : NK=NK+1 245 : 246 : DO 5 NA=1,NBA 247 : N1=IPT1.NUM(IAR(1,NA+IDEC),K) 248 : N2=IPT1.NUM(IAR(3,NA+IDEC),K) 249 : NM=IPT1.NUM(IAR(2,NA+IDEC),K) 250 : 251 : IF(LECT(NM).EQ.0)THEN 252 : C le milieu n'a pas encore été touché 253 : NBAT=NBAT+1 254 : LECT(NM)=NBAT 255 : NUA(NA)=NBAT 256 : ELSE 257 : NUA(NA)=LECT(NM) 258 : ENDIF 259 : 260 : 5 CONTINUE 261 : 262 : DO 6 NF=1,NBF 263 : C nb de pts par faces 264 : NPF=KNPF(NF,IK) 265 : C nb d'arretes par faces 266 : NAF=KNAF(NF,IK) 267 : 268 : DO 61 NFA=1,NAF 269 : NUMA(NFA)=NUA(IFR(NFA,NF+IDF)) 270 : 61 CONTINUE 271 : 271 : CALL ORDOTA(NUMA,NAF) 272 : IF(MLENT1.LECT(NUMA(1)).EQ.0)THEN 273 : C l'arrete n'a pas encore été touché 274 : NBFT4=NBFT4+1 275 : 276 : IF(NBFT4.GT.NBFTM)THEN 277 : C write(6,*)' Taille TRAV NBFT4 insuffisante NBFT4=',NBFT4 278 : NBFTM=NBFTM+NBELEM 279 : SEGADJ TRAV,TRAV1 280 : ENDIF 281 : 282 : NUMF4(9,NBFT4)=NPF 283 : DO 621 I=1,NPF 284 : NUMF4(I,NBFT4)=IPT1.NUM(INF(I,NF+IDC3),K) 285 : 621 CONTINUE 286 : MM=MM+1 287 : 288 : IF(MM.GT.MMMAX)THEN 289 : C write(6,*)' Taille ITAF 2eme dime insuffisante MM=',MM 290 : MMMAX=MMMAX+NBELEM 291 : SEGADJ SITAF 292 : ENDIF 293 : 294 : MLENT1.LECT(NUMA(1))=MM 295 : ITAF(1,MM)=1 296 : ITAF(1+1,MM)=NBFT4 297 : C write(6,*)' NBFT4=',nbft4,' mm=',mm,' NB=',ITAF(1,mm) 298 : NUF(NF,NK)=NBFT4 298 : CALL RSETI(IFAC4(1,NBFT4),NUMA,NAF) 299 : GO TO 6 300 : ENDIF 301 : 302 : C On cherche si la face existe déja dans la table ITAF 303 : MM1=MLENT1.LECT(NUMA(1)) 304 : NB=ITAF(1,MM1) 305 : DO 631 II=1,NB 306 : I=ITAF(II+1,MM1) 307 : IF( NUMA(2).EQ.IFAC4(2,I).AND.NUMA(3).EQ.IFAC4(3,I) 308 : & .AND.NUMA(1).EQ.IFAC4(1,I))THEN 309 : NUF(NF,NK)=I 310 : GO TO 6 311 : ENDIF 312 : 631 CONTINUE 313 : 314 : IF(NB.LT.(NBFAX-1))THEN 315 : C la face n'existe pas dans la table ITAF qui n'est pas pleine 316 : C On peut donc considerer que la face est nouvelle 317 : NBFT4=NBFT4+1 318 : 319 : IF(NBFT4.GT.NBFTM)THEN 320 : C write(6,*)' Taille TRAV NBFT4 insuffisante NBFT4=',NBFT4 321 : NBFTM=NBFTM+NBELEM 322 : C write(6,*)' NBFTM=',NBFTM,NBELEM 323 : SEGADJ TRAV,TRAV1 324 : ENDIF 325 : 326 : NUMF4(9,NBFT4)=NPF 327 : DO 622 I=1,NPF 328 : NUMF4(I,NBFT4)=IPT1.NUM(INF(I,NF+IDC3),K) 329 : 622 CONTINUE 330 : ITAF(1,MM1)=NB+1 331 : ITAF(NB+2,MM1)=NBFT4 332 : C write(6,*)' NBFT4=',NBFT4,' mm1=',mm1,' NB=',ITAF(1,mm1) 333 : NUF(NF,NK)=NBFT4 333 : CALL RSETI(IFAC4(1,NBFT4),NUMA,NAF) 334 : GO TO 6 335 : ENDIF 336 : 337 : C write(6,*)' Taille ITAF 1ere dime insuffisante NB=',NB 338 : NBFAX=NBFAX+2 339 : SEGADJ SITAF 340 : C On fait une recherche parmis toutes les faces existantes 341 : 342 : 343 : IF(NAF.EQ.4)THEN 344 : DO 7 I=1,NBFT4 345 : IF( NUMA(2).EQ.IFAC4(2,I).AND.NUMA(3).EQ.IFAC4(3,I) 346 : & .AND.NUMA(1).EQ.IFAC4(1,I))THEN 347 : NUF(NF,NK)=I 348 : GO TO 6 349 : ENDIF 350 : 7 CONTINUE 351 : ELSEIF(NAF.EQ.3)THEN 352 : DO 71 I=1,NBFT4 353 : IF( NUMA(2).EQ.IFAC4(2,I).AND.NUMA(3).EQ.IFAC4(3,I))THEN 354 : NUF(NF,NK)=I 355 : GO TO 6 356 : ENDIF 357 : 71 CONTINUE 358 : ENDIF 359 : 360 : 361 : 64 CONTINUE 362 : NBFT4=NBFT4+1 363 : 364 : IF(NBFT4.GT.NBFTM)THEN 365 : C write(6,*)' Taille TRAV NBFT4 insuffisante NBFT4=',NBFT4 366 : NBFTM=NBFTM+NBELEM 367 : SEGADJ TRAV,TRAV1 368 : ENDIF 369 : 370 : ITAF(1,MM1)=NB+1 371 : ITAF(NB+2,MM1)=NBFT4 372 : NUMF4(9,NBFT4)=NPF 373 : DO 623 I=1,NPF 374 : NUMF4(I,NBFT4)=IPT1.NUM(INF(I,NF+IDC3),K) 375 : 623 CONTINUE 376 : NUF(NF,NK)=NBFT4 376 : CALL RSETI(IFAC4(1,NBFT4),NUMA,NAF) 377 : 378 : 6 CONTINUE 379 : 2 CONTINUE 380 : 1 CONTINUE 381 : 382 : C********************************************************** 383 : 384 : SEGSUP SITAF,MLENTI,MLENT1,TRAV 385 : 386 : C********************************************************** 387 : 388 : SEGACT MELEME 389 : 390 : NK=0 391 : DO 80 L=1,NBSOU1 392 : IK=KM(3,L) 393 : NBF=KTA(IK,3) 394 : IF(IK.EQ.1)GO TO 80 395 : 396 : IPT1=MELEME 397 : IF(NBSOU1.NE.1)IPT1=LISOUS(L) 398 : SEGACT IPT1 399 : 400 : NBELEM=KM(1,L) 401 : NBNN =KTA(IK,7) 402 : NP =KTA(IK,8) 403 : 404 : NBSOUS=0 405 : NBREF=0 406 : SEGINI IPT2 407 : KM(2,L)=IPT2 408 : IPT2.ITYPEL=KTA(IK,2) 409 : 410 : IF(IK.GE.4)THEN 411 : C CU27 & PR21 412 : IDC3=KTA(IK,6) 413 : 414 : DO 83 K=1,NBELEM 415 : NK=NK+1 416 : DO 8 I=1,NP 417 : IPT2.NUM(I,K)=IPT1.NUM(I,K) 418 : 8 CONTINUE 419 : DO 81 I=1,NBF 420 : IPT2.NUM(I+NP,K)=NBPT+NBELT+NUF(I,NK) 421 : 81 CONTINUE 422 : IPT2.NUM(NBNN,K)=NBPT+NK 423 : 83 CONTINUE 424 : 425 : ELSEIF(IK.EQ.2.OR.IK.EQ.3)THEN 426 : IDC=7 427 : IF(IK.EQ.3)IDC=9 428 : NP=NBNN-1 429 : DO 84 K=1,NBELEM 430 : NK=NK+1 431 : DO 88 I=1,NP 432 : IPT2.NUM(I,K)=IPT1.NUM(I,K) 433 : 88 CONTINUE 434 : IPT2.NUM(IDC,K)=NBPT+NK 435 : 84 CONTINUE 436 : 437 : ENDIF 438 : 439 : SEGDES IPT1,IPT2 440 : 80 CONTINUE 441 : 442 : C write(6,*)' NUF ' 443 : C DO 783 K=1,NBELT 444 : C write(6,1011)K,(NUF(i,k),i=1,6) 445 : C783 continue 446 : 447 : C do 784 k=1,nbft4 448 : C write(6,1011)K,(NUMF4(i,k),i=1,8) 449 : C784 continue 450 : 451 : C write(6,*)' NBPT=',nbpt 452 : C write(6,*)' NBAT=',nbat 453 : C write(6,*)' NBELT=',NBELT,' NBFT4=',nbft4 454 : 455 : NBPTS=NBPT+NBELT+NBFT4 456 : IF(NBPTS.GT.NBPT)SEGADJ MCOORD 457 : 458 : C************** On calcule les coordonnées des points *********** 459 : 460 : 461 : 462 : IF(NBFT4.NE.0)THEN 463 : 464 : DO 23 J=1,NBFT4 465 : 466 : NPF=NUMF4(9,J) 467 : DO 21 I=1,NPF 468 : N1=NUMF4(I,J) 469 : DO 21 M=1,IDIM 470 : XA(M,I)=XCOOR((N1-1)*(IDIM+1) +M) 471 : 21 CONTINUE 472 : 472 : CALL FFFACE(XA,NPF) 473 : 474 : N9=NBPT+NBELT+J 475 : DO 22 M=1,IDIM 476 : XCOOR((N9-1)*(IDIM+1) +M)=XA(M,NPF+1) 477 : 22 CONTINUE 478 : 23 CONTINUE 479 : ENDIF 480 : 481 : 482 : C write(6,*)' On calcule les coordonnées du pt centre ',NBELT 483 : IF(NBELT.NE.0)THEN 484 : SEGACT MELEME 485 : NK=0 486 : DO 90 L=1,NBSOU1 487 : 488 : IK=KM(3,L) 489 : IF(IK.EQ.1)GO TO 90 490 : IPT1=MELEME 491 : IF(NBSOU1.NE.1)IPT1=LISOUS(L) 492 : SEGACT IPT1 493 : 494 : NBELEM=KM(1,L) 495 : NBNN =KTA(IK,7) 496 : NP =KTA(IK,8) 497 : 498 : IPT2=KM(2,L) 499 : 500 : DO 24 K=1,NBELEM 501 : NK=NK+1 501 : CALL INITD(XA(1,21),IDIM,0.D0) 502 : DO 25 I=1,NP 503 : N1=IPT1.NUM(I,K) 504 : DO 25 M=1,IDIM 505 : XA(M,I)=XCOOR((N1-1)*(IDIM+1) +M) 506 : XA(M,NP+1)=XA(M,NP+1)+(XA(M,I)/FLOAT(NP)) 507 : 25 CONTINUE 507 : CALL FFFACE(XA,NP) 508 : 509 : 510 : N18=NBPT+NK 511 : C write(6,*)' *** NK=',nk,NBELT,L 512 : DO 26 M=1,IDIM 513 : XCOOR((N18-1)*(IDIM+1) +M)=XA(M,NP+1) 514 : 26 CONTINUE 515 : 24 CONTINUE 516 : 517 : 90 CONTINUE 518 : 519 : ENDIF 520 : 521 : 522 : C write(6,*)' NBPT=',nbpt 523 : C write(6,*)' NBAT=',nbat 524 : C do 116 l=1,nbat 525 : C write(6,1011)L,(itab(i,l),i=1,3) 526 : C116 continue 527 : 528 : C write(6,*)' LECT ' 529 : C write(6,1001)(lect(ii),ii=1,nbpt) 530 : 531 : C write(6,*)' ITAC NN=',NN 532 : C do 118 l=1,NN 533 : C nb=itac(1,l) 534 : C write(6,1011)L,itac(1,l),(itac(i+1,l),i=1,nb) 535 : C118 continue 536 : 537 : C write(6,*)' NBFT4=',nbft4 538 : 539 : C do 117 l=1,nbft4 540 : C write(6,1011)L,(ifac4(i,l),i=1,4) 541 : C117 continue 542 : 543 : C write(6,*)' MLENT1.LECT ' 544 : C write(6,1001)(mlent1.lect(ii),ii=1,nbpt) 545 : 546 : C write(6,*)' ITAF MM=',MM 547 : C do 119 l=1,MM 548 : C nb=itaf(1,l) 549 : C write(6,1011)L,itaf(1,l),(itaf(i+1,l),i=1,nb) 550 : C119 continue 551 : 552 : SEGSUP TRAV1 553 : IF(NBSOU1.EQ.1)THEN 554 : IPT3=KM(2,1) 555 : ELSE 556 : NBSOUS=NBSOU1 557 : NBELEM=0 558 : NBNN=0 559 : NBREF=0 560 : SEGINI IPT3 561 : DO 785 L=1,NBSOU1 562 : IPT3.LISOUS(L)=KM(2,L) 563 : 785 CONTINUE 564 : ENDIF 565 : 566 : C? SEGACT IPT3 567 : C? nbref=IPT3.LISREF(/1) 568 : C? write(6,*)' nbref,meleme=',nbref,meleme 569 : C? IPT3.LISREF(1)=MELEME 570 : SEGDES IPT3 571 : 572 : C write(6,*)' C20227 ipt3=',ipt3 572 : CALL ECROBJ('MAILLAGE',IPT3) 573 : 574 : SEGSUP CARA,TRAV2 575 : 576 : RETURN 577 : 1011 FORMAT('L=',I3,4X,15(1X,I5)) 578 : 1001 FORMAT(20(1X,I5)) 579 : 1002 FORMAT(10(1X,1PE11.4)) 580 : END 581 : 582 : 583 : 584 : 585 : 586 :
© Cast3M 2003 - All rights reserved.
Disclaimer