35 SUBROUTINE dfuncf(ELBUF_TAB ,FUNC ,IFUNC ,IPARG ,GEO ,
36 . IXT ,IXP ,IXR ,MASS ,PM ,
37 . EL2FA ,NBF ,IADP ,NBPART ,EHOUR,
38 . ANIM ,IADG ,XFUNC1 ,NANIM1D_L,IGEO )
44 use element_mod ,
only : nixt,nixr,nixp
48#include "implicit_f.inc"
64 . func(*), mass(*) ,pm(npropm,*), geo(npropg,*),
65 . ehour(*),anim(*), xfunc1(10,*)
66 INTEGER IPARG(NPARG,*),EL2FA(*),
67 . IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*),IFUNC,NBF,
68 . IADP(*),NBPART,IADG(NSPMD,*),NANIM1D_L,NBF2,
72 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
79 . off, p, vonm2, vonm, s1, s2, s12, s3,
VALUE,
80 . a1,b1,b2,b3,yeq,f1,m1,m2,m3, xm,
82 INTEGER I, NG, NEL, NFT, ITY, LFT, NPT,
83 . IADD, N, J, LLT, MLW, NB1, , NB3, NB4, NB5,
84 . NB6, NB7, NB8, NB9, NB10, NB11, NB12, NB13, NB14, NB15,
85 . nb16, lll,nuvar,igtyp,ifail,
86 . istrain,nn, k1, k2,jturb,mt,jale, imid, ialel,ipid,
87 . nn1,nn2,nn3,nn4,nn5,nn6,nn7,nn8,nn9,nn10,nf,
88 . offset,k,inc,kk,ihbe,isrot,ilayer,ir,is,jj(6),ipt
91 REAL,
DIMENSION(:),
ALLOCATABLE:: WAL
93 TYPE(g_bufel_) ,
POINTER :: GBUF
94 TYPE(l_bufel_),
POINTER :: LBUF
96 CALL my_alloc(wal,nbf+nanim1d_l)
115 gbuf => elbuf_tab(ng)%GBUF
117 DO offset = 0,nel-1,nvsiz
118 nft =iparg(3,ng) + offset
120 llt=
min(nvsiz,nel-offset)
135 IF(gbuf%G_PLA > 0)
THEN
136 func(el2fa(nn6+n)) = gbuf%PLA(i)
138 func(el2fa(nn6+n)) = 0
144 func(el2fa(nn6+n)) = zero
150 func(el2fa(nn6+n))=gbuf%EINT(i)/
151 .
max(em30,mass(el2fa(nn6+n)))
159 func(el2fa(nn6+n)) = sqrt(feq)/
area
161 ELSEIF(ifunc==14)
THEN
164 func(el2fa(nn6+n)) = gbuf%FOR(i) / gbuf%AREA(i)
166 ELSEIF(ifunc==20)
THEN
170 func(el2fa(nn6+n)) = gbuf%DT(i)
173 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0))
THEN
176 func(el2fa(nn6+n)) = gbuf%ISMS(i)
178 ELSEIF (ifunc == 22)
THEN
181 IF (gbuf%G_OFF > 0)
THEN
182 IF(gbuf%OFF(i) > one)
THEN
183 func(el2fa(nn6+n)) = gbuf%OFF(i) - one
184 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
185 func(el2fa(nn6+n)) = gbuf%OFF(i)
187 func(el2fa(nn6+n)) = -one
191 ELSEIF (ifunc == 123)
THEN
194 func(el2fa(nn6+n)) = gbuf%STRA(i)
199 func(el2fa(nn6+n)) = zero
208 IF (igtyp == 18)
THEN
218 lpla = elbuf_tab(ng)%BUFLY(ilayer)%L_PLA
220 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,k)
221 eplas = eplas + lbuf%PLA(i)
225 func(el2fa(nn7+n)) = eplas/npt
231 IF(gbuf%G_PLA > 0)
THEN
232 func(el2fa(nn7+n)) = gbuf%PLA(i)
234 func(el2fa(nn7+n)) = 0
241 func(el2fa(nn7+n)) = zero
247 func(el2fa(nn7+n)) = (gbuf%EINT(i) + gbuf%EINT(i+llt)) /
max(em30
254 b2 = geo(18,ixp(5,n))
256 f1 = gbuf%FOR(jj(1)+i)
257 m1 = gbuf%MOM(jj(1) + i)
258 m2 = gbuf%MOM(jj(2) + i)
259 m3 = gbuf%MOM(jj(3) + i)
260 yeq= f1*f1 + three* a1 *
261 + ( m1*m1 /
max(b3,em30)
262 + + m2*m2 /
max(b1,em30)
263 + + m3*m3 /
max(b2,em30) )
264 func(el2fa(nn7+n)) = sqrt(yeq)/a1
266 ELSEIF(ifunc==14)
THEN
269 func(el2fa(nn7+n)) = gbuf%FOR(jj(1)+i) / geo(1,ixp(5,n))
271 ELSEIF(ifunc==17)
THEN
274 func(el2fa(nn7+n)) = gbuf%FOR(jj(2)+i) / geo(1,ixp(5,n))
276 ELSEIF(ifunc==19)
THEN
279 func(el2fa(nn7+n)) = gbuf%FOR(jj(3)+i) / geo(1,ixp(5,n))
281 ELSEIF(ifunc==20)
THEN
284 func(el2fa(nn7+n)) = gbuf%DT(i)
286 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0))
THEN
289 func(el2fa(nn7+n)) = gbuf%ISMS(i)
291 ELSEIF (ifunc == 22)
THEN
294 IF (gbuf%G_OFF > 0)
THEN
295 IF(gbuf%OFF(i) > one)
THEN
296 func(el2fa(nn7+n)) = gbuf%OFF(i) - one
297 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
298 func(el2fa(nn7+n)) = gbuf%OFF(i)
300 func(el2fa(nn7+n)) = -one
304 ELSEIF (ifunc >= 23 .AND. ifunc <= 122)
THEN
305 ipt = mod((ifunc - 22), 100)
306 IF (ipt == 0) ipt = 100
308 IF (igtyp == 18)
THEN
314 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,ipt)
317 func(el2fa(nn7+n)) = lbuf%PLA(i)
322 func(el2fa(nn7+n)) = zero
327 ELSEIF(ifunc == 124 .AND. (gbuf%G_EPSD>0))
THEN
330 func(el2fa(nn7+n)) = gbuf%EPSD(i)
332 ELSEIF(ifunc == 125 .and. ifail > 0)
THEN
333 IF (igtyp == 18)
THEN
337 DO j = 1,elbuf_tab(ng)%BUFLY(1)%NPTT
338 dammx =
max(dammx,elbuf_tab(ng)%BUFLY(1)%FAIL(1,1,j)%FLOC(1)%DAMMX(i))
340 func(el2fa(nn7+n)) = dammx
342 ELSE IF (igtyp == 3)
THEN
345 func(el2fa(nn7+n)) = gbuf%FAIL(1)%DAMMX(i)
351 func(el2fa(nn7+n)) = zero
360 xm = one/geo(1,ixr(1,1+nft))
364 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
367 xm = one/geo(1,ixr(1,1+nft))
371 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
374 xm = one/geo(1,ixr(1,1+nft))
378 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
381 xm = one/geo(1,ixr(1,1+nft))
385 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
391 func(el2fa(nn8+n)) = gbuf%EINT(i)/
max(em30,gbuf%MASS(i))
394 xm = one/geo(1,ixr(1,1+nft))
398 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
401 xm = one/geo(1,ixr(1,1+nft))
404 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
407 ELSEIF(ifunc==11)
THEN
410 func(el2fa(nn8+n)) = anim(n)
412 ELSEIF(ifunc==12)
THEN
413 kk = numelr * anim_fe(11)
416 func(el2fa(nn8+n)) = anim(n+kk)
418 ELSEIF(ifunc==13)
THEN
419 kk = numelr * (anim_fe(11)+anim_fe(12))
422 func(el2fa(nn8+n)) = anim(n+kk)
424 ELSEIF(ifunc==20 .AND. gbuf%G_DT/=0)
THEN
427 func(el2fa(nn8+n)) = gbuf%DT(i)
429 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0))
THEN
432 func(el2fa(nn8+n)) = gbuf%ISMS(i)
434 ELSEIF (ifunc == 22)
THEN
437 IF (gbuf%G_OFF > 0)
THEN
438 IF(gbuf%OFF(i) > one)
THEN
439 func(el2fa(nn8+n)) = gbuf%OFF(i) - one
440 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
441 func(el2fa(nn8+n)) = gbuf%OFF(i)
443 func(el2fa(nn8+n)) = -one
450 func(el2fa(nn8+n)) = 0.
456 func(el2fa(nn8+n)+1) = func(el2fa(nn8+n))
522 SUBROUTINE dfungps1(ELBUF_TAB ,FUNC ,IFUNC ,IPARG ,GEO ,
523 . IXS ,IXS10 ,IXS16 ,IXS20 ,IXQ ,
524 . IXC ,IXTG ,IXT ,IXP ,IXR ,
531 use element_mod ,
only : nixs,nixq,nixc,nixtg,nixr,nixt,nixp
535#include "implicit_f.inc"
539#include "vect01_c.inc"
540#include "mvsiz_p.inc"
541#include "com01_c.inc"
542#include "com04_c.inc"
543#include "param_c.inc"
549 . func(*),geo(npropg,*)
550 INTEGER IPARG(NPARG,*),,
551 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXTG(NIXTG,*),
554TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
561 . off, p, vonm2, vonm, s1, s2, s12, s3,
VALUE,
562 . a1,b1,b2,b3,yeq,f1,m1,m2,m3,
for,
area
563 INTEGER I, J, N, NG, NEL, MLW, NN1,
564 . INOD, ISOLNOD, IPRT, LIAD, NPTR, NPTS, NPTT, IPT,
565 . is, ir, it, nptg,nc(20,mvsiz),nnod,ihbe,mpt,jj(6)
566 TYPE(g_bufel_) ,
POINTER :: GBUF
570 2 mlw ,nel ,nft ,iad ,ity ,
571 3 npt ,jale ,ismstr ,jeul ,jtur ,
572 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
573 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
574 6 irep ,iint ,igtyp ,israt ,isrot ,
575 7 icsen ,isorth ,isorthg ,ifailure,jsms )
576 isolnod = iparg(28,ng)
590 gbuf => elbuf_tab(ng)%GBUF
593 p = - (gbuf%SIG(jj(1) + i)
594 . + gbuf%SIG(jj(2) + i)
595 . + gbuf%SIG(jj(3) + i)) * third
598 s1 = gbuf%SIG(jj(1) + i)+p
599 s2 = gbuf%SIG(jj(2) + i)+p
600 s3 = gbuf%SIG(jj(3) + i)+p
601 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
602 . gbuf%SIG(jj(5) + i)**2 +
603 . gbuf%SIG(jj(6) + i)**2 +
604 . half*(s1*s1+s2*s2+s3*s3))
613 ELSEIF(isolnod==4)
THEN
618 ELSEIF(isolnod==6)
THEN
625 ELSEIF(isolnod==10)
THEN
633 nc(j+4,i) = ixs10(j,nn1)
636 ELSEIF(isolnod==16)
THEN
640 nn1 = n - (numels8+numels10+numels20)
642 nc(j+8,i) = ixs16(j,nn1)
644 ELSEIF(isolnod==20)
THEN
648 nn1 = n - (numels8+numels10)
650 nc(j+8,i) = ixs20(j,nn1)
659 gbuf => elbuf_tab(ng)%GBUF
663 p = - (gbuf%SIG(jj(1) + i)
664 . + gbuf%SIG(jj(2) + i)
665 . + gbuf%SIG(jj(3) + i) ) * third
668 s1 = gbuf%SIG(jj(1) + i) + p
669 s2 = gbuf%SIG(jj(2) + i) + p
670 s3 = gbuf%SIG(jj(3) + i) + p
671 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
672 . gbuf%SIG(jj(5) + i)**2 +
673 . gbuf%SIG(jj(6) + i)**2 +
674 . half*(s1*s1+s2*s2+s3*s3))
686 ELSEIF(ity==3.OR.ity==7)
THEN
687 gbuf => elbuf_tab(ng)%GBUF
690 p = - (gbuf%FOR(jj(1)+i) + gbuf%FOR(jj(2)+i))*third
693 s1 = gbuf%FOR(jj(1)+i)
694 s2 = gbuf%FOR(jj(2)+i)
695 s12= gbuf%FOR(jj(3)+i)
696 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
707 nc(j,i) = ixtg(j+1,n)
722 ELSEIF (ity == 4)
THEN
741 ELSEIF (ity == 5)
THEN
751 b2 = geo(18,ixp(5,n))
753 f1 = gbuf%FOR(jj(1) + i)
754 m1 = gbuf%MOM(jj(1) + i)
755 m2 = gbuf%MOM(jj(2) + i)
756 m3 = gbuf%MOM(jj(3) + i)
757 yeq= f1*f1 + three* a1 *
758 + ( m1*m1 /
max(b3,em30)
759 + + m2*m2 /
max(b1,em30)
760 + + m3*m3 /
max(b2,em30) )
773 func(n) = func(n)+evar(i)
774 itagps(n) = itagps(n)+1
794 SUBROUTINE dfungps2(ELBUF_TAB ,FUNC ,IFUNC ,IPARG ,GEO ,
795 . IXS ,IXS10 ,IXS16 ,IXS20 ,IXQ ,
796 . IXC ,IXTG ,IXT ,IXP ,IXR ,
803 use element_mod ,
only : nixs,nixq,nixc,nixtg,nixr,nixt,nixp
807#include "implicit_f.inc"
811#include "vect01_c.inc"
812#include "mvsiz_p.inc"
813#include "com01_c.inc"
814#include "com04_c.inc"
815#include "param_c.inc"
821 . func(*),geo(npropg,*),x(3,*),vgps(*)
822 INTEGER IPARG(NPARG,*),IFUNC,
823 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXTG(NIXTG,*),
824 . IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*),
825 . IXS10(6,*) ,IXS16(8,*) ,IXS20(12,*)
826 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
832 . evar(mvsiz),vol(mvsiz),
833 . off, p, vonm2, vonm, s1, s2, s12, s3,
VALUE,
834 . a1,b1,b2,b3,yeq,f1,m1,m2,m3,
for,
area,
835 . xx1,xx2,xx3,yy1,yy2,yy3,zz1,zz2,zz3,thk0,al0
838 . NN, MT, IMID, IALEL,IPID,
839 . NN1,NN2,NN3,NN4,NN5,NN6,NN7,NN8,NN9,NN10,NF,
840 . offset,inc,kk, ius, nuvar,
841 . inod, isolnod, iprt, liad, nptr, npts, nptt, ipt,
842 . is, ir, it, nptg,nc(20,mvsiz),nnod,iexpan,ihbe,mpt,
845 TYPE(g_bufel_) ,
POINTER :: GBUF
849 2 mlw ,nel ,nft ,iad ,ity ,
850 3 npt ,jale ,ismstr ,jeul ,jtur ,
852 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
853 6 irep ,iint ,igtyp ,israt ,isrot ,
854 7 icsen ,isorth ,isorthg ,ifailure,jsms
855 isolnod = iparg(28,ng)
869 gbuf => elbuf_tab(ng)%GBUF
872 p = - (gbuf%SIG(jj(1) + i)
873 . + gbuf%SIG(jj(2) + i)
874 . + gbuf%SIG(jj(3) + i)) * third
877 s1 = gbuf%SIG(jj(1) + i)+p
878 s2 = gbuf%SIG(jj(2) + i)+p
879 s3 = gbuf%SIG(jj(3) + i)+p
880 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
881 . gbuf%SIG(jj(5) + i)**2 +
882 . gbuf%SIG(jj(6) + i)**2 +
883 . half*(s1*s1+s2*s2+s3*s3))
888 off =
min(gbuf%OFF(i),one)
889 vol(i) = gbuf%VOL(i)*off
894 ELSEIF(isolnod==4)
THEN
899 ELSEIF(isolnod==6)
THEN
906 ELSEIF(isolnod==10)
THEN
914 nc(j+4,i) = ixs10(j,nn1)
917 ELSEIF(isolnod==16)
THEN
921 nn1 = n - (numels8+numels10+numels20)
923 nc(j+8,i) = ixs16(j,nn1)
925 ELSEIF(isolnod==20)
THEN
929 nn1 = n - (numels8+numels10)
931 nc(j+8,i) = ixs20(j,nn1)
941 gbuf => elbuf_tab(ng)%GBUF
944 p = - (gbuf%SIG(jj(1) + i)
945 . + gbuf%SIG(jj(2) + i)
946 . + gbuf%SIG(jj(3) + i)) * third
949 s1 = gbuf%SIG(jj(1) + i) + p
950 s2 = gbuf%SIG(jj(2) + i) + p
951 s3 = gbuf%SIG(jj(3) + i) + p
952 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
953 . gbuf%SIG(jj(5) + i)**2 +
954 . gbuf%SIG(jj(6) + i)**2 +
955 . half*(s1*s1+s2*s2+s3*s3))
960 off =
min(gbuf%OFF(i),one)
961 vol(i) = gbuf%VOL(i)*off
969 ELSEIF(ity==3.OR.ity==7)
THEN
970 gbuf => elbuf_tab(ng)%GBUF
972 p = -(gbuf%FOR(jj(1)+i)+ gbuf%FOR(jj(2)+i)) * third
975 s1 = gbuf%FOR(jj(1)+i)
976 s2 = gbuf%FOR(jj(2)+i)
977 s12= gbuf%FOR(jj(3)+i)
978 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
989 nc(j,i) = ixtg(j+1,n)
991 thk0 = geo(1,ixtg(5,n))
995 xx1 = x(1,n2)-x(1,n1)
996 yy1 = x(2,n2)-x(2,n1)
997 zz1 = x(3,n2)-x(3,n1)
998 xx2 = x(1,n3)-x(1,n1)
999 yy2 = x(2,n3)-x(2,n1)
1000 zz2 = x(3,n3)-x(3,n1)
1001 xx3 = yy1*zz2 - zz1*yy2
1002 yy3 = zz1*xx2 - xx1*zz2
1003 zz3 = xx1*yy2 - yy1*xx2
1004 area = half*sqrt(xx3*xx3 + yy3*yy3 + zz3*zz3)
1005 off =
min(gbuf%OFF(i),one)
1006 vol(i) = thk0*
area*off
1013 nc(j,i) = ixc(j+1,n)
1015 thk0 = geo(1,ixc(6,n))
1020 xx1 = x(1,n3)-x(1,n1)
1021 yy1 = x(2,n3)-x(2,n1)
1022 zz1 = x(3,n3)-x(3,n1)
1023 xx2 = x(1,n4)-x(1,n2)
1024 yy2 = x(2,n4)-x(2,n2)
1025 zz2 = x(3,n4)-x(3,n2)
1026 xx3 = yy1*zz2 - zz1*yy2
1027 yy3 = zz1*xx2 - xx1*zz2
1028 zz3 = xx1*yy2 - yy1*xx2
1029 area = half*sqrt(xx3*xx3 + yy3*yy3 + zz3*zz3)
1030 off =
min(gbuf%OFF(i),one)
1031 vol(i) = thk0*
area*off
1037 ELSEIF (ity == 4)
THEN
1045 IF (ifunc == 2)
THEN
1053 xx1 = x(1,n2)-x(1,n1)
1054 yy1 = x(2,n2)-x(2,n1)
1055 zz1 = x(3,n2)-x(3,n1)
1056 al0 = half*sqrt(xx1*xx1 + yy1*yy1 + zz1*zz1)
1057 off =
min(gbuf%OFF(i),one)
1058 vol(i) = al0*
area*off
1065 ELSEIF (ity == 5)
THEN
1072 IF (ifunc == 2)
THEN
1073 a1 = geo(1,ixp(5,n))
1074 b1 = geo(2,ixp(5,n))
1075 b2 = geo(18,ixp(5,n))
1076 b3 = geo(4,ixp(5,n))
1077 f1 = gbuf%FOR(jj(1) + i)
1078 m1 = gbuf%MOM(jj(1) + i)
1079 m2 = gbuf%MOM(jj(2) + i)
1080 m3 = gbuf%MOM(jj(3) + i)
1081 yeq= f1*f1 + three* a1 *
1082 + ( m1*m1 /
max(b3,em30)
1083 + + m2*m2 /
max(b1,em30)
1084 + + m3*m3 /
max(b2,em30) )
1085 VALUE = sqrt(yeq)/a1
1090 xx1 = x(1,n2)-x(1,n1)
1091 yy1 = x(2,n2)-x(2,n1)
1092 zz1 = x(3,n2)-x(3,n1)
1093 al0 = half*sqrt(xx1*xx1 + yy1*yy1 + zz1*zz1)
1094 off =
min(gbuf%OFF(i),one)
1104 IF (n > 0 .AND. vol(i) > zero)
THEN
1105 func(n) = func(n)+evar(i)*vol(i)
1106 vgps(n) = vgps(n)+vol(i)