56
57
58
59 USE elbufdef_mod
62
63
64
65#include "implicit_f.inc"
66#include "mvsiz_p.inc"
67
68
69
70#include "com01_c.inc"
71#include "com04_c.inc"
72#include "param_c.inc"
73#include "task_c.inc"
74#include "tabsiz_c.inc"
75
76
77
78 INTEGER, INTENT(IN):: ITASK
79 INTEGER, DIMENSION(NPARG,NGROUP) ,INTENT(IN):: IPARG
80 INTEGER, DIMENSION(NIXC,NUMELC) ,INTENT(IN):: IXC
81 INTEGER, DIMENSION(NIXTG,NUMELTG) ,INTENT(IN):: IXTG
82 INTEGER, DIMENSION(NIXS,NUMELS) ,INTENT(IN):: IXS
83 INTEGER, DIMENSION(NIXQ,NUMELQ) ,INTENT(IN):: IXQ
84 INTEGER, DIMENSION(NIXT,NUMELT) ,INTENT(IN):: IXT
85 INTEGER, DIMENSION(NIXP,NUMELP) ,INTENT(IN):: IXP
86 INTEGER, DIMENSION(NIXR,NUMELR) ,INTENT(IN):: IXR
87 INTEGER, DIMENSION(6,NUMELS10) ,INTENT(IN):: IXS10
88 INTEGER, DIMENSION(8,NUMELS16) ,INTENT(IN):: IXS16
89 INTEGER, DIMENSION(12,NUMELS20) ,INTENT(IN):: IXS20
90 INTEGER, DIMENSION(2,NSPMD+1) ,INTENT(IN):: IAD_ELEM
91 INTEGER, DIMENSION(SFR_ELEM) ,INTENT(IN):: FR_ELEM
92 INTEGER, DIMENSION(NUMNOD) ,INTENT(IN):: WEIGHT
93 INTEGER, DIMENSION(NPROPMI,NUMMAT) ,INTENT(IN):: IPM
94 INTEGER, DIMENSION(NPROPGI,NUMGEO) ,INTENT(IN):: IGEO
95 my_real,
DIMENSION(NPROPG,NUMGEO) ,
INTENT(IN):: geo
96 my_real,
DIMENSION(NPROPM,NUMMAT) ,
INTENT(IN):: pm
97 my_real,
DIMENSION(3,NUMNOD) ,
INTENT(IN):: x,d,v
98 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
99 TYPE (STACK_PLY) :: STACK
100
101
102
103 INTEGER N, I, J,NG,ITY,NEL,IVISC,NFT,IFLU,MX,TSHELL,
104 . IGTYP,ISOLNOD,ISROT,NPTR,NPTS,NPTT,NLAY,NPT,
105 . JHBE,IMAT,IPID,MATLY(MVSIZ*100),IPMAT,IADR,
106 . ISUBSTACK,MTN
107 INTEGER NODFTSK,NODLTSK,NGFTSK,NGLTSK
108 TYPE(G_BUFEL_) ,POINTER :: GBUF
109 TYPE(L_BUFEL_) ,POINTER :: LBUF
110 TYPE(BUF_LAY_) ,POINTER :: BUFLY
112 .
norm,s(3),value(mvsiz),rho,ten1(mvsiz,6),ten3(mvsiz,6),
113 . tp2(mvsiz,2),t2d1(mvsiz,3),t2d3(mvsiz,3),mass(mvsiz)
114
115
116
118 ngftsk = 1+itask*ngroup/ nthread
119 ngltsk = (itask+1)*ngroup/nthread
120 DO ng=ngftsk,ngltsk
121 IF (iparg(8,ng)==1) cycle
122 ity=iparg(5,ng)
123 IF (ity /= 1 .AND. ity /= 3 .AND. ity /= 7) cycle
124 mtn=iparg(1,ng)
125 nel=iparg(2,ng)
126 nft=iparg(3,ng)
127 ivisc = iparg(61,ng)
128 iflu=iparg(7,ng)+iparg(11,ng)
129 isolnod = iparg(28,ng)
130 igtyp = iparg(38,ng)
131 isrot = iparg(41,ng)
132 jhbe = iparg(23,ng)
133 gbuf => elbuf_tab(ng)%GBUF
134 SELECT CASE (ity)
135 CASE(1)
136 tshell = 0
137 IF (igtyp==20 .OR. igtyp==21 .OR. igtyp==22) tshell = 1
138 nlay = elbuf_tab(ng)%NLAY
139 nptr = elbuf_tab(ng)%NPTR
140 npts = elbuf_tab(ng)%NPTS
141 nptt = elbuf_tab(ng)%NPTT
142 IF (tshell==1) THEN
143 IF (jhbe==14 .OR. jhbe==15) nptt = 1
144 IF (jhbe==16) npts = 1
145 ELSE
146 nlay = 1
147 IF (isolnod==10 .OR. (isolnod==4 .AND. isrot==1)) THEN
148 npts = 1
149 nptt = 1
150 END IF
151 END IF
152 npt = nptt*npts*nptr*nlay
153 IF (gbuf%G_TM_YIELD>0 ) THEN
154 value(1:nel) = zero
155 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
157 gbuf%TM_YIELD(1:nel)=
max(gbuf%TM_YIELD(1:nel),value(1:nel))
158 END IF
159 IF (gbuf%G_TM_EINT>0 ) THEN
160 value(1:nel) = zero
161 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
162 IF (mtn == 151) cycle
163 IF(iflu == 0)THEN
164 mx=ixs(1,nft+1)
165 rho = pm(89,mx)
166 value(1:nel) = gbuf%EINT(1:nel)/
max(em20,rho)
167 ELSE
168 value(1:nel) = gbuf%EINT(1:nel)/
max(em20,gbuf%RHO(1:nel))
169 ENDIF
170 gbuf%TM_EINT(1:nel)=
max(gbuf%TM_EINT(1:nel),value(1:nel))
171 END IF
172 IF (gbuf%G_TM_SEQ>0 ) THEN
173 value(1:nel) = zero
174 CALL tm_seq_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,ivisc,
VALUE,nel)
175 gbuf%TM_SEQ(1:nel)=
max(gbuf%TM_SEQ(1:nel),value(1:nel))
176 END IF
177 IF (gbuf%G_TM_DMG>0 ) THEN
178 value(1:nel) = zero
179 CALL tm_dmg_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,
VALUE,nel)
180 gbuf%TM_DMG(1:nel)=
max(gbuf%TM_DMG(1:nel),value(1:nel))
181 END IF
182 IF (gbuf%G_TM_SIG>0) THEN
183 CALL tm_sig_solid(elbuf_tab(ng),nlay,nptr,npts,nptt,ivisc,
184 . gbuf%TM_SIG1,gbuf%TM_SIG3,gbuf%TM_PSIG,nel)
185 END IF
186 IF (gbuf%G_TM_STRA>0) THEN
188 . gbuf%TM_STRA1,gbuf%TM_STRA3,gbuf%TM_PSTRA,nel)
189 END IF
190 CASE(3,7)
191 nlay = elbuf_tab(ng)%NLAY
192 nptr = elbuf_tab(ng)%NPTR
193 npts = elbuf_tab(ng)%NPTS
194 npt = elbuf_tab(ng)%BUFLY(1)%NPTT
195 isubstack = iparg(71,ng)
196 IF(ity == 3)THEN
197 imat = ixc(1,nft+1)
198 ipid = ixc(6,nft+1)
199 ELSE
200 imat = ixtg(1,nft+1)
201 ipid = ixtg(5,nft+1)
202 ENDIF
203 IF (gbuf%G_TM_YIELD>0 ) THEN
204 value(1:nel) = zero
206 gbuf%TM_YIELD(1:nel)=
max(gbuf%TM_YIELD(1:nel),value(1:nel))
207 END IF
208 IF (gbuf%G_TM_EINT>0 ) THEN
209 value(1:nel) = zero
210 IF (mtn == 151) cycle
211 rho = pm(1,imat)
212 DO i=1,nel
213 mass(i) = rho*gbuf%VOL(i)
214 value(i) = (gbuf%EINT(i)+ gbuf%EINT(i+nel))/
max(em20,mass(i))
215 ENDDO
216 gbuf%TM_EINT(1:nel)=
max(gbuf%TM_EINT(1:nel),value(1:nel))
217 END IF
218 IF (gbuf%G_TM_SEQ>0 ) THEN
219 value(1:nel) = zero
220 CALL tm_seq_shell(elbuf_tab(ng),nlay,nptr,npts,
VALUE,nel)
221 gbuf%TM_SEQ(1:nel)=
max(gbuf%TM_SEQ(1:nel),value(1:nel))
222 END IF
223 IF (gbuf%G_TM_DMG>0 ) THEN
224 value(1:nel) = zero
225 IF (mtn == 25) THEN
226 SELECT CASE (igtyp)
227 CASE(10)
228 DO n=1,npt
229 iadr = (n-1)*nel
230 DO i=1,nel
231 matly(iadr+i)=imat
232 END DO
233 END DO
234 CASE(11)
235 ipmat = 100
236 DO n=1,npt
237 iadr = (n-1)*nel
238 DO i=1,nel
239 matly(iadr+i)=igeo(ipmat+n,ipid)
240 END DO
241 END DO
242 CASE(17,51,52)
243 ipmat = 2 + nlay
244 DO n=1,nlay
245 iadr = (n-1)*nel
246 DO i=1,nel
247 matly(iadr+i) = stack%IGEO(ipmat+n,isubstack)
248 END DO
249 END DO
250 END SELECT
252 . pm,matly,VALUE,nel)
253 ELSE
255 END IF
256 gbuf%TM_DMG(1:nel)=
max(gbuf%TM_DMG(1:nel),value(1:nel))
257 END IF
258 IF (gbuf%G_TM_SIG>0) THEN
260 . gbuf%TM_SIG1,gbuf%TM_SIG3,gbuf%TM_PSIG,nel)
261 END IF
262 IF (gbuf%G_TM_STRA>0) THEN
264 . gbuf%TM_STRA1,gbuf%TM_STRA3,gbuf%TM_PSTRA,nel)
265 END IF
266 END SELECT
267 END DO
268 END IF
270 nodftsk = 1+itask*numnod/ nthread
271 nodltsk = (itask+1)*numnod/nthread
275
276 CALL gps_solid(elbuf_tab,iparg ,geo ,pm ,
277 . ixs ,ixs10 ,ixs16 ,ixs20 ,ixq ,
278 . ixc ,ixtg ,ixt ,ixp ,ixr ,
279 . x ,iad_elem,fr_elem ,weight ,gpstmp ,
igpstag )
280
283 END IF
284
286
288
290 . ixs ,ixs10 ,ixs16 ,ixs20 ,ixq ,
291 . ixc ,ixtg ,ixt ,ixp ,ixr ,
292 . x ,iad_elem,fr_elem ,weight ,gpstmp ,
igpstratag)
293
296 END IF
297 END IF
298
300
301
302 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
integer, dimension(:), allocatable igpstratag
integer, dimension(:), allocatable igpstag
subroutine tm_dmgl25_shell(elbuf_tab, nlay, nptr, npts, igtyp, pm, matly, value, nel)
subroutine upd_tmnorm2(d, tm_d, tm_norm2, nft, nlt)
subroutine upd_tmtens(nsig, pnsig, tm_nsig1, tm_nsig3, tm_pnsig, nft, nlt, igpstag)
subroutine gps_solid(elbuf_tab, iparg, geo, pm, ixs, ixs10, ixs16, ixs20, ixq, ixc, ixtg, ixt, ixp, ixr, x, iad_elem, fr_elem, weight, sig_n, itagps)
subroutine tm_seq_solid(elbuf_tab, nlay, nptr, npts, nptt, ivisc, value, nel)
subroutine tm_seq_shell(elbuf_tab, nlay, nptr, npts, value, nel)
subroutine tm_stra_shell(elbuf_tab, nptr, npts, ten1, ten3, p2, nel)
subroutine tm_sig_solid(elbuf_tab, nlay, nptr, npts, nptt, ivisc, ten1, ten3, p2, nel)
subroutine sig3dpin2h(sig, pin, nft, nlt, igpstag)
subroutine tm_dmg_solid(elbuf_tab, nlay, nptr, npts, nptt, value, nel)
subroutine tm_vonm_shell(for, value, nel)
subroutine gpstra_solid(elbuf_tab, iparg, geo, pm, ixs, ixs10, ixs16, ixs20, ixq, ixc, ixtg, ixt, ixp, ixr, x, iad_elem, fr_elem, weight, str_n, itagps)
subroutine tm_dmg_shells(elbuf_tab, nlay, nptr, npts, value, nel)
subroutine tm_sig_shell(elbuf_tab, nlay, nptr, npts, ten1, ten3, p2, nel)
subroutine tm_stra_solid(elbuf_tab, nlay, nptr, npts, nptt, ten1, ten3, p2, nel)
subroutine tm_vonm_solid(ivisc, sig, visc, value, nel)