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