5 &(ftild,ftild_weak,surfac,ikle,npoin,nelem,nelmax,ng,ngauss,
6 & mesh,t2,tb,agglo,ielm,nplan,z,cv1,am1,slv,unsv,listin,solv)
44 INTEGER,
INTENT(IN) :: NELEM,NELMAX,NPOIN,NG,IELM
45 INTEGER,
INTENT(IN) :: NPLAN,NGAUSS
47 INTEGER,
INTENT(IN) :: IKLE(nelmax,3)
48 LOGICAL,
INTENT(IN) :: LISTIN,SOLV
49 DOUBLE PRECISION,
INTENT(IN) :: SURFAC(nelmax),AGGLO,Z(*)
50 TYPE(bief_obj),
INTENT(IN) :: FTILD_WEAK,UNSV
51 TYPE(bief_obj),
INTENT(INOUT) :: FTILD,T2,TB,CV1,AM1
52 TYPE(bief_mesh),
INTENT(INOUT) :: MESH
53 TYPE(slvcfg),
INTENT(INOUT) :: SLV
57 INTEGER IELEM,I1,I2,I3,I4,I5,I6,I,IG,IPLAN
58 DOUBLE PRECISION TIERS,A,B,C,D,H1,H2,H3,A1,A2,A3
59 DOUBLE PRECISION WEIGH1,WEIGH2,WEIGH3
73 IF(ng.NE.nelem*ngauss.AND.ielm.EQ.11)
THEN 74 WRITE(
lu,*)
'CHAR_WEAK: BAD NUMBER OF POINTS' 75 WRITE(
lu,*)
'NG=',ng,
' NELEM=',nelem,
' NGAUSS=',ngauss
78 ELSEIF(ng.NE.nelem*(nplan-1)*ngauss.AND.ielm.EQ.41)
THEN 79 WRITE(
lu,*)
'CHAR_WEAK: BAD NUMBER OF POINTS' 80 WRITE(
lu,*)
'NG=',ng,
' NELEM=',nelem,
' NGAUSS=',ngauss
81 WRITE(
lu,*)
'NPLAN=',nplan
86 IF(ngauss.EQ.1.AND.ielm.EQ.11)
THEN 96 cv1%R(i1)=cv1%R(i1)+surfac(ielem)*tiers*ftild_weak%R(ielem)
97 cv1%R(i2)=cv1%R(i2)+surfac(ielem)*tiers*ftild_weak%R(ielem)
98 cv1%R(i3)=cv1%R(i3)+surfac(ielem)*tiers*ftild_weak%R(ielem)
101 ELSEIF(ngauss.EQ.3.AND.ielm.EQ.11)
THEN 115 & cv1%R(i1)+surfac(ielem)*tiers*ftild_weak%R(ig)*2.d0/3.d0
117 & cv1%R(i2)+surfac(ielem)*tiers*ftild_weak%R(ig)*1.d0/6.d0
119 & cv1%R(i3)+surfac(ielem)*tiers*ftild_weak%R(ig)*1.d0/6.d0
123 & cv1%R(i1)+surfac(ielem)*tiers*ftild_weak%R(ig)*1.d0/6.d0
125 & cv1%R(i2)+surfac(ielem)*tiers*ftild_weak%R(ig)*2.d0/3.d0
127 & cv1%R(i3)+surfac(ielem)*tiers*ftild_weak%R(ig)*1.d0/6.d0
131 & cv1%R(i1)+surfac(ielem)*tiers*ftild_weak%R(ig)*1.d0/6.d0
133 & cv1%R(i2)+surfac(ielem)*tiers*ftild_weak%R(ig)*1.d0/6.d0
135 & cv1%R(i3)+surfac(ielem)*tiers*ftild_weak%R(ig)*2.d0/3.d0
138 ELSEIF(ngauss.EQ.4.AND.ielm.EQ.11)
THEN 151 weigh1=-27.d0*surfac(ielem)/48.d0
152 weigh2= 25.d0*surfac(ielem)/48.d0
155 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*1.d0/3.d0
156 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*1.d0/3.d0
157 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*1.d0/3.d0
160 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*3.d0/5.d0
161 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*1.d0/5.d0
162 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*1.d0/5.d0
165 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*1.d0/5.d0
166 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*3.d0/5.d0
167 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*1.d0/5.d0
170 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*1.d0/5.d0
171 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*1.d0/5.d0
172 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*3.d0/5.d0
175 ELSEIF(ngauss.EQ.6.AND.ielm.EQ.11)
THEN 183 a=0.445948490915965d0
184 b=0.091576213509771d0
189 weigh1=surfac(ielem)*2.d0*0.111690794839005d0
190 weigh2=surfac(ielem)*2.d0*0.054975871827661d0
193 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*(1.d0-a-a)
194 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*a
195 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*a
198 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*a
199 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*(1.d0-a-a)
200 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*a
203 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*a
204 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*a
205 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*(1.d0-a-a)
208 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*(1.d0-b-b)
209 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*b
210 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*b
213 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*b
214 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*(1.d0-b-b)
215 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*b
218 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*b
219 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*b
220 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*(1.d0-b-b)
223 ELSEIF(ngauss.EQ.7.AND.ielm.EQ.11)
THEN 231 a=(6.d0+sqrt(15.d0))/21.d0
234 a2=(155.d0+sqrt(15.d0))/2400.d0
240 weigh1=surfac(ielem)*2.d0*a1
241 weigh2=surfac(ielem)*2.d0*a2
242 weigh3=surfac(ielem)*2.d0*a3
245 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*tiers
246 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*tiers
247 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*tiers
250 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*(1.d0-a-a)
251 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*a
252 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*a
255 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*a
256 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*(1.d0-a-a)
257 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*a
260 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*a
261 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*a
262 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*(1.d0-a-a)
265 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*(1.d0-b-b)
266 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*b
267 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*b
270 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*b
271 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*(1.d0-b-b)
272 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*b
275 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*b
276 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*b
277 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*(1.d0-b-b)
280 ELSEIF(ngauss.EQ.12.AND.ielm.EQ.11)
THEN 283 a=0.063089014491502d0
284 b=0.249286745170910d0
285 c=0.310352451033785d0
286 d=0.053145049844816d0
287 a1=0.025422453185103d0
288 a2=0.058393137863189d0
289 a3=0.041425537809187d0
290 a3=(1.d0-6.d0*a1-6.d0*a2)/12.d0
295 weigh1=surfac(ielem)*2.d0*a1
296 weigh2=surfac(ielem)*2.d0*a2
297 weigh3=surfac(ielem)*2.d0*a3
300 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*(1.d0-a-a)
301 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*a
302 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*a
305 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*a
306 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*(1.d0-a-a)
307 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*a
310 cv1%R(i1)=cv1%R(i1)+weigh1*ftild_weak%R(ig)*a
311 cv1%R(i2)=cv1%R(i2)+weigh1*ftild_weak%R(ig)*a
312 cv1%R(i3)=cv1%R(i3)+weigh1*ftild_weak%R(ig)*(1.d0-a-a)
315 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*(1.d0-b-b)
316 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*b
317 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*b
320 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*b
321 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*(1.d0-b-b)
322 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*b
325 cv1%R(i1)=cv1%R(i1)+weigh2*ftild_weak%R(ig)*b
326 cv1%R(i2)=cv1%R(i2)+weigh2*ftild_weak%R(ig)*b
327 cv1%R(i3)=cv1%R(i3)+weigh2*ftild_weak%R(ig)*(1.d0-b-b)
330 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*(1.d0-c-d)
331 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*c
332 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*d
335 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*(1.d0-c-d)
336 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*d
337 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*c
340 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*d
341 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*(1.d0-c-d)
342 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*c
345 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*c
346 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*(1.d0-c-d)
347 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*d
350 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*d
351 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*c
352 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*(1.d0-c-d)
355 cv1%R(i1)=cv1%R(i1)+weigh3*ftild_weak%R(ig)*c
356 cv1%R(i2)=cv1%R(i2)+weigh3*ftild_weak%R(ig)*d
357 cv1%R(i3)=cv1%R(i3)+weigh3*ftild_weak%R(ig)*(1.d0-c-d)
360 ELSEIF(ngauss.EQ.6.AND.ielm.EQ.41)
THEN 369 c=0.5d0*(1.d0-1.d0/sqrt(3.d0))
370 d=0.5d0*(1.d0+1.d0/sqrt(3.d0))
375 i1=ikle(ielem,1)+(iplan-1)*npoin
376 i2=ikle(ielem,2)+(iplan-1)*npoin
377 i3=ikle(ielem,3)+(iplan-1)*npoin
384 weigh1=surfac(ielem)*(h1*(1.d0-a-a)+h2*a+h3*a)/6.d0
385 weigh2=surfac(ielem)*(h1*(1.d0-b-a)+h2*b+h3*a)/6.d0
386 weigh3=surfac(ielem)*(h1*(1.d0-a-b)+h2*a+h3*b)/6.d0
390 & +weigh1*ftild_weak%R(ig)*(1.d0-c)*(1.d0-a-a)
392 & +weigh1*ftild_weak%R(ig)*(1.d0-c)* a
394 & +weigh1*ftild_weak%R(ig)*(1.d0-c)* a
396 & +weigh1*ftild_weak%R(ig)* c *(1.d0-a-a)
398 & +weigh1*ftild_weak%R(ig)* c * a
400 & +weigh1*ftild_weak%R(ig)* c * a
404 & +weigh2*ftild_weak%R(ig)*(1.d0-c)*(1.d0-b-a)
406 & +weigh2*ftild_weak%R(ig)*(1.d0-c)* b
408 & +weigh2*ftild_weak%R(ig)*(1.d0-c)* a
410 & +weigh2*ftild_weak%R(ig)* c *(1.d0-b-a)
412 & +weigh2*ftild_weak%R(ig)* c * b
414 & +weigh2*ftild_weak%R(ig)* c * a
418 & +weigh3*ftild_weak%R(ig)*(1.d0-c)*(1.d0-a-b)
420 & +weigh3*ftild_weak%R(ig)*(1.d0-c)* a
422 & +weigh3*ftild_weak%R(ig)*(1.d0-c)* b
424 & +weigh3*ftild_weak%R(ig)* c *(1.d0-a-b)
426 & +weigh3*ftild_weak%R(ig)* c * a
428 & +weigh3*ftild_weak%R(ig)* c * b
432 & +weigh1*ftild_weak%R(ig)*(1.d0-d)*(1.d0-a-a)
434 & +weigh1*ftild_weak%R(ig)*(1.d0-d)* a
436 & +weigh1*ftild_weak%R(ig)*(1.d0-d)* a
438 & +weigh1*ftild_weak%R(ig)* d *(1.d0-a-a)
440 & +weigh1*ftild_weak%R(ig)* d * a
442 & +weigh1*ftild_weak%R(ig)* d * a
446 & +weigh2*ftild_weak%R(ig)*(1.d0-d)*(1.d0-b-a)
448 & +weigh2*ftild_weak%R(ig)*(1.d0-d)* b
450 & +weigh2*ftild_weak%R(ig)*(1.d0-d)* a
452 & +weigh2*ftild_weak%R(ig)* d *(1.d0-b-a)
454 & +weigh2*ftild_weak%R(ig)* d * b
456 & +weigh2*ftild_weak%R(ig)* d * a
460 & +weigh3*ftild_weak%R(ig)*(1.d0-d)*(1.d0-a-b)
462 & +weigh3*ftild_weak%R(ig)*(1.d0-d)* a
464 & +weigh3*ftild_weak%R(ig)*(1.d0-d)* b
466 & +weigh3*ftild_weak%R(ig)* d *(1.d0-a-b)
468 & +weigh3*ftild_weak%R(ig)* d * a
470 & +weigh3*ftild_weak%R(ig)* d * b
477 11
FORMAT(1x,
'CHAR_WEAK: OPTION NOT IMPLEMENTED:',i6)
489 CALL matrix(am1,
'M=N ',
'MATMAS ',ielm,ielm,
490 & 1.d0,ftild,ftild,ftild,ftild,ftild,ftild,
491 & mesh,.false.,ftild)
495 CALL lump(t2,am1,mesh,agglo)
496 CALL om(
'M=CM ', m=am1, c=1.d0-agglo, mesh=mesh)
497 CALL om(
'M=M+D ', m=am1, d=t2, mesh=mesh)
501 CALL os(
'X=Y ',x=ftild,y=cv1)
502 IF(ncsize.GT.1)
CALL parcom(ftild,2,mesh)
503 CALL os(
'X=XY ',x=ftild,y=unsv)
508 CALL ad_solve(ftild,am1,cv1,tb,slv,listin,mesh,mesh%M)
510 CALL solve(ftild,am1,cv1,tb,slv,listin,mesh,mesh%M)
subroutine ad_solve(X, A, B, TB, CFG, INFOGR, MESH, AUX)
subroutine solve(X, A, B, TB, CFG, INFOGR, MESH, AUX)
subroutine char_weak(FTILD, FTILD_WEAK, SURFAC, IKLE, NPOIN, NELEM, NELMAX, NG, NGAUSS, MESH, T2, TB, AGGLO, IELM, NPLAN, Z, CV1, AM1, SLV, UNSV, LISTIN, SOLV)
subroutine om(OP, M, N, D, C, MESH)
subroutine matrix(M, OP, FORMUL, IELM1, IELM2, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL)
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
subroutine parcom(X, ICOM, MESH)
subroutine lump(DIAG, A, MESH, XMUL)