5 &(h,work2,work3,dt,lt,nit,info,
6 & t,agglot,massou,mastr0,mastr2,masten,
7 & mastou,msk,maskel,mesh,
8 & numliq,nfrliq,nptfr,nametrac,flbortra,mass_rain,train,
82 INTEGER,
INTENT(IN) :: LT,NIT,NFRLIQ,NPTFR
83 INTEGER,
INTENT(IN) :: NUMLIQ(nptfr)
84 DOUBLE PRECISION,
INTENT(IN) :: DT,MASSOU,AGGLOT,MASS_RAIN,TRAIN
85 DOUBLE PRECISION,
INTENT(INOUT):: MASTRAIN
86 LOGICAL,
INTENT(IN) :: INFO,MSK
87 TYPE(bief_obj),
INTENT(INOUT) :: WORK2,WORK3
88 TYPE(bief_obj),
INTENT(IN) :: H,T,MASKEL
89 TYPE(bief_obj),
INTENT(IN) :: FLBORTRA
90 TYPE(bief_mesh),
INTENT(INOUT) :: MESH
91 DOUBLE PRECISION,
INTENT(INOUT):: MASTR0,MASTR2,MASTEN,MASTOU
92 CHARACTER(LEN=32),
INTENT(IN) :: NAMETRAC
96 INTEGER I,IFRLIQ,IELMT,IELMH
98 DOUBLE PRECISION ERREUT,PERDUE,FLUXT,MASBOR,RELATI,DENOM,MASTR1
99 DOUBLE PRECISION MASRAI
101 DOUBLE PRECISION FLT_BOUND(300)
115 IF(lt.NE.0) mastr1 = mastr2
117 CALL vector(work2,
'=',
'MASVEC ',ielmt,
118 & 1.d0-agglot,t,t,t,t,t,t,mesh,msk,maskel)
120 CALL vector(work3,
'=',
'MASBAS ',ielmt,
121 & agglot,h,h,h,h,h,h,mesh,msk,maskel)
123 CALL os(
'X=X+YZ ',x=work2,y=work3,z=t)
125 mastr2 =
dots(work2,h)
126 IF(ncsize.GT.1) mastr2=
p_sum(mastr2)
144 IF(lt.GT.0.AND.nfrliq.GT.0)
THEN 146 flt_bound(ifrliq)=0.d0
154 flt_bound(ifrliq)=flt_bound(ifrliq)+flbortra%R(i)
160 flt_bound(ifrliq)=
p_sum(flt_bound(ifrliq))
164 fluxt=fluxt+flt_bound(ifrliq)
172 masten = masten - fluxt * dt
173 mastou = mastou + massou
188 masrai = max(mass_rain,0.d0) * train
189 IF(ncsize.GT.1) masrai=
p_sum(masrai)
190 mastrain = mastrain + masrai
196 erreut = mastr1 + massou + masrai - mastr2 - dt*fluxt
209 WRITE(
lu,*)
' BALANCE OF ',
210 & trim(nametrac(1:16)),
' (UNIT: ',trim(nametrac(17:32)),
' * M3)' 213 WRITE(
lu,2090) mastr0
215 WRITE(
lu,2160) mastr1,mastr2
218 WRITE(
lu,2110) ifrliq,-flt_bound(ifrliq)
221 IF(abs(massou).GT.1.d-8)
THEN 222 WRITE(
lu,2113) massou
224 IF(abs(masrai).GT.1.d-8)
THEN 225 WRITE(
lu,2166) masrai
227 WRITE(
lu,2165) erreut
230 denom = max(abs(mastr1),abs(mastr2),abs(fluxt*dt),
231 & abs(masrai),abs(massou))
232 IF(denom.GT.1.d-8)
THEN 233 erreut = erreut / denom
234 WRITE(
lu,2120) erreut
247 WRITE(
lu,*)
' FINAL BALANCE OF ',
248 & trim(nametrac(1:16)),
' (UNIT: ',trim(nametrac(17:32)),
' * M3)' 250 perdue = mastr0+masten+masbor+mastou+mastrain-mastr2
251 denom = max(abs(mastr0),abs(mastr2),abs(masten),
252 & abs(mastou),abs(mastrain))
253 WRITE(
lu,2160) mastr0,mastr2
254 IF(abs(masten).GT.1.d-8)
WRITE(
lu,2161) masten
255 IF(abs(mastou).GT.1.d-8)
WRITE(
lu,2164) mastou
256 IF(abs(mastrain).GT.1.d-8)
WRITE(
lu,2166) mastrain
257 WRITE(
lu,2165) perdue
258 IF(denom.GT.1.d-8)
THEN 259 relati = perdue / denom
260 WRITE(
lu,2120) relati
272 2090
FORMAT( 5x,
'INITIAL QUANTITY OF TRACER :',g16.7)
273 2110
FORMAT( 5x,
'BOUNDARY ',1i3,
' FLUX: ',g16.7,
274 &
' ( >0 : ENTERING <0 : EXITING )')
275 2113
FORMAT( 5x,
'QUANTITY CREATED BY SOURCE TERM : ' , g16.7 )
276 2120
FORMAT( 5x,
'RELATIVE ERROR : ',g16.7)
277 2160
FORMAT(/,5x,
'INITIAL QUANTITY : ',g16.7,
278 & /,5x,
'FINAL QUANTITY : ',g16.7)
279 2161
FORMAT( 5x,
'QUANTITY ENTERED THROUGH LIQ. BND.: ',g16.7,
281 2164
FORMAT( 5x,
'QUANTITY CREATED BY SOURCE TERM : ',g16.7)
282 2166
FORMAT( 5x,
'MASS BROUGHT BY THE RAIN : ',g16.7)
283 2165
FORMAT( 5x,
'TOTAL QUANTITY LOST : ',g16.7)
subroutine bilant(H, WORK2, WORK3, DT, LT, NIT, INFO, T, AGGLOT, MASSOU, MASTR0, MASTR2, MASTEN, MASTOU, MSK, MASKEL, MESH, NUMLIQ, NFRLIQ, NPTFR, NAMETRAC, FLBORTRA, MASS_RAIN, TRAIN, MASTRAIN)
double precision function dots(X, Y)
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)