31 SUBROUTINE inigrav_m51(NELG, NEL , NG , MATID, IPM, GRAV0, DEPTH, PM, BUFMAT, ELBUF_TAB,
32 . PSURF,LIST, ALE_CONNECTIVITY, NV46 , IX , NIX , NFT , BUFMATG, IPARG)
38 USE multimat_param_mod ,
ONLY : m51_n0phas, m51_nvphas
42#include "implicit_f.inc"
53 INTEGER,
INTENT(IN) :: NEL, NG, MATID, IPM(NPROPMI, *),LIST(NEL),NELG,IX(NIX,*),NFT,NIX,
55 my_real,
INTENT(IN) :: grav0, depth(*), pm(npropm, *), bufmat(*),psurf,bufmatg(*)
56 TYPE(elbuf_struct_),
DIMENSION(NGROUP),
TARGET,
INTENT(IN) :: ELBUF_TAB
61 INTEGER :: I, K1, K2, K3, K4, NUVAR,K,J,IFORM,IFORMv,NV46,IV,IADBUF,ML,NGv,KTY,KLT,N,MFT,IS,NELGv
62 my_real :: pgrav, rho, gam, rho0,
63 . alpha1,
alpha2, alpha3, alpha4,
64 . c01, c11, c21, c31, c41, c51,
65 . c02, c12, c22, c32, c42, c52,
66 . c03, c13, c23, c33, c43, c53,
68 . rho10, rho20, rho30, rho40, rho1, rho2, rho3, rho4, mu,
69 . eint1, eint2, eint3, eint4, vol, vol1, vol2,
70 . eint10, eint20, eint30, eint40
71 TYPE(),
POINTER :: GBUF
72 TYPE(buf_mat_) ,
POINTER :: MBUF , MBUFv
83 gbuf => elbuf_tab(ng)%GBUF
85 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
87 iform = nint(bufmat(31))
88 k1 = m51_n0phas + (1 - 1) * m51_nvphas
89 k2 = m51_n0phas + (2 - 1) * m51_nvphas
90 k3 = m51_n0phas + (3 - 1) * m51_nvphas
91 k4 = m51_n0phas + (4 - 1) * m51_nvphas
141 iad = ale_connectivity%ee_connect%iad_connect(i + nft)
142 DO j=1,ale_connectivity%ee_connect%iad_connect(i + nft + 1) - ale_connectivity%ee_connect%iad_connect(i + nft)
143 iv = ale_connectivity%ee_connect%connected(iad + j - 1)
145 IF(iv/=0) ml = nint(pm(19,ix(1,iv)))
146 IF(iv/=0) iadbuf = ipm(7,ix(1,iv))
147 IF(iv/=0.AND.ml==51) iformv = bufmatg(iadbuf+31-1)
148 IF(ml==51.AND.iformv<=1)
EXIT
154 IF (kty==1 .AND. iv<=klt+mft)
EXIT
156 IF (kty/=1 .OR. iv>klt+mft) cycle
158 mbufv => elbuf_tab(ngv)%BUFLY(1)%MAT(1,1,1)
161 rho10 = bufmatg(iadbuf-1+09)
162 rho20 = bufmatg(iadbuf-1+10)
163 rho30 = bufmatg(iadbuf-1+11)
164 rho40 = bufmatg(iadbuf-1+12)
166 eint1 = bufmatg(iadbuf-1+32)
167 eint2 = bufmatg(iadbuf-1+33)
168 eint3 = bufmatg(iadbuf-1+34)
169 eint4 = bufmatg(iadbuf-1+48)
171 c01 = bufmatg(iadbuf-1+35)
172 c11 = bufmatg(iadbuf-1+12)
173 c21 = bufmatg(iadbuf-1+15)
174 c31 = bufmatg(iadbuf-1+18)
175 c41 = bufmatg(iadbuf-1+22)
176 c51 = bufmatg(iadbuf-1+25)
178 c02 = bufmatg(iadbuf-1+36)
179 c12 = bufmatg(iadbuf-1+13)
180 c22 = bufmatg(iadbuf-1+16)
181 c32 = bufmatg(iadbuf-1+20)
182 c42 = bufmatg(iadbuf-1+23)
183 c52 = bufmatg(iadbuf-1+26)
185 c03 = bufmatg(iadbuf-1+37)
186 c13 = bufmatg(iadbuf-1+14)
187 c23 = bufmatg(iadbuf-1+17)
188 c33 = bufmatg(iadbuf-1+21)
189 c43 = bufmatg(iadbuf-1+24)
190 c53 = bufmatg(iadbuf-1+27)
192 c04 = bufmatg(iadbuf-1+49)
194 alpha1 = mbufv%VAR(is + (k1 + 23 - 1) * nelgv)
195 alpha2 = mbufv%VAR(is + (k2 + 23 - 1) * nelgv)
196 alpha3 = mbufv%VAR(is + (k3 + 23 - 1) * nelgv)
197 alpha4 = mbufv%VAR(is + (k4 + 23 - 1) * nelgv)
204 alpha1 = mbuf%VAR(i + (k1 + 23 - 1) * nelg)
205 alpha2 = mbuf%VAR(i + (k2 + 23 - 1) * nelg)
206 alpha3 = mbuf%VAR(i + (k3 + 23 - 1) * nelg)
207 alpha4 = mbuf%VAR(i + (k4 + 23 - 1) * nelg)
211 rho0 = alpha1 * rho10 +
alpha2 * rho20 + alpha3 * rho30 + alpha4 * rho40
213 pgrav = psurf - rho0 * grav0 * depth(k)
220 CALL polysolve(c01, c11, c21, c31, c41, c51, pgrav, eint1, mu, rho10, vol1,pext,ix(11,i+nft))
221 rho1 = rho10 * (mu + one)
222 CALL polysolve(c02, c12, c22, c32, c42, c52, pgrav, eint2, mu, rho20, vol2,pext,ix(11,i+nft))
223 rho2 = rho20 * (mu + one)
224 CALL polysolve(c03, c13, c23, c33, c43, c53, pgrav, eint3, mu, rho30, vol3,pext,ix(11,i+nft))
225 rho3 = rho30 * (mu + one)
227 mbuf%VAR(i + (k1 + 09 - 1) * nelg) = rho1
228 mbuf%VAR(i + (k2 + 09 - 1) * nelg) = rho2
229 mbuf%VAR(i + (k3 + 09 - 1) * nelg) = rho3
230 mbuf%VAR(i + (k1 + 12 - 1) * nelg) = rho1
231 mbuf%VAR(i + (k2 + 12 - 1) * nelg) = rho2
232 mbuf%VAR(i + (k3 + 12 - 1) * nelg) = rho3
233 mbuf%VAR(i + (k1 + 20 - 1) * nelg) = rho1
234 mbuf%VAR(i + (k2 + 20 - 1) * nelg) = rho2
235 mbuf%VAR(i + (k3 + 20 - 1) * nelg) = rho3
237 mbuf%VAR(i + (k1 + 18 - 1) * nelg) = pgrav
238 mbuf%VAR(i + (k2 + 18 - 1) * nelg) = pgrav
239 mbuf%VAR(i + (k3 + 18 - 1) * nelg) = pgrav
240 mbuf%VAR(i + (k4 + 18 - 1) * nelg) = pgrav
242 IF (rho10 /= zero)
THEN
243 mbuf%VAR(i + (k1 + 08 - 1) * nelg) = eint1 * rho1 / rho10
244 mbuf%VAR(i + (k1 + 21 - 1) * nelg) = eint1 * rho1 / rho10
246 mbuf%VAR(i + (k1 + 08 - 1) * nelg) = zero
247 mbuf%VAR(i + (k1 + 21 - 1) * nelg) = zero
249 IF (rho20 /= zero)
THEN
250 mbuf%VAR(i + (k2 + 08 - 1) * nelg) = eint2 * rho2 / rho20
251 mbuf%VAR(i + (k2 + 21 - 1) * nelg) = eint2 * rho2 / rho20
253 mbuf%VAR(i + (k2 + 08 - 1) * nelg) = zero
254 mbuf%VAR(i + (k2 + 21 - 1) * nelg) = zero
256 IF (rho30 /= zero)
THEN
257 mbuf%VAR(i + (k3 + 08 - 1) * nelg) = eint3 * rho3 / rho30
258 mbuf%VAR(i + (k3 + 21 - 1) * nelg) = eint3 * rho3 / rho30
260 mbuf%VAR(i + (k3 + 08 - 1) * nelg) = zero
261 mbuf%VAR(i + (k3 + 21 - 1) * nelg) = zero
264 gbuf%RHO(i) = alpha1 * rho1 +
alpha2 * rho2 + alpha3 * rho3 + alpha4 * rho40
265 gbuf%EINT(i) = alpha1 * eint1+
alpha2 * eint2+ alpha3 * eint3+ alpha4 * eint4
267 gbuf%SIG(i) = - pgrav
268 gbuf%SIG(i + nelg) = - pgrav
269 gbuf%SIG(i + 2 * nelg) = - pgrav
271 mbuf%VAR(i + 3 * nelg) = pgrav