The TELEMAC-MASCARET system  trunk
cvtrvf.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE cvtrvf
3 ! *****************
4 !
5  &(f,fn,fscexp,h,hn,hprop,uconv,vconv,dm1,zconv,solsys,
6  & sm,smh,yasmh,smi,yasmi,fbor,masktr,mesh,
7  & aggloh,dt,entet,msk,maskel,s,massou,optsou,
8  & limtra,kdir,kddl,nptfr,flbor,yaflbor,volu2d,v2dpar,unsv2d,iopt,
9  & flbortra,maskpt,rain,pluie,train,optadv,tb,free,am2,tb2,
10  & nco_dist,nsp_dist,yaflulim,flulim,yaflulimebe,flulimebe,
11  & slvtra)
12 !
13 !***********************************************************************
14 ! BIEF V7P3
15 !***********************************************************************
16 !
17 !brief DISTRIBUTIVE EXPLICIT OR IMPLICIT ADVECTOR.
18 !
19 !warning AFBOR AND BFBOR MUST BE 0 FOR THE BOUNDARY ELEMENTS
20 !+ WITH NO FRICTION
21 !
22 !history CHI-TUAN PHAM (LNHE)
23 !+ 09/10/09
24 !+ V6P0
25 !+ First version.
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 13/07/2010
29 !+ V6P0
30 !+ Translation of French comments within the FORTRAN sources into
31 !+ English comments
32 !
33 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
34 !+ 21/08/2010
35 !+ V6P0
36 !+ Creation of DOXYGEN tags for automated documentation and
37 !+ cross-referencing of the FORTRAN sources
38 !
39 !history J-M HERVOUET (LNHE)
40 !+ 24/02/2012
41 !+ V6P2
42 !+ Rain and evaporation added (after initiative by O. Boutron, from
43 !+ Tour du Valat, and O. Bertrand, Artelia group)
44 !
45 !history SARA PAVAN & J-M HERVOUET (LNHE)
46 !+ 18/06/2013
47 !+ V6P3
48 !+ New call to CFLVF, for new monotonicity criterion.
49 !
50 !history SARA PAVAN & J-M HERVOUET (EDF LAB, LNHE)
51 !+ 05/05/2014
52 !+ V7P0
53 !+ New predictor-corrector PSI scheme (OPTADV=2). Security coefficient
54 !+ on maximum time step to avoid truncation errors that would give
55 !+ negative values.
56 !
57 !history J-M HERVOUET (EDF LAB, LNHE)
58 !+ 16/05/2014
59 !+ V7P0
60 !+ Boundary conditions LIMTRA redone (they may have been done with
61 !+ U.N in diffin.f, which is different from flbor here. Argument
62 !+ VOLU2D added.
63 !
64 !history J-M HERVOUET (EDF LAB, LNHE)
65 !+ 01/09/2015
66 !+ V7P1
67 !+ Now with the locally implicit predictor-corrector.
68 !+ Call of CFLVF changed, with option OPTCFL added in the arguments.
69 !+ For locally implicit schemes, fluxes may be reduced with array
70 !+ FLULIM. The solver configuration of tracers is copied but the
71 !+ choice of the solver, if not GMRES or direct, is set to Jacobi
72 !+ in TVF_IMP.
73 !
74 !history J-M HERVOUET (EDF LAB, LNHE)
75 !+ 30/06/2016
76 !+ V7P2
77 !+ Stability criterion for the LIPS scheme was too restrictive
78 !+ compared to theory. The real theoretical value is now taken.
79 !
80 !history J-M HERVOUET (jubilado)
81 !+ 27/09/2016
82 !+ V7P2
83 !+ Predictor and corrector of LIPS grouped in the same loop.
84 !+ Limitation of the predictor even for the first correction.
85 !+ Extrema FMIN and FMAX depend on the scheme, so their computation
86 !+ is slightly changed. Coefficients COEMIN and COESOU removed in the
87 !+ call to cflvf.
88 !
89 !history J-M HERVOUET (jubilado)
90 !+ 20/10/2016
91 !+ V7P2
92 !+ Reduction of time-step for predictor-corrector is no longer fixed
93 !+ to be 2, any value > 1 is possible, but here hardcoded at 2.D0.
94 !+ So no change except for further research (values less than 2 seem
95 !+ to give better results).
96 !
97 !history J-M HERVOUET (jubilado)
98 !+ 29/09/2017
99 !+ V7P3
100 !+ Theory of stability condition slightly changed for all predictor-
101 !+ corrector and LIPS schemes. Steady state flows unchanged.
102 !
103 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104 !| AGGLOH |-->| MASS-LUMPING IN CONTINUITY EQUATION
105 !| DM1 |-->| THE PIECE-WISE CONSTANT PART OF ADVECTION FIELD
106 !| | | IS DM1*GRAD(ZCONV), SEE SOLSYS.
107 !| DT |-->| TIME STEP
108 !| ENTET |-->| LOGICAL, IF YES INFORMATION IS GIVEN ON MASS
109 !| | | CONSERVATION.
110 !| F |<--| F AT TIME T(N+1)
111 !| FBOR |-->| DIRICHLET CONDITIONS ON F.
112 !| FLBOR |-->| FLUXES AT BOUNDARIES
113 !| FLBORTRA |<->| TRACER FLUXES AT BOUNDARIES
114 !| FLULIM |-->| A LIMITATION OF FLUXES IF YAFLULIM=.TRUE.
115 !| FN |-->| F AT TIME T(N)
116 !| FSCEXP |-->| EXPLICIT PART OF THE SOURCE TERM
117 !| | | EQUAL TO ZERO EVERYWHERE BUT ON SOURCES
118 !| | | WHERE THERE IS FSCE - (1-TETAT) FN
119 !| | | SEE DIFSOU
120 !| HPROP |-->| PROPAGATION DEPTH (DONE IN CVDFTR).
121 !| IOPT |-->| OPTIONS FOR COMPUTATION (NUMBER BETWEEN 0 AND 13)
122 !| | | THE TENS (IOPT2, I.E. 0 OR 1):
123 !| | | 0: UCONV OBEYS THE CONTINUITY EQUATION
124 !| | | 1: UCONV DOES NOT OBEY THE CONTINUITY EQUATION
125 !| | | THE UNITS (IOPT1, I.E. 0 TO 3): VARIANT FOR FLUXES
126 !| | | 0: CONSTANT PER ELEMENT = 0
127 !| | | 1: CHI-TUAN PHAM'S CONSTANT
128 !| | | 2: N SCHEME
129 !| | | 3: PSI SCHEME
130 !| KDDL |-->| CONVENTION FOR DEGREE OF FREEDOM
131 !| KDIR |-->| CONVENTION FOR DIRICHLET POINT
132 !| LIMTRA |-->| BOUNDARY CONDITIONS ON BOOUNDARY POINTS
133 !| MASKEL |-->| MASKING OF ELEMENTS
134 !| | | =1. : NORMAL =0. : MASKED ELEMENT
135 !| MASKPT |-->| MASKING PER POINT.
136 !| MASSOU |-->| MASS OF TRACER ADDED BY SOURCE TERM
137 !| | | SEE DIFSOU
138 !| MESH |-->| MESH STRUCTURE
139 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
140 !| NCO_DIST |-->| NUMBER OF CORRECTIONS OF DISTRIBUTIVE SCHEMES
141 !| NSP_DIST |-->| NUMBER OF SUB-STEPS OF DISTRIBUTIVE SCHEMES
142 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
143 !| OPDADV |-->| SCHEME OPTION FOR THE ADVECTION OF TRACERS
144 !| | | WITH N OR PSI SCHEME:
145 !| | | 1: EXPLICIT
146 !| | | 2: PREDICTOR-CORRECTOR 1ST ORDER IN TIME
147 !| | | 3: PREDICTOR-CORRECTOR 2ND ORDER IN TIME
148 !| | | 4: LOCALLY IMPLICIT PREDICTOR-CORRECTOR
149 !| OPTSOU |-->| TYPE OF SOURCES
150 !| | | 1: NORMAL
151 !| | | 2: DIRAC
152 !| S |-->| VOID STRUCTURE
153 !| SLVTRA |-->| SOLVER CONFIGURATION FOR TRACER DIFFUSION.
154 !| SM |-->| SOURCE TERMS.
155 !| SMH |-->| SOURCE TERM IN CONTINUITY EQUATION
156 !| SMI |-->| IMPLICIT SOURCE TERM
157 !| SOLSYS |-->| 1 OR 2. IF 2 ADVECTION FIELD IS UCONV + DM1*GRAD(ZCONV)
158 !| TB |<->| BLOCK OF WORK STRUCTURES
159 !| TB2 |<->| SECOND BLOCK OF AT LEAST 7 WORK STRUCTURES
160 !| TRAIN |-->| VALUE OF TRACER IN THE RAIN
161 !| UCONV,VCONV |-->| ADVECTION VELOCITY FIELD
162 !| UNSV2D |-->| INVERSE OF INTEGRALS OF TEST FUNCTIONS
163 !| VOLU2D |-->| INTEGRAL OF TEST FUNCTIONS, NOT ASSEMBLED IN PARALLEL
164 !| V2DPAR |-->| INTEGRAL OF TEST FUNCTIONS, ASSEMBLED IN PARALLEL
165 !| YAFLBOR |-->| IF YES FLBOR IS GIVEN
166 !| YAFLULIM |-->| IF YES FLULIM IS GIVEN
167 !| YASMH |-->| IF YES, SMH MUST BE TAKEN INTO ACCOUNT
168 !| YASMI |-->| IF YES, SMI MUST BE TAKEN INTO ACCOUNT
169 !| ZCONV |-->| THE PIECE-WISE CONSTANT PART OF ADVECTION FIELD
170 !| | | IS DM1*GRAD(ZCONV), SEE SOLSYS.
171 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
172 !
173  USE bief, ex_cvtrvf => cvtrvf
176 !
177  IMPLICIT NONE
178 !
179 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
180 !
181  INTEGER, INTENT(IN) :: OPTSOU,KDIR,NPTFR,SOLSYS
182  INTEGER, INTENT(IN) :: KDDL,IOPT,OPTADV,FREE
183  INTEGER, INTENT(IN) :: NCO_DIST,NSP_DIST
184  INTEGER, INTENT(INOUT) :: LIMTRA(nptfr)
185  DOUBLE PRECISION, INTENT(IN) :: DT,AGGLOH,TRAIN
186  DOUBLE PRECISION, INTENT(IN) :: FLULIM(*)
187  DOUBLE PRECISION, INTENT(INOUT) :: MASSOU
188  LOGICAL, INTENT(IN) :: YASMH,YAFLBOR
189  LOGICAL, INTENT(IN) :: MSK,ENTET,YASMI,RAIN
190  LOGICAL, INTENT(IN) :: YAFLULIM,YAFLULIMEBE
191  TYPE(bief_obj), INTENT(IN) :: MASKEL,DM1,ZCONV,MASKPT
192  TYPE(bief_obj), INTENT(IN), TARGET :: H,HN
193  TYPE(bief_obj), INTENT(IN) :: VOLU2D,V2DPAR,UNSV2D,HPROP
194  TYPE(bief_obj), INTENT(INOUT) :: F,SM,AM2
195  TYPE(bief_obj), INTENT(IN) :: UCONV,VCONV,FN,SMI,SMH
196  TYPE(bief_obj), INTENT(INOUT) :: FBOR,TB,TB2
197  TYPE(bief_obj), INTENT(INOUT) :: FLBORTRA
198  TYPE(bief_obj), INTENT(IN) :: FSCEXP,S,MASKTR
199  TYPE(bief_obj), INTENT(IN) :: PLUIE
200  TYPE(bief_mesh) :: MESH
201  DOUBLE PRECISION, INTENT(IN) :: FLULIMEBE(*)
202  TYPE(bief_obj), INTENT(IN) :: FLBOR
203  TYPE(slvcfg), INTENT(IN) :: SLVTRA
204 !
205 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
206 !
207  INTEGER IELMF,I,IOPT1,IOPT2,N,IELEM,I1,I2,I3,ICOR,NIT,OPTCFL
208 !
209 !-----------------------------------------------------------------------
210 !
211  DOUBLE PRECISION DT_REMAIN,DDT,TDT,SECU,TETAFCOR
212  DOUBLE PRECISION ADMASS,LOCALMIN,LOCALMAX,TWOTHIRDS
213 !
214  CHARACTER(LEN=16) FORMUL
215 !
216  DOUBLE PRECISION, POINTER, DIMENSION(:) :: FXMAT,FXMATPAR
217 !
218  DOUBLE PRECISION K,SURK,KM1,KM1SURK
219  LOGICAL MASS_BAL,PREDICOR,LIPS,WITHABS
220 !
221  TYPE(slvcfg)::SLVPSI
222 !
223 ! HARDCODED PARAMETER !!!!!!!!!!
224 !
225 ! MAXIMUM NUMBER OF ITERATIONS
226  INTEGER, PARAMETER :: NITMAX = 200
227 !
228 !-----------------------------------------------------------------------
229 !
230  TYPE(bief_obj), POINTER :: T1,T2,FLBOUND,T4,T6,FXBORPAR,T8,HNT,HT
231  TYPE(bief_obj), POINTER :: HNP1MT,TETAF_VAR,FMIN,FMAX
232  DOUBLE PRECISION, POINTER, DIMENSION(:) :: DFDT
233 !
234 !-----------------------------------------------------------------------
235 !
236 ! HARDCODED PARAMETER FOR STABILITY OF PREDICTOR CORRECTOR
237 ! AND NUMBERS DEPENDING OF K. K MUST BE > 1.D0
238 !
239  k=2.d0
240 !
241  surk=1.d0/k
242  km1=k-1.d0
243  km1surk=km1/k
244  twothirds=2.d0*km1/(2.d0*k-1.d0)
245 !
246 !-----------------------------------------------------------------------
247 !
248 ! SOLVER OPTIONS FOR IMPLICIT SCHEMES : SLVTRA TAKEN BUT EITHER
249 ! GMRES OR DIRECT ASKED
250 ! AND HARDCODED HERE
251 ! KRYLOV DIMENSION SET TO 3
252 !
253 ! SEE ALSO TVF_IMP WITH A JACOBI METHOD
254 !
255  slvpsi%SLV =slvtra%SLV
256  slvpsi%NITMAX=slvtra%NITMAX
257  slvpsi%PRECON=slvtra%PRECON
258  slvpsi%KRYLOV=slvtra%KRYLOV
259  slvpsi%EPS =slvtra%EPS
260  slvpsi%ZERO =slvtra%ZERO
261 !
262 ! CHANGING THIS WILL TRIGGER CHANGING THE SIZE OF TB2 IN CALLING
263 ! PROGRAMMES
264  slvpsi%KRYLOV=3
265 !
266 !-----------------------------------------------------------------------
267 !
268 ! BEWARE : OPTIMISATION OF MEMORY USE...
269 !
270  hnp1mt =>tb%ADR(free)%P
271  t1 =>tb%ADR(free+1)%P
272  t2 =>tb%ADR(free+2)%P
273  flbound =>tb%ADR(free+3)%P
274  t4 =>tb%ADR(free+4)%P
275  t6 =>tb%ADR(free+5)%P
276  fxborpar =>tb%ADR(free+6)%P
277  t8 =>tb%ADR(free+7)%P
278  hnt =>tb%ADR(free+8)%P
279  ht =>tb%ADR(free+9)%P
280  tetaf_var =>tb%ADR(free+10)%P
281 !
282 ! BEWARE : FMIN AND FMAX MIXED IN MEMORY WITH T6%R AND T8%R
283 ! LOOK HOW DFDT AND T8 ARE ALWAYS RECOMPUTED AFTER FMIN AND FMAX
284 ! ARE USED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
285 !
286 ! BEWARE : DFDT=T6%R !!!!!!!!!!!
287  dfdt => tb%ADR(free+5)%P%R
288  fmin => t6
289  fmax => t8
290 !
291 !-----------------------------------------------------------------------
292 !
293  fxmat=>mesh%MSEG%X%R(1:mesh%NSEG)
294 ! IN PARALLEL MODE, ASSEMBLED AND NON ASSEMBLED VERSIONS ARE DIFFERENT
295  IF(ncsize.GT.1) THEN
296  fxmatpar=>mesh%MSEG%X%R(mesh%NSEG+1:2*mesh%NSEG)
297  ELSE
298  fxmatpar=>mesh%MSEG%X%R(1:mesh%NSEG)
299  ENDIF
300 !
301 !-----------------------------------------------------------------------
302 !
303 ! CHECKING OPTIONS
304 !
305  IF(optadv.LT.1.OR.optadv.GT.4) THEN
306  WRITE(lu,*) 'CVTRVF: OPTION OF ADVECTION SCHEME'
307  WRITE(lu,*) ' UNKNOWN: ',optadv
308  CALL plante(1)
309  stop
310  ENDIF
311 !
312  IF(am2%STO.NE.3.AND.optadv.EQ.4) THEN
313  WRITE(lu,*) 'CVTRVF: EDGE-BASED STORAGE REQUESTED WITH'
314  WRITE(lu,*) ' IMPLICIT N OR PSI SCHEME'
315  CALL plante(1)
316  stop
317  ENDIF
318 !
319 ! EXTRACTS OTHER OPTIONS
320 !
321  iopt2=iopt/10
322  iopt1=iopt-10*iopt2
323 !
324  IF(iopt1.LT.1.OR.iopt1.GT.3) THEN
325  WRITE(lu,*) 'CVTRVF : OPTION IOPT1=',iopt1,' UNKNOWN'
326  CALL plante(1)
327  stop
328  ENDIF
329 !
330  IF(iopt2.LT.0.OR.iopt2.GT.1) THEN
331  WRITE(lu,*) 'CVTRVF : OPTION IOPT2=',iopt2,' UNKNOWN'
332  CALL plante(1)
333  stop
334  ENDIF
335 !
336 ! SIMPLIFYING TESTS: OPTIONS WITH AN EXPLICIT PREDICTOR-CORRECTOR
337 !
338  IF((iopt1.EQ.2.OR.iopt1.EQ.3).AND.
339  & (optadv.EQ.2.OR.optadv.EQ.3)) THEN
340  predicor=.true.
341  ELSE
342  predicor=.false.
343  ENDIF
344 !
345 ! SIMPLIFYING TESTS: OPTION WITH LOCALLY IMPLICIT PSI (OR N) SCHEME
346 !
347  IF((iopt1.EQ.2.OR.iopt1.EQ.3).AND.optadv.EQ.4) THEN
348  lips=.true.
349  ELSE
350  lips=.false.
351  ENDIF
352 !
353 ! SELECTING THE IMPLICITATION COEFFICIENT
354 !
355  IF(lips) THEN
356 ! ADAPTIVE IMPLICIT, N OR PSI
357  ELSEIF((iopt1.EQ.2.OR.iopt1.EQ.3).AND.optadv.EQ.3) THEN
358 ! EXPLICIT PREDICTOR, PSEUDO-IMPLICIT CORRECTOR
359 ! FROM 0 TO 1
360  tetafcor=0.5d0
361  ELSE
362 ! EXPLICIT N OR PSI, EXPLICIT PREDICTOR-CORRECTOR PSI
363  tetafcor=0.d0
364  ENDIF
365 !
366 !-----------------------------------------------------------------------
367 !
368 ! IELMF = F%ELM
369 ! FORCED TO LINEAR
370  ielmf=11
371 !
372 ! TAKES MASS-LUMPING INTO ACCOUNT IN THE CONTINUITY EQUATION
373 !
374  IF(abs(1.d0-aggloh).GT.1.d-8) THEN
375  CALL vector(ht ,'=','MASVEC ',ielmf,
376  & 1.d0-aggloh,h ,s,s,s,s,s,mesh,msk,maskel)
377  CALL vector(hnt,'=','MASVEC ',ielmf,
378  & 1.d0-aggloh,hn,s,s,s,s,s,mesh,msk,maskel)
379  IF(ncsize.GT.1) THEN
380  CALL parcom(ht ,2,mesh)
381  CALL parcom(hnt,2,mesh)
382  ENDIF
383  CALL os('X=YZ ',x=ht ,y=ht ,z=unsv2d)
384  CALL os('X=YZ ',x=hnt,y=hnt,z=unsv2d)
385  CALL os('X=X+CY ',x=ht ,y=h ,c=aggloh)
386  CALL os('X=X+CY ',x=hnt,y=hn ,c=aggloh)
387  ELSE
388 ! CALL OS('X=Y ',X=HT ,Y=H )
389 ! CALL OS('X=Y ',X=HNT,Y=HN)
390  ht=>h
391  hnt=>hn
392  ENDIF
393 !
394 ! IF NO FLBOR IS GIVEN, IT IS COMPUTED
395 !
396  IF(yaflbor) THEN
397  CALL os('X=Y ',x=flbound,y=flbor)
398  ELSE
399 ! MASK=5 FOR NON NEUMANN BOUNDARIES IN DIFFIN
400  CALL vector(flbound,'=','FLUBDF ',1,1.d0,
401  & hprop,hprop,hprop,
402  & uconv,vconv,vconv,mesh,.true.,masktr%ADR(5)%P)
403  ENDIF
404 !
405 !-----------------------------------------------------------------------
406 !
407 ! CORRECTION OF THE BOUNDARY CONDITIONS
408 !
409 !-----------------------------------------------------------------------
410 !
411 ! A SIMILAR CORRECTION IS DONE IN DIFFIN, BUT IT MAY BE INCOMPATIBLE
412 ! AS U*N MAY NOT BE OF THE SAME SIGN AS FLBOR HERE (RARE BUT ALREADY
413 ! SEEN).
414 !
415  CALL cpstvc(hn,fxborpar)
416 ! JUST IN CASE INTERNAL POINTS HAVE NON INITIALISED VALUES
417  CALL os('X=0 ',x=fxborpar)
418  DO i=1,mesh%NPTFR
419  n=mesh%NBOR%I(i)
420  fxborpar%R(n)=flbound%R(i)
421  ENDDO
422  IF(ncsize.GT.1) CALL parcom(fxborpar,2,mesh)
423  DO i=1,mesh%NPTFR
424  n=mesh%NBOR%I(i)
425  IF(limtra(i).EQ.kdir.AND.fxborpar%R(n).GT.0.d0) THEN
426  limtra(i)=kddl
427  ELSEIF(limtra(i).EQ.kddl.AND.fxborpar%R(n).LT.0.d0) THEN
428  limtra(i)=kdir
429 ! WHEN VELOCITIES RE-ENTER THROUGH AN EXIT, WE ARBITRARILY CHOOSE
430 ! THAT THE PRESCRIBED VALUE IS THE LAST KNOWN
431  fbor%R(i)=fn%R(n)
432  ENDIF
433  ENDDO
434 !
435 ! MASKS FLBOR IF(MSK)
436 !
437  IF(msk) CALL os('X=XY ',x=fxborpar,y=maskpt)
438 !
439 !-----------------------------------------------------------------------
440 !
441 ! INITIALISES THE ADDED MASS AND THE TRACER FLUX AT THE BOUNDARY
442 !
443  admass=0.d0
444  DO i=1,mesh%NPTFR
445  flbortra%R(i)=0.d0
446  ENDDO
447 !
448 ! COMPUTES THE FLUXES PHIIJ = FXMAT
449 !
450  formul='HUGRADP '
451  IF(solsys.EQ.2) formul(8:8)='2'
452  CALL vector(t2,'=',formul,ielmf,-1.d0,
453  & hprop,dm1,zconv,uconv,vconv,vconv,mesh,msk,maskel)
454 ! T2 AS HUGRADP IS NOT USED AS AN ASSEMBLED VECTOR
455 ! BUT TO GET THE NON ASSEMBLED FORM MESH%W
456  nit=0
457  dt_remain=dt
458  tdt=0.d0
459  CALL cpstvc(h,hnp1mt)
460  CALL cpstvc(h,t4)
461  CALL cpstvc(f,t8)
462 !
463 ! T4 WILL BE F PROGRESSIVELY UPDATED
464 ! HNP1MT WILL BE THE DEPTH AT THE END OF THE PREVIOUS SUB-TIMESTEP
465 ! HENCE THE DEPTH At THE BEGINNING OF THE NEXT SUB TIME-STEP
466 ! (INITIALISED HERE TO CALL CFLVF)
467 !
468  DO i=1,hn%DIM1
469  t4%R(i)=fn%R(i)
470  hnp1mt%R(i)=hnt%R(i)
471  ENDDO
472 !
473 ! T1 WILL BE THE DEPTH ACCORDING TO THE CONTINUITY EQUATION
474 !
475  IF(iopt2.EQ.1) THEN
476  DO i=1,hn%DIM1
477  t1%R(i)=hnt%R(i)
478  ENDDO
479  ENDIF
480 !
481 100 CONTINUE
482  nit=nit+1
483 !
484 !---------------------------------------
485 ! VARIOUS OPTIONS TO COMPUTE THE FLUXES
486 !---------------------------------------
487 !
488  IF(nit.EQ.1.OR.(iopt1.EQ.3.AND..NOT.lips)) THEN
489  CALL flux_ef_vf(fxmat,mesh%W%R,mesh%NSEG,mesh%NELEM,
490  & mesh%NELMAX,
491  & mesh%ELTSEG%I,mesh%ORISEG%I,
492 ! N SCHEME FORCED (HERE FOR CFL ONLY)
493  & mesh%IKLE%I,.true.,2,
494 ! OPTIONAL LIMITATION OF FLUXES FOR LIPS
495 ! (OTHER SCHEMES DO NOT WORK WITH TIDAL FLATS)
496  & yaflulim=yaflulim.AND.lips,flulim=flulim,
497  & yaflulimebe=yaflulimebe.AND.lips,
498  & flulimebe=flulimebe)
499 ! & MESH%IKLE%I,.TRUE.,2 ,FN=T4)
500 ! IOPT1 HERE FORCED TO N SCHEME
501 ! NO NEED OF FN
502 !
503 ! CANCELS FLUXES TO AND FROM MASKED POINTS
504 !
505  IF(msk) THEN
506  CALL flux_mask(fxmat,mesh%NSEG,
507  & mesh%GLOSEG%I,mesh%GLOSEG%DIM1,maskpt%R)
508  ENDIF
509 ! ASSEMBLES THE FLUXES AT INTERFACES IN PARALLEL MODE, THIS
510 ! IS FOR UPWINDING (STORED IN SECOND DIMENSION OF MESH%MSEG)
511  IF(ncsize.GT.1) THEN
512  CALL ov('X=Y ', x=fxmatpar, y=fxmat, dim1=mesh%NSEG)
513  CALL parcom2_seg(fxmatpar,fxmatpar,fxmatpar,
514  & mesh%NSEG,1,2,1,mesh,1,11)
515  ENDIF
516  ENDIF
517 !
518 !--------------------------------------------
519 ! DETERMINES THE LARGEST ADMISSIBLE TIMESTEP
520 !--------------------------------------------
521 !
522 ! COMPUTES THE MAXIMUM TIMESTEP ENSURING MONOTONICITY
523 ! ACCORDING TO THEORY OF N SCHEME, BUT POSSIBLY
524 ! DIVIDED BY 2 FOR PREDICTOR-CORRECTORS
525 !
526  IF(predicor.AND.nco_dist.GT.0) THEN
527 ! SECU=SURK
528  secu=1.d0
529  withabs=.true.
530  ELSEIF(lips) THEN
531  secu=1.d0
532  withabs=.true.
533  ELSE
534  secu=0.99d0
535  withabs=.false.
536  ENDIF
537 !
538 ! HARDCODED OPTION FOR THE CFL (AND OPTION 2 ONLY FOR THE N SCHEME)
539 !
540  optcfl=1
541 ! OPTCFL=2
542 ! IF(OPTADV.NE.1.OR.IOPT1.NE.2) OPTCFL=1
543 !
544  CALL cflvf(ddt,hnp1mt%R,fxmat,fxmatpar,
545 ! FLBOR%R(NPOIN)
546  & v2dpar%R,dt_remain,fxborpar%R ,smh%R,
547  & yasmh,t8,mesh%NSEG,mesh%NPOIN,mesh%NPTFR,
548  & mesh%GLOSEG%I,mesh%GLOSEG%DIM1,mesh,msk,maskpt,
549  & rain,pluie%R,t4%R,mesh%NELEM,mesh%IKLE%I,
550  & limtra,kdir,kddl,fbor%R,fscexp%R,train,mesh%NBOR%I,
551  & t2,t6,secu,optcfl,withabs)
552 !
553 ! NOW RECOMPUTING THE PSI FLUXES (THE N FLUXES HAVE BEEN
554 ! USED FOR THE STABILITY CRITERION).
555 !
556 ! WITH THE SEMI-IMPLICIT SCHEME, THE PSI FLUXES CANNOT BE USED
557 ! AT THIS LEVEL AND WILL NOT BE COMPUTED.
558 !
559  IF(iopt1.EQ.3.AND..NOT.lips) THEN
560  CALL flux_ef_vf(fxmat,mesh%W%R,mesh%NSEG,mesh%NELEM,
561  & mesh%NELMAX,
562  & mesh%ELTSEG%I,mesh%ORISEG%I,
563  & mesh%IKLE%I,.true.,iopt1,t4)
564 ! CANCELS FLUXES TO AND FROM MASKED POINTS
565  IF(msk) THEN
566  CALL flux_mask(fxmat,mesh%NSEG,
567  & mesh%GLOSEG%I,mesh%GLOSEG%DIM1,maskpt%R)
568  ENDIF
569 ! ASSEMBLES THE FLUXES AT INTERFACES IN PARALLEL MODE, THIS
570 ! IS FOR UPWINDING (STORED IN SECOND DIMENSION OF MESH%MSEG)
571  IF(ncsize.GT.1) THEN
572  CALL ov('X=Y ', x=fxmatpar, y=fxmat, dim1=mesh%NSEG)
573  CALL parcom2_seg(fxmatpar,fxmatpar,fxmatpar,
574  & mesh%NSEG,1,2,1,mesh,1,11)
575  ENDIF
576  ENDIF
577 !
578 !
579  IF(ncsize.GT.1) ddt=p_min(ddt)
580  ddt=min(ddt,dt_remain)
581 !
582 ! CASE OF ADAPTIVE IMPLICIT N OR PSI SCHEME
583 !
584  IF(lips) THEN
585  DO i=1,hn%DIM1
586 ! V7P2
587 ! TETAF_VAR%R(I)=MAX(0.D0,1.D0-SURK*NSP_DIST*T2%R(I)/DT)
588 ! V7P3
589  tetaf_var%R(i)=max(0.d0,1.d0-nsp_dist*t2%R(i)/dt)
590  ENDDO
591  ddt=dt/nsp_dist/0.999999d0
592  ENDIF
593 !
594  ddt=min(ddt,dt_remain)
595 !
596 ! T2 WILL TAKE THE SUCCESSIVE VALUES OF H
597 ! AT THE BEGINNING OF THE SUB-TIMESTEP
598 ! WARNING: T2 ALSO USED WITH IOPT2=1, BUT SO FAR PREDICTOR-CORRECTOR
599 ! NOT USED WITH THIS OPTION
600 !
601  IF(predicor) THEN
602  DO i=1,hn%DIM1
603  t2%R(i)=hnt%R(i)+tdt*(ht%R(i)-hnt%R(i))/dt
604  ENDDO
605  ENDIF
606 !
607  tdt=tdt+ddt
608 !
609 ! HNP1MT WILL TAKE THE SUCCESSIVE VALUES OF H
610 ! AT THE END OF THE SUB-TIMESTEP (EXPLICIT) OR IN BETWEEN (IMPLICIT)
611 !
612  IF(lips) THEN
613  DO i=1,hn%DIM1
614  hnp1mt%R(i)=hnt%R(i)+
615  & (tdt-tetaf_var%R(i)*ddt)*(ht%R(i)-hnt%R(i))/dt
616  ENDDO
617  ELSE
618  DO i=1,hn%DIM1
619  hnp1mt%R(i)=hnt%R(i)+tdt*(ht%R(i)-hnt%R(i))/dt
620  ENDDO
621  ENDIF
622 !
623 ! IN TVF FACTOR HT/HLIN MAY TRIGGER DIVERGENCE FOR DRY POINTS
624 !
625  IF(msk) THEN
626  DO i=1,hn%DIM1
627  IF(maskpt%R(i).LT.0.5d0) hnp1mt%R(i)=ht%R(i)
628  ENDDO
629  ENDIF
630 !
631 !------------------------------------
632 ! FINAL RESOLUTION OR PREDICTOR STEP
633 !------------------------------------
634 !
635  IF(.NOT.lips) THEN
636 !
637  CALL tracvf(f,fscexp,fxmat,fxmatpar,
638  & volu2d,unsv2d,
639  & ddt,flbound,fbor,smh,yasmh,t1,t2,t4,hnp1mt,
640  & fxborpar,t8,
641  & mesh,limtra,kdir,kddl,optsou,iopt2,flbortra,msk,
642  & dt,rain,pluie,train,admass,
643 ! CASES WHERE THE MASS BALANCE MUST BE PREPARED
644  & optadv.EQ.1.OR.nco_dist.EQ.0)
645 !
646  ELSE
647 !
648 ! LOOP WITH PREDICTOR AND ALL CORRECTIONS
649 !
650  DO icor=0,nco_dist
651 !
652 ! UNLIKE WITH EXPLICIT SCHEMES, THE PREDICTOR IS NOT
653 ! GUARANTEED WITHOUT STABILITY PROBLEM IF NOT LIMITED
654  IF(icor.GT.0) THEN
655 ! LIMITING THE PREDICTOR
656  DO i=1,hn%DIM1
657  fmin%R(i)=t4%R(i)
658  fmax%R(i)=t4%R(i)
659  ENDDO
660  DO i=1,nptfr
661  IF(limtra(i).EQ.kdir) THEN
662  n=mesh%NBOR%I(i)
663  fmin%R(n)=min(fmin%R(n),fbor%R(i))
664  fmax%R(n)=max(fmax%R(n),fbor%R(i))
665  ENDIF
666  ENDDO
667  DO ielem=1,mesh%NELEM
668  i1=mesh%IKLE%I(ielem)
669  i2=mesh%IKLE%I(ielem+ mesh%NELMAX)
670  i3=mesh%IKLE%I(ielem+2*mesh%NELMAX)
671  localmin=min( f%R(i1), f%R(i2), f%R(i3),
672  & t4%R(i1),t4%R(i2),t4%R(i3))
673  localmax=max( f%R(i1), f%R(i2), f%R(i3),
674  & t4%R(i1),t4%R(i2),t4%R(i3))
675  fmin%R(i1)=min(fmin%R(i1),localmin)
676  fmax%R(i1)=max(fmax%R(i1),localmax)
677  fmin%R(i2)=min(fmin%R(i2),localmin)
678  fmax%R(i2)=max(fmax%R(i2),localmax)
679  fmin%R(i3)=min(fmin%R(i3),localmin)
680  fmax%R(i3)=max(fmax%R(i3),localmax)
681  ENDDO
682  IF(ncsize.GT.1) THEN
683  CALL parcom(fmin,4,mesh)
684  CALL parcom(fmax,3,mesh)
685  ENDIF
686  DO i=1,hn%DIM1
687  f%R(i)=min(f%R(i),t4%R(i)+km1surk*(fmax%R(i)-t4%R(i)))
688  f%R(i)=max(f%R(i),t4%R(i)+km1surk*(fmin%R(i)-t4%R(i)))
689  ENDDO
690  ENDIF
691 !
692 ! DERIVATIVE IN TIME
693 !
694  IF(icor.EQ.0) THEN
695 ! FOR GETTING THE EXPLICIT PSI CONTRIBUTION
696 ! WITHOUT THE DERIVATIVE IN TIME
697  DO i=1,hn%DIM1
698  dfdt(i)=0.d0
699  ENDDO
700  ELSE
701 ! FOR GETTING THE EXPLICIT PSI CONTRIBUTION
702 ! WITH THE DERIVATIVE IN TIME
703  DO i=1,hn%DIM1
704 ! HERE DFDT=H*DFDT WITH SEMI IMPLICIT H
705  dfdt(i)=hnp1mt%R(i)*(f%R(i)-t4%R(i))/ddt
706  ENDDO
707  ENDIF
708 !
709 ! EXPLICIT CONTRIBUTION
710 !
711  IF(icor.EQ.0) THEN
712 ! FN GIVEN FOR FSTAR
713  CALL flux_ef_vf_3(mesh%W%R,mesh%NELEM,mesh%NELMAX,
714  & mesh%ELTSEG%I,mesh%ORISEG%I,
715  & fxmatpar,mesh%NSEG,
716 ! FN
717  & mesh%IKLE%I,mesh%NPOIN,t4,
718 ! & FI_I HDFDT
719  & t8%R,mesh%SURFAC%R,dfdt,tetaf_var%R,
720 ! FN FOR FSTAR
721  & yaflulim,flulim,yaflulimebe,
722  & flulimebe)
723  ELSE
724 ! FSTAR REALLY GIVEN
725  CALL flux_ef_vf_3(mesh%W%R,mesh%NELEM,mesh%NELMAX,
726  & mesh%ELTSEG%I,mesh%ORISEG%I,
727  & fxmatpar,mesh%NSEG,
728 ! FN
729  & mesh%IKLE%I,mesh%NPOIN,t4,
730 ! & FI_I HDFDT
731  & t8%R,mesh%SURFAC%R,dfdt,tetaf_var%R,
732 ! FSTAR
733  & yaflulim,flulim,yaflulimebe,flulimebe)
734  ENDIF
735 ! NO, WILL GO INTO SM THAT IS NOT ASSEMBLED
736 ! IF(NCSIZE.GT.1) CALL PARCOM(T8,2,MESH)
737 !
738 ! BUILDING AND SOLVING THE LINEAR SYSTEM (NORMAL OR PREDICTOR)
739 !
740  CALL tvf_imp(f%R,t4%R,fxmat,
741  & fxmatpar,ddt,
742  & flbound%R,hnp1mt%R,
743  & fbor%R,smh%R,yasmh,fscexp%R,
744  & mesh%NSEG,mesh%NPOIN,mesh%NPTFR,
745  & mesh%GLOSEG%I,mesh%GLOSEG%DIM1,
746  & mesh%NBOR%I,limtra,kdir,kddl,
747  & optsou,iopt2,flbortra%R,ddt/dt,mesh,f,
748  & rain,pluie%R,train,tetaf_var%R,
749  & entet,volu2d%R,
750  & t6,t8%R,am2,tb2,slvpsi,
751 ! PREDICTOR CORRECTOR
752  & icor.EQ.0,icor.NE.0,icor,nco_dist,admass)
753 !
754  ENDDO
755 !
756  ENDIF
757 !
758 !-------------------------------------
759 ! CORRECTOR STEP FOR N AND PSI SCHEME
760 !-------------------------------------
761 !
762  IF(predicor.AND.nco_dist.GT.0) THEN
763 !
764  DO icor=1,nco_dist
765 !
766 ! CASES WITH A LIMITATION OF THE FIRST CORRECTOR
767 !
768  IF(optadv.EQ.3.OR.icor.GT.1.OR.k.LT.2.d0) THEN
769 ! COMPUTING THE MINIMUM AND MAXIMUM
770  DO i=1,hn%DIM1
771  fmin%R(i)=t4%R(i)
772  fmax%R(i)=t4%R(i)
773  ENDDO
774  DO i=1,nptfr
775  IF(limtra(i).EQ.kdir) THEN
776  n=mesh%NBOR%I(i)
777  fmin%R(n)=min(fmin%R(n),fbor%R(i))
778  fmax%R(n)=max(fmax%R(n),fbor%R(i))
779  ENDIF
780  ENDDO
781  IF(optadv.EQ.2) THEN
782 ! ALL FSTAR(J) NOT INCLUDED
783  DO ielem=1,mesh%NELEM
784  i1=mesh%IKLE%I(ielem)
785  i2=mesh%IKLE%I(ielem+ mesh%NELMAX)
786  i3=mesh%IKLE%I(ielem+2*mesh%NELMAX)
787  localmin=min(t4%R(i1),t4%R(i2),t4%R(i3))
788  localmax=max(t4%R(i1),t4%R(i2),t4%R(i3))
789  fmin%R(i1)=min(f%R(i1),fmin%R(i1),localmin)
790  fmax%R(i1)=max(f%R(i1),fmax%R(i1),localmax)
791  fmin%R(i2)=min(f%R(i2),fmin%R(i2),localmin)
792  fmax%R(i2)=max(f%R(i2),fmax%R(i2),localmax)
793  fmin%R(i3)=min(f%R(i3),fmin%R(i3),localmin)
794  fmax%R(i3)=max(f%R(i3),fmax%R(i3),localmax)
795  ENDDO
796  ELSEIF(optadv.EQ.3) THEN
797 ! ALL FSTAR(J) INCLUDED
798  DO ielem=1,mesh%NELEM
799  i1=mesh%IKLE%I(ielem)
800  i2=mesh%IKLE%I(ielem+ mesh%NELMAX)
801  i3=mesh%IKLE%I(ielem+2*mesh%NELMAX)
802  localmin=min( f%R(i1), f%R(i2), f%R(i3),
803  & t4%R(i1),t4%R(i2),t4%R(i3))
804  localmax=max( f%R(i1), f%R(i2), f%R(i3),
805  & t4%R(i1),t4%R(i2),t4%R(i3))
806  fmin%R(i1)=min(fmin%R(i1),localmin)
807  fmax%R(i1)=max(fmax%R(i1),localmax)
808  fmin%R(i2)=min(fmin%R(i2),localmin)
809  fmax%R(i2)=max(fmax%R(i2),localmax)
810  fmin%R(i3)=min(fmin%R(i3),localmin)
811  fmax%R(i3)=max(fmax%R(i3),localmax)
812  ENDDO
813  ENDIF
814  IF(ncsize.GT.1) THEN
815  CALL parcom(fmin,4,mesh)
816  CALL parcom(fmax,3,mesh)
817  ENDIF
818  ENDIF
819 !
820 ! LIMITATIONS OF THE PREDICTOR
821 !
822  IF(optadv.EQ.3) THEN
823  DO i=1,hn%DIM1
824  f%R(i)=min(f%R(i),t4%R(i)+km1*(t4%R(i)-fmin%R(i)))
825  f%R(i)=max(f%R(i),t4%R(i)+km1*(t4%R(i)-fmax%R(i)))
826  ENDDO
827  IF(icor.GT.1.OR.k.LT.2.d0) THEN
828  DO i=1,hn%DIM1
829  f%R(i)=min(f%R(i),t4%R(i)+twothirds*(fmax%R(i)-t4%R(i)))
830  f%R(i)=max(f%R(i),t4%R(i)+twothirds*(fmin%R(i)-t4%R(i)))
831  ENDDO
832  ENDIF
833  ELSEIF(optadv.EQ.2.AND.(icor.GT.1.OR.k.LT.2.d0)) THEN
834  DO i=1,hn%DIM1
835  f%R(i)=min(f%R(i),t4%R(i)+km1surk*(fmax%R(i)-t4%R(i)))
836  f%R(i)=max(f%R(i),t4%R(i)+km1surk*(fmin%R(i)-t4%R(i)))
837  ENDDO
838  ENDIF
839 !
840  DO i=1,hn%DIM1
841  dfdt(i)=(f%R(i)-t4%R(i))/ddt
842  ENDDO
843 !
844  CALL flux_ef_vf_2(mesh%W%R,mesh%NELEM,mesh%NELMAX,
845 ! FN
846  & mesh%IKLE%I,iopt1,mesh%NPOIN,t4,
847 ! & FI_I,FSTAR, HN H
848  & t8%R,f%R ,t2%R,hnp1mt%R,mesh%SURFAC%R,
849  & tetafcor,dfdt)
850  IF(ncsize.GT.1) CALL parcom(t8,2,mesh)
851 !
852  IF(icor.EQ.nco_dist) THEN
853  mass_bal=.true.
854  ELSE
855  mass_bal=.false.
856  ENDIF
857  DO i=1,hn%DIM1
858 ! WILL BE FSTAR IN TVF_2
859  t6%R(i)=f%R(i)
860  ENDDO
861  CALL tvf_2(f%R,t6%R,t4%R,volu2d%R,unsv2d%R,ddt,
862  & flbound%R,fxborpar%R,fbor%R,smh%R,yasmh,fscexp%R,
863  & mesh%NPOIN,mesh%NPTFR,mesh%NBOR%I,limtra,kdir,kddl,
864  & optsou,hnp1mt%R,iopt2,flbortra%R,ddt/dt,rain,
865  & pluie%R,train,t8%R,tetafcor,mass_bal,admass)
866 ! FI_I
867 !
868  ENDDO
869 !
870  ENDIF ! IF(PREDICOR.AND.NCO_DIST.GT.1)
871 !
872 !-----------------
873 ! END CORRECTOR STEP
874 !-----------------
875 !
876 ! PREPARING FOR FURTHER ITERATIONS
877 !
878  IF(.NOT.(lips.AND.nsp_dist.EQ.1)) THEN
879 !
880  DO i=1,hn%DIM1
881 ! T4 IS F(N+1)
882  t4%R(i)=f%R(i)
883  ENDDO
884  IF(iopt2.EQ.1) THEN
885  DO i=1,hn%DIM1
886  t1%R(i)=t2%R(i)
887  ENDDO
888  ENDIF
889 !
890  ENDIF
891 !
892  dt_remain=dt_remain-ddt
893 !
894  IF(dt_remain.NE.0.d0.AND.nit.LT.nitmax) GO TO 100
895 !
896  IF(nit.GE.nitmax.AND.optadv.NE.4) THEN
897  WRITE(lu,901) nit
898 901 FORMAT(1x,'CVTRVF: ',1i6,' SUB-ITERATIONS REQUIRED FOR THE'
899  & ,/,1x, ' DISTRIBUTIVE SCHEME. DECREASE THE TIME-STEP')
900  CALL plante(1)
901  stop
902  ELSEIF(entet) THEN
903  WRITE(lu,903) nit
904 903 FORMAT(1x,'CVTRVF (BIEF): ',1i6,' SUB-ITERATIONS')
905  ENDIF
906 !
907 !-----------------------------------------------------------------------
908 !
909 ! EXPLICIT SOURCE TERM
910 !
911  DO i = 1,mesh%NPOIN
912  f%R(i) = f%R(i)+dt*sm%R(i)
913  ENDDO
914 !
915 ! IMPLICIT SOURCE TERM
916 !
917  IF(yasmi) THEN
918  DO i = 1,mesh%NPOIN
919  f%R(i) = f%R(i)/(1.d0-dt*smi%R(i)/max(h%R(i),1.d-15))
920  ENDDO
921  ENDIF
922 !
923 !-----------------------------------------------------------------------
924 !
925 ! UPDATING MASSOU
926 !
927  IF(ncsize.GT.1) THEN
928  massou=massou+p_sum(admass)
929  ELSE
930  massou=massou+admass
931  ENDIF
932 !
933 !-----------------------------------------------------------------------
934 !
935  RETURN
936  END
937 
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine flux_ef_vf_3(PHIEL, NELEM, NELMAX, ELTSEG, ORISEG, FXMATPAR, NSEG, IKLE, NPOIN, FN, FI_I, SU, HDFDT, TETA, YAFLULIM, FLULIM, YAFLULIMEBE, FLULIMEBE)
Definition: flux_ef_vf_3.f:8
subroutine flux_mask(FXMAT, NSEG, GLOSEG, SIZGLO, MASKPT)
Definition: flux_mask.f:7
subroutine parcom2_seg(X1, X2, X3, NSEG, NPLAN, ICOM, IAN, MESH, OPT, IELM)
Definition: parcom2_seg.f:7
subroutine cvtrvf(F, FN, FSCEXP, H, HN, HPROP, UCONV, VCONV, DM1, ZCONV, SOLSYS, SM, SMH, YASMH, SMI, YASMI, FBOR, MASKTR, MESH, AGGLOH, DT, ENTET, MSK, MASKEL, S, MASSOU, OPTSOU, LIMTRA, KDIR, KDDL, NPTFR, FLBOR, YAFLBOR, VOLU2D, V2DPAR, UNSV2D, IOPT, FLBORTRA, MASKPT, RAIN, PLUIE, TRAIN, OPTADV, TB, FREE, AM2, TB2, NCO_DIST, NSP_DIST, YAFLULIM, FLULIM, YAFLULIMEBE, FLULIMEBE, SLVTRA)
Definition: cvtrvf.f:13
subroutine tvf_imp(F, FC, FXMAT, FXMATPAR, DT, FXBOR, HNP1MT, FBOR, SMH, YASMH, FSCEXP, NSEG, NPOIN, NPTFR, GLOSEG, SIZGLO, NBOR, LIMTRA, KDIR, KDDL, OPTSOU, IOPT2, FLBORTRA, SURNIT, MESH, SF, RAIN, PLUIE, TRAIN, TETAF, INFOGT, VOLU2D, SM, PSIEXP, AM2, BB, SLVPSI, PREDICTOR, CORRECTOR, ICOR, NCOR, MASSOU)
Definition: tvf_imp.F:12
subroutine tracvf(F, FSCEXP, FXMAT, FXMATPAR, VOLU2D, UNSV2D, DDT, FXBOR, FBOR, SMH, YASMH, T1, T2, T4, T5, T7, T8, MESH, LIMTRA, KDIR, KDDL, OPTSOU, IOPT2, FLBORTRA, MSK, DT, RAIN, PLUIE, TRAIN, MASSOU, MASS_BALANCE)
Definition: tracvf.f:11
subroutine flux_ef_vf_2(PHIEL, NELEM, NELMAX, IKLE, IOPT, NPOIN, FN, FI_I, FSTAR, HN, H, SU, TETA, DFDT)
Definition: flux_ef_vf_2.f:8
subroutine cflvf(DTMAX, HSTART, FXMAT, FXMATPAR, MAS, DT, FXBOR, SMH, YASMH, TAB1, NSEG, NPOIN, NPTFR, GLOSEG, SIZGLO, MESH, MSK, MASKPT, RAIN, PLUIE, FC, NELEM, IKLE, LIMTRA, KDIR, KDDL, FBOR, FSCEXP, TRAIN, NBOR, MINFC, MAXFC, SECU, OPT, WITHABS)
Definition: cflvf.f:10
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
subroutine tvf_2(F, FSTAR, FC, VOLU2D, UNSV2D, DT, FXBOR, FXBORPAR, FBOR, SMH, YASMH, FSCEXP, NPOIN, NPTFR, NBOR, LIMTRA, KDIR, KDDL, OPTSOU, HLIN, IOPT2, FLBORTRA, SURNIT, RAIN, PLUIE, TRAIN, PHI_I, TETAFCOR, MASS_BAL, MASSOU)
Definition: tvf_2.f:10
subroutine flux_ef_vf(FLOW, PHIEL, NSEG, NELEM, NELMAX, ELTSEG, ORISEG, IKLE, INIFLO, IOPT, FN, YAFLULIM, FLULIM, YAFLULIMEBE, FLULIMEBE)
Definition: flux_ef_vf.f:8
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
Definition: bief.f:3