The TELEMAC-MASCARET system  trunk
cvdftr.F
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE cvdftr
3 ! *****************
4 !
5  &(f,ftild,fn,fscexp,dift,iconvf,conv,
6  & h,hn,hprop,uconv,vconv,dm1,zconv,solsys,
7  & visc,visc_s,sm,smh,yasmh,smi,yasmi,am1,am2,
8  & zf,fbor,afbor,bfbor,limtra,masktr,mesh,tb,
9  & t1,t2,t4,t10,te1,te2,te3,kdir,kddl,dt,entet,
10  & tetat,agglot,infogt,bilan,optadv,
11  & isousi,opdtra,optban,msk,maskel,maskpt,mbor,
12  & s,massou,optsou,slvtra,flbor,volu2d,v2dpar,unsv2d,optvf,flbortra,
13  & flulim,yaflulim,flulimebe,yaflulimebe,dirflu,rain,pluie,train,
14  & given_flux,flux_given,maxadv,tb2,nco_dist,nsp_dist)
15 !
16 !***********************************************************************
17 ! BIEF V7P3
18 !***********************************************************************
19 !
20 !brief DIFFUSION, ADVECTION AND SOURCE TERMS FOR A TRACER.
21 !code
22 !+ THE EQUATION SOLVED IS :
23 !+
24 !+
25 !+ N+1 TILD
26 !+ F 1 F + DT*SM
27 !+ --------- - --- DIV ( H VISC * GRAD ( F )) = ____________
28 !+ DT H DT
29 !+
30 !+ N+1
31 !+ + SOURCES + SMI * F
32 !+ ___
33 !+ H
34 !+
35 !+ WITH : N+1 TILD N
36 !+ F ,F ,F = DIFFUSED FUNCTION
37 !+ VISC = TURBULENT VISCOSITY
38 !+ SM = SECOND MEMBER (SOURCE TERMS)
39 !+ TETAT = IMPLICITATION COEFFICIENT
40 !+ DT = TIME STEP
41 !+ N+1 N
42 !+ F = TETAT F + (1-TETAT) * F
43 !+ SMI = IMPLICIT SOURCE TERM
44 !+
45 !+
46 !+ TILD N
47 !+ DISTINGUISHES F FROM F IN CASE A FRACTIONAL STEPS METHOD
48 !+
49 !+ HAD BEEN PREVIOUSLY PERFORMED (ADVECTION FOR EXAMPLE) GIVING
50 !+
51 !+ TILD N
52 !+ F FROM F
53 !+
54 !+-----------------------------------------------------------------------
55 !+
56 !+ BOUNDARY CONDITIONS :
57 !+
58 !+ ==> NEUMANN CONDITION
59 !+
60 !+ VISC DF/DN = AFBOR . F + BFBOR
61 !+
62 !+
63 !+ ==> DIRICHLET CONDITION
64 !+
65 !+ TREATED BY MODIFICATION OF THE EQUATIONS IN THE
66 !+ SUBROUTINE DIRICH
67 !
68 !note JMH : W IS NOT USED.
69 !
70 !warning MATDIF DOES NOT GIVE THE DIFFUSION MATRIX. IT MISSES THE
71 !+ BOUNDARY TERMS AND THERE IS A MINUS SIGN WHICH IS TAKEN
72 !+ INTO ACCOUNT HERE
73 !warning AFBOR AND BFBOR MUST BE 0 FOR THE BOUNDARY ELEMENTS
74 !+ WITH NO FRICTION
75 !warning BEWARE DISCRETISATION OF VISC
76 !
77 !history JMH
78 !+ 27/02/2009
79 !+
80 !+ CALLS CVTFVF_POS, OPTION 14
81 !
82 !history J-M HERVOUET (LNHE) ; C MOULIN (LNH)
83 !+ 29/12/2009
84 !+ V6P0
85 !+
86 !
87 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
88 !+ 13/07/2010
89 !+ V6P0
90 !+ Translation of French comments within the FORTRAN sources into
91 !+ English comments
92 !
93 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
94 !+ 21/08/2010
95 !+ V6P0
96 !+ Creation of DOXYGEN tags for automated documentation and
97 !+ cross-referencing of the FORTRAN sources
98 !
99 !history J-M HERVOUET (LNHE)
100 !+ 24/02/2012
101 !+ V6P2
102 !+ Rain and evaporation added (after initiative by O. Boutron, from
103 !+ Tour du Valat, and O. Bertrand, Artelia group)
104 !+
105 !history J-M HERVOUET (LNHE)
106 !+ 17/07/2012
107 !+ V6P2
108 !+ Mass balance programmed in case of implicit source term.
109 !+ Arguments GIVEN_FLUX and FLUX_GIVEN added.
110 !
111 !history J-M HERVOUET (LNHE)
112 !+ 09/04/2013
113 !+ V6P3
114 !+ DIMGLO=MESH%GLOSEG%DIM1 used in call to CVTRVF_POS. Strangely
115 !+ avoids an "array temporary created" with Intel compiler.
116 !
117 !history J-M HERVOUET (EDF LAB, LNHE)
118 !+ 01/04/2014
119 !+ V7P0
120 !+ Now written to enable different numbering of boundary points and
121 !+ boundary segments.
122 !+ OPTSUP changed into OPTADV for a more general use.
123 !
124 !history J-M HERVOUET (EDF LAB, LNHE)
125 !+ 16/05/2014
126 !+ V7P0
127 !+ Argument VOLU2D added for calling CVTRVF.
128 !
129 !history J-M HERVOUET (EDF LAB, LNHE)
130 !+ 30/09/2014
131 !+ V7P0
132 !+ Checking mass in case of implicit source terms SMI depends on the
133 !+ advection scheme, a section was added for distributive schemes.
134 !
135 !history J-M HERVOUET (EDF LAB, LNHE)
136 !+ 20/08/2015
137 !+ V7P1
138 !+ Adaptation to new subroutine cvtrvf with locally implicit
139 !+ predictor-corrector distributive schemes.
140 !
141 !history J-M HERVOUET (EDF LAB, LNHE)
142 !+ 20/11/2015
143 !+ V7P1
144 !+ Implicitation on diffusion forced to 1. with parameter TETATD. It
145 !+ should be a keyword but there is no reason so far to do an explicit
146 !+ diffusion.
147 !
148 !history J-M HERVOUET (EDF LAB, LNHE)
149 !+ 03/06/2016
150 !+ V7P2
151 !+ Adapting to new scheme ERIA, ADV_PSI_TF = 15. Computation of HPROP
152 !+ removed, HPROP must now be given and is not rebuilt with TETA,
153 !+ which was a mistake. Adding OPTADV in cvtrvf_pos.
154 !
155 !history J-M HERVOUET (EDF LAB, LNHE)
156 !+ 06/09/2016
157 !+ V7P2
158 !+ Splitting cvtrvf_pos into cvtrvf_nerd and cvtrvf_eria + cleaning.
159 !
160 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
161 !| AFBOR,BFBOR |-->| COEFFICIENTS OF NEUMANN CONDITION
162 !| | | VISC*DF/DN = AFBOR*F + BFBOR
163 !| | | GIVEN FOR EVERY BOUNDARY POINT
164 !| AGGLOT |-->| MASS-LUMPING COEFFICIENT FOR T.
165 !| AM1 |<->| MATRIX.
166 !| AM2 |<->| MATRIX.
167 !| BILAN |-->| LOGICAL, IF YES A BALANCE OF MASS EXCHANGES HAS
168 !| | | TO BE DONE.
169 !| CONV |-->| IF YES ADVECTION OF F
170 !| DIFT |-->| IF YES, DIFFUSION IS DONE
171 !| DIRFLU |-->| 1: PRIORITY TO DIRICHLET VALUES (CALL DIRICH DONE)
172 !| | | 2: PRIORITY TO FLUXES (CALL DIRICH NOT DONE)
173 !| DM1 |-->| THE PIECE-WISE CONSTANT PART OF ADVECTION FIELD
174 !| | | IS DM1*GRAD(ZCONV), SEE SOLSYS.
175 !| DT |-->| TIME STEP
176 !| ENTET |-->| LOGICAL, IF YES INFORMATION IS GIVEN ON MASS
177 !| | | CONSERVATION.
178 !| F |<--| F AT TIME T(N+1)
179 !| FBOR |-->| DIRICHLET CONDITIONS ON F.
180 !| FLBOR |-->| FLUXES AT BOUNDARIES
181 !| FLBORTRA |<->| TRACER FLUXES AT BOUNDARIES
182 !| FLUX_GIVEN |-->| IF GIVEN_FLUX=YES, THE FLUX IS GIVEN IN
183 !| | | GIVEN_FLUX
184 !| FN |-->| F AT TIME T(N)
185 !| FSCEXP |-->| EXPLICIT PART OF THE SOURCE TERM
186 !| | | EQUAL TO ZERO EVERYWHERE BUT ON SOURCES
187 !| | | WHERE THERE IS FSCE - (1-TETAT) FN
188 !| | | SEE DIFSOU
189 !| FTILD |-->| F AFTER ADVECTION
190 !| GIVEN_FLUX |-->| IF GIVEN_FLUX=YES, THE FLUX IS GIVEN IN
191 !| | | GIVEN_FLUX AND WILL NOT BE COMPUTED HERE
192 !| HPROP |-->| WORK ARRAY
193 !| ICONVF |-->| OPTION FOR ADVECTION TERMS
194 !| | | ICONVF = 1 : CHARACTERISTICS.
195 !| | | ICONVF = 2 : S.U.P.G.
196 !| | | ICONVF = 3 : CONSERVATIVE FINITE VOLUMES
197 !| | | ICONVF = 4 : IDEM
198 !| | | ICONVF = 6 : NON CONSERVATIVE PSI SCHEME.
199 !| | | ICONVF = 7 : NON CONSERVATIVE N SCHEME.
200 !| | | ICONVF =13 : EDGE BY EDGE FORM OF 3
201 !| | | ICONVF =14 : IDEM
202 !| INFOGT |-->| LOGICAL, IF YES INFORMATION ON SOLVER WILL BE
203 !| | | PRINTED.
204 !| ISOUSI |-->| SUB-ITERATION NUMBER
205 !| KDDL |-->| CONVENTION FOR DEGREE OF FREEDOM
206 !| KDIR |-->| CONVENTION FOR DIRICHLET POINT
207 !| KENT |-->| CONVENTION FOR INFLOW POINT
208 !| LIMTRA |-->| BOUNDARY CONDITIONS ON BOUNDARY POINTS
209 !| MASKEL |-->| MASKING OF ELEMENTS
210 !| | | =1. : NORMAL =0. : MASKED ELEMENT
211 !| MASKPT |-->| MASKING PER POINT.
212 !| MASSOU |-->| MASS OF TRACER ADDED BY SOURCE TERM
213 !| | | SEE DIFSOU
214 !| MAXADV |-->| MAXIMUM NUMBER OF ITERATIONS OF ADVECTION SCHEMES
215 !| MBOR |-->| BOUNDARY MATRIX
216 !| MESH |-->| MESH STRUCTURE
217 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
218 !| NCO_DIST |-->| NUMBER OF CORRECTIONS OF DISTRIBUTIVE SCHEMES
219 !| NSP_DIST |-->| NUMBER OF SUB-STEPS OF DISTRIBUTIVE SCHEMES
220 !| OPDTRA |-->| OPTION FOR THE DIFFUSION OF TRACERS
221 !| OPTADV |-->| ADVECTION SCHEME OPTION, THE MEANING DEPENDS ON
222 !| | | THE SCHEME. IF SCHEME IS SUPG:
223 !| | | 0: NO SUPG UPWIND
224 !| | | 1: CLASSIC SUPG
225 !| | | 2: MODIFIED SUPG
226 !| | | IF SCHEME IS PSI:
227 !| | | 1: EXPLICIT
228 !| | | 2: PREDICTOR-CORRECTOR
229 !| | | 3: SECOND ORDER PREDICTOR-CORRECTOR
230 !| | | 4: LOCALLY IMPLICIT
231 !| OPTBAN |-->| OPTION FOR THE TREATMENT OF TIDAL FLATS
232 !| | | 1:NORMAL 2:WITH MASKING
233 !| OPTSOU |-->| TYPE OF SOURCES
234 !| | | 1: NORMAL
235 !| | | 2: DIRAC
236 !| OPTVF |-->| OPTIONS FOR FINITE VOLUMES (SEE CVTRVF)
237 !| PLUIE |-->| RAIN OR EVAPORATION, IN M/S
238 !| RAIN |-->| IF YES: RAIN OR EVAPORATION
239 !| S |-->| VOID STRUCTURE
240 !| SLVTRA |-->| SOLVER CONFIGURATION (SLVCFG) STRUCTURE
241 !| | | CONTAINING DATA FOR CALLING SOLVE
242 !| SM |-->| SOURCE TERMS.
243 !| SMH |-->| SOURCE TERM IN CONTINUITY EQUATION
244 !| SMI |-->| IMPLICIT SOURCE TERM
245 !| SOLSYS |-->| 1 OR 2. IF 2 ADVECTION FIELD IS UCONV + DM1*GRAD(ZCONV)
246 !| T1 |<->| WORK BIEF_OBJ STRUCTURE
247 !| T10 |<->| WORK BIEF_OBJ STRUCTURE
248 !| T2 |<->| WORK BIEF_OBJ STRUCTURE
249 !| T4 |<->| WORK BIEF_OBJ STRUCTURE
250 !| TB |<->| BLOCK OF WORK BIEF_OBJ STRUCTURES (CONTAINS T1,...)
251 !| TB2 |<->| SECOND BLOCK OF WORK BIEF_OBJ STRUCTURES
252 !| | | FOR IMPLICIT SCHEMES ONLY
253 !| TE1,TE2,TE3 |<->| WORK BIEF_OBJ STRUCTURE FOR ELEMENTS
254 !| TETAT |-->| IMPLICITATION COEFFICIENT OF ADVECTION
255 !| TRAIN |-->| VALUE OF TRACER IN THE RAIN
256 !| UCONV,VCONV |-->| ADVECTION VELOCITY FIELD
257 !| UNSV2D |-->| =1/V2DPAR
258 !| VOLU2D |-->| INTEGRAL OF TEST FUNCTIONS (NOT ASSEMBLED IN PARALLEL)
259 !| V2DPAR |-->| INTEGRAL OF TEST FUNCTIONS (ASSEMBLED IN PARALLEL)
260 !| VISC |-->| VISCOSITY COEFFICIENTS ALONG X,Y AND Z .
261 !| | | IF P0 : PER ELEMENT
262 !| | | IF P1 : PER POINT
263 !| VISC_S |<->| WORK ARRAY FOR SAVING VISC
264 !| YASMH |-->| IF YES SMH TAKEN INTO ACCOUNT
265 !| YASMI |-->| IF YES SMI TAKEN INTO ACCOUNT
266 !| ZCONV |-->| THE PIECE-WISE CONSTANT PART OF ADVECTION FIELD
267 !| | | IS DM1*GRAD(ZCONV), SEE SOLSYS.
268 !| ZF |-->| BOTTOM ELEVATION.
269 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270 !
271  USE bief, ex_cvdftr => cvdftr
274  & adv_lpo,adv_nsc_tf,adv_psi_tf,adv_lpo_tf,adv_void
275 !
277  IMPLICIT NONE
278 !
279 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
280 !
281  INTEGER, INTENT(IN) :: ICONVF,ISOUSI,OPTADV,OPDTRA
282  INTEGER, INTENT(IN) :: OPTBAN,OPTSOU,KDIR,SOLSYS
283  INTEGER, INTENT(IN) :: KDDL,OPTVF,DIRFLU,MAXADV
284  INTEGER, INTENT(IN) :: NCO_DIST,NSP_DIST
285  DOUBLE PRECISION, INTENT(IN) :: TETAT,AGGLOT,DT,TRAIN
286  DOUBLE PRECISION, INTENT(INOUT) :: MASSOU
287  LOGICAL, INTENT(IN) :: INFOGT,BILAN,CONV,YASMH,RAIN
288  LOGICAL, INTENT(IN) :: DIFT,MSK,ENTET,YASMI,YAFLULIM
289  LOGICAL, INTENT(IN) :: FLUX_GIVEN,YAFLULIMEBE
290  TYPE(slvcfg), INTENT(INOUT) :: SLVTRA
291  TYPE(bief_obj), INTENT(IN) :: MASKEL,MASKPT,H,HN,AFBOR,BFBOR
292  TYPE(bief_obj), INTENT(IN), TARGET :: HPROP
293  TYPE(bief_obj), INTENT(INOUT) :: F,SM,FLBORTRA
294  TYPE(bief_obj), INTENT(IN) :: UCONV,VCONV,ZF
295  TYPE(bief_obj), INTENT(IN) :: FTILD,FN,SMI,FLULIM,PLUIE
296  TYPE(bief_obj), INTENT(IN) :: FLULIMEBE
297  TYPE(bief_obj), INTENT(INOUT) :: SMH,FBOR
298  TYPE(bief_obj), INTENT(INOUT) :: TE1,TE2,TE3
299  TYPE(bief_obj), INTENT(INOUT) :: T1,T2,T4
300  TYPE(bief_obj), INTENT(INOUT), TARGET :: T10
301  TYPE(bief_obj), INTENT(IN) :: FSCEXP,DM1,ZCONV
302  TYPE(bief_obj), INTENT(IN) :: S,V2DPAR,UNSV2D,VOLU2D
303  TYPE(bief_obj), INTENT(INOUT) :: FLBOR,LIMTRA
304  TYPE(bief_obj), INTENT(INOUT) :: VISC_S,VISC
305  TYPE(bief_obj), INTENT(INOUT) :: AM1,AM2,MBOR
306  TYPE(bief_obj), INTENT(INOUT) :: TB,TB2
307  TYPE(bief_obj), INTENT(IN) :: MASKTR,GIVEN_FLUX
308  TYPE(bief_mesh) :: MESH
309 !
310 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
311 !
312  DOUBLE PRECISION C,TETATD
313 !
314  INTEGER IELMF,IELMH,IELMS,MSKNEU,I,N,IOPT,DIMGLO
315 !
316  LOGICAL MSQ,FV_SCHEME
317 !
318  CHARACTER(LEN=16) FORMUL
319 !
320  TYPE(bief_obj), POINTER :: HPR
321 !
322 !-----------------------------------------------------------------------
323 !
324 ! HARDCODED IMPLICITATION COEFFICIENT FOR DIFFUSION
325 ! WAITING FOR A KEYWORD... BUT NO REAL INTEREST TO HAVE AN
326 ! EXPLICIT FORM, EXCEPT TO AVOID A LINEAR SYSTEM...
327 !
328  tetatd=1.d0
329 !
330 !-----------------------------------------------------------------------
331 !
332  ielmf = f%ELM
333  ielmh = h%ELM
334  ielms = sm%ELM
335  dimglo=mesh%GLOSEG%DIM1
336 !
337 !-----------------------------------------------------------------------
338 !
339 ! IS IT A FINITE VOLUME SCHEME FOR ADVECTION ?
340 !
341  fv_scheme=.false.
342  IF( iconvf.EQ.adv_lpo.OR.iconvf.EQ.adv_lpo_tf.OR.
343  & iconvf.EQ.adv_nsc.OR.iconvf.EQ.adv_nsc_tf.OR.
344  & iconvf.EQ.adv_psi.OR.iconvf.EQ.adv_psi_tf ) THEN
345  fv_scheme=.true.
346  ENDIF
347 !
348 !-----------------------------------------------------------------------
349 !
350 ! CASE WHERE H AND T DON'T HAVE THE SAME DISCRETISATION
351 !
352  IF(ielmf.NE.ielms) THEN
353  CALL chgdis(sm ,ielms,ielmf,mesh)
354  ENDIF
355  IF(ielmf.NE.ielmh.AND.yasmh) THEN
356  CALL chgdis(smh ,ielmh,ielmf,mesh)
357  ENDIF
358 !
359 !
360 !-----------------------------------------------------------------------
361 !
362 ! HPROP IS THE DEPTH IN THE DIVERGENCE TERM IN THE CONTINUITY
363 ! EQUATION. IT IS REPLACED HERE BY POINTER HPR, IN CASE IT HAS
364 ! TO BE EXTENDED.
365 !
366  IF(ielmf.NE.ielmh) THEN
367  CALL os( 'X=Y ' , x=t10 , y=hprop )
368  CALL chgdis(t10,ielmh,ielmf,mesh)
369  hpr=>t10
370  ELSE
371  hpr=>hprop
372  ENDIF
373 !
374 !-----------------------------------------------------------------------
375 !
376 ! INITIALISES THE VARIABLES
377 !
378 ! SOLUTION INITIALISED TO F AT TIME N
379  IF(isousi.EQ.1) CALL os( 'X=Y ' , x=f , y=fn )
380 !
381 !-----------------------------------------------------------------------
382 !
383 !-----------------------------------------------------------------------
384 ! IF SUPG, BUILDS THE SEMI-IMPLICIT MATRIX + SUPG IN AM2
385 !
386  IF(iconvf.EQ.adv_sup.AND.conv) THEN
387 !
388 ! TERM IN U.GRAD(T) CENTERED:
389 !
390  CALL matrix(am2,'M=N ','MATVGR ',ielmf,ielmf,
391  & 1.d0,s,s,s,uconv,vconv,s,
392  & mesh,msk,maskel)
393 !
394 ! ADDS SUPG CONTRIBUTION TO AM2
395 !
396  IF(optadv.EQ.1) THEN
397 ! CLASSICAL SUPG
398  CALL ksupg(te1,te2,1.d0,uconv,vconv,mesh)
399  CALL matrix(am2,'M=M+N ','MASUPG ',ielmf,ielmf,
400  & 1.d0,te1,te2,s,uconv,vconv,s,mesh,msk,maskel)
401 !
402  ELSEIF(optadv.EQ.2) THEN
403 ! MODIFIED SUPG
404  CALL matrix(am2,'M=M+N ','MAUGUG ',ielmf,ielmf,
405  & 0.5d0*dt,s,s,s,uconv,vconv,s,mesh,msk,maskel)
406  ELSEIF(optadv.NE.0) THEN
407  WRITE(lu,*) 'CVDFTR: UNKNOWN OPTION FOR SUPG =',optadv
408  CALL plante(1)
409  stop
410  ENDIF
411 !
412  ENDIF
413 !
414 !-----------------------------------------------------------------------
415 !
416 ! COMPUTES AM1: MASS MATRIX MULTIPLIED BY 1/DT
417 !
418  IF(dift.OR..NOT.fv_scheme.OR..NOT.conv.OR.bilan) THEN
419 !
420  IF(optban.EQ.1.OR.optban.EQ.3) THEN
421  CALL os('X=Y+Z ',x=t2,y=zf,z=hn)
422  CALL decvrt(te3,t2,zf,mesh)
423 ! MASS MATRIX LOCALLY LUMPED ON THE TIDAL FLATS
424  formul='MSLUMP '
425 ! WILL USE MSQ TO MASK THE DIFFUSION
426  msq=.true.
427  IF(msk) CALL os('X=XY ',x=te3,y=maskel)
428  ELSE
429 ! NORMAL MASS MATRIX
430  formul='MATMAS '
431 ! MASK FOR THE DIFFUSION = MASKEL
432  IF(msk) CALL os('X=Y ',x=te3,y=maskel)
433  msq=msk
434  ENDIF
435  CALL matrix(am1,'M=N ',formul,ielmf,ielmf,
436  & 1.d0/dt,te3,s,s,s,s,s,mesh,msk,maskel)
437 !
438 ! POSSIBLE MASS-LUMPING
439 !
440  IF(agglot.GT.0.001d0) THEN
441  CALL lump(t1,am1,mesh,agglot)
442  CALL om('M=CM ', m=am1, c=1.d0-agglot, mesh=mesh)
443  CALL om('M=M+D ', m=am1, d=t1, mesh=mesh)
444  ENDIF
445 !
446  ENDIF
447 !
448 !-----------------------------------------------------------------------
449 !
450 !
451 !-----------------------------------------------------------------------
452 !
453 ! COMPUTES THE SECOND MEMBERS
454 !
455 ! COMPUTES DT * SM IN T2
456 !
457 ! CVTRVF AND CVTRVF_POS WILL TREAT SM IN A DIFFERENT WAY
458 !
459  IF(.NOT.fv_scheme) THEN
460  CALL os( 'X=CY ' , x=t2 , y=sm , c=dt )
461  ENDIF
462 !
463 !=======================================================================
464 ! TREATS THE VARIOUS TYPES OF ADVECTION:
465 !-----------------------------------------------------------------------
466 !
467  IF(iconvf.EQ.adv_car.OR..NOT.conv) THEN
468 !
469  CALL os( 'X=X+Y ' , x=t2 , y=ftild )
470  CALL matvec( 'X=AY ',sm,am1,t2,c,mesh)
471 !
472 !-----------------------------------------------------------------------
473 !
474  ELSEIF(iconvf.EQ.adv_sup.AND.conv) THEN
475 !
476 ! AM1 MADE NONSYMMETRICAL IF IT WAS NOT ALREADY
477 !
478  IF(am1%TYPEXT.NE.'Q') THEN
479  CALL om('M=X(M) ', m=am1, mesh=mesh)
480  ENDIF
481 !
482 ! SUPG CONTRIBUTION TO THE MASS MATRIX
483 !
484  IF(optadv.EQ.1) THEN
485 ! CLASSICAL SUPG
486 ! TE1 AND TE2 ALREADY COMPUTED
487  CALL matrix(am1,'M=M+TN ','MATVGR ',ielmf,ielmf,
488  & 1.d0/dt,s,s,s,te1,te2,s,mesh,msk,maskel)
489 !
490  ELSEIF(optadv.EQ.2) THEN
491 ! MODIFIED SUPG
492  CALL matrix(am1,'M=M+TN ','MATVGR ',ielmf,ielmf,
493  & 0.5d0,s,s,s,uconv,vconv,s,mesh,msk,maskel)
494  ELSEIF(optadv.NE.0) THEN
495  WRITE(lu,*) 'CVDFTR: UNKNOWN OPTION FOR SUPG =',optadv
496  CALL plante(1)
497  stop
498  ENDIF
499 !
500 ! END OF THE SUPG CONTRIBUTION TO THE MASS MATRIX
501 !
502  CALL os( 'X=X+Y ' , x=t2 , y=fn )
503  CALL matvec( 'X=AY ',sm,am1,t2,c,mesh)
504 !
505 ! EXPLICIT ADVECTION TERM:
506 !
507  CALL matvec( 'X=X+CAY ',sm,am2,fn,tetat-1.d0,mesh)
508 !
509 ! ADDS THE IMPLICIT ADVECTION PART IN AM2 TO AM1
510 !
511  CALL om('M=M+CN ', m=am1, n=am2, c=tetat, mesh=mesh)
512 !
513 !-----------------------------------------------------------------------
514 !
515  ELSEIF( (iconvf.EQ.adv_lpo.OR.
516  & iconvf.EQ.adv_nsc.OR.
517  & iconvf.EQ.adv_psi ).AND.conv ) THEN
518 !
519 ! CONSERVATIVE EQUATION, DISTRIBUTIVE SCHEMES (LEO POSTMA, N AND PSI)
520 ! LEO POSTMA AND N-SCHEME ARE THE SAME IN 2D
521 !
522 ! TO BE REMOVED WHEN ALL CALLS TO CVDFTR ARE CHECKED
523 ! OPTVF SHOULD BE 0 (VELOCITY FIELD OBEYS THE CONTINUITY EQUATION)
524 ! OR 10 (VELOCITY FIELD DOES NOT OBEY THE CONTINUITY EQUATION)
525  iopt=10*(optvf/10)
526 ! OPTION TO DISTRIBUTE THE FLUXES (HERE 2 OR 3)
527  IF(iconvf.EQ.adv_lpo) iopt=iopt+2
528  IF(iconvf.EQ.adv_nsc) iopt=iopt+2
529  IF(iconvf.EQ.adv_psi) iopt=iopt+3
530 !
531  IF(tb%N.LT.22) THEN
532  WRITE(lu,*) 'SIZE OF TB TOO SMALL IN CVDFTR'
533  CALL plante(1)
534  stop
535  ENDIF
536  CALL cvtrvf(f,fn,fscexp,h,hn,hprop,uconv,vconv,
537  & dm1,zconv,solsys,sm,smh,yasmh,smi,yasmi,
538  & fbor,masktr,mesh,agglot,dt,entet,
539  & msk,maskel,s,massou,optsou,
540 ! YAFLBOR
541  & limtra%I,kdir,kddl,mesh%NPTFR,flbor,.true.,
542  & volu2d,v2dpar,unsv2d,iopt,flbortra,maskpt,
543  & rain,pluie,train,optadv,tb,12,am2,tb2,
544  & nco_dist,nsp_dist,yaflulim,flulim%R,
545  & yaflulimebe,flulimebe%R,slvtra)
546 ! IF EXITS AT THIS POINT, THE DIRICHLET ARE NOT DONE, ALSO WORKS
547 ! CAN THEN CHECK THE MASS CONSERVATION EXACTLY
548  IF(.NOT.dift) RETURN
549  CALL matvec( 'X=AY ',sm,am1,f,c,mesh)
550 !
551 !-----------------------------------------------------------------------
552 !
553  ELSEIF( (iconvf.EQ.adv_lpo_tf.OR.
554  & iconvf.EQ.adv_nsc_tf.OR.
555  & iconvf.EQ.adv_psi_tf ).AND.conv ) THEN
556 !
557 ! SCHEMES NERD OR ERIA, FOR TIDAL FLATS
558 ! LEO POSTMA AND N-SCHEME ARE THE SAME IN 2D
559 !
560 ! OPTION TO DISTRIBUTE THE FLUXES (HERE 2 OR 3 AND 12 OR 13)
561  iopt=10*(optvf/10)
562  IF(tb%N.LT.20) THEN
563  WRITE(lu,*) 'SIZE OF TB TOO SMALL IN CVDFTR'
564  WRITE(lu,*) 'FOR CALLING CVTRVF_NERD AND CVTRVF_ERIA'
565  CALL plante(1)
566  stop
567  ENDIF
568  IF(iconvf.EQ.adv_lpo_tf.OR.
569  & iconvf.EQ.adv_nsc_tf) THEN
570 !
571 ! NERD
572  iopt=iopt+2
573  CALL cvtrvf_nerd(f,fn,fscexp,h,hn,hprop,uconv,vconv,
574  & dm1,zconv,solsys,sm,smh,yasmh,smi,yasmi,
575  & fbor,masktr,mesh,
576  & tb%ADR(13)%P,tb%ADR(14)%P,tb%ADR(15)%P,
577  & tb%ADR(16)%P,tb%ADR(17)%P,tb%ADR(18)%P,
578  & tb%ADR(19)%P,tb%ADR(20)%P,
579  & dt,entet,msk,maskel,optsou,
580 ! YAFLBOR
581  & limtra%I,kdir,kddl,mesh%NPTFR,flbor,.true.,
582  & unsv2d,iopt,flbortra,
583  & mesh%GLOSEG%I( 1: dimglo),
584  & mesh%GLOSEG%I(dimglo+1:2*dimglo),
585  & mesh%NBOR%I,flulim%R,yaflulim,rain,pluie,
586  & train,given_flux,flux_given,maxadv)
587 !
588  ELSEIF(iconvf.EQ.adv_psi_tf) THEN
589 !
590 ! ERIA
591  iopt=iopt+3
592  CALL cvtrvf_eria(f,fn,fscexp,h,hn,hprop,uconv,vconv,
593  & dm1,zconv,solsys,sm,smh,yasmh,smi,yasmi,
594  & fbor,masktr,mesh,
595  & tb%ADR(13)%P,tb%ADR(14)%P,tb%ADR(15)%P,
596  & tb%ADR(16)%P,tb%ADR(17)%P,tb%ADR(18)%P,
597  & tb%ADR(19)%P,tb%ADR(20)%P,
598  & dt,entet,msk,maskel,optsou,
599 ! YAFLBOR
600  & limtra%I,kdir,kddl,mesh%NPTFR,flbor,.true.,
601  & unsv2d,iopt,flbortra,
602  & mesh%NBOR%I,rain,pluie,
603  & train,maxadv,nco_dist,optadv)
604 !
605  ENDIF
606 !
607 
608 ! IF EXITS AT THIS POINT, THE DIRICHLET ARE NOT DONE, ALSO WORKS
609 ! CAN THEN CHECK THE MASS CONSERVATION EXACTLY
610  IF(.NOT.dift) RETURN
611  CALL matvec( 'X=AY ',sm,am1,f,c,mesh)
612 !
613 !-----------------------------------------------------------------------
614 !
615  ELSEIF( iconvf.EQ.adv_void.AND.conv ) THEN
616 !
617  CALL os( 'X=Y ' , x=f, y=fn)
618  CALL os( 'X=X+Y ' , x=t2 , y=fn )
619  CALL matvec( 'X=AY ',sm,am1,t2,c,mesh)
620 !
621 !-----------------------------------------------------------------------
622 !
623  ELSE
624  WRITE(lu,*) 'CVDFTR: UNKNOWN ADVECTION OPTION : ',iconvf
625  CALL plante(1)
626  stop
627 !
628 !-----------------------------------------------------------------------
629 !
630  ENDIF
631 !
632 ! END OF TREATMENT OF THE VARIOUS TYPES OF ADVECTION:
633 !=======================================================================
634 !
635 ! COMPUTES THE MATRICES
636 !
637 !-----------------------------------------------------------------------
638 ! COMPUTES AM2 : - DIFFUSION MATRIX, AND BOUNDARY TERMS
639 !
640  IF(dift) THEN
641 !
642  IF(opdtra.EQ.2) THEN
643 ! SAVES THE DIFFUSION
644  CALL os('X=Y ',x=visc_s,y=visc)
645 ! MULTIPLIES THE DIFFUSION BY HPROP
646  CALL ov_2('X=XY ',visc%R,1,hpr%R,1,hpr%R,1,c,
647  & visc%MAXDIM1,visc%DIM1)
648  IF(visc%DIM2.EQ.3) THEN
649  CALL ov_2('X=XY ',visc%R,2,hpr%R,1,hpr%R,1,c,
650  & visc%MAXDIM1,visc%DIM1)
651  CALL ov_2('X=XY ',visc%R,3,hpr%R,1,hpr%R,1,c,
652  & visc%MAXDIM1,visc%DIM1)
653  ENDIF
654  ENDIF
655 !
656 ! COMPUTES THE DIFFUSION MATRIX (OPTION WITH MONOTONICITY)
657 !
658  CALL matrix(am2,'M=N ','MATDIF MON',ielmf,ielmf,
659  & 1.d0,s,s,s,visc,s,s,mesh,msq,te3)
660 !
661  IF(opdtra.EQ.2) THEN
662 ! MULTIPLIES THE MATRIX BY 1/HPROP
663  CALL os( 'X=1/Y ',x=t4,y=hpr,
664  & iopt=2,infini=0.d0,zero=1.d-2)
665  CALL om('M=X(M) ', m=am2, mesh=mesh )
666  CALL om('M=DM ', m=am2, d=t4, mesh=mesh)
667 ! RETURNS THE DIFFUSION
668  CALL os('X=Y ',x=visc,y=visc_s)
669  ENDIF
670 !
671 ! TAKES THE BOUNDARY TERMS INTO ACCOUNT IN THE DIFFUSION MATRIX
672 !
673  mskneu=3
674 !
675  IF(mesh%NELEB.GT.0) THEN
676  CALL matrix(mbor,'M=N ','FMATMA ',
677  & ielbor(ielmf,1),ielbor(ielmf,1),
678  & -1.d0,afbor,s,s,s,s,s,
679  & mesh,.true.,masktr%ADR(mskneu)%P)
680  CALL om('M=M+N ', m=am2, n=mbor, mesh=mesh)
681  ENDIF
682 !
683 ! DIFFUSION TERMS
684 !
685  IF(am1%TYPEXT.NE.'Q'.AND.am2%TYPEXT.EQ.'Q') THEN
686  CALL om('M=X(M) ', m=am1, mesh=mesh)
687  ENDIF
688 !
689  IF(tetatd.NE.1.d0) THEN
690 ! EXPLICIT DIFFUSION TERM
691  CALL matvec( 'X=AY ',t1,am2,fn,c,mesh)
692  CALL os( 'X=X+CY ' , x=sm , y=t1 , c=tetatd-1.d0 )
693 ! IMPLICIT DIFFUSION TERM ( AM1 + TETAT * AM2 )
694  CALL om('M=M+CN ', m=am1, n=am2, c=tetatd, mesh=mesh)
695  ELSE
696 ! IMPLICIT DIFFUSION TERM ( AM1 + AM2 )
697  CALL om('M=M+N ', m=am1, n=am2, mesh=mesh)
698  ENDIF
699 !
700 ! BOUNDARY STRESS TERMS
701 !
702  CALL vector(t2,'=','MASVEC ',ielbor(ielmf,1),
703  & 1.d0,bfbor,s,s,s,s,s,mesh,
704  & .true.,masktr%ADR(mskneu)%P)
705  CALL osdb( 'X=X+Y ' , sm , t2 , t2 , c , mesh )
706 !
707  ENDIF
708 !
709 !-----------------------------------------------------------------------
710 !
711 ! IMPLICIT AND EXPLICIT TERM DUE TO THE SOURCES:
712 !
713  IF(yasmh.AND..NOT.(fv_scheme.AND.conv)) THEN
714 !
715  IF(optsou.EQ.1) THEN
716  CALL vector(t2,'=','MASVEC ',ielmf,
717  & 1.d0,smh,s,s,s,s,s,mesh,msk,maskel)
718  CALL os('X=Y/Z ',x=t1,y=t2,z=hpr,
719  & iopt=2,infini=0.d0,zero=1.d-3)
720 ! IMPLICIT PART OF THE POINT SOURCE TERM
721 ! - TETAT T 1/HPROP SUM ( SCE PSI D(OMEGA)
722  CALL os('X=CX ', x=t1 , c=tetat )
723  CALL om('M=M+D ', m=am1, d=t1, mesh=mesh)
724 ! PREPARES THE EXPLICIT PART
725  CALL os('X=YZ ', x=t1 , y=smh , z=fscexp)
726  CALL vector(t2,'=','MASVEC ',ielmf,
727  & 1.d0,t1,s,s,s,s,s,mesh,msk,maskel)
728  CALL os('X=Y/Z ',x=t1,y=t2,z=hpr,
729  & iopt=2,infini=0.d0,zero=1.d-3)
730  CALL os('X=X+Y ', x=sm , y=t1)
731  ELSEIF(optsou.EQ.2) THEN
732  CALL os('X=Y/Z ',x=t1,y=smh,z=hpr,
733  & iopt=2,infini=0.d0,zero=1.d-3)
734 ! EXPLICIT PART OF THE POINT SOURCE TERM
735 ! 1/HPROP (FSCE-(1-TETAT)FN) SMH
736  CALL os('X=X+YZ ', x=sm , y=t1 , z=fscexp)
737 ! IMPLICIT PART OF THE POINT SOURCE TERM
738 ! - TETAT T 1/HPROP SUM ( SCE PSI D(OMEGA)
739  CALL os('X=CX ', x=t1, c=tetat)
740  CALL om('M=M+D ', m=am1, d=t1, mesh=mesh)
741  ENDIF
742 !
743  ENDIF
744 !
745 ! IMPLICIT AND EXPLICIT TERM DUE TO RAIN AND EVAPORATION
746 !
747  IF(rain.AND..NOT.(fv_scheme.AND.conv)) THEN
748 !
749  CALL vector(t2,'=','MASVEC ',ielmf,
750  & 1.d0,pluie,s,s,s,s,s,mesh,msk,maskel)
751  CALL os('X=Y/Z ' ,x=t1,y=t2,z=hpr,
752  & iopt=2,infini=0.d0,zero=1.d-3)
753 ! IMPLICIT PART OF THE POINT SOURCE TERM
754 ! - TETAT T 1/HPROP SUM ( SCE PSI D(OMEGA)
755  CALL os('X=CX ',x=t1,c=tetat)
756  CALL om('M=M+D ', m=am1, d=t1, mesh=mesh)
757 ! PREPARES THE EXPLICIT PART
758  CALL os('X=CYZ ',x=t1,y=pluie,z=fn,c=tetat-1.d0)
759 ! VALUE OF TRACER IN RAIN CONSIDERED (ONLY EXPLICIT HENCE LIKE TETAT=0)
760  IF(abs(train).GT.1.d-15) THEN
761  DO i=1,fn%DIM1
762 ! ONLY REAL RAIN CONSIDERED, NOT EVAPORATION
763  t1%R(i)=t1%R(i)+max(pluie%R(i),0.d0)*train
764  ENDDO
765  ENDIF
766  CALL vector(t2,'=','MASVEC ',ielmf,
767  & 1.d0,t1,s,s,s,s,s,mesh,msk,maskel)
768  CALL os('X=Y/Z ',x=t1,y=t2,z=hpr,
769  & iopt=2,infini=0.d0,zero=1.d-3)
770  CALL os('X=X+Y ',x=sm,y=t1)
771 !
772  ENDIF
773 !
774 ! IMPLICIT TERM IF THERE IS ONE :
775 !
776 ! THE TREATMENT BELOW ENSURES THAT IF THE EXPLICIT SOURCE TERM
777 ! IS IN THE FORM K*FN/H AND SMI EQUALS -K THEN THE TWO TERMS
778 ! WILL BE BALANCED (CASE OF EROSION AND DEPOSITION)
779 !
780 ! FV_SCHEME : IMPLICIT SOURCE TERM HAS BEEN TREATED
781 ! AND WILL NOT BE DONE TWICE
782  IF(yasmi.AND..NOT.(fv_scheme.AND.conv)) THEN
783  CALL matrix(am2,'M=N ','MATMAS ',ielmf,ielmf,
784  & -1.d0,s,s,s,s,s,s,mesh,msk,maskel)
785 ! POSSIBLE MASS-LUMPING
786  IF(agglot.GT.0.001d0) THEN
787  CALL lump(t1,am2,mesh,agglot)
788  CALL om('M=CM ', m=am2, c=1.d0-agglot, mesh=mesh)
789  CALL om('M=M+D ', m=am2, d=t1, mesh=mesh)
790  ENDIF
791 ! COMPUTES SMI/H (DOES NOT CHECK IF H SIZE IS SUFFICIENT!!)
792  IF(optban.GT.0) THEN
793 ! DIVIDES BY H WITH HARD-CODED CLIPPING AT 1.D-4
794  CALL cpstvc(smi,t4)
795  DO i=1,smi%DIM1
796  t4%R(i)=smi%R(i)/max(h%R(i),1.d-4)
797  ENDDO
798  ELSE
799 ! DIVIDES WITHOUT CHECKING
800  CALL os( 'X=Y/Z ',x=t4,y=smi,z=h)
801  ENDIF
802  CALL om('M=X(M) ', m=am2, mesh=mesh)
803  CALL om('M=MD ', m=am2, d=t4, mesh=mesh)
804 ! ADDS TO MATRIX AM1
805  IF(am1%TYPEXT.NE.'Q') THEN
806  CALL om('M=X(M) ', m=am1, mesh=mesh)
807  ENDIF
808  CALL om('M=M+N ', m=am1, n=am2, mesh=mesh)
809  ENDIF
810 !
811 !-----------------------------------------------------------------------
812 !
813  IF(iconvf.EQ.adv_car.AND..NOT.dift) THEN
814  CALL os('X=Y ', x=f, y=ftild)
815  ENDIF
816 !
817 !-----------------------------------------------------------------------
818 !
819 ! BOUNDARY CONDITIONS (POINTS OF THE TYPE DIRICHLET)
820 !
821 ! DIRICHLET BOUNDARY CONDITIONS ARE TREATED IN A WEAK FORM BY
822 ! FINITE VOLUME SCHEMES, TO ENSURE THE CORRECT FLUX
823 ! THEN CALL DIRICH HERE WOULD SPOIL MASS CONSERVATION. HOWEVER
824 ! FORCING THE CALL IS ALLOWED IN THIS CASE WITH PARAMETER DIRFLU
825 !
826 !
827  IF(.NOT.fv_scheme.OR.dirflu.EQ.1) THEN
828  CALL dirich(f, am1, sm,fbor,limtra%I,tb,mesh,kdir,msk,maskpt)
829  ENDIF
830 !
831 !-----------------------------------------------------------------------
832 !
833 ! SOLVES THE LINEAR SYSTEM:
834 !
835 #if defined COMPAD
836  CALL ad_solve(f,am1,sm,tb,slvtra,infogt,mesh,am2)
837 !! NOT USED HERE
838 #else
839  CALL solve(f,am1,sm,tb,slvtra,infogt,mesh,am2)
840 !! NOT USED HERE
841 #endif
842 !
843 !-----------------------------------------------------------------------
844 !
845  IF(yasmi.AND.bilan) THEN
846  IF(yasmi.AND..NOT.(fv_scheme.AND.conv)) THEN
847 ! WE ASSUME HERE THAT AM2 HAS NOT BEEN DESTROYED IN
848 ! SOLVE (THIS WOULD BE THE CASE WITH SOME PRECONDITIONING
849 ! BUT IN THIS CASE AM2 COULD NOT BE USED BEFORE)
850  CALL matvec( 'X=AY ',t2,am2,f,c,mesh)
851  IF(ncsize.GT.1) THEN
852  CALL parcom(t2,2,mesh)
853  massou = massou - dt*p_dots(t2,hprop,mesh)
854  ELSE
855  massou = massou - dt*dots(t2,hprop)
856  ENDIF
857  ELSEIF(yasmi.AND.(fv_scheme.AND.conv)) THEN
858 ! THIS IS CONSISTENT WITH WHAT IS DONE
859 ! AT THE END OF CVTRVF_POS, FOR SCHEME 13 OR 14.
860  c=0.d0
861  DO i=1,smi%DIM1
862  c = c + dt*smi%R(i)*f%R(i)*volu2d%R(i)
863  ENDDO
864  IF(ncsize.GT.1) c=p_sum(c)
865  massou=massou+c
866  ENDIF
867  ENDIF
868 !
869 !-----------------------------------------------------------------------
870 !
871 ! COMPUTES THE TRACER FLUX AT THE BOUNDARY
872 !
873  IF(.NOT.fv_scheme) THEN
874  DO i=1,mesh%NPTFR
875  n=mesh%NBOR%I(i)
876  flbortra%R(i)=flbor%R(i)*(tetat*f%R(n)+(1.d0-tetat)*fn%R(n))
877  ENDDO
878 ! ELSE
879 ! FLBORTRA ALREADY COMPUTED
880  ENDIF
881 !
882 !-----------------------------------------------------------------------
883 !
884  IF(ielmf.NE.ielms) CALL chgdis(sm ,ielmf,ielms,mesh)
885  IF(ielmf.NE.ielmh.AND.yasmh) CALL chgdis(smh ,ielmf,ielmh,mesh)
886 !
887 !-----------------------------------------------------------------------
888 !
889  RETURN
890  END
subroutine ad_solve(X, A, B, TB, CFG, INFOGR, MESH, AUX)
Definition: ad_solve.F:33
integer, parameter adv_psi
integer, parameter adv_sup
subroutine solve(X, A, B, TB, CFG, INFOGR, MESH, AUX)
Definition: solve.f:7
subroutine chgdis(X, OLDELT, NEWELT, MESH)
Definition: chgdis.f:7
subroutine ov_2(OP, X, DIMX, Y, DIMY, Z, DIMZ, C, DIM1, NPOIN)
Definition: ov_2.f:7
subroutine om(OP, M, N, D, C, MESH)
Definition: om.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
integer, parameter adv_nsc
subroutine cvtrvf_eria(F, FN, FSCEXP, H, HN, HPROP, UDEL, VDEL, DM1, ZCONV, SOLSYS, SM, SMH, YASMH, SMI, YASMI, FBOR, MASKTR, MESH, T1, T2, T3, T4, T5, T6, T7, HT, DT, ENTET, MSK, MASKEL, OPTSOU, LIMTRA, KDIR, KDDL, NPTFR, FLBOR, YAFLBOR, UNSV2D, IOPT, FLBORTRA, NBOR, RAIN, PLUIE, TRAIN, NITMAX, NCO_DIST, OPTADV)
Definition: cvtrvf_eria.f:12
integer function ielbor(IELM, I)
Definition: ielbor.f:7
subroutine cvdftr(F, FTILD, FN, FSCEXP, DIFT, ICONVF, CONV, H, HN, HPROP, UCONV, VCONV, DM1, ZCONV, SOLSYS, VISC, VISC_S, SM, SMH, YASMH, SMI, YASMI, AM1, AM2, ZF, FBOR, AFBOR, BFBOR, LIMTRA, MASKTR, MESH, TB, T1, T2, T4, T10, TE1, TE2, TE3, KDIR, KDDL, DT, ENTET, TETAT, AGGLOT, INFOGT, BILAN, OPTADV, ISOUSI, OPDTRA, OPTBAN, MSK, MASKEL, MASKPT, MBOR, S, MASSOU, OPTSOU, SLVTRA, FLBOR, VOLU2D, V2DPAR, UNSV2D, OPTVF, FLBORTRA,
Definition: cvdftr.F:14
subroutine matrix(M, OP, FORMUL, IELM1, IELM2, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL)
Definition: matrix.f:7
double precision function dots(X, Y)
Definition: dots.f:7
subroutine dirich(F, S, SM, FBOR, LIMDIR, WORK, MESH, KDIR, MSK, MASKPT)
Definition: dirich.f:7
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 decvrt(TETA, SL, ZF, MESH)
Definition: decvrt.f:7
subroutine osdb(OP, X, Y, Z, C, MESH)
Definition: osdb.f:7
subroutine bilan(MESH, H, WORK, AT, DT, LT, NIT, INFO, MASSES, MSK, MASKEL, EQUA, POROSS, OPTBAN, NPTFR, FLBOR, FLUX_BOUNDARIES, NUMLIQ, NFRLIQ, GAMMA)
Definition: bilan.f:8
subroutine ksupg(KX, KY, XMUL, U, V, MESH)
Definition: ksupg.f:7
integer, parameter adv_car
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
subroutine cvtrvf_nerd(F, FN, FSCEXP, H, HN, HPROP, UDEL, VDEL, DM1, ZCONV, SOLSYS, SM, SMH, YASMH, SMI, YASMI, FBOR, MASKTR, MESH, T1, T2, T3, T4, T5, T6, T7, HT, DT, ENTET, MSK, MASKEL, OPTSOU, LIMTRA, KDIR, KDDL, NPTFR, FLBOR, YAFLBOR, UNSV2D, IOPT, FLBORTRA, GLOSEG1, GLOSEG2, NBOR, FLULIM, YAFLULIM, RAIN, PLUIE, TRAIN, GIVEN_FLUX, FLUX_GIVEN, NITMAX)
Definition: cvtrvf_nerd.f:13
subroutine matvec(OP, X, A, Y, C, MESH, LEGO)
Definition: matvec.f:7
double precision function p_dots(X, Y, MESH)
Definition: p_dots.f:7
subroutine lump(DIAG, A, MESH, XMUL)
Definition: lump.f:7
Definition: bief.f:3