34 SUBROUTINE dfuncf(ELBUF_TAB ,FUNC ,IFUNC ,IPARG ,GEO ,
35 . IXT ,IXP ,IXR ,MASS ,PM ,
36 . EL2FA ,NBF ,IADP ,NBPART ,EHOUR,
37 . ANIM ,IADG ,XFUNC1 ,NANIM1D_L,IGEO )
46#include "implicit_f.inc"
62 . func(*), mass(*) ,pm(npropm,*), geo(npropg,*),
63 . ehour(*),anim(*), xfunc1(10,*)
64 INTEGER IPARG(NPARG,*),EL2FA(*),
65 . IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*),IFUNC,,
66 . IADP(*),NBPART,IADG(NSPMD,*),NANIM1D_L,NBF2,
70 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
77 . off, p, vonm2, vonm, s1, s2, s12, s3,
VALUE,
78 . a1,b1,b2,b3,yeq,f1,m1,m2,m3, xm,
80 INTEGER I, II, NG, NEL, NFT, IAD, ITY, LFT, NPT, ISS, ISC,
81 . IADD, N, J, LLT, MLW, NB1, NB2, NB3, NB4, NB5,
82 . NB6, NB7, NB8, NB9, NB10, NB11, NB12, NB13, NB14, NB15,
83 . nb16, lll,nuvar,igtyp,ifail,
84 . istrain,nn, k1, k2,jturb,mt,jale, imid, ialel,ipid,
85 . nn1,nn2,nn3,nn4,nn5,nn6,nn7,nn8,nn9,nn10,nf
86 . offset,k,inc,kk,ihbe,isrot,ilayer,ir,is,jj
89 REAL,
DIMENSION(:),
ALLOCATABLE:: WAL
91 TYPE(g_bufel_) ,
POINTER :: GBUF
92 TYPE(l_bufel_),
POINTER :: LBUF
94 CALL my_alloc(wal,nbf+nanim1d_l)
113 gbuf => elbuf_tab(ng)%GBUF
115 DO offset = 0,nel-1,nvsiz
116 nft =iparg(3,ng) + offset
118 llt=
min(nvsiz,nel-offset)
133 IF(gbuf%G_PLA > 0)
THEN
134 func(el2fa(nn6+n)) = gbuf%PLA(i)
136 func(el2fa(nn6+n)) = 0
142 func(el2fa(nn6+n)) = zero
148 func(el2fa(nn6+n))=gbuf%EINT(i)/
149 .
max(em30,mass(el2fa(nn6+n)))
157 func(el2fa(nn6+n)) = sqrt(feq)/
area
159 ELSEIF(ifunc==14)
THEN
162 func(el2fa(nn6+n)) = gbuf%FOR(i) / gbuf%AREA(i)
164 ELSEIF(ifunc==20)
THEN
168 func(el2fa(nn6+n)) = gbuf%DT(i)
171 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0))
THEN
174 func(el2fa(nn6+n)) = gbuf%ISMS(i)
176 ELSEIF (ifunc == 22)
THEN
179 IF (gbuf%G_OFF > 0)
THEN
180 IF(gbuf%OFF(i) > one)
THEN
181 func(el2fa(nn6+n)) = gbuf%OFF(i) - one
182 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
183 func(el2fa(nn6+n)) = gbuf%OFF(i)
185 func(el2fa(nn6+n)) = -one
189 ELSEIF (ifunc == 123)
THEN
192 func(el2fa(nn6+n)) = gbuf%STRA(i)
197 func(el2fa(nn6+n)) = zero
206 IF (igtyp == 18)
THEN
216 lpla = elbuf_tab(ng)%BUFLY(ilayer)%L_PLA
218 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,k)
219 eplas = eplas + lbuf%PLA(i)
223 func(el2fa(nn7+n)) = eplas/npt
229 IF(gbuf%G_PLA > 0)
THEN
230 func(el2fa(nn7+n)) = gbuf%PLA(i)
232 func(el2fa(nn7+n)) = 0
239 func(el2fa(nn7+n)) = zero
245 func(el2fa(nn7+n)) = (gbuf%EINT(i) + gbuf%EINT(i+llt)) /
max(em30,mass(el2fa(nn7+n)))
252 b2 = geo(18,ixp(5,n))
254 f1 = gbuf%FOR(jj(1)+i)
255 m1 = gbuf%MOM(jj(1) + i)
256 m2 = gbuf%MOM(jj(2) + i)
257 m3 = gbuf%MOM(jj(3) + i)
258 yeq= f1*f1 + three* a1 *
259 + ( m1*m1 /
max(b3,em30)
260 + + m2*m2 /
max(b1,em30)
261 + + m3*m3 /
max(b2,em30) )
262 func(el2fa(nn7+n)) = sqrt(yeq)/a1
264 ELSEIF(ifunc==14)
THEN
267 func(el2fa(nn7+n)) = gbuf%FOR(jj(1)+i) / geo(1,ixp(5,n))
269 ELSEIF(ifunc==17)
THEN
272 func(el2fa(nn7+n)) = gbuf%FOR(jj(2)+i) / geo(1,ixp(5,n))
274 ELSEIF(ifunc==19)
THEN
277 func(el2fa(nn7+n)) = gbuf%FOR(jj(3)+i) / geo(1,ixp(5,n))
279 ELSEIF(ifunc==20)
THEN
282 func(el2fa(nn7+n)) = gbuf%DT(i)
284 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0))
THEN
287 func(el2fa(nn7+n)) = gbuf%ISMS(i)
289 ELSEIF (ifunc == 22)
THEN
292 IF (gbuf%G_OFF > 0)
THEN
293 IF(gbuf%OFF(i) > one)
THEN
294 func(el2fa(nn7+n)) = gbuf%OFF(i) - one
295 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
296 func(el2fa(nn7+n)) = gbuf%OFF(i)
298 func(el2fa(nn7+n)) = -one
302 ELSEIF (ifunc >= 23 .AND. ifunc <= 122)
THEN
303 ipt = mod((ifunc - 22), 100)
304 IF (ipt == 0) ipt = 100
306 IF (igtyp == 18)
THEN
312 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,ipt)
315 func(el2fa(nn7+n)) = lbuf%PLA(i)
320 func(el2fa(nn7+n)) = zero
325 ELSEIF(ifunc == 124 .AND. (gbuf%G_EPSD>0))
THEN
328 func(el2fa(nn7+n)) = gbuf%EPSD(i)
330 ELSEIF(ifunc == 125 .and. ifail > 0)
THEN
331 IF (igtyp == 18)
THEN
335 DO j = 1,elbuf_tab(ng)%BUFLY(1)%NPTT
336 dammx =
max(dammx,elbuf_tab(ng)%BUFLY(1)%FAIL(1,1,j)%FLOC(1)%DAMMX(i))
338 func(el2fa(nn7+n)) = dammx
340 ELSE IF (igtyp == 3)
THEN
343 func(el2fa(nn7+n)) = gbuf%FAIL(1)%DAMMX(i)
349 func(el2fa(nn7+n)) = zero
358 xm = one/geo(1,ixr(1,1+nft))
362 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
365 xm = one/geo(1,ixr(1,1+nft))
369 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
372 xm = one/geo(1,ixr(1,1+nft))
376 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
379 xm = one/geo(1,ixr(1,1+nft))
383 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
389 func(el2fa(nn8+n)) = gbuf%EINT(i)/
max(em30,gbuf%MASS(i))
392 xm = one/geo(1,ixr(1,1+nft))
396 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
399 xm = one/geo(1,ixr(1,1+nft))
402 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
405 ELSEIF(ifunc==11)
THEN
408 func(el2fa(nn8+n)) = anim(n)
410 ELSEIF(ifunc==12)
THEN
411 kk = numelr * anim_fe(11)
414 func(el2fa(nn8+n)) = anim(n+kk)
416 ELSEIF(ifunc==13)
THEN
417 kk = numelr * (anim_fe(11)+anim_fe(12))
420 func(el2fa(nn8+n)) = anim(n+kk)
422 ELSEIF(ifunc==20 .AND. gbuf%G_DT/=0)
THEN
425 func(el2fa(nn8+n)) = gbuf%DT(i)
427 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0))
THEN
430 func(el2fa(nn8+n)) = gbuf%ISMS(i)
432 ELSEIF (ifunc == 22)
THEN
435 IF (gbuf%G_OFF > 0)
THEN
436 IF(gbuf%OFF(i) > one)
THEN
437 func(el2fa(nn8+n)) = gbuf%OFF(i) - one
438 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one))
THEN
439 func(el2fa(nn8+n)) = gbuf%OFF(i)
441 func(el2fa(nn8+n)) = -one
448 func(el2fa(nn8+n)) = 0.
454 func(el2fa(nn8+n)+1) = func(el2fa(nn8+n))
519 SUBROUTINE dfungps1(ELBUF_TAB ,FUNC ,IFUNC ,IPARG ,GEO ,
520 . IXS ,IXS10 ,IXS16 ,IXS20 ,IXQ ,
521 . IXC ,IXTG ,IXT ,IXP ,IXR ,
531#include "implicit_f.inc"
535#include "vect01_c.inc"
536#include "mvsiz_p.inc"
537#include "com01_c.inc"
538#include "com04_c.inc"
539#include "param_c.inc"
545 . func(*),geo(npropg,*)
546 INTEGER IPARG(NPARG,*),IFUNC,
547 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),(NIXTG,*),
548 . IXT(NIXT,*),IXP(,*),IXR(NIXR,*),
549 . IXS10(6,*) ,IXS16(8,*) ,IXS20(12,*) ,ITAGPS(*)
550 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
557 . off, p, vonm2, vonm, s1, s2, s12, s3,
VALUE,
558 . a1,b1,b2,b3,yeq,f1,m1,m2,m3,
for,
area
559 INTEGER I,J,K,II,N,NN, NG, NEL, ISC,MLW,NN1,
560 . INOD, ISOLNOD, IPRT, LIAD, NPTR, NPTS, NPTT, IPT,
561 . is, ir, it, nptg,nc(20,mvsiz),nnod,ihbe,mpt,jj(6)
562 TYPE(g_bufel_) ,
POINTER :: GBUF
567 3 npt ,jale ,ismstr ,jeul ,jtur ,
568 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
569 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
570 6 irep ,iint ,igtyp ,israt ,isrot ,
571 7 icsen ,isorth ,isorthg ,ifailure,jsms )
572 isolnod = iparg(28,ng)
586 gbuf => elbuf_tab(ng)%GBUF
589 p = - (gbuf%SIG(jj(1) + i)
590 . + gbuf%SIG(jj(2) + i)
591 . + gbuf%SIG(jj(3) + i)) * third
594 s1 = gbuf%SIG(jj(1) + i)+p
595 s2 = gbuf%SIG(jj(2) + i)+p
596 s3 = gbuf%SIG(jj(3) + i)+p
597 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
598 . gbuf%SIG(jj(5) + i)**2 +
599 . gbuf%SIG(jj(6) + i)**2 +
600 . half*(s1*s1+s2*s2+s3*s3))
609 ELSEIF(isolnod==4)
THEN
614 ELSEIF(isolnod==6)
THEN
621 ELSEIF(isolnod==10)
THEN
629 nc(j+4,i) = ixs10(j,nn1)
632 ELSEIF(isolnod==16)
THEN
636 nn1 = n - (numels8+numels10+numels20)
638 nc(j+8,i) = ixs16(j,nn1)
640 ELSEIF(isolnod==20)
THEN
644 nn1 = n - (numels8+numels10)
646 nc(j+8,i) = ixs20(j,nn1)
655 gbuf => elbuf_tab(ng)%GBUF
659 p = - (gbuf%SIG(jj(1) + i)
660 . + gbuf%SIG(jj(2) + i)
661 . + gbuf%SIG(jj(3) + i) ) * third
664 s1 = gbuf%SIG(jj(1) + i) + p
665 s2 = gbuf%SIG(jj(2) + i) + p
666 s3 = gbuf%SIG(jj(3) + i) + p
667 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
668 . gbuf%SIG(jj(5) + i)**2 +
669 . gbuf%SIG(jj(6) + i)**2 +
670 . half*(s1*s1+s2*s2+s3*s3))
682 ELSEIF(ity==3.OR.ity==7)
THEN
683 gbuf => elbuf_tab(ng)%GBUF
686 p = - (gbuf%FOR(jj(1)+i) + gbuf%FOR(jj(2)+i))*third
689 s1 = gbuf%FOR(jj(1)+i)
690 s2 = gbuf%FOR(jj(2)+i)
691 s12= gbuf%FOR(jj(3)+i)
692 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
703 nc(j,i) = ixtg(j+1,n)
718 ELSEIF (ity == 4)
THEN
737 ELSEIF (ity == 5)
THEN
747 b2 = geo(18,ixp(5,n))
749 f1 = gbuf%FOR(jj(1) + i)
751 m2 = gbuf%MOM(jj(2) + i)
752 m3 = gbuf%MOM(jj(3) + i)
753 yeq= f1*f1 + three* a1 *
754 + ( m1*m1 /
max(b3,em30)
755 + + m2*m2 /
max(b1,em30)
756 + + m3*m3 /
max(b2,em30) )
769 func(n) = func(n)+evar(i)
770 itagps(n) = itagps(n)+1
789 SUBROUTINE dfungps2(ELBUF_TAB ,FUNC ,IFUNC ,IPARG ,GEO ,
790 . IXS ,IXS10 ,IXS16 ,IXS20 ,IXQ ,
791 . IXC ,IXTG ,IXT ,IXP ,IXR ,
801#include "implicit_f.inc"
805#include "vect01_c.inc"
806#include "mvsiz_p.inc"
807#include "com01_c.inc"
808#include "com04_c.inc"
809#include "param_c.inc"
815 . func(*),geo(npropg,*),x(3,*),vgps(*)
816 INTEGER IPARG(NPARG,*),IFUNC,
817 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXTG(NIXTG,*),
818 . IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*),
820TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
826 . evar(mvsiz),vol(mvsiz),
827 . off, p, vonm2, vonm, s1, s2, s12, s3,
VALUE,
828 . a1,b1,b2,b3,yeq,f1,m1,m2,m3,
for,
area,
829 . xx1,xx2,xx3,yy1,yy2,yy3,zz1,zz2,zz3,thk0,al0
830 INTEGER I,II, NG, NEL, ISC,
832 . NN, MT, IMID, IALEL,IPID,
833 . NN1,NN2,NN3,NN4,NN5,NN6,NN7,NN8,NN9,NN10,NF,
834 . offset,inc,kk, ius, nuvar,
835 . inod, isolnod, iprt, liad, nptr, npts, nptt, ipt,
836 . is, ir, it, nptg,nc(20,mvsiz),nnod,iexpan,ihbe,mpt,
839 TYPE(g_bufel_) ,
POINTER :: GBUF
843 2 mlw ,nel ,nft ,iad ,ity ,
844 3 npt ,jale ,ismstr ,jeul ,jtur ,
845 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
846 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
847 6 irep ,iint ,igtyp ,israt ,isrot ,
848 7 icsen ,isorth ,isorthg ,ifailure,jsms )
849 isolnod = iparg(28,ng)
863 gbuf => elbuf_tab(ng)%GBUF
866 p = - (gbuf%SIG(jj(1) + i)
867 . + gbuf%SIG(jj(2) + i)
868 . + gbuf%SIG(jj(3) + i)) * third
871 s1 = gbuf%SIG(jj(1) + i)+p
872 s2 = gbuf%SIG(jj(2) + i)+p
873 s3 = gbuf%SIG(jj(3) + i)+p
874 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
875 . gbuf%SIG(jj(5) + i)**2 +
876 . gbuf%SIG(jj(6) + i)**2 +
877 . half*(s1*s1+s2*s2+s3*s3))
882 off =
min(gbuf%OFF(i),one)
883 vol(i) = gbuf%VOL(i)*off
888 ELSEIF(isolnod==4)
THEN
893 ELSEIF(isolnod==6)
THEN
900 ELSEIF(isolnod==10)
THEN
908 nc(j+4,i) = ixs10(j,nn1)
911 ELSEIF(isolnod==16)
THEN
915 nn1 = n - (numels8+numels10+numels20)
917 nc(j+8,i) = ixs16(j,nn1)
919 ELSEIF(isolnod==20)
THEN
923 nn1 = n - (numels8+numels10)
925 nc(j+8,i) = ixs20(j,nn1)
935 gbuf => elbuf_tab(ng)%GBUF
938 p = - (gbuf%SIG(jj(1) + i)
939 . + gbuf%SIG(jj(2) + i)
940 . + gbuf%SIG(jj(3) + i)) * third
943 s1 = gbuf%SIG(jj(1) + i) + p
944 s2 = gbuf%SIG(jj(2) + i) + p
945 s3 = gbuf%SIG(jj(3) + i) + p
946 vonm2= three*(gbuf%SIG(jj(4) + i)**2 +
947 . gbuf%SIG(jj(5) + i)*
948 . gbuf%SIG(jj(6) + i)**2 +
949 . half*(s1*s1+s2*s2+s3*s3))
954 off =
min(gbuf%OFF(i),one)
955 vol(i) = gbuf%VOL(i)*off
963 ELSEIF(ity==3.OR.ity==7)
THEN
964 gbuf => elbuf_tab(ng)%GBUF
966 p = -(gbuf%FOR(jj(1)+i)+ gbuf%FOR(jj(2)+i)) * third
969 s1 = gbuf%FOR(jj(1)+i)
970 s2 = gbuf%FOR(jj(2)+i)
971 s12= gbuf%FOR(jj(3)+i)
972 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
983 nc(j,i) = ixtg(j+1,n)
985 thk0 = geo(1,ixtg(5,n))
989 xx1 = x(1,n2)-x(1,n1)
990 yy1 = x(2,n2)-x(2,n1)
991 zz1 = x(3,n2)-x(3,n1)
992 xx2 = x(1,n3)-x(1,n1)
993 yy2 = x(2,n3)-x(2,n1)
994 zz2 = x(3,n3)-x(3,n1)
995 xx3 = yy1*zz2 - zz1*yy2
996 yy3 = zz1*xx2 - xx1*zz2
997 zz3 = xx1*yy2 - yy1*xx2
998 area = half*sqrt(xx3*xx3 + yy3*yy3 + zz3*zz3)
999 off =
min(gbuf%OFF(i),one)
1000 vol(i) = thk0*
area*off
1007 nc(j,i) = ixc(j+1,n)
1009 thk0 = geo(1,ixc(6,n))
1014 xx1 = x(1,n3)-x(1,n1)
1015 yy1 = x(2,n3)-x(2,n1)
1016 zz1 = x(3,n3)-x(3,n1)
1017 xx2 = x(1,n4)-x(1,n2)
1018 yy2 = x(2,n4)-x(2,n2)
1019 zz2 = x(3,n4)-x(3,n2)
1020 xx3 = yy1*zz2 - zz1*yy2
1021 yy3 = zz1*xx2 - xx1*zz2
1022 zz3 = xx1*yy2 - yy1*xx2
1023 area = half*sqrt(xx3*xx3 + yy3*yy3 + zz3*zz3)
1024 off =
min(gbuf%OFF(i),one)
1025 vol(i) = thk0*
area*off
1031 ELSEIF (ity == 4)
THEN
1039 IF (ifunc == 2)
THEN
1047 xx1 = x(1,n2)-x(1,n1)
1048 yy1 = x(2,n2)-x(2,n1)
1049 zz1 = x(3,n2)-x(3,n1)
1050 al0 = half*sqrt(xx1*xx1 + yy1*yy1 + zz1*zz1)
1051 off =
min(gbuf%OFF(i),one)
1052 vol(i) = al0*
area*off
1059 ELSEIF (ity == 5)
THEN
1066 IF (ifunc == 2)
THEN
1067 a1 = geo(1,ixp(5,n))
1068 b1 = geo(2,ixp(5,n))
1069 b2 = geo(18,ixp(5,n))
1070 b3 = geo(4,ixp(5,n))
1071 f1 = gbuf%FOR(jj(1) + i)
1072 m1 = gbuf%MOM(jj(1) + i)
1073 m2 = gbuf%MOM(jj(2) + i)
1074 m3 = gbuf%MOM(jj(3) + i)
1075 yeq= f1*f1 + three* a1 *
1076 + ( m1*m1 /
max(b3,em30)
1077 + + m2*m2 /
max(b1,em30)
1078 + + m3*m3 /
max(b2,em30) )
1079 VALUE = sqrt(yeq)/a1
1084 xx1 = x(1,n2)-x(1,n1)
1085 yy1 = x(2,n2)-x(2,n1)
1086 zz1 = x(3,n2)-x(3,n1)
1087 al0 = half*sqrt(xx1*xx1 + yy1*yy1 + zz1*zz1)
1088 off =
min(gbuf%OFF(i),one)
1098 IF (n > 0 .AND. vol(i) > zero)
THEN
1099 func(n) = func(n)+evar(i)*vol(i)
1100 vgps(n) = vgps(n)+vol(i)