51
52
53
55 USE elbufdef_mod
57 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
58 USE matparam_def_mod, ONLY : matparam_struct_
59
60
61
62#include "implicit_f.inc"
63
64
65
66#include "mvsiz_p.inc"
67
68
69
70#include "com01_c.inc"
71#include "com04_c.inc"
72#include "vect01_c.inc"
73#include "param_c.inc"
74
75
76
77 INTEGER IPARG(NPARG,NGROUP), IXS(NIXS,NUMELS), IXQ(7,NUMELQ), NPF(*),
78 . NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),LESDVOIS(*),
79 . IPM(NPROPMI,NUMMAT), LENCOM
80 my_real pm(npropm,nummat), flux(*), val2(*), t(*), fv(*), x(3,numnod),tf(*)
81 TYPE (ELBUF_STRUCT_), DIMENSION (NGROUP), TARGET :: ELBUF_TAB
82 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
83 TYPE(MATPARAM_STRUCT_),DIMENSION(NUMMAT),INTENT(IN) :: MATPARAM
84
85
86
87 INTEGER NG, I, J, NPH1, NPH2, NPH3, IADBUF
88 INTEGER MAT(MVSIZ)
89 my_real rk, re, r, yp0, xmu, ax, e, a, cmu, rpr, yplus, p, xmt
90 my_real,
DIMENSION(:) ,
POINTER :: ph1,ph2,ph3
91 TYPE(G_BUFEL_) ,POINTER :: GBUF
92 INTEGER :: NEL
93 INTEGER ::
95
96
97
98 DO ng=1,ngroup
99 IF(iparg(8,ng) == 1)cycle
100 IF (iparg(76, ng) == 1) cycle
101 gbuf => elbuf_tab(ng)%GBUF
103 2 mtn ,llt ,nft ,iad ,ity ,
104 3 npt ,jale ,ismstr ,jeul ,jtur ,
105 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
106 5 nvaux ,jpor ,jcvt ,jclose
107 6 irep ,iint ,igtyp ,israt ,isrot ,
108 7 icsen ,isorth ,isorthg ,ifailure,jsms )
109 IF((ity /= 1).AND.(ity /= 2))cycle
110 IF (mtn == 1)cycle
111
112 lft=1
113 nel = iparg(2, ng)
114
115 IF(n2d == 0)THEN
116 DO i=1,nel
117 mat(i)=ixs(1,i+nft)
118 ENDDO
119 ELSE
120 DO i=1,nel
121 mat(i)=ixq(1,i+nft)
122 ENDDO
123 ENDIF
124
125
126
127 DO i=1,nel
128 j=i+nft
129 t(j) = gbuf%TEMP(i)
130 IF(t(j) <= pm(80,mat(i)))THEN
131 val2(j)=pm(75,mat(i
132 ELSE
133 val2(j)=pm(77,mat(i
134 ENDIF
135 ENDDO
136
137 IF (mtn == 17)THEN
138 DO i=1,nel
139 j=i+nft
140 rk = gbuf%RK(i)
141 re = gbuf%RE(i)
142 r = gbuf%RHO(i)
143 yp0=pm(51,mat(i))
144 xmu=r*pm(24,mat(i))
145 ax =pm(47,mat(i))
146 e =pm(48,mat(i))
147 a =pm(49,mat(i))
148 cmu=pm(81,mat(i))
149 rpr=pm(95,mat(i))
150 yplus =cmu*rk**2/
max(ax*re*xmu,em15)
151 IF(yplus < yp0)cycle
152 p = ninep24*(rpr-one)/(rpr**fourth)
153 val2(j)=val2(j) * rpr*ax*yplus / (a*log(e*yplus) + ax*p)
154 enddo
155 ELSEIF (mtn == 18)THEN
156 CALL m18th( gbuf%TEMP,val2, mat, pm,
157 2 ipm, tf, npf, nel)
158 ELSEIF (mtn == 26)THEN
159 CALL m26th( mat, gbuf%RHO, gbuf%TEMP,val2,
160 2 pm, bufmat,
161 3 nft)
162 ELSEIF (mtn == 51) THEN
163 nph1 = (m51_n0phas)*nel
164 nph2 = (m51_n0phas + m51_nvphas)*nel
165 nph3 = (m51_n0phas + m51_nvphas*2)*nel
166 iadbuf = ipm(7,mat(1))
167 ph1 =>elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(nph1+1:nph1+1+nel)
168 ph2 =>elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(nph2+1:nph2+1+nel)
169 ph3 =>elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR(nph3+1:nph3
170 CALL m51th( t(1+nft), ph1, ph2, ph3,
171 2 bufmat(iadbuf),val2(1+nft), nel)
172 ELSEIF (jtur /= 0.AND.mtn /= 11) THEN
173 DO i=1,nel
174 j=i+nft
175 rk = gbuf%RK(i)
176 re = gbuf%RE(i)
177 r = gbuf%RHO(i)
178 xmt= pm(81,mat(i))*rk*rk /
max(em15,re)
179 xmu= r*pm(24,mat(i))
180 rpr= pm(95,mat(i))
181 val2(j)=val2(j)*(one+rpr*xmt/xmu)
182 ENDDO
183 ENDIF
184 enddo
185
186
187
188 IF (nspmd > 1)THEN
189 CALL spmd_evois(t, val2, nercvois, nesdvois, lercvois, lesdvois, lencom)
190 ENDIF
191
192
193
194 DO ng=1,ngroup
195 IF (iparg(76, ng) == 1) cycle
196 mtn=iparg(1,ng)
197 IF (mtn /= 11) cycle
198 jthe=iparg(13,ng)
199 IF (jthe /= 1) cycle
200 lft=1
201 llt=iparg(2,ng)
202 nel=iparg(2,ng)
203 nft=iparg(3,ng)
204 iad=iparg(4,ng)
205 lft=1
206 IF(n2d == 0)THEN
207 CALL afimp3(pm,x,ixs,t,flux(6*nft+1),val2,ale_connect,fv)
208 ELSE
209 CALL afimp2(pm,x,ixq,t,flux(4*nft+1),val2,ale_connect,fv)
210 ENDIF
211 ENDDO
212
213
214
215
216 DO ng=1,ngroup
217 IF (iparg(76, ng) == 1) cycle ! --> off(ale on/off)
218 gbuf => elbuf_tab(ng)%GBUF
220 2 mtn ,llt ,nft ,iad ,ity ,
221 3 npt ,jale ,ismstr ,jeul ,jtur ,
222 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
223 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
224 6 irep ,iint ,igtyp ,israt ,isrot ,
225 7 icsen ,isorth ,isorthg ,ifailure,jsms )
226 IF (iparg(8,ng) == 1)cycle
227 IF (jthe /= 1 .OR. ity == 51)cycle
228 lft=1
229 nel=iparg
230 mid=iparg(18,ng)
231 rhocp = pm(69,mid)
232 if(rhocp == zero)then
233 rhocp = pm(89,mid)*matparam(mid)%eos%cp
234 end if
235 IF (mtn == 51)THEN
236 DO i=1,nel
237 gbuf%TEMP(i) = zero
238 ENDDO
239 IF (n2d == 0) THEN
240 CALL adiff3(gbuf%TEMP,t,flux(6*nft+1),val2,ale_connect,gbuf%VOL,gbuf%TEMP,rhocp,nel)
241 ELSE
242 CALL adiff2(gbuf%TEMP,t,flux(4*nft+1),val2,ale_connect,gbuf%VOL,gbuf%TEMP,rhocp,nel)
243 ENDIF
244 ELSE
245 IF (n2d == 0) THEN
246 CALL adiff3(gbuf%EINT,t,flux(6*nft+1),val2,ale_connect,gbuf%VOL,gbuf%TEMP,rhocp,nel)
247 ELSE
248 CALL adiff2(gbuf%EINT,t,flux(4*nft+1),val2,ale_connect,gbuf%VOL,gbuf%TEMP,rhocp,nel)
249 ENDIF
250 ENDIF
251 enddo
252
253 RETURN
subroutine adiff2(phin, phi, grad, alpha, ale_connect, vol, temp, rhocp, nel)
subroutine adiff3(phin, phi, grad, alpha, ale_connect, vol, temp, rhocp, nel)
subroutine afimp2(pm, x, ixq, t, grad, coef, ale_connect, fv)
subroutine afimp3(pm, x, ixs, t, grad, coef, ale_connect, fv)
subroutine m51th(t, av1, av2, av3, uparam, xk, nel)
subroutine m18th(t, xk, mat, pm, ipm, tf, npf, nel)
subroutine m26th(mat, rho, t, xk, pm, sesame, z, nel, nft)
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine spmd_evois(t, val2, nercvois, nesdvois, lercvois, lesdvois, lencom)