44
45
46
47 USE elbufdef_mod
51 USE defaults_mod
52 USE matparam_def_mod, ONLY : matparam_struct_
53 use element_mod , only : nixs
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "mvsiz_p.inc"
62
63
64
65
66#include "param_c.inc"
67
68#include "vect01_c.inc"
69
70#include "scry_c.inc"
71
72#include "scr17_c.inc"
73
74#include "com04_c.inc"
75
76
77
78 TYPE(ELBUF_STRUCT_), INTENT(IN), TARGET :: ELBUF_STR
79 INTEGER, INTENT(IN) :: NEL, NSIGS, NSIGI, IGEO(NPROPGI, *), IPM(NPROPMI, *),
80 . IPARTS(*), PTSOL(*), NPF(*), IPART(LIPART1, *), ILOADP(SIZLOADP, *)
81 INTEGER, INTENT(INOUT) :: IPARG(*), IXS(NIXS,*)
82 INTEGER, INTENT(IN) :: NINTEMP
83 my_real,
INTENT(IN) :: x(3, *), geo(npropg, *),
84 . facload(lfacload, *), tf(*), skew(lskew, *), sigi(nsigi, *), bufmat(*)
85 my_real,
INTENT(INOUT) :: xrefs(8, 3, *)
86 my_real,
INTENT(INOUT) :: pm(npropm, *)
87 my_real,
INTENT(INOUT) :: wma(*), partsav(20, *), mas(*), v(*),
88 . msnf(*), mcps(8, *), mssf(8, *), mss(8, *), mssa(*)
89 LOGICAL :: ERROR_THROWN
90 TYPE(DETONATORS_STRUCT_)
91 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
92 TYPE(DEFAULTS_), INTENT(IN) :: DEFAULTS
93 TYPE(MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
94
95
96
97 TYPE(L_BUFEL_) ,POINTER :: LBUF
98 TYPE(G_BUFEL_) ,POINTER :: GBUF
99 TYPE(BUF_MAT_) ,POINTER :: MBUF
100 INTEGER :: ILAY, NLAY, PID(MVSIZ), NGL(MVSIZ), (MVSIZ),
101 . IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ)
102 my_real :: x1(mvsiz), y1(mvsiz), z1(mvsiz),
103 . x2(mvsiz), y2(mvsiz), z2(mvsiz),
104 . x3(mvsiz), y3(mvsiz), z3(mvsiz),
105 . x4(mvsiz), y4(mvsiz), z4(mvsiz),
106 . rx(mvsiz),ry(mvsiz),rz(mvsiz),
107 . sx(mvsiz),sy(mvsiz),sz(mvsiz),
108 . tx(mvsiz),ty(mvsiz),tz(mvsiz),
109 . px1(mvsiz),px2(mvsiz),px3(mvsiz),px4(mvsiz),
110 . py1(mvsiz),py2(mvsiz),py3(mvsiz),py4(mvsiz),
111 . pz1(mvsiz),pz2(mvsiz),pz3(mvsiz),pz4(mvsiz),
112 . volu(mvsiz), bid(mvsiz), dummy, pres,vfrac
114 INTEGER :: II, IP, IBID, MATLAW,IMAS_DS
115 DOUBLE PRECISION
116 . (MVSIZ)
117
118
119
120 gbuf => elbuf_str%GBUF
121
122 nlay = elbuf_str%NLAY
123 imas_ds = defaults%SOLID%IMAS
124
125 CALL s4coor3(x, xrefs(1, 1, nft + 1), ixs(1, nft + 1), ngl,
126 . mat, pid, ix1, ix2, ix3, ix4,
127 . x1, x2, x3, x4,
128 . y1, y2, y3, y4,
129 . z1, z2, z3, z4)
130
131 CALL s4deri3(gbuf%VOL, dummy, geo, igeo,
132 . rx, ry, rz, sx, sy, sz, tx, ty, tz,
133 . x1, x2, x3, x4,
134 . y1, y2, y3, y4,
135 . z1, z2, z3, z4,
136 . px1, px2, px3, px4,
137 . py1, py2, py3, py4,
138 . pz1, pz2, pz3, pz4, gbuf%JAC_I,
139 . gbuf%DELTAX, volu, ngl, pid, mat,
140 . pm ,voldp)
141
142 tempel(:) = zero
143 pm(104,ixs(1, 1 + nft)) = zero
144
145
146 DO ilay = 1, nlay
147
148 lbuf => elbuf_str%BUFLY(ilay)%LBUF(1,1,1)
149 mbuf => elbuf_str%BUFLY(ilay)%MAT(1,1,1)
150 DO ii = 1, nel
151
152 mat(ii) = mat_param( ixs(1,ii+nft) )%MULTIMAT%MID(ilay)
153
154 lbuf%VOL(ii) = mat_param( ixs(1,ii+nft) )%MULTIMAT%VFRAC(ilay) * gbuf%VOL(ii)
155 lbuf%VOL0DP(ii) = mat_param( ixs(1,ii+nft) )%MULTIMAT%VFRAC(ilay) * voldp(ii)
156 ENDDO
157
158 ip = 1
159 ibid = 0
160 CALL matini(pm, ixs, nixs, x,
161 . geo, ale_connectivity, detonators, iparg,
162 . sigi, nel, skew, igeo,
163 . ipart,iparts,
164 . mat, ipm, nsigs, numsol, ptsol,
165 . ip, ngl,npf, tf, bufmat,
166 . gbuf, lbuf, mbuf, elbuf_str, iloadp,
167 . facload, gbuf%DELTAX,tempel, mat_param )
168
169 vfrac = mat_param( ixs(1,1+nft) )%MULTIMAT%VFRAC(ilay)
170 pres = pm(104, mat_param( ixs(1,1+nft) )%MULTIMAT%MID(ilay))
171 pm(104,ixs(1, 1 + nft)) = pm(104,ixs(1, 1 + nft)) + vfrac * pres
172
173 matlaw = ipm(2, mat(1))
174 IF (matlaw == 5) THEN
175! jwl mat
176 IF (.NOT. error_thrown) THEN
177 IF (pm(44, mat(1)) == zero) THEN
178 CALL ancmsg(msgid = 1623, msgtype = msgerror, anmode = aninfo,
179 . i1 = ipm(1, ixs(1, 1 + nft)), i2 = ipm(1, mat(1)))
180 ENDIF
181 error_thrown = .true.
182 ENDIF
183 CALL m5in3(pm, mat, ipm(1, ixs(1,1+nft)), detonators, lbuf%TB, iparg, x, ixs, nixs)
184 ENDIF
185 ENDDO
186
187 IF (nlay > 1) THEN
188
189
190
191 DO ii = 1, nel
192 gbuf%RHO(ii) = zero
193 ENDDO
194 DO ilay = 1, nlay
195 lbuf => elbuf_str%BUFLY(ilay)%LBUF(1,1,1)
196 DO ii = 1, nel
197 gbuf%RHO(ii) = gbuf%RHO(ii) + lbuf%RHO(ii) * mat_param( ixs(1,ii+nft) )%MULTIMAT%VFRAC(ilay)
198 ENDDO
199 ENDDO
200
201
202 gbuf%TEMP(1:nel)=zero
203 DO ilay = 1, nlay
204 lbuf => elbuf_str%BUFLY(ilay)%LBUF(1,1,1)
205 DO ii = 1, nel
206 gbuf%TEMP(ii) = gbuf%TEMP(ii) + lbuf%TEMP(ii) *
207 . mat_param( ixs(1,ii+nft) )%MULTIMAT%VFRAC(ilay) *lbuf%RHO(ii)/gbuf%RHO(ii)
208 ENDDO
209 ENDDO
210
211 ENDIF
213 1 gbuf%RHO ,mas ,partsav,x ,v,
214 2 iparts(nft + 1),mss(1,nft + 1),msnf ,mssf(1,nft + 1),wma,
215 3 bid ,bid ,mcps(1,nft + 1),bid,bid ,
216 4 mssa ,ix1 ,ix2 ,ix3 ,ix4 ,
217 5 gbuf%FILL, gbuf%VOL ,imas_ds, nintemp)
subroutine m5in3(pm, mat, m151_id, detonators, tb, iparg, x, ix, nix)
subroutine matini(pm, ix, nix, x, geo, ale_connectivity, detonators, iparg, sigi, nel, skew, igeo, ipart, ipartel, mat, ipm, nsig, nums, pt, ipt, ngl, npf, tf, bufmat, gbuf, lbuf, mbuf, elbuf_str, iloadp, facload, ddeltax, tempel, mat_param)
subroutine s4mass3(rho, ms, partsav, x, v, ipart, mss, msnf, mssf, wma, rhocp, mcp, mcps, temp0, temp, mssa, ix1, ix2, ix3, ix4, fill, volu, imas_ds, nintemp)
subroutine s4coor3(x, xrefs, ixs, ngl, mxt, ngeo, ix1, ix2, ix3, ix4, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4)
subroutine s4deri3(vol, veul, geo, igeo, rx, ry, rz, sx, sy, sz, tx, ty, tz, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, px1, px2, px3, px4, py1, py2, py3, py4, pz1, pz2, pz3, pz4, jac_i, deltax, det, ngl, ngeo, mxt, pm, voldp)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)