1 : C PB902 SOURCE MAGN 10/06/02 21:15:00 6681 2 : SUBROUTINE PB902 3 : &(XREF,X,Y,PG,FN,GR,FM,GM,ND,NP,MP,NG,NPG,NOM2,ITYPI) 4 : IMPLICIT INTEGER(I-N) 5 : IMPLICIT REAL*8 (A-H,O-Z) 6 : C************************************************************************ 7 : C 8 : C CALCULE LES FONCTIONS DE FORME D'UN : QUA9 9 : C eta 10 : C ^ 11 : C | 12 : C 7 6 5 13 : C 1. x------x------x 14 : C | | 15 : C | | 16 : C alfa 8x 9x 4x 17 : C | | 18 : C | | 19 : C 0. x------x------x--> ksi 20 : C 1 2 3 21 : C 22 : C 0. alfa 1. 23 : C 24 : C ITYPI=2 pts d'intégration de type Gauss Lobatto i.e. sommets élément 25 : C 26 : C REMARQUE : Pour l'élément quadratique. 27 : C En coordonnées cylindriques si les points milieux (2,4,6,8,9) sont 28 : C pile poil au milieu, la matrice masse diagonale s'annule sur l'axe. 29 : C /1 30 : C | 2 pi x N1 dx = 0. 31 : C /0 32 : C Pour remédier à cela on décale un peu les points mileux sur l'élément 33 : C de référence, alfa=0.50005 au lieu de 0.5 . 34 : C Si on rapprochait les points milieux de l'axe (alfa = 0.45 par exemple) 35 : C la matrice masse diagonale serait négative sur l'axe, ce que l'on ne 36 : C veut pas non plus. En conséquence le choix qu'on a fait doit être 37 : C accompagné d'une numérotation dans le sens trigo de l'élément courant. 38 : C************************************************************************ 39 : REAL*8 XREF(ND,NP),X(NPG),Y(NPG) 40 : DIMENSION FN(NP,NPG),GR(ND,NP,NPG),PG(NPG) 41 : DIMENSION FM(MP,NPG),GM(ND,MP,NPG) 42 : CHARACTER*4 NOM2 43 : REAL*8 A,B,C,D,U(5),H(5),AUX1,AUX2 44 : -INC CCOPTIO 45 : 46 : C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 47 : AUX1=1.D0/2.D0+3.D0**(1.D0/2.D0)/6.D0 48 : AUX2=1.D0/2.D0-3.D0**(1.D0/2.D0)/6.D0 49 : C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 50 : IF(IFOMOD.EQ.0)THEN 51 : alfa=0.50005D0 52 : ELSE 53 : alfa=0.5D0 54 : ENDIF 55 : 56 : alfai=1.D0/alfa 57 : alfa2=1.D0/alfa/(alfa - 1.D0) 58 : alfa3=1.D0/(alfai - 1.D0) 59 : 60 : XREF(1,1)=0.D0 61 : XREF(2,1)=0.D0 62 : 63 : XREF(1,2)=alfa 64 : XREF(2,2)=0.D0 65 : 66 : XREF(1,3)=1.D0 67 : XREF(2,3)=0.D0 68 : 69 : XREF(1,4)=1.D0 70 : XREF(2,4)=alfa 71 : 72 : XREF(1,5)=1.D0 73 : XREF(2,5)=1.D0 74 : 75 : XREF(1,6)=alfa 76 : XREF(2,6)=1.D0 77 : 78 : XREF(1,7)=0.D0 79 : XREF(2,7)=1.D0 80 : 81 : XREF(1,8)=0.D0 82 : XREF(2,8)=alfa 83 : 84 : XREF(1,9)=alfa 85 : XREF(2,9)=alfa 86 : 87 : C Verification des coordonnées 88 : c IF(.TRUE.)THEN 89 : IF(.FALSE.)THEN 90 : DO 11 L=1,NP 91 : X(L)=XREF(1,L) 92 : Y(L)=XREF(2,L) 93 : 11 CONTINUE 94 : 95 : DO 12 L=1,NP 96 : FN(1,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 97 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 98 : FN(2,L)=alfa2*X(L)*(X(L)-1.D0) 99 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 100 : FN(3,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 101 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 102 : FN(4,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 103 : & *alfa2*Y(L)*(Y(L)-1.D0) 104 : FN(5,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 105 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 106 : FN(6,L)=alfa2*X(L)*(X(L)-1.D0) 107 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 108 : FN(7,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 109 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 110 : FN(8,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 111 : & *alfa2*Y(L)*(Y(L)-1.D0) 112 : FN(9,L)=alfa2*X(L)*(X(L)-1.D0) 113 : & *alfa2*Y(L)*(Y(L)-1.D0) 114 : 115 : write(6,1033)L,FN(1,L),FN(2,L),FN(3,L),FN(4,L),FN(5,L),FN(6,L) 116 : & ,FN(7,L),FN(8,L),FN(9,L) 117 : 12 CONTINUE 118 : 1033 FORMAT(1X,I4,' FN',10(1X,1PD11.4)) 119 : ENDIF 120 : C Fin Vérification 121 : 121 : CALL CALUHG(U,H,NG) 122 : C 123 : A=0.D0 124 : B=1.D0 125 : C=0.D0 126 : D=1.D0 127 : IF(ITYPI.EQ.2)THEN 128 : X(1)=0.D0 129 : Y(1)=0.D0 130 : X(2)=alfa 131 : Y(2)=0.D0 132 : X(3)=1.D0 133 : Y(3)=0.D0 134 : X(4)=1.D0 135 : Y(4)=alfa 136 : X(5)=1.D0 137 : Y(5)=1.D0 138 : X(6)=alfa 139 : Y(6)=1.D0 140 : X(7)=0.D0 141 : Y(7)=1.D0 142 : X(8)=0.D0 143 : Y(8)=alfa 144 : X(9)=alfa 145 : Y(9)=alfa 146 : DO 2 L=1,NPG 147 : PG(L)=1.D0/9.D0 148 : 2 CONTINUE 149 : ELSE 149 : CALL CALG2(A,B,C,D,NG,H,U,X,Y,PG) 150 : ENDIF 151 : 152 : DO 1 L=1,NPG 153 : C 154 : IF(NOM2.EQ.'PRP0')THEN 155 : FM(1,L)= 1.D0 156 : 157 : GM(1,1,L)=0.D0 158 : GM(2,1,L)=0.D0 159 : 160 : ELSEIF(NOM2.EQ.'PRQ1')THEN 161 : FM(1,L)= 3.D0*(X(L)-AUX1)*(Y(L)-AUX1) 162 : FM(2,L)=-3.D0*(X(L)-AUX2)*(Y(L)-AUX1) 163 : FM(3,L)= 3.D0*(X(L)-AUX2)*(Y(L)-AUX2) 164 : FM(4,L)=-3.D0*(X(L)-AUX1)*(Y(L)-AUX2) 165 : C 166 : GM(1,1,L)=3.D0*(Y(L)-AUX1) 167 : GM(2,1,L)=3.D0*(X(L)-AUX1) 168 : GM(1,2,L)=-3.D0*(Y(L)-AUX1) 169 : GM(2,2,L)=-3.D0*(X(L)-AUX2) 170 : GM(1,3,L)=3.D0*(Y(L)-AUX2) 171 : GM(2,3,L)=3.D0*(X(L)-AUX2) 172 : GM(1,4,L)=-3.D0*(Y(L)-AUX2) 173 : GM(2,4,L)=-3.D0*(X(L)-AUX1) 174 : 175 : ELSEIF(NOM2.EQ.'PRP1')THEN 176 : C? FM(1,L)= (3.D0-4.D0*X(L))/2.D0 177 : C? FM(2,L)= 2.D0*(X(L)-Y(L)) 178 : C? FM(3,L)= (4.D0*Y(L)-1.D0)/2.D0 179 : FM(1,L)= (4.D0*X(L)+4.D0*Y(L)-3.D0)/3.D0 180 : FM(2,L)=-1.D0/3.D0*(8.D0*X(L)-4.D0*Y(L)-3.D0) 181 : FM(3,L)= 1.D0/3.D0*(-8.D0*Y(L)+4.D0*X(L)+3.D0) 182 : C 183 : GM(1,1,L)=0.D0 184 : GM(2,1,L)=0.D0 185 : GM(1,2,L)=0.D0 186 : GM(2,2,L)=0.D0 187 : GM(1,3,L)=0.D0 188 : GM(2,3,L)=0.D0 189 : ELSEIF(NOM2.EQ.'PFP1')THEN 190 : FM(1,L)= (X(L)-1.D0)*(Y(L)-1.D0) 191 : FM(2,L)=-X(L)*(Y(L)-1.D0) 192 : FM(3,L)= X(L)*Y(L) 193 : FM(4,L)=-Y(L)*(X(L)-1.D0) 194 : 195 : GM(1,1,L)=Y(L)-1.D0 196 : GM(2,1,L)=X(L)-1.D0 197 : GM(1,2,L)=-(Y(L)-1.D0) 198 : GM(2,2,L)=-X(L) 199 : GM(1,3,L)=Y(L) 200 : GM(2,3,L)=X(L) 201 : GM(1,4,L)=-Y(L) 202 : GM(2,4,L)=-(X(L)-1.D0) 203 : ENDIF 204 : C 205 : c N1X=(X(L)-1.D0)*(alfai*X(L)-1.D0) 206 : c N1Y=(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 207 : c 208 : c N2X=alfa2*X(L)*(X(L)-1.D0) 209 : c N2Y=alfa2*Y(L)*(Y(L)-1.D0) 210 : c 211 : c N3X=alfa3*X(L)*(alfai*X(L)-1.D0) 212 : c N3Y=alfa3*Y(L)*(alfai*Y(L)-1.D0) 213 : C 214 : 215 : c FN(1,L)=N1X*N1Y 216 : FN(1,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 217 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 218 : c FN(2,L)=N2X*N1Y 219 : FN(2,L)=alfa2*X(L)*(X(L)-1.D0) 220 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 221 : c FN(3,L)=N3X*N1Y 222 : FN(3,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 223 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 224 : c FN(4,L)=N3X*N2Y 225 : FN(4,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 226 : & *alfa2*Y(L)*(Y(L)-1.D0) 227 : c FN(5,L)=N3X*N3Y 228 : FN(5,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 229 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 230 : c FN(6,L)=N2X*N3Y 231 : FN(6,L)=alfa2*X(L)*(X(L)-1.D0) 232 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 233 : c FN(7,L)=N1X*N3Y 234 : FN(7,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 235 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 236 : c FN(8,L)=N1X*N2Y 237 : FN(8,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 238 : & *alfa2*Y(L)*(Y(L)-1.D0) 239 : c FN(9,L)=N2X*N2Y 240 : FN(9,L)=alfa2*X(L)*(X(L)-1.D0) 241 : & *alfa2*Y(L)*(Y(L)-1.D0) 242 : 243 : C 244 : c FN(1,L)=(X(L)-1.D0)*(Y(L)-1.D0)*(2.D0*X(L)-1.D0)*(2.D0*Y(L)-1.D0) 245 : c FN(2,L)=-4.D0*X(L)*(X(L)-1.D0)*(2.D0*Y(L)-1.D0)*(Y(L)-1.D0) 246 : c FN(3,L)=X(L)*(2.D0*X(L)-1.D0)*(2.D0*Y(L)-1.D0)*(Y(L)-1.D0) 247 : c FN(4,L)=-4.D0*X(L)*Y(L)*(2.D0*X(L)-1.D0)*(Y(L)-1.D0) 248 : c FN(5,L)=X(L)*Y(L)*(2.D0*X(L)-1.D0)*(2.D0*Y(L)-1.D0) 249 : c FN(6,L)=-4.D0*X(L)*Y(L)*(X(L)-1.D0)*(2.D0*Y(L)-1.D0) 250 : c FN(7,L)=Y(L)*(2.D0*Y(L)-1.D0)*(2.D0*X(L)-1.D0)*(X(L)-1.D0) 251 : c FN(8,L)=-4.D0*Y(L)*(Y(L)-1.D0)*(X(L)-1.D0)*(2.D0*X(L)-1.D0) 252 : c FN(9,L)=16.D0*X(L)*Y(L)*(X(L)-1.D0)*(Y(L)-1.D0) 253 : C 254 : c N1X=(X(L)-1.D0)*(alfai*X(L)-1.D0) 255 : c N1Y=(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 256 : c 257 : c N2X=alfa2*X(L)*(X(L)-1.D0) 258 : c N2Y=alfa2*Y(L)*(Y(L)-1.D0) 259 : c 260 : c N3X=alfa3*X(L)*(alfai*X(L)-1.D0) 261 : c N3Y=alfa3*Y(L)*(alfai*Y(L)-1.D0) 262 : c 263 : c G1X=2.D0*alfai*X(L)-(1.D0 + alfai) 264 : c G1Y=2.D0*alfai*Y(L)-(1.D0 + alfai) 265 : c 266 : c G2X=alfa2*(2.D0*X(L)-1.D0) 267 : c G2Y=alfa2*(2.D0*Y(L)-1.D0) 268 : c 269 : c G3X=alfa3*(2.D0*alfai*X(L)-1.D0) 270 : c G3Y=alfa3*(2.D0*alfai*Y(L)-1.D0) 271 : 272 : C 273 : c GR(1,1,L)=G1X*N1Y 274 : GR(1,1,L)=(2.D0*alfai*X(L)-(1.D0 + alfai)) 275 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 276 : c GR(2,1,L)=N1X*G1Y 277 : GR(2,1,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 278 : & *(2.D0*alfai*Y(L)-(1.D0 + alfai)) 279 : c GR(1,2,L)=G2X*N1Y 280 : GR(1,2,L)=(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 281 : & *alfa2*(2.D0*X(L)-1.D0) 282 : c GR(2,2,L)=N2X*G1Y 283 : GR(2,2,L)=alfa2*X(L)*(X(L)-1.D0) 284 : & *(2.D0*alfai*Y(L)-(1.D0 + alfai)) 285 : c GR(1,3,L)=G3X*N1Y 286 : GR(1,3,L)=alfa3*(2.D0*alfai*X(L)-1.D0) 287 : & *(Y(L)-1.D0)*(alfai*Y(L)-1.D0) 288 : c GR(2,3,L)=N3X*G1Y 289 : GR(2,3,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 290 : & *(2.D0*alfai*Y(L)-(1.D0 + alfai)) 291 : c GR(1,4,L)=G3X*N2Y 292 : GR(1,4,L)=alfa3*(2.D0*alfai*X(L)-1.D0) 293 : & *alfa2*Y(L)*(Y(L)-1.D0) 294 : c GR(2,4,L)=N3X*G2Y 295 : GR(2,4,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 296 : & *alfa2*(2.D0*Y(L)-1.D0) 297 : c GR(1,5,L)=G3X*N3Y 298 : GR(1,5,L)=alfa3*(2.D0*alfai*X(L)-1.D0) 299 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 300 : c GR(2,5,L)=N3X*G3Y 301 : GR(2,5,L)=alfa3*X(L)*(alfai*X(L)-1.D0) 302 : & *alfa3*(2.D0*alfai*Y(L)-1.D0) 303 : c GR(1,6,L)=G2X*N3Y 304 : GR(1,6,L)=alfa2*(2.D0*X(L)-1.D0) 305 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 306 : c GR(2,6,L)=N2X*G3Y 307 : GR(2,6,L)=alfa2*X(L)*(X(L)-1.D0) 308 : & *alfa3*(2.D0*alfai*Y(L)-1.D0) 309 : c GR(1,7,L)=G1X*N3Y 310 : GR(1,7,L)=(2.D0*alfai*X(L)-(1.D0 + alfai)) 311 : & *alfa3*Y(L)*(alfai*Y(L)-1.D0) 312 : c GR(2,7,L)=N1X*G3Y 313 : GR(2,7,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 314 : & *alfa3*(2.D0*alfai*Y(L)-1.D0) 315 : c GR(1,8,L)=G1X*N2Y 316 : GR(1,8,L)=(2.D0*alfai*X(L)-(1.D0 + alfai)) 317 : & *alfa2*Y(L)*(Y(L)-1.D0) 318 : c GR(2,8,L)=N1X*G2Y 319 : GR(2,8,L)=(X(L)-1.D0)*(alfai*X(L)-1.D0) 320 : & *alfa2*(2.D0*Y(L)-1.D0) 321 : c GR(1,9,L)=G2X*N2Y 322 : GR(1,9,L)=alfa2*Y(L)*(Y(L)-1.D0) 323 : & *alfa2*(2.D0*X(L)-1.D0) 324 : c GR(2,9,L)=N2X*G2Y 325 : GR(2,9,L)=alfa2*X(L)*(X(L)-1.D0) 326 : & *alfa2*(2.D0*Y(L)-1.D0) 327 : C 328 : c GR(1,1,L)=(Y(L)-1.D0)*(2.D0*Y(L)-1.D0)*(4.D0*X(L)-3.D0) 329 : c GR(2,1,L)=(X(L)-1.D0)*(2.D0*X(L)-1.D0)*(4.D0*Y(L)-3.D0) 330 : c GR(1,2,L)=-4.D0*(2.D0*X(L)-1.D0)*(2.D0*Y(L)-1.D0)*(Y(L)-1.D0) 331 : c GR(2,2,L)=-4.D0*X(L)*(X(L)-1.D0)*(4.D0*Y(L)-3.D0) 332 : c GR(1,3,L)=(2.D0*Y(L)-1.D0)*(Y(L)-1.D0)*(4.D0*X(L)-1.D0) 333 : c GR(2,3,L)=X(L)*(2.D0*X(L)-1.D0)*(4.D0*Y(L)-3.D0) 334 : c GR(1,4,L)=-4.D0*Y(L)*(Y(L)-1.D0)*(4.D0*X(L)-1.D0) 335 : c GR(2,4,L)=-4.D0*X(L)*(2.D0*X(L)-1.D0)*(2.D0*Y(L)-1.D0) 336 : c GR(1,5,L)=Y(L)*(2.D0*Y(L)-1.D0)*(4.D0*X(L)-1.D0) 337 : c GR(2,5,L)=X(L)*(2.D0*X(L)-1.D0)*(4.D0*Y(L)-1.D0) 338 : c GR(1,6,L)=-4.D0*Y(L)*(2.D0*Y(L)-1.D0)*(2.D0*X(L)-1.D0) 339 : c GR(2,6,L)=-4.D0*X(L)*(X(L)-1.D0)*(4.D0*Y(L)-1.D0) 340 : c GR(1,7,L)=Y(L)*(2.D0*Y(L)-1.D0)*(4.D0*X(L)-3.D0) 341 : c GR(2,7,L)=(2.D0*X(L)-1.D0)*(X(L)-1.D0)*(4.D0*Y(L)-1.D0) 342 : c GR(1,8,L)=-4.D0*Y(L)*(Y(L)-1.D0)*(4.D0*X(L)-3.D0) 343 : c GR(2,8,L)=-4.D0*(X(L)-1.D0)*(2.D0*X(L)-1.D0)*(2.D0*Y(L)-1.D0) 344 : c GR(1,9,L)=16.D0*Y(L)*(Y(L)-1.D0)*(2.D0*X(L)-1.D0) 345 : c GR(2,9,L)=16.D0*X(L)*(X(L)-1.D0)*(2.D0*Y(L)-1.D0) 346 : C 347 : 1 CONTINUE 348 : C 349 : C 350 : C WRITE(6,101) 351 : C WRITE(6,1002)FM 352 : C WRITE(6,1002)GM 353 : C WRITE(6,1002)FN 354 : C WRITE(6,1002)GR 355 : C WRITE(6,101) 356 : 357 : C write(6,*)' RET PB902 ' 358 : RETURN 359 : 1002 FORMAT(10(1X,1PD11.4)) 360 : 1001 FORMAT(20(1X,I5)) 361 : 101 FORMAT(1X,'... SUBPB902 ... FM,GM,FN,GR ',9(10H..........)/) 362 : C 363 : END 364 : 365 : 366 : 367 : 368 : 369 : 370 : 371 : 372 :
© Cast3M 2003 - All rights reserved.
Disclaimer