The TELEMAC-MASCARET system  trunk
telemac3d.F
Go to the documentation of this file.
1 ! ********************
2  SUBROUTINE telemac3d
3 ! ********************
4 !
5  &(pass, nit_ori)
6 !
7 !***********************************************************************
8 ! TELEMAC3D V8P2
9 !***********************************************************************
10 !
11 !brief
12 !
13 !history JACEK A. JANKOWSKI PINXIT
14 !+ 01/03/1999
15 !+
16 !+ FORTRAN95 VERSION
17 !
18 !history J-M HERVOUET (LNHE)
19 !+ 05/05/2010
20 !+ V6P0
21 !+ K-OMEGA MODEL BY HOLGER WEILBEER (ISEB/UHA)
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !history J-M HERVOUET (LNHE)
36 !+ 02/08/2011
37 !+ V6P1
38 !+ CALL MITTIT(18,AT,LT) changed into CALL MITTIT(19,AT,LT)
39 !+ CALL MITTIT(19,AT,LT) changed into CALL MITTIT(20,AT,LT)
40 !+ 2 fractional steps were not correctly labelled in the listing
41 !
42 !history J-M HERVOUET (LNHE)
43 !+ 12/08/2011
44 !+ V6P2
45 !+ Calls to CHECK and BIL3D changed
46 !
47 !history J-M HERVOUET (LNHE)
48 !+ 02/04/2012
49 !+ V6P2
50 !+ Clean restart implemented.
51 !
52 !history J-M HERVOUET (LNHE)
53 !+ 01/06/2012
54 !+ V6P2
55 !+ Call to vector before call to Tel4del corrected (GRAZCO)
56 !+ Initialisation of TAN after call to condim.
57 !
58 !history J-M HERVOUET (LNHE)
59 !+ 18/129/2012
60 !+ V6P3
61 !+ Call to IFAB3DT added, arguments of cstkep removed.
62 !
63 !history J-M HERVOUET (LNHE)
64 !+ 25/01/2013
65 !+ V6P3
66 !+ TAN renamed TRN, copy of TRN on TA moved from after CONDIM to
67 !+ after BIEF_SUITE, FLULIM set to 1 before first call to PREADV
68 !
69 !history J-M HERVOUET (LNHE)
70 !+ 11/03/2013
71 !+ V6P3
72 !+ Call to METEO modified. Stop if variables not found for a 2D
73 !+ continuation.
74 !
75 !history R. KOPMANN (EDF R&D, LNHE)
76 !+ 16/04/2013
77 !+ V6P3
78 !+ Adding the file format in calls to FIND_IN_SEL.
79 !
80 !history J-M HERVOUET (LNHE)
81 !+ 18/03/2013
82 !+ V6P3
83 !+ Dealing with the newly created FILE FOR 2D CONTINUATION.
84 !
85 !history J-M HERVOUET (LNHE)
86 !+ 25/04/2013
87 !+ V6P3
88 !+ AKN and EPN initialised in case of computation continued, for the
89 !+ first call to PREADV.
90 !+ Mesh better updated in case of coupling with Sisyphe.
91 !
92 !history J-M HERVOUET (LNHE)
93 !+ 20/09/2013
94 !+ V6P3
95 !+ CALL PLANE_BOTTOM added at the beginning of time loop (otherwise
96 !+ when calling kepcl3 IPBOT is done with ZPROP at the first iteration
97 !+ and with Z for the others, while ZPROP is always sent as argument.
98 !+ This could trigger unexpected divisions by 0.
99 !
100 !history J-M HERVOUET (LNHE)
101 !+ 15/11/2013
102 !+ V6P3
103 !+ After second call to bief_suite, checking that Z has been found,
104 !+ otherwise stop
105 !
106 !history C. VILLARET & T. BENSON & D. KELLY (HR-WALLINGFORD)
107 !+ 27/02/2014
108 !+ V7P0
109 !+ New developments in sediment merged on 25/02/2014.
110 !
111 !history J-M HERVOUET (LNHE)
112 !+ 14/03/2014
113 !+ V7P0
114 !+ CALL BIL3D put out of the IF(S3D_SEDI) test. Address of depth-averaged
115 !+ tracers from 38 to 37+NTRAC in ALIRE2D.
116 !
117 !history J-M HERVOUET (EDF LAB, LNHE)
118 !+ 19/03/2014
119 !+ V7P0
120 !+ Boundary segments have now their own numbering, independent of
121 !+ boundary points numbering. Differents calls changed accordingly.
122 !
123 !history J-M HERVOUET (EDF LAB, LNHE)
124 !+ 02/05/2014
125 !+ V7P0
126 !+ Argument ZR added to FONVAS. S3D_HDEPupdated differently after calling
127 !+ Sisyphe, to avoid truncation errors that would give S3D_HDEP<0.
128 !
129 !history J-M HERVOUET (EDF LAB, LNHE)
130 !+ 31/07/2014
131 !+ V7P0
132 !+ Call to METEO moved just before the first call to FSGRAD, not just
133 !+ after (atmospheric pressure gradients now systematically added
134 !+ to free surface gradients).
135 !
136 !history C VILLARET (HRW+EDF) & J-M HERVOUET (EDF - LNHE)
137 !+ 18/09/2014
138 !+ V7P0
139 !+ Calls to sisyphe and wac chenged.
140 !
141 !history G. ANTOINE & M. JODEAU & J.M. HERVOUET (EDF - LNHE)
142 !+ 13/10/2014
143 !+ V7P0
144 !+ New developments in sediment for mixed sediment transport
145 !
146 !history R. ATA (EDF LAB, LNHE)
147 !+ 05/11/2014
148 !+ V7P0
149 !+ add optional variables to meteo in a sake of harmonization
150 !+ with telemac-2d
151 !
152 !history J-M HERVOUET (EDF LAB, LNHE)
153 !+ 31/03/2015
154 !+ V7P1
155 !+ Just a few extra debugger prints, up to CALL KEPINI, where was the
156 !+ last user bug I looked for.
157 !
158 !history Y AUDOUIN (LNHE)
159 !+ 25/05/2015
160 !+ V7P0
161 !+ Modification to comply with the hermes module
162 !
163 !history J-M HERVOUET (EDF LAB, LNHE)
164 !+ 26/06/2015
165 !+ V7P1
166 !+ 2D and 3D RESULT FILE can be optional. Tests for writing them added.
167 !
168 !history A. JOLY (EDF LAB, LNHE)
169 !+ 27/08/2015
170 !+ V7P1
171 !+ Imposed flowrates on the bed.
172 !
173 !history J-M HERVOUET (EDF LAB, LNHE)
174 !+ 21/01/2016
175 !+ V7P1
176 !+ Initial conditions of results file in restart mode were forgotten
177 !+ they are useless but now requested by the Hermes module...
178 !
179 !history J-M HERVOUET (EDF LAB, LNHE)
180 !+ 08/02/2016
181 !+ V7P2
182 !+ Adding the argument HPROP in the call to Sisyphe.
183 !
184 !history J-M HERVOUET (EDF LAB, LNHE)
185 !+ 24/03/2016
186 !+ V7P2
187 !+ Adapting to new CVDF3D, saving Z at time T(n) in ZN.
188 !
189 !history J-M HERVOUET (EDF LAB, LNHE)
190 !+ 27/05/2016
191 !+ V7P2
192 !+ Allowing k-epsilon model on a direction and not on the other.
193 !
194 !history J-M HERVOUET (EDF LAB, LNHE)
195 !+ 30/05/2016
196 !+ V7P2
197 !+ In a continued computation, K, Epsilon and the dynamic pressure
198 !+ must not be read if they are not necessary because their arrays
199 !+ are not allocated.
200 !
201 !history J-M HERVOUET (EDF LAB, LNHE)
202 !+ 22/08/2016
203 !+ V7P2
204 !+ Adding TB2 in the call to CVDF3D.
205 !
206 !history M.JODEAU (EDF LAB, LNHE)
207 !+ 08/2016
208 !+ V7P3
209 !+ Water quality: AED2 coupling
210 !
211 !history R. ATA (EDF LAB, LNHE)
212 !+ 12/01/2017
213 !+ V7P3
214 !+ Bug fix in the call of DERIVE: now zchar, nplan, transf are well
215 ! introduced
216 !
217 !history J,RIEHME (ADJOINTWARE)
218 !+ November 2016
219 !+ V7P2
220 !+ Replaced EXTERNAL statements to parallel functions / subroutines
221 !+ by the INTERFACE_PARALLEL
222 !
223 !history J-M HERVOUET (EDF LAB, LNHE)
224 !+ 11/09/2017
225 !+ V7P3
226 !+ Adding NELMAX2 in list of arguments of ifab3d, ifab3dt, TBORD,
227 !+ flux_ef_vf_3d and make_zconv.
228 !
229 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
230 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
231 !
232  USE bief
235  USE meteo_telemac !, ONLY: WINDX,WINDY,PATMOS,TAIR
237  USE oilspill
238  USE interface_telemac3d, ex_telemac3d => telemac3d
240  USE interface_sisyphe, ONLY: sisyphe
241  USE interface_gaia, ONLY: gaia_step
242  USE interface_tomawac, ONLY: wac
243  USE tel4del, ONLY: tel4delwaq
245  & xmvs0,num_isusp_icla,setdep
247  USE gotm_coupling
248 !
250  IMPLICIT NONE
251 !
252 !-----------------------------------------------------------------------
253 ! DECLARES LOCAL VARIABLES FOR TELEMAC3D
254 !-----------------------------------------------------------------------
255 !
256  INTEGER, INTENT(IN) :: PASS
257  INTEGER, INTENT(IN) :: NIT_ORI
258 !
259 !-----------------------------------------------------------------------
260 !
261  INTEGER ITRAC,ISOUSI,IPOIN
262  INTEGER SCHDVI_HOR,SCHDVI_VER,SCHCVI_HOR,SCHCVI_VER
263  INTEGER IBID,I,K,I3D,IP
264 !
265 !
266  DOUBLE PRECISION TETADIVER
267  DOUBLE PRECISION UMIN, UMAX, SIGMAU, VMIN, VMAX, SIGMAV
268  DOUBLE PRECISION WMIN, WMAX, SIGMAW
269  DOUBLE PRECISION TAMIN, TAMAX, SIGMTA,TETATRA
270 !
271  LOGICAL CLUMIN, CLUMAX, CLVMIN, CLVMAX, CLWMIN, CLWMAX
272  LOGICAL CTAMIN, CTAMAX, YASEM3D,YAS0U,YAS1U
273  LOGICAL CLKMIN, CLKMAX, CLEMIN, CLEMAX, CLNUMIN,CLNUMAX
274  LOGICAL YAWCHU,NEWDIF,LBID,LBID2,BC
275 !
276  CHARACTER(LEN=24), PARAMETER :: CODE1='TELEMAC3D '
277  CHARACTER(LEN=16) FORMUL
278 !
279  INTRINSIC mod
280 !
281  TYPE(slvcfg) :: SLVD
282 !
283  DOUBLE PRECISION, POINTER, DIMENSION(:) :: SAVEZ
284  DOUBLE PRECISION, POINTER, DIMENSION(:,:) :: FLUXBIL
285 
286  TYPE(bief_obj), POINTER :: MULTI1, MULTI2, MULTI3, MULTI4
287 !
288 !=======================================================================
289 !
290 !
291 ! TODO: temporary !!! Remove also in deall_telemac3d
292  IF(.NOT.inclus(coupling,'GAIA ').AND.pass.LE.0) THEN
293  isusp=1
294  setdep=-1
295  nsusp_tel=0
296 !
297  CALL allblo(fludp, 'FLUDP ')
298  CALL allblo(fludpt,'FLUDPT')
299  CALL allblo(fluer, 'FLUER ')
300 !
301  CALL bief_allvec_in_block(fludp,1,1,'FLUDP ',ielm2h,1,2,mesh2d)
302  CALL bief_allvec_in_block(fludpt,1,1,'FLUDPT',ielm2h,1,2,mesh2d)
303  CALL bief_allvec_in_block(fluer,1,1,'FLUER ',ielm2h,1,2,mesh2d)
304 !
305  ALLOCATE(num_isusp_icla(1))
306  num_isusp_icla(1)=1
307 !
308  ENDIF
309 ! temporary !!!
310 #if defined COMPAD
311  CALL ad_telemac3d_begin
312 #endif
313 !
314 ! READS TRACERS IN PREVIOUS FILES
315 !
316  IF(ntrac.GT.0) THEN
317  DO i=adr_trac,adr_trac+ntrac-1
318  alire3d(i)=1
319  ENDDO
321  alire2d(i)=1
322  ENDDO
323 !
324 ! THIS IS S3D_ESOMT...
325 ! IF(S3D_SEDI) ALIRE2D(37)=1
326 !
327  ENDIF
328 !
329 ! DO NOT READ K AND EPSILON IF NOT NECESSARY
330 !
331  IF(iturbh.NE.3.AND.iturbv.NE.3.AND.iturbv.NE.6.AND.
332  & iturbh.NE.7.AND.iturbv.NE.7) THEN
333  alire3d(8)=0
334  alire3d(9)=0
335  ENDIF
336 !
337 ! DO NOT READ DYNAMIC PRESSURE IF NOT NECESSARY
338 !
339  IF(.NOT.nonhyd) alire3d(12)=0
340 !
341 !=======================================================================
342 ! FOR DROGUES (CALLS TO FLOT3D WILL INCREASE OR DECREASE NFLOT)
343 !=======================================================================
344 !
345  nflot=0
346 !
347 !=======================================================================
348 ! FOR COMPUTING FLUXES OF ADVECTED VARIABLES
349 !=======================================================================
350 !
351 ! NO FLUX COMPUTED FOR U,V,W,K,EPSILON
352  DO i=1,5
353  calcflu(i)=.false.
354  ENDDO
355 ! DEPENDING ON BILMAS FOR TRACERS
356  IF(ntrac.GT.0) THEN
357  DO i=6,5+ntrac
358  calcflu(i)=bilmas
359  ENDDO
360  ENDIF
361 !
362 !=======================================================================
363 ! FOR TAKING INTO ACCOUNT RAIN IN ADVECTION OF VARIOUS VARIABLES
364 !=======================================================================
365 !
366 ! NO RAIN FOR U,V,W,K,EPSILON
367  DO i=1,5
368  calcrain(i)=.false.
369  ENDDO
370 ! DEPENDING OF RAIN FOR TRACERS
371  IF(ntrac.GT.0) THEN
372  DO i=6,5+ntrac
373  calcrain(i)=rain
374  ENDDO
375  ENDIF
376 !
377 !=======================================================================
378 ! INITIALISATION: READS, PREPARES AND CHECKS
379 !=======================================================================
380 !
381  IF(pass.EQ.0) THEN
382  WRITE(lu,*) 'INITIALISING TELEMAC3D FOR ',code1
383  WRITE(lu,*) 'INITIALISING TELEMAC3D'
384  ELSEIF(pass.EQ.1) THEN
385  GO TO 700
386  ELSEIF(pass.NE.-1) THEN
387  WRITE(lu,*) 'WRONG ARGUMENT PASS: ',pass
388  CALL plante(1)
389  stop
390  ENDIF
391 
392  CALL telemac3d_init
393 !
394 !=======================================================================
395 ! THE TIME LOOP BEGINS HERE
396 !=======================================================================
397 !
398  IF(pass.EQ.0) THEN
399  WRITE(lu,*) 'TELEMAC3D INITIALISED'
400  RETURN
401  ENDIF
402 !
403 700 CONTINUE
404 !
405  lt = lt+1
406 
407  at = at + dt
408 !
409 #if defined COMPAD
411 #endif
412 !
413 ! SAVING ORIGINAL ELEVATIONS (FOR DISTRIBUTIVE SCHEMES)
414 !
415  CALL os('X=Y ',x=zn,y=z3)
416 !
417  IF(debug.GT.0) WRITE(lu,*) 'BOUCLE EN TEMPS LT=',lt
418  infogr = .false.
419  IF (mod(lt,lisprd) == 0) infogr = .true.
420  infogr = listin .AND. infogr
421  IF (infogr) CALL mittit(1,at,lt)
422 !
423 !=======================================================================
424 !
425 ! IPBOT HAS BEEN MODIFIED FOR CVDF3D IN THE PREVIOUS TIME STEP,
426 ! IT IS RESTORED HERE WITH ZPROP
427 ! NOTE: DIFFERENT IPBOT_Z AND IPBOT_ZPROP WOULD BE CLEARER....
428  IF(lt.GT.1) THEN
430  ENDIF
431 !
432 !=======================================================================
433 ! SOURCES : COMPUTES INPUTS WHEN VARYING IN TIME
434 ! IF NO VARIATION IN TIME QSCE2=QSCE AND TASCE2=TASCE
435 !=======================================================================
436 !
437  IF(nptsce.GT.0) THEN
438  DO i=1,nptsce
439  qsce2(i)=t3d_debsce(at,i,qsce)
440  ENDDO
441  IF(ntrac.GT.0) THEN
442  DO i=1,nptsce
443  DO itrac=1,ntrac
444  ta_sce%ADR(itrac)%P%R(i)=t3d_trsce(at,i,itrac)
445  ENDDO
446  ENDDO
447  ENDIF
448  ENDIF
449  IF(nbuse.GT.0) THEN
450  IF(debug.GT.0) WRITE(lu,*) 'CALLING BUSE'
452  & h%R,zf%R,dbus%R,lrgbus%R,haubus%R,clpbus%I,
453  & altbus%R,csbus%R,cebus%R,angbus%R,lbus%R,
454  & ntrac,ta,tbus,ubus,vbus,u%R,v%R,infogr,
455  & cv%R,c56%R,cv5%R,c5%R,ctrash%R,fricbus%R,
458  IF(debug.GT.0) WRITE(lu,*) 'BACK FROM BUSE'
459  DO i=1,nbuse
460  qsce2(nptsce+i) =-dbus%R(i)
461  qsce2(nptsce+nbuse+i)= dbus%R(i)
462  ENDDO
463  IF(ntrac.GT.0) THEN
464  DO i=1,nbuse
465  DO itrac=1,ntrac
466  ta_sce%ADR(itrac)%P%R(nptsce+i) = tbus%ADR(itrac)%P%R(i)
467  ta_sce%ADR(itrac)%P%R(nptsce+nbuse+i)=
468  & tbus%ADR(itrac)%P%R(nbuse+i)
469  ENDDO
470  ENDDO
471  ENDIF
472  ENDIF
473 !
474 !=======================================================================
475 ! END OF CAMILLE LEQUETTE'S MODIFICATIONS
476 !=======================================================================
477 !
478 ! COUPLING WITH TOMAWAC
479 !
480  IF(inclus(coupling,'TOMAWAC').AND.
481  & percou_wac*((lt-1)/percou_wac).EQ.lt-1) THEN
482 !
483  CALL config_code(3)
484  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE TOMAWAC'
485  CALL t3d_wac_cpl_update(nit_ori)
486  CALL wac(part=1)
487  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TOMAWAC'
488  CALL config_code(1)
489 !
490  ENDIF
491 !
492 !=======================================================================
493 !
494 ! SAVES H, TA, TP, AK, EP
495 ! IN HN,TRN,TPN,AKN,EPN
496 !
497  CALL os ( 'X=Y ', x=hn, y=h )
498  CALL os ( 'X=Y ', x=volun, y=volu )
499  IF(ncsize.GT.1) CALL os('X=Y ',x=volunpar,y=volupar)
500  CALL os ( 'X=Y ', x=un, y=u )
501  CALL os ( 'X=Y ', x=vn, y=v )
502  IF(nonhyd) CALL os ( 'X=Y ' , x=wn, y=w)
503  CALL os ( 'X=Y ', x=gradzn,y=gradzs)
504 ! TRACERS (IF LT=1 DONE AFTER CALL CONDIM AND READ_DATASET)
505  IF(ntrac.GT.0.AND.lt.GT.1) CALL os ('X=Y ', x=trn, y=ta)
506 !
507  IF(iturbv.EQ.3.OR.iturbh.EQ.3.OR.iturbv.EQ.7.OR.iturbh.EQ.7) THEN
508  CALL os ( 'X=Y ', x=akn, y=ak )
509  CALL os ( 'X=Y ', x=epn, y=ep )
510  ENDIF
511  IF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
512  CALL os( 'X=Y ', x=nun, y=nu )
513  ENDIF
514 !
515  IF(bilmas) THEN
517  CALL os ( 'X=Y ', x=massen, y=masse )
518  ENDIF
519 !
520 ! COMPUTES MEAN UN AND VN IN THE VERTICAL
521 !
522  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VERMOY'
523  CALL vermoy(un2d%R,vn2d%R,un%R,vn%R,2,z,
525  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VERMOY'
526 !
527 ! INTEGRATES USTOKES AND VSTOKES OVER DEPTH
528 !
529  IF(inclus(coupling,'TOMAWACT3D')) THEN
530  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VERMOY POUR VIT STOKES'
531  CALL vermoy(us2d%R,vs2d%R,ustokes%R,vstokes%R,2,z,
532  & t3_01%R,t3_02%R,t3_03%R,1,nplan,npoin2,nplan,
533  & optban)
534  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VERMOY POUR VIT STOKES'
535  ENDIF
536 !
537 !-----------------------------------------------------------------------
538 !
539 ! COMPUTES FRICTION COEFFICIENT
540 !
541 ! TIME VARIATIONS OF RUGOF (CORSTR IS IN TELEMAC-2D LIBRARY)
542 ! MUST BE USER-IMPLEMENTED - NOTHING DONE IN STANDARD
543  CALL corstr
544 !
545  IF(.NOT.inclus(coupling,'TOMAWACT3D')) THEN
546  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE COEFRO'
548  & .false.)
549  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE COEFRO'
550  ELSE
551 ! FRICTION COEFFICIENT MODIFIED TO TAKE INTO ACCOUNT WAVES+CURRENTS
552  DO ip=1,npoin2
553  cf%R(ip) = cfwc%R(ip)
554  ENDDO
555  ENDIF
556 !
557 !-----------------------------------------------------------------------
558 !
559 ! CHECKS AND HARMONISES THE BOUNDARY CONDITION TYPES
560 !
561  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE LICHEK'
562  CALL lichek(limpro%I,nptfr2,
563  & mesh2d%IKLBOR%I,mesh2d%NELEB,mesh2d%NELEBX)
564  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE LICHEK'
565 !
566 ! BOUNDARY CONDITIONS FOR THE K-EPSILON MODEL
567 !
568  IF(iturbv.EQ.3.OR.iturbh.EQ.3.OR.iturbv.EQ.7.OR.iturbh.EQ.7) THEN
569  CALL kepicl(likbof%I,liebof%I,liubof%I,
570  & likbol%I,liebol%I,liubol%I,
571  & likbos%I,liebos%I,
573  ENDIF
574 !
575 ! BOUNDARY CONDITIONS FOR THE S-A MODEL
576 !
577  IF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
578  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SAPICL'
579  CALL sapicl(linubof%I, liubof%I,
580  & linubol%I, liubol%I,
581  & linubos%I,
582  & nptfr2, nplan, npoin2, kent, ksort)
583  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SAPICL'
584  ENDIF
585 !-----------------------------------------------------------------------
586 ! FORCING AT THE BOUNDARIES
587 !
588 ! METEOROLOGICAL CONDITIONS
589 !
590  IF (vent.OR.atmos.OR.inclus(coupling,'WAQTEL')) THEN
591  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE METEO'
593  & at,lt,npoin2,vent,atmos,
595  & listin,cst_patmos,inclus(coupling,'WAQTEL'),pluie,
596  & optwind)
597  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE METEO'
598 ! RAIN TEMPERATURE EQUAL TO THE AIR TEMPERATURE OR 1.D0
599 ! IS BETTER THAN 0.D0
600  IF(ind_t.NE.0.AND.inclus(coupling,'WAQTEL')) THEN
601  train(ind_t) = max(tair%R(1),1.d0)
602  ENDIF
603  IF( (inclus(coupling,'WAQTEL') ).AND.
604  & (13*int(waqprocess/13).EQ.waqprocess) ) THEN
605  DO i=1,npoin2
606  windspd%R(i) = sqrt(windx%R(i)**2+windy%R(i)**2)
607  ENDDO
608  ENDIF
609  ENDIF
610 !
611 !-----------------------------------------------------------------------
612 !
613 ! SEDIMENT
614 !
615  IF(s3d_sedi) THEN
616 !
617 ! COMPUTES THE SEDIMENT SETTLING VELOCITY
618 !
619  CALL vitchu(s3d_wchu,s3d_wchu0,u,v,
621  & npoin2,npoin3,
623  & s3d_floc_type,
625 !
626 ! BOUNDARY CONDITIONS FOR THE SEDIMENTOLOGY
627 !
628  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CLSEDI'
629 !GA: CLSEDI HAS BEEN MODIFIED TO ALLOW TWO SEDIMENT CLASSES
630  IF(s3d_mixte) THEN
631 
632  DO itrac = ntrac-1,ntrac
633 
634  CALL clsedi
635  & (atabof%ADR(itrac)%P%R,btabof%ADR(itrac)%P%R,
636  & s3d_wchu%R,
637  & z, h, deltar%R, t3_01, t3_02%R,
639  & s3d_fludpt%R, litabf%ADR(itrac)%P%I,
641  & dt, rho0, s3d_rhos,
648  & s3d_fluernc%R, ntrac, itrac)
649 ! ATABOF AND BTABOF ARE NO LONGER 0 FOLLOWING CLSEDI
650  atabof%ADR(itrac)%P%TYPR='Q'
651  btabof%ADR(itrac)%P%TYPR='Q'
652 
653  ENDDO
654 
655  ELSEIF (s3d_sedco.OR.s3d_sednco) THEN
656 
657  CALL clsedi
658  & (atabof%ADR(ntrac)%P%R,btabof%ADR(ntrac)%P%R,
659  & s3d_wchu%R,
660  & z, h, deltar%R, t3_01, t3_02%R,
662  & s3d_fludpt%R, litabf%ADR(ntrac)%P%I,
664  & dt, rho0, s3d_rhos,
670  & ntrac, itrac)
671 !
672 ! ATABOF AND BTABOF ARE NO LONGER 0 FOLLOWING CLSEDI
673  atabof%ADR(ntrac)%P%TYPR='Q'
674  btabof%ADR(ntrac)%P%TYPR='Q'
675 !
676  ELSE
677 !
678  WRITE(lu,*) ' '
679  WRITE(lu,*) 'SEDI3D : ERROR ON SEDIMENT KEY WORD'
680  CALL plante(1)
681  stop
682 !
683  ENDIF
684 
685  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CLSEDI'
686  ENDIF
687 !
688 ! PREPARING BOUNDARY CONDITIONS FOR THOMPSON METHOD
689 !
690  IF(thomfr.AND.nfrliq.GT.0) THEN
691 !
692  CALL cpstvc(h,t2_01)
693  CALL prebor(hbor%R,ubor2d%R,vbor2d%R,taborl,u2d%R,v2d%R,h%R,
694  & t2_01%R,ta,mesh2d%NBOR%I,
695  & mesh2d%NPOIN,mesh2d%NPTFR,
696 ! & NTRAC SET TO ZERO PROVISIONALLY
697  & 0 ,nfrliq,frtype,numliq%I)
698 ! RESTORING USER BOUNDARY CONDITIONS BEFORE CALLING BORD3D
699 ! TO AVOID UNDUE CALLS TO SL3, ETC.
700  CALL thomps_bc(3)
701 !
702  ENDIF
703 !
704 ! UPDATES BOUNDARY CONDITION VALUES
705 !
706  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE BORD3D'
707  CALL bord3d(nfrliq)
708  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE BORD3D'
709 !
710  IF(thomfr.AND.nfrliq.GT.0) THEN
711 !
712 ! NOW THAT BORD3D HAS BEEN CALLED
713 ! CHANGING AGAIN BOUNDARY CONDITIONS FOR THOMPSON
714  CALL thomps_bc(2)
715 !
716 ! UBORL/VBORL UPDATED IN BORD3D, SO ARE UBOR2D/VBOR2D
717  DO i=1,nptfr2
718  ubor2d%R(i) = uborl%R(i)
719  vbor2d%R(i) = vborl%R(i)
720  ENDDO
721 !
722  ENDIF
723 !
724 ! BOUNDARY CONDITIONS FOR THE VELOCITY ON LATERAL BOUNDARIES
725 !
726  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE TBORD'
727  CALL tbord(auborl%R,
728  & rugol%R,
729  & mesh2d%DISBOR%R,mesh2d%NELBOR%I,mesh2d%NULONE%I,
730  & mesh2d%IKLE%I,nelmax2,
731  & u%R,v%R,w%R,
733  & karman,lisrul,kfrotl,
734  & uetcal%R,nonhyd,
735  & t2_02%R,mesh2d)
736  IF(kfrotl.EQ.0) THEN
737  auborl%TYPR='0'
738  ELSE
739  auborl%TYPR='Q'
740  ENDIF
741  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TBORD, APPEL DE TFOND'
742 !
743 ! BOUNDARY CONDITIONS FOR THE VELOCITY ON THE BOTTOM
744 !
745  CALL tfond(auborf%R,
746  & cf%R,un2d%R,vn2d%R,u%R,v%R,w%R,karman,
748  & nonhyd,optban,hn%R,grav,ipbot%I,nplan)
749  auborf%TYPR='Q'
750  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TFOND'
751 !
752 ! BOUNDARY CONDITIONS FOR K-EPSILON MODEL + COMPUTES CONSTRAINTS
753 ! AT THE BOTTOM AND LATERAL BOUNDARIES IF K-EPSILON IS REQUIRED
754 !
755  IF(iturbv.EQ.3.OR.iturbh.EQ.3) THEN
756  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE KEPCL3'
757  CALL kepcl3(kborf%R,eborf%R,likbof%I,liebof%I,
758  & kborl%R,eborl%R,likbol%I,liebol%I,liubol%I,
759  & kbors%R,ebors%R,
760  & likbos%I,liebos%I,
761  & mesh2d%DISBOR%R,ak%R,h%R,zprop%R,
762  & nbor2%I,npoin2,nplan,nptfr2,
763  & karman,cmu,
764  & kmin,emin,
766  & uetcar%R,fict)
767  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE KEPCL3'
768 !
769  ELSEIF(iturbv.EQ.7.OR.iturbh.EQ.7) THEN
770 !
771  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE KOMCL3'
772  CALL komcl3(kborf%R,eborf%R,likbof%I,liebof%I,liubof%I,
773  & kborl%R,eborl%R,likbol%I,liebol%I,liubol%I,
774  & ebors%R,liebos%I,
775  & mesh2d%DISBOR%R,ak%R,
776  & u%R,v%R,h%R,zprop%R,
777  & nbor2%I,npoin2,nplan,nptfr2,
778  & karman,betas,omstar,
779  & kmin,emin,
781  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE KOMCL3'
782 !
783  ELSEIF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
784 !
785  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SACL3'
786  CALL sacl3(nuborf%R,linubof%I,
787  & nuborl%R,linubol%I,liubol%I,
788  & h%R,zprop%R,
789  & nbor2%I,npoin2,nplan,nptfr2,
790  & karman,uetcar%R,numin,
792 !
793  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SACL3'
794  ENDIF
795 !
796 ! CLIPS HBOR
797 !
798  IF(optban.EQ.2) THEN
799  CALL clip(hbor,hmin,.true.,1.d6,.false.,0)
800  ENDIF
801 !
802 !-----------------------------------------------------------------------
803 !
804 ! THOMPSON BOUNDARY CONDITIONS
805 !
806  IF(thomfr) THEN
807 !
808  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE THOMPS'
809 ! T2_01 IS HERE A VALUE OF H SAVED BEFORE CALLING BORD3D
810  CALL thomps(hbor%R,ubor2d%R,vbor2d%R,taborl,u2d,v2d,t2_01,
811  & ta,zf,mesh2d%X%R,mesh2d%Y%R,mesh2d%NBOR%I,
813  & lihbor%I,liubol%I,livbol%I,it1%I,
814  & t2_08%R,t2_09%R,w1%R,t2_21,t2_22,t2_23,
815  & tac,t2_10,mesh2d%SURDET%R,mesh2d%IKLE%I,
816  & mesh2d%IFABOR%I,mesh2d%NELEM,mesh2d,
817  & mesh2d%XNEBOR%R,mesh2d%YNEBOR%R,
818 ! NTRAC SET TO ZERO
819  & mesh2d%NPOIN,mesh2d%NPTFR,dt,grav,0 ,
821  & mesh2d%NELMAX,11,t2_11%R,numliq%I,mat2d%ADR(1)%P%X%R,
822  & t2_12%R,t2_13%R,t2_14%R,it3,it4,
824  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE THOMPS'
825 !
826 ! DUPLICATING ON THE VERTICAL
827 !
828  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE THOMPS_2DTO3D'
829  CALL thomps_2dto3d
830  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE THOMPS_2DTO3D'
831 !
832  ENDIF
833 !
834 !-----------------------------------------------------------------------
835 ! SOURCE TERMS
836 !
837  IF(nptsce.GT.0) THEN
839  ENDIF
840  IF(nbuse.GT.0) THEN
842  & kentbus,infogr)
844  & ksorbus,infogr)
845  ENDIF
846 !
847  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE TRISOU'
848  CALL trisou
849  & (s0u%R,s0v%R, s0u,s0v,un%R,vn%R,x,y,z,
850  & t3_01%R, deltar, mesh3d, fcor, coriol, ntrac,
851  & at, surfa2%R, t3_02%R, t3_02, w1%R,
852  & mesh3d%M%X%R(1:6*nelem3),mesh3d%M%X%R(6*nelem3+1:12*nelem3),
854  & ikle3%I, lv, msk, maskel%R, inchyd,
856  & u_sce%R,v_sce%R,
857  & gradzs%ADR(1)%P,gradzs%ADR(2)%P,mesh2d,
858  & t3_03, t3_03%R, t3_04, t3_04%R, longit,
860  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TRISOU, APPEL DE SOURCE'
861 !
862  CALL source(s0u, s0v, s0w, s1u, s1v, s1w,
863  & u, v, ws, w,
864  & volu, volun,t3_01,
865  & npoin3, ntrac, lt, at, dt, prive, nonhyd,
867 !
868  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SOURCE'
869 !
870 ! SAVES BOUNDARY VALUES FOR TIME TN
871 !
872  IF(nsousi.GT.1) THEN
873  DO ip=1,nptfr3
874  uborsave%R(ip)=un%R(nbor3%I(ip))
875  vborsave%R(ip)=vn%R(nbor3%I(ip))
876  ENDDO
877  IF(nonhyd) THEN
878  DO ip=1,nptfr3
879  wborsave%R(ip)=wn%R(nbor3%I(ip))
880  ENDDO
881  ENDIF
882  IF(iturbv.EQ.3.OR.iturbh.EQ.3.OR.
883  & iturbv.EQ.7.OR.iturbh.EQ.7) THEN
884  DO ip=1,nptfr3
885  kborsave%R(ip)=akn%R(nbor3%I(ip))
886  eborsave%R(ip)=epn%R(nbor3%I(ip))
887  ENDDO
888  ELSEIF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
889  DO ip=1, nptfr3
890  nuborsave%R(ip)=nun%R(nbor3%I(ip))
891  ENDDO
892  ENDIF
893  IF(ntrac.GT.0) THEN
894  DO itrac=1,ntrac
895  DO ip=1,nptfr3
896  trborsave%ADR(itrac)%P%R(ip)=
897  & trn%ADR(itrac)%P%R(nbor3%I(ip))
898  ENDDO
899  ENDDO
900  ENDIF
901  ENDIF
902 !
903 !=======================================================================
904 ! THE SUB-ITERATIONS LOOP BEGINS HERE
905 !=======================================================================
906 !
907  subiter: DO isousi = 1,nsousi
908 !
909 #if defined COMPAD
911 #endif
912 !
913 ! RESTORES BOUNDARY VALUES FOR TIME TN
914 !
915  IF(isousi.GT.1) THEN
916  DO ip=1,nptfr3
917  un%R(nbor3%I(ip))=uborsave%R(ip)
918  vn%R(nbor3%I(ip))=vborsave%R(ip)
919  ENDDO
920  IF(nonhyd) THEN
921  DO ip=1,nptfr3
922  wn%R(nbor3%I(ip))=wborsave%R(ip)
923  ENDDO
924  ENDIF
925  IF(iturbv.EQ.3.OR.iturbh.EQ.3.OR.
926  & iturbv.EQ.7.OR.iturbh.EQ.7) THEN
927  DO ip=1,nptfr3
928  akn%R(nbor3%I(ip))=kborsave%R(ip)
929  epn%R(nbor3%I(ip))=eborsave%R(ip)
930  ENDDO
931  ELSEIF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
932  DO ip=1,nptfr3
933  nun%R(nbor3%I(ip))=nuborsave%R(ip)
934  ENDDO
935  ENDIF
936  IF(ntrac.GT.0) THEN
937  DO itrac=1,ntrac
938  DO ip=1,nptfr3
939  trn%ADR(itrac)%P%R(nbor3%I(ip))=
940  & trborsave%ADR(itrac)%P%R(ip)
941  ENDDO
942  ENDDO
943  ENDIF
944  ENDIF
945 !
946 ! BUILDS THE MESH FOR PROPAGATION STEP
947 !
948  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE MESH_PROP'
952  & unsv3d,maskel,ielm3)
953  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE MESH_PROP'
954 !
955  IF(isousi.GT.1) THEN
956 ! REBUILDS THE INITIAL MESH
957 ! NOTE: EVOLUTION OF ZF IS NOT TAKEN INTO ACCOUNT HERE - INVESTIGATE
958  CALL calcot(z,hn%R)
959  CALL os('X=Y ',x=volu,y=volun)
960  IF(ncsize.GT.1) CALL os('X=Y ',x=volupar,y=volunpar)
961  CALL grad2d(gradzf%ADR(1)%P,gradzf%ADR(2)%P,zprop,nplan,svide,
967  ENDIF
968 !
969 ! SOURCES AND SINKS OF WATER
970 !
971 ! TEMPORARILY PUTS ZPROP IN MESH3D%Z
972  savez =>mesh3d%Z%R
973  mesh3d%Z%R=>zprop%R
974  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOURCES_SINKS'
975  CALL sources_sinks
976  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SOURCES_SINKS'
977 !
978  IF(inclus(coupling,'TOMAWACT3D')) THEN
979 ! ADD THE NEW TERMS ASSOCIATED WITH THE USTOKES AND VSTOKES
980 ! INTEGRATED OVER DEPTH
981  CALL os ('X=YZ ',x=dus2d,y=us2d,z=h)
982  CALL vector(dus2dx,'=','GRADF X',ielmh,1.d0,dus2d,
984  & asspar=.true.)
985 !
986  CALL os ('X=YZ ',x=dvs2d,y=vs2d,z=h)
987  CALL vector(dvs2dy,'=','GRADF Y',ielmh,1.d0,dvs2d,
989  & asspar=.true.)
990 !
991  CALL os('X=X-Y ',x=smh,y=dus2dx)
992  CALL os('X=X-Y ',x=smh,y=dvs2dy)
993  ENDIF
994 ! RESTORES Z
995  mesh3d%Z%R=>savez
996 
997  IF(bedbou)THEN
998  IF(debug.GT.0) WRITE(lu,*) 'DEUXIEME APPEL DE BED_FLUXES'
999  CALL bed_fluxes
1000  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE BED_FLUXES'
1001  ENDIF
1002 !
1003 ! SETS ADVECTION AND DIFFUSION PARAMETERS TO MONITOR CVDF3D
1004 ! DIFFUSION AND SOURCE TERMS ARE DONE IN WAVE_EQUATION
1005 ! IN CVDF3D (THIS IS DONE IN WAVE_EQUATION)
1006 !
1007 ! DIFFUSION OF U AND V IS DONE IN WAVE_EQUATION
1008  schdvi_hor = 0
1009  schdvi_ver = schdvi
1010 !
1011  schcvi_hor = schcvi
1012  schcvi_ver = schcvi
1013 ! ADVECTION IS NOT DONE AT THE FIRST TIME-STEP (THIS WAS VERSION 6.1)
1014 ! IF(LT.EQ.1.AND.ISOUSI.EQ.1) THEN
1015 ! SCHCVI_HOR = 0
1016 ! SCHCVI_VER = 0
1017 ! ENDIF
1018 !
1019 ! WHEN SCHCVI=ADV_SUP DIFF3D IS CALLED AND
1020 ! SOURCE TERMS WOULD BE TREATED TWICE
1021  yas0u=.false.
1022  yas1u=.false.
1023 !
1024 !-----------------------------------------------------------------------
1025 ! ADVECTION-DIFFUSION STEP FOR VELOCITY COMPONENTS
1026 !-----------------------------------------------------------------------
1027 !
1028 ! HERE DIFFUSION IS DONE IN MESH3D%Z, IT IS DIFFERENT FROM ZPROP IF
1029 ! FROM THE SECOND SUB-ITERATION ON. SO IPBOT IS REDONE HERE
1030 !
1031  IF(isousi.GT.1) THEN
1033  ENDIF
1034 !
1035  IF(infogr) THEN
1036  IF (nonhyd) THEN
1037  CALL mittit(17,at,lt)
1038  ELSE
1039  CALL mittit(4,at,lt)
1040  ENDIF
1041  ENDIF
1042 !
1043  sigmau = 1.d0
1044  umin = 0.d0
1045  umax = 1.d0
1046  clumin = .false.
1047  clumax = .false.
1048  yawchu = .false.
1049 ! YASEM3D = DONE IN TRISOU
1050  newdif=.true.
1051 
1052  fluxbil(1:maxfro+nsce+1,1:5+ntrac) => fluxb%R
1053 !
1054  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CVDF3D POUR U'
1055  CALL cvdf3d
1056  & (ud,uc,un,viscvi,sigmau,s0u,yas0u,s1u,yas1u,
1059  & fluxbil(1:maxfro+nsce+1,1),
1060  & flux%R(1), fluext,fluextpar,umin, clumin, umax, clumax,
1061  & schcvi_hor,schdvi_hor,slvdvi,trbavi,infogr,newdif,
1062  & calcflu(1),t2_01,t2_03,
1067  & inchyd,maskbr,maskpt,smu,yasem3d,svide,it1,
1074  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CVDF3D POUR U'
1075 !
1076  sigmav = 1.d0
1077  vmin = 0.d0
1078  vmax = 1.d0
1079  clvmin = .false.
1080  clvmax = .false.
1081  yawchu = .false.
1082 ! YASEM3D = DONE IN TRISOU
1083 ! MDIFF ALREADY COMPUTED FOR U
1084  newdif=.false.
1085 !
1086  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CVDF3D POUR V'
1087 ! USE OF AUBORL,AUBORF,AUBORS IS NOT A MISTAKE
1088  CALL cvdf3d
1089  & (vd,vc,vn,viscvi,sigmav,s0v,yas0u,s1v,yas1u,
1092  & fluxbil(1:maxfro+nsce+1,2),
1093  & flux%R(2), fluext,fluextpar,vmin, clvmin, vmax, clvmax,
1094  & schcvi_hor,schdvi_hor,slvdvi,trbavi,infogr,newdif,
1095  & calcflu(2),t2_01,t2_03,
1100  & inchyd,maskbr,maskpt,smv,yasem3d,svide,it1,
1107  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CVDF3D POUR V'
1108 !
1109  IF(nonhyd) THEN
1110 !
1111  sigmaw = 1.d0
1112  wmin = 0.d0
1113  wmax = 1.d0
1114  clwmin = .false.
1115  clwmax = .false.
1116  yasem3d= .false.
1117  yawchu = .false.
1118  newdif=.true.
1119 ! TETADI MAY BE EQUAL TO 2 FOR U AND V, WHEN THE WAVE EQUATION
1120 ! IS USED - NOT DONE ON W SO FAR
1121  tetadiver = min(tetadi,1.d0)
1122 !
1123  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CVDF3D POUR W'
1124 ! USE OF AUBORL,AUBORF,AUBORS IS NOT A MISTAKE
1125  CALL cvdf3d
1126  & (wd,wc,wn,viscvi,sigmaw,s0w,.true.,s1w,.true.,
1129  & fluxbil(1:maxfro+nsce+1,3),
1130  & flux%R(3), fluext,fluextpar,wmin, clwmin, wmax, clwmax,
1131  & schcvi_ver,schdvi_ver,slvdvi,trbavi,infogr,newdif,
1132  & calcflu(3),t2_01,t2_03,
1137  & inchyd,maskbr,maskpt,sem3d,yasem3d,svide,it1,
1138  & trav3,mesh2d,optban,
1139  & tetadiver,yawchu,wchu,s3d_wchu,agglod,nsce,sources,w_sce%R,
1141  & parapluie,0.d0, flodel,flopar,
1145 !
1146  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CVDF3D POUR W'
1147  ENDIF
1148 !
1149 !-----------------------------------------------------------------------
1150 ! DIFFUSION AND PROPAGATION STEP BY WAVE_EQUATION
1151 !-----------------------------------------------------------------------
1152 !
1153  IF(infogr) THEN
1154  CALL mittit(6,at,lt)
1155  ENDIF
1156 ! TEMPORARILY PUTS ZPROP IN MESH3D%Z
1157  savez =>mesh3d%Z%R
1158 ! ALL PROPAGATION WILL BE DONE WITH ZPROP INSTEAD OF Z
1159  mesh3d%Z%R=>zprop%R
1160 ! IPBOT HAS BEEN MODIFIED FOR CVDF3D, IT IS RESTORED HERE WITH ZPROP
1161  IF(isousi.GT.1) THEN
1163  ENDIF
1164  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE WAVE_EQUATION'
1165 !
1166  CALL wave_equation(isousi)
1167 !
1168  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE WAVE_EQUATION'
1169 !
1170 ! RESTORES Z
1171  mesh3d%Z%R=>savez
1172 !
1173 !-----------------------------------------------------------------------
1174 ! CLIPS NEGATIVE DEPTHS
1175 !-----------------------------------------------------------------------
1176 !
1177  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CORRECTION_DEPTH_3D'
1178  CALL correction_depth_3d(mesh2d%GLOSEG%I,mesh2d%GLOSEG%DIM1)
1179  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CORRECTION_DEPTH_3D'
1180 !
1181 !-----------------------------------------------------------------------
1182 ! BUILDS NEW MESH WITH THE NEW FREE SURFACE
1183 !-----------------------------------------------------------------------
1184 !
1185  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CALCOT'
1186  CALL calcot(z,h%R)
1187 ! IPBOT UPDATED ACCORDINGLY, E.G. FOR CALLS TO PREDIV AND CVDF3D
1189  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CALCOT'
1190 !
1191 !----------------------------------------------------------------------
1192 !
1193 ! GENERATES DATA FOR DELWAQ
1194 !
1195  IF(inclus(coupling,'DELWAQ')) THEN
1196 !
1197 ! COMPUTING FLODEL (POINT TO POINT FLUXES)
1198 !
1199  formul = 'VGRADP HOR'
1200  formul(8:8) = '2'
1201 ! ADVECTION FLUXES PER NODE (STORED IN MESH3D%W%R)
1202 ! THE ASSEMBLED RESULT IN T3_04 IS NOT USED HERE
1203  savez =>mesh3d%Z%R
1204  mesh3d%Z%R=>zprop%R
1205  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VECTOR'
1206  CALL vector(t3_04,'=',formul,ielm3,-1.d0,dm1,svide,grazco,
1208  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VECTOR'
1209  CALL flux_ef_vf_3d(flodel%R,mesh2d%W%R,mesh3d%W%R,
1210  & mesh2d%NSEG,nelem2,nelmax2,
1211  & mesh2d,.true.,
1212  & 2,2,mesh3d%TYPELM+1,nplan,
1213 ! 2: HORIZONTAL FLUXES FROM TOP TO BOTTOM
1214  & mesh3d%IKLE%I,mesh3d%NELMAX,mesh2d%KNOLG%I)
1215 ! FLUX LIMITATION (FLULIM IS 2D, SO NUMBERING FROM TOP TO BOTTOM
1216 ! MAKES NO PROBLEM)
1217  IF(opt_hneg.EQ.2) THEN
1218  CALL flux3dlim(flodel%R,flulim%R,nplan,mesh2d%NSEG,npoin2,1)
1219  ENDIF
1220  mesh3d%Z%R=>savez
1221 !
1222 ! NOW CALLING TEL4DELWAQ WITH FLODEL COMPLETED
1223 !
1224 ! SENDS UCONV AND VCONV AS ADVECTING FIELD (SEE WAVE_EQUATION)
1225  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE TEL4DELWAQ'
1226  CALL tel4delwaq(npoin3,npoin2,mesh2d%NSEG,
1227  & mesh2d%IKLE%I,mesh2d%ELTSEG%I,mesh2d%GLOSEG%I,
1228  & mesh2d%GLOSEG%DIM1,x,y,mesh3d%NPTFR,lihbor%I,mesh3d%NBOR%I,
1229  & nplan,at,dt,lt,nit_ori,h%R,hprop%R,mesh3d%Z%R,uconv%R,
1230  & vconv%R,ta%ADR(max(ind_s,1))%P%R,ta%ADR(max(ind_t,1))%P%R,
1231  & viscvi%ADR(3)%P%R,titcas,
1232  & t3d_files(t3dgeo)%NAME,t3d_files(t3dcli)%NAME,waqprd,
1235  & diff_del,mardat,martim,flodel%R,v2dpar%R,mesh2d%KNOLG%I,
1236  & t3d_files)
1237  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TEL4DELWAQ'
1238 !
1239  ENDIF
1240 !
1241 !----------------------------------------------------------------------
1242 !
1243 ! MASKING
1244 !
1245  IF(isousi.EQ.nsousi) THEN
1246  IF(msk) THEN
1247  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE MASK3D'
1248  IF(msk) CALL mask3d(mesh3d%IFABOR%I,maskel%R,maskpt,maskbr%R,
1249  & x2%R,y2%R,zf%R,zfe%R,h%R,hmin,at,lt,it1%I,
1250  & mesh3d%NELBOR%I,nelmax2,nelem2,npoin2,mesh2d%NELEB,
1252  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE MASK3D'
1253  ENDIF
1254  ENDIF
1255 !
1256 ! COMPUTES SURFACE GRADIENTS AT TIME LEVEL N+1 AND DSSUDT
1257 !
1258  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FSGRAD'
1262  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FSGRAD'
1263 !
1264  CALL os( 'X=Y-Z ', x=dssudt, y=h, z=hn )
1265  CALL os( 'X=CX ', x=dssudt, c=1.d0/dt )
1266 !
1267 ! COMPUTES THE VOLUMES ASSOCIATED WITH NODES
1268 !
1269  CALL vector(volu, '=', 'MASBAS ',ielm3,1.d0-aggloh,
1271  IF(aggloh.GT.1.d-6) THEN
1272  CALL vector(volu, '+', 'MASBAS2 ',ielm3,aggloh,
1274  ENDIF
1275  IF(ncsize.GT.1) THEN
1276  CALL os('X=Y ',x=volupar,y=volu)
1277  CALL parcom(volupar,2,mesh3d)
1278  ENDIF
1279 !
1280 ! IN 2D, ONLY IF MASKING (OTHERWISE NOTHING CHANGED)
1281 !
1282  IF(msk) CALL masbas2d(volu2d,v2dpar,unsv2d,
1284 !
1285 !-----------------------------------------------------------------------
1286 ! CONTINUITY STEP (NON-HYDROSTATIC OPTION) IN NEW MESH
1287 !-----------------------------------------------------------------------
1288 !
1289  IF(nonhyd.AND..NOT.dpwaveq) THEN
1290 !
1291  IF(debug.GT.0) WRITE(lu,*) 'DANS NONHYDRO1'
1292  IF(infogr) CALL mittit(19,at,lt)
1293 !
1294  CALL os ('X=Y ', x=w , y=wd )
1295 !
1296 !-----------------------------------------------------------------------
1297 !
1298 ! COMPUTES THE DYNAMIC PRESSURE
1299 !
1300 ! WITH WAVE EQUATION, DYNAMIC PRESSURE HERE IS INCREMENTAL
1301 ! THUS WITHOUT BOUNDARY CONDITIONS
1302  bc=.NOT.dpwaveq
1303  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE PREDIV'
1304  CALL prediv(dp,u,v,w,infogr,bc,1,.true.,.true.,.true.)
1305  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE PREDIV'
1306 !
1307 !-----------------------------------------------------------------------
1308 ! VELOCITY PROJECTION STEP
1309 !-----------------------------------------------------------------------
1310 !
1311  IF(infogr) CALL mittit(20,at,lt)
1312 !
1313  CALL velres(u,v,w,dp,
1315  & svide,ielm3,optban,t3_04,.true.,npoin3,npoin2,
1317 !
1318 ! BOUNDARY CONDITIONS ON W AT THE BOTTOM AND FREE SURFACE
1319 !
1320 ! FREE SURFACE (NOT ALWAYS TO BE DONE, DSSUDT IS SOMETIMES TOO BIG)
1321 !
1322  IF(cldyn) THEN
1323 !
1324  CALL ov('X=Y ',x=w%R(npoin3-npoin2+1:npoin3), y=dssudt%R,
1325  & dim1=npoin2)
1326  CALL ov('X=X+YZ ',x=w%R(npoin3-npoin2+1:npoin3),
1327  & y=gradzs%ADR(1)%P%R,
1328  & z=u%R(npoin3-npoin2+1:npoin3), dim1=npoin2)
1329  CALL ov('X=X+YZ ',x=w%R(npoin3-npoin2+1:npoin3),
1330  & y=gradzs%ADR(2)%P%R,
1331  & z=v%R(npoin3-npoin2+1:npoin3), dim1=npoin2)
1332 !
1333  ENDIF
1334 !
1335 ! BOTTOM
1336 !
1337  IF(velprobot) THEN
1338  IF(sigmag.OR.optban.EQ.1) THEN
1339  DO i=1,npoin2
1340  DO ip=0,ipbot%I(i)
1341  i3d=ip*npoin2+i
1342  w%R(i3d)=gradzf%ADR(1)%P%R(i)*u%R(i3d)
1343  & +gradzf%ADR(2)%P%R(i)*v%R(i3d)
1344  ENDDO
1345  ENDDO
1346  ELSE
1347  DO i=1,npoin2
1348  w%R(i)=gradzf%ADR(1)%P%R(i)*u%R(i)
1349  & +gradzf%ADR(2)%P%R(i)*v%R(i)
1350  ENDDO
1351  ENDIF
1352  ENDIF
1353 !
1354 ! RE-ENSURES THE DIRICHLET BOUNDARY CONDITIONS AND U.N = 0
1355 !
1356  CALL airwik2(lihbor%I, uborf%R, vborf%R, wborf%R,
1357  & liubof%I, livbof%I, liwbof%I,
1358  & uborl%R, vborl%R, wborl%R,
1359  & liubol%I, livbol%I, liwbol%I,
1360  & ubors%R, vbors%R, wbors%R,
1361  & liubos%I, livbos%I, liwbos%I,
1362  & u%R,v%R,w%R,mesh2d%XNEBOR%R,mesh2d%YNEBOR%R,
1364  & velprolat)
1365 !
1366  ENDIF ! IF NONHYD
1367 !
1368 !=======================================================================
1369 ! INTERNAL COUPLING WITH GAIA
1370 !=======================================================================
1371 !
1372  IF( inclus(coupling,'GAIA ')) THEN
1373 !
1374 ! U AND V WITH 2D STRUCTURE : BOTTOM VELOCITY AS A
1375 ! 2D VARIABLE
1376  CALL cpstvc(u2d,u)
1377  CALL cpstvc(v2d,v)
1378 ! TFOND IS CALLED FOR AN UPDATE OF
1379 ! UETCAR at TIME N+1
1380  CALL tfond(auborf%R,
1381  & cf%R,u2d%R,v2d%R,u%R,v%R,w%R,karman,
1383  & nonhyd,optban,hn%R,grav,ipbot%I,nplan)
1384 !
1385 ! NOW RUNS ONE TURN OF GAIA'S TIME LOOP AND RETURNS CALL
1386  CALL config_code(5)
1387  IF(debug.GT.0) WRITE(lu,*) 'CALL GAIA_STEP'
1388 !
1389  CALL gaia_step(
1390  & lt,graprd,lisprd,nit_ori,u2d,v2d,h,zf,
1391  & uetcar,deltar,cf,rugof,code1,
1393  & rho0,grav,
1394 ! VARIABLES TRANSMITTED FROM TOMAWAC
1395  & dirmoy,hm0,tpr5,orbvel,.true.)
1396  IF(debug.GT.0) WRITE(lu,*) 'BACK GAIA_STEP'
1397  CALL config_code(1)
1398 !
1399 ! RETRIEVES ORIGINAL U AND V STRUCTURE
1400  CALL cpstvc(un,u)
1401  CALL cpstvc(vn,v)
1402 !
1403  ENDIF
1404 !
1405 !=======================================================================
1406 ! INTERNAL COUPLING WITH SISYPHE
1407 !=======================================================================
1408 !
1409  IF( inclus(coupling,'SISYPHE') .AND.
1410  & (percou_sis*(lt/percou_sis).EQ.lt.OR.lt.EQ.1) ) THEN
1411 !
1412 ! U AND V WITH 2D STRUCTURE : BOTTOM VELOCITY AS A 2D VARIABLE
1413  CALL cpstvc(u2d,u)
1414  CALL cpstvc(v2d,v)
1415 !
1416 ! NOW RUNS ONE TURN OF SISYPHE'S TIME LOOP AND RETURNS
1417  CALL config_code(2)
1418  ibid=1
1419  lbid=.false.
1420  lbid2=.false.
1421  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SISYPHE'
1422  CALL sisyphe(1,lt,graprd,lisprd,nit_ori,u2d,v2d,h,hn,zf,
1423  & uetcar,cf,rugof,lbid,ibid,lbid2,code1,percou_sis,
1425 ! 1 PRECLUDES THE USE OF THE 4 FOLLOWING ARGUMENTS
1426  & flbor,1,dm1,uconv,vconv,zconv,
1427 ! VARIABLES TRANSMITTED FROM TOMAWAC
1428  & dirmoy,hm0,tpr5,orbvel,.true.)
1429  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SISYPHE'
1430  CALL config_code(1)
1431 !
1432 ! S3D_HDEPMUST BE UPDATED BECAUSE SISYPHE CHANGED ZF
1433  IF(s3d_sedi) CALL os('X=Y-Z ',x=s3d_hdep,y=zf,z=zr)
1434 !
1435 ! RETRIEVES ORIGINAL U AND V STRUCTURE
1436  CALL cpstvc(un,u)
1437  CALL cpstvc(vn,v)
1438 !
1439  ENDIF
1440 !
1441 !-----------------------------------------------------------------------
1442 !
1443 ! SEDIMENT
1444 !
1445  IF(nsusp_tel.GT.0) THEN
1446 !
1447 ! COMPUTES THE SEDIMENT SETTLING VELOCITY
1448 !
1451  & nplan,msk,maskel,uetcar,ta,hn)
1452 !
1453 ! BOUNDARY CONDITIONS FOR THE
1454 ! SEDIMENTOLOGY
1455 !
1456  CALL compute_bc_sedi
1457 !
1458  ENDIF
1459 !
1460 !-----------------------------------------------------------------------
1461 ! PREPARING SOURCE TERMS FOR ADVECTION-DIFFUSION STEP
1462 !-----------------------------------------------------------------------
1463 !
1464 ! PREPARING SOURCE TERMS FOR K-EPSILON AND K-OMEGA MODELS
1465 !
1466  IF(iturbv.EQ.3.OR.iturbh.EQ.3.OR.iturbv.EQ.7.OR.iturbh.EQ.7) THEN
1467 !
1468  IF (infogr) CALL mittit(7,at,lt)
1469 !
1470  s0ak%TYPR='Q'
1471  s0ep%TYPR='Q'
1472  s1ak%TYPR='Q'
1473  s1ep%TYPR='Q'
1474 !
1475  IF(iturbv.EQ.3.OR.iturbh.EQ.3) THEN
1476 !
1477  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOUKEP'
1478  CALL soukep(s0ak%R,s0ep%R,s1ak%R,s1ep%R,
1479  & u,v,w,deltar,ri%R,t3_01,t3_02,t3_03,t3_04,
1481  & t3_10,ak%R,ep%R,c1,c2,cmu,grav,
1484  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SOUKEP'
1485 !
1486  ENDIF
1487 !
1488  IF(iturbv.EQ.7.OR.iturbh.EQ.7) THEN
1489 !
1490  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOUKOM'
1491  CALL soukom(s0ak,s0ep,s1ak,s1ep,u,v,w,
1492  & deltar,t3_01,t3_02,t3_03,
1494  & t3_09,t3_10,t3_12,t3_13,
1495  & t3_14,t3_15,t3_16,t3_17,
1498  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SOUKOM'
1499 !
1500  ENDIF
1501 !
1502  ELSEIF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
1503 !
1504  IF (infogr) CALL mittit(33,at,lt)
1505  s0nu%TYPR='Q'
1506  s1nu%TYPR='Q'
1507  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOUSA'
1508 
1509  CALL sousa(s0nu%R,s1nu%R,u,v,w,rotan,strain,t3_01,
1512 !
1513  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SOUSA'
1514  ENDIF
1515 !
1516 ! PREPARING SOURCE TERMS FOR TRACERS
1517 !
1518  IF( (inclus(coupling,'WAQTEL') ).AND.
1519  & (13*int(waqprocess/13).EQ.waqprocess) ) THEN
1520 ! ORDER: NUMBER OF THE PLANES FROM TOP TO BOTTOM
1521 ! THEN NUMBER OF THE 2D NODES
1522  DO i=1,npoin2
1523 ! K=1
1524 ! THICK4AED2%R(1+(I-1)*NPLAN) = (Z(I+(NPLAN-1)*NPOIN2)
1525 ! & - Z(I+(NPLAN-2)*NPOIN2))*0.5D0
1526  thick4aed2%R(1+(i-1)*nplan) = (z(i+npoin3-npoin2)
1527  & - z(i+npoin3-2*npoin2))*0.5d0
1528  DO k=2,nplan-1
1529  thick4aed2%R(k+(i-1)*nplan) = (z(i+(nplan-k+1)*npoin2)
1530  & - z(i+(nplan-k-1)*npoin2))/2.d0
1531  ENDDO
1532 ! K=NPLAN
1533  thick4aed2%R(i*nplan) = (z(i+npoin2)-z(i))*0.5d0
1534  ENDDO
1535 !
1536  DO i=1,npoin2
1537  benth4aed2%I(i) = nplan
1538  DO k=nplan,2,-1
1539  IF(thick4aed2%R(k+(i-1)*nplan).LT.eps_aed2) THEN
1540  benth4aed2%I(i) = k-1
1541  ENDIF
1542  ENDDO
1543  ENDDO
1544 !
1545 ! ORDER: NUMBER OF THE PLANES FROM TOP TO BOTTOM
1546 ! THEN NUMBER OF THE 2D NODES
1547  DO i=1,npoin2
1548  DO k=1,nplan
1549  temp4aed2%R(k+(i-1)*nplan) =
1550  & ta%ADR(ind_t)%P%R(i+(nplan-k)*npoin2)
1551  sali4aed2%R(k+(i-1)*nplan) =
1552  & ta%ADR(ind_s)%P%R(i+(nplan-k)*npoin2)
1553  ENDDO
1554  ENDDO
1555 !
1556  ENDIF
1557 !
1558  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOURCE_TRAC'
1559  IF(ntrac.GT.0) CALL source_trac
1560  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOURCE_TRAC'
1561 !
1562 !----------------------------------------------------------------------
1563 ! ADVECTION-DIFFUSION STEP FOR ALL ADVECTED VARIABLES
1564 !----------------------------------------------------------------------
1565 !
1566 ! ALL ADVECTION SCHEMES EXCEPT SUPG
1567 !
1568  IF (infogr .AND. (.NOT.nonhyd)) CALL mittit(9,at,lt)
1569  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE PREADV'
1570  CALL preadv(w,ws,zprop,isousi,lt,volu,volun)
1571  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE PREADV'
1572 !
1573 !----------------------------------------------------------------------
1574 ! NOW CVDF3D WILL DO SUPG AND DIFFUSION
1575 !----------------------------------------------------------------------
1576 !
1577  IF(iturbv.EQ.3.OR.iturbh.EQ.3.OR.iturbv.EQ.7.OR.iturbh.EQ.7) THEN
1578 !
1579  clkmin = .true.
1580  clkmax = .true.
1581  yasem3d = .false.
1582  yawchu = .false.
1583  newdif = .true.
1584  tetatra=min(tetadi,1.d0)
1585 !
1586  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CVDF3D POUR AK'
1587  CALL cvdf3d
1588  & (ak,akc,akn,viscvi,sigmak,s0ak,.true.,s1ak,.true.,
1591  & fluxbil(1:maxfro+nsce+1,1),
1592  & flux%R(1), fluext,fluextpar,kmin, clkmin, kmax, clkmax,
1593  & schcke,schdke,slvdke,trbake,infogr,newdif,calcflu(4),
1594  & t2_01,t2_03,
1599  & inchyd,maskbr,maskpt,sem3d,yasem3d,svide,it1,
1600  & trav3,mesh2d,optban,tetatra,
1601  & yawchu,wchu,s3d_wchu,agglod,nsce,sources,ak_sce%R,
1604  & fludpt,fludp,fluer,volu2d,v2dpar,setdep,
1607 !
1608  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CVDF3D POUR AK'
1609 !
1610  clemin = .true.
1611  clemax = .true.
1612  yasem3d = .false.
1613  yawchu = .false.
1614 !
1615 ! NEGLECTS MOLECULAR DIFFUSIVITY...
1616 ! DIFFUSION MATRIX NOT RECOMPUTED
1617  newdif = .false.
1618  CALL om('M=CM ',m=mdiff,c=sigmae/sigmak,mesh=mesh3d)
1619 !
1620 !
1621  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CVDF3D POUR EP'
1622  CALL cvdf3d
1623  & (ep,epc,epn,viscvi,sigmae,s0ep,.true.,s1ep,.true.,
1626  & fluxbil(1:maxfro+nsce+1,1),
1627  & flux%R(1), fluext,fluextpar,emin, clemin, emax, clemax,
1628  & schcke,schdke,slvdke,trbake,infogr,newdif,calcflu(5),
1629  & t2_01,t2_03,
1634  & inchyd,maskbr,maskpt,sem3d,yasem3d,svide,it1,
1635  & trav3,mesh2d,optban,tetatra,
1636  & yawchu,wchu,s3d_wchu,agglod,nsce,sources,ep_sce%R,
1642 !
1643 !
1644  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CVDF3D POUR EP'
1645 !
1646  ELSEIF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
1647 !
1648  clnumin = .true.
1649  clnumax = .false.
1650  yasem3d = .false.
1651  yawchu = .false.
1652  newdif = .true.
1653  tetatra=min(tetadi,1.d0)
1654 !
1655  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CVDF3D POUR NU'
1656  CALL cvdf3d
1657  & (nu,nuc,nun,viscnu,sigmanu,s0nu,.true.,s1nu,.true.,
1660  & fluxbil(1:maxfro+nsce+1,1),
1661  & flux%R(1),fluext,fluextpar,numin,clnumin,numax,clnumax,
1662  & schcke,schdke,slvdke,trbake,infogr,newdif,calcflu(4),
1663  & t2_01,t2_03,
1668  & inchyd,maskbr,maskpt,sem3d,yasem3d,svide,it1,
1669  & trav3,mesh2d,optban,tetatra,
1670  & yawchu,wchu,s3d_wchu,agglod,nsce,sources,nu_sce%R,
1672  & pluie,parapluie,0.d0,
1676  & nsp_dist,tb2)
1677  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CVDF3D POUR NU'
1678  ENDIF
1679 !
1680 !-----------------------------------------------------------------------
1681 !
1682 ! COMPUTES THE VISCOSITIES VISCVI, VISCTA AND VISCTP
1683 !
1684  IF(iturbh.EQ.1.OR.iturbv.EQ.1) THEN
1685 !
1686  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VISCOS'
1689  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VISCOS'
1690 !
1691  ENDIF
1692 !
1693  IF(iturbv.EQ.2) THEN
1694 !
1695  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VISCLM'
1696  CALL visclm(viscvi,viscta,ri,u,v,deltar,z3,h,
1697  & t3_01, t3_02, t3_03, t3_04, t3_05, t3_07,
1698  & mesh3d, ielm3, grav, nplan,
1699  & npoin3, npoin2, ntrac, msk, maskel,
1702  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VISCLM'
1703 !
1704  ENDIF
1705 !
1706  IF(iturbv.EQ.3.OR.iturbh.EQ.3) THEN
1707 !
1708  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VISCKE'
1709  CALL viscke(viscvi,viscta,ak,ep,ntrac,cmu,
1711  & iturbh,iturbv,prandtl)
1712  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VISCKE'
1713 !
1714  ENDIF
1715 !
1716  IF(iturbh.EQ.4) THEN
1717 !
1718  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VISSMA'
1719  CALL vissma(viscvi,viscta,
1722  & svide,mesh3d,
1724  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VISSMA'
1725 !
1726  ENDIF
1727 !
1728  IF(iturbv.EQ.7.OR.iturbh.EQ.7) THEN
1729 !
1730  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VISCKO'
1733  & t3_01,t3_02)
1734  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VISCKO'
1735 !
1736  ENDIF
1737 !
1738  IF(iturbv.EQ.5.OR.iturbv.EQ.9) THEN
1739  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VISCSA'
1740  CALL viscsa(viscvi,viscnu,nu,
1741  & dnuvih,dnuviv,ak,ep,strain)
1742  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE VISCSA'
1743  ENDIF
1744 !
1745  IF(iturbv.EQ.6) THEN
1746  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE GOTM_COUPLING_STEP'
1747  CALL gotm_coupling_step
1748  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE GOTM_COUPLING_STEP'
1749  ENDIF
1750 !
1751  IF(inclus(coupling,'TOMAWACT3D')) THEN
1752 ! ADDING VERTICAL MIXING DUE TO WAVES
1753  CALL os('X=X+Y ',x=viscvi%ADR(3)%P,y=fdk)
1754  ENDIF
1755 !
1756  IF(optban.EQ.1) THEN
1757 !
1759 !
1760  ENDIF
1761 !
1762 !=======================================================================
1763 ! OIL SPILL MODEL (UNDER DEVELOPMENT IN MYGRHYCAR PROJECT)
1764 !=======================================================================
1765 !
1766  IF(spill_model) THEN
1767 !
1768  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE OIL_SPILL_3D'
1771  & nflot,nplan,mesh3d,at,dt,grav,cf,x,y,z,h,hn,
1776  & atabos,t2_17,vent)
1777  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE OIL_SPILL_3D'
1778 !
1779  ENDIF
1780 !
1781 !-----------------------------------------------------------------------
1782 ! ADVECTION-DIFFUSION OF TRACERS
1783 !
1784 !GA: POINTERS ARE USED TO ALLOW TWO SEDIMENT CLASSES (MULTI1,2,3,4)
1785  IF(ntrac.GT.0) THEN
1786 !
1787  IF (infogr) CALL mittit(5,at,lt)
1788 !
1789  sigmta = 1.d0
1790  tamin = 0.d0
1791  tamax = 1.d0
1792  ctamin = .false.
1793  ctamax = .false.
1794  yasem3d = .false.
1795  newdif = .true.
1796  tetatra=min(tetadi,1.d0)
1797 !
1798 ! IF MICROPOL MODULE IS ACTIVATED, TRACERS BOTTOM SEDIMENT (IND_SF)
1799 ! AND MICROPOLLUTANT ADSORBED BY BOTTOM SEDIMENT (IND_CSF)
1800 ! ARE NEITHER ADVECTED NOR DIFFUSED (NO ADVECTION DONE IN LECDON)
1801  IF(inclus(coupling,'WAQTEL').AND.
1802  & 7*int(waqprocess/7).EQ.waqprocess) THEN
1803  CALL os('X=0 ', x=viscta%ADR(ind_sf)%P)
1804  CALL os('X=0 ', x=viscta%ADR(ind_csf)%P)
1805  ENDIF
1806 !
1807  DO itrac = 1,ntrac
1808 !
1809  multi1 => s3d_fludpt
1810  multi2 => s3d_fludp
1811  multi3 => s3d_fluer
1812  multi4 => s3d_wchu
1813 !
1814  IF(itrac.GE.ind_sed.AND.itrac.LE.ind_sed+nsusp_tel-1) THEN
1815  isusp=itrac-ind_sed+1
1816  yawchu=.true.
1817 ! SOLVER STRUCTURE
1818  slvd=slvdta(itrac)
1819  ELSEIF(s3d_sedi.AND.itrac.EQ.ntrac) THEN
1820  yawchu=.true.
1821 ! SOLVER STRUCTURE
1822  slvd=s3d_slvdse
1823  ELSE
1824  yawchu=.false.
1825 ! SOLVER STRUCTURE
1826  slvd=slvdta(itrac)
1827  ENDIF
1828 !
1829  IF(s3d_sedi.AND.s3d_mixte.AND.itrac.EQ.(ntrac-1)) THEN
1830  yawchu=.true.
1831  slvd=s3d_slvdse
1832  multi1 => s3d_fludptnc
1833  multi2 => s3d_fludpnc
1834  multi3 => s3d_fluernc
1835  multi4 => s3d_wcs
1836  ELSEIF(s3d_sedi.AND.s3d_mixte.AND.itrac.EQ.ntrac) THEN
1837  multi1 => s3d_fludptc
1838  multi2 => s3d_fludpc
1839  multi3 => s3d_fluerc
1840  ENDIF
1841 !
1842  IF(debug.GT.0) THEN
1843  WRITE(lu,*) 'APPEL DE CVDF3D POUR TRACEUR ',itrac
1844  ENDIF
1845 !
1846  CALL cvdf3d
1847  & (ta%ADR(itrac)%P,tac%ADR(itrac)%P,trn%ADR(itrac)%P,
1848  & viscta%ADR(itrac)%P,sigmta,
1849  & s0ta%ADR(itrac)%P,.true.,s1ta%ADR(itrac)%P,.true.,
1850  & taborl%ADR(itrac)%P,taborf%ADR(itrac)%P,tabors%ADR(itrac)%P,
1851  & atabol%ADR(itrac)%P,atabof%ADR(itrac)%P,atabos%ADR(itrac)%P,
1852  & btabol%ADR(itrac)%P,btabof%ADR(itrac)%P,btabos%ADR(itrac)%P,
1853  & litabl%ADR(itrac)%P,litabf%ADR(itrac)%P,litabs%ADR(itrac)%P,
1854  & fluxbil(1:maxfro+nsce+1,5+itrac),
1855  & flux%R(5+itrac),fluext,fluextpar,
1856  & tamin,ctamin,tamax,ctamax,schcta(itrac),
1857  & schdta,slvd,trbata,infogr,newdif,calcflu(5+itrac),
1862  & svide,it1,trav3,mesh2d,optban,tetatra,
1863  & yawchu,wchu%ADR(itrac)%P,multi4,agglod,nsce,sources,
1864  & ta_sce%ADR(itrac)%P%R,
1865  & numliq%I,dirflu,nfrliq,volut,zt,zprop,calcrain(5+itrac),
1867  & maxadv,fludpt%ADR(num_isusp_icla(isusp))%P,
1868  & fludp%ADR(num_isusp_icla(isusp))%P,
1869  & fluer%ADR(num_isusp_icla(isusp))%P,volu2d,v2dpar,setdep,
1870  & multi1,multi2,multi3,s3d_setdep,optsou,
1871  & zn%R,optadv_tr(itrac),nco_dist,nsp_dist,tb2)
1872 !
1873 ! NEWDIF=.FALSE. (POSSIBLE IF SIGMTA UNCHANGED)
1874 !
1875  IF(debug.GT.0) THEN
1876  WRITE(lu,*) 'RETOUR DE CVDF3D POUR TRACEUR ',itrac
1877  ENDIF
1878 !
1879  ENDDO
1880 !
1881 !-----------------------------------------------------------------------
1882 ! COMPUTES DELRA RHO / RHO FOR THE BUOYANCY TERMS
1883 !
1884  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE DRSURR'
1885  CALL drsurr(deltar,ta,betac,t0ac,rho,rho0,xmvs0,s3d_rhos,
1887  & s3d_mixte,num_isusp_icla,nsicla)
1888  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE DRSURR'
1889 !
1890  IF( (inclus(coupling,'WAQTEL') ).AND.
1891  & (13*int(waqprocess/13).EQ.waqprocess) ) THEN
1892 ! ORDER: NUMBER OF THE PLANES FROM TOP TO BOTTOM
1893 ! THEN NUMBER OF THE 2D NODES
1894  DO i=1,npoin2
1895  DO k=1,nplan
1896  rho4aed2%R(k+(i-1)*nplan) = rho%R(i+(nplan-k)*npoin2)
1897  ENDDO
1898  ENDDO
1899  ENDIF
1900 !
1901  ENDIF
1902 !
1903 #if defined COMPAD
1905 #endif
1906 !
1907  END DO subiter
1908 !
1909 !-----------------------------------------------------------------------
1910 !
1911 ! SEDIMENTOLOGY : FLUDP SENT TO GAIA
1912 !
1913  IF(nsusp_tel.GT.0) THEN
1914  DO itrac=ind_sed, ind_sed+nsusp_tel-1
1915  isusp=itrac-ind_sed+1
1916 !
1917  IF(setdep.NE.1) THEN
1918  IF(optban.EQ.1) THEN
1919  DO ipoin=1,npoin2
1920 ! correction for tidal flats: take the first point above crushed planes
1921 ! IPBOT=0: no tidal flats
1922 ! IPBOT=NPLAN-1: dry element
1923  IF(ipbot%I(ipoin).NE.nplan-1) THEN
1924  fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin)=
1925  & fludpt%ADR(num_isusp_icla(isusp))%P%R(ipoin)*
1926  & ta%ADR(itrac)%P%R(ipbot%I(ipoin)*npoin2+ipoin)
1927  fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin)=
1928  & max(fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin),
1929  & 0.d0)
1930  ELSE
1931  fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin)=0.d0
1932  ENDIF
1933  ENDDO
1934  ELSE
1935  DO ipoin=1,npoin2
1936  fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin)=
1937  & fludpt%ADR(num_isusp_icla(isusp))%P%R(ipoin)*
1938  & ta%ADR(itrac)%P%R(ipoin)
1939 ! FLUDP MUST BE POSITIVE, EVEN IF TA<0 DUE TO TRUNCATION ERRORS PROBLEM
1940 ! SEEN WITH TA=-1.D-87 !!!!!
1941  fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin)=
1942  & max(fludp%ADR(num_isusp_icla(isusp))%P%R(ipoin),
1943  & 0.d0)
1944  ENDDO
1945  ENDIF
1946  ENDIF
1947 !
1948  ENDDO
1949  ENDIF
1950 !
1951 ! SEDIMENTOLOGY SEDI3D: BOTTOM TREATMENT
1952 !
1953  IF(s3d_sedi) THEN
1954 !
1955 ! FONVAS DOES ZF=ZR+S3D_HDEP, THUS S3D_HDEPMUST INCLUDE BEDLOAD
1956 ! EROSION, HAS BEEN TAKEN INTO ACCOUNT INTO CLSEDI ABOVE
1957 ! GA: FONVAS HAS BEEN MODIFIED TO ALLOW TWO SEDIMENT CLASSES
1958  IF (s3d_mixte) THEN
1959  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FONVAS S3D_MIXTE'
1960  CALL fonvas
1961  & (s3d_epai,s3d_conc,
1963  & ta%ADR(ntrac)%P%R,
1966  & ta%ADR(ntrac-1)%P%R,s3d_fludptc%R,s3d_fludptnc%R,
1969  & s3d_epaico%R,s3d_epainco%R)
1970 
1971  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FONVAS S3D_MIXTE'
1972 !
1973  ELSEIF (s3d_sedco.OR.s3d_sednco) THEN
1974 
1975  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FONVAS '
1976  CALL fonvas
1977  & (s3d_epai,s3d_conc,
1979  & ta%ADR(ntrac)%P%R,
1982  & ta%ADR(ntrac)%P%R,s3d_fludptc%R,s3d_fludptnc%R,
1985  & s3d_epaico%R,s3d_epainco%R)
1986 
1987  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FONVAS '
1988  ELSE
1989 !
1990  WRITE(lu,*) ' '
1991  WRITE(lu,*) 'SEDI3D : ERROR ON SEDIMENT KEY WORD'
1992  CALL plante(1)
1993  stop
1994  ENDIF
1995  ENDIF
1996 !
1997 !
1998  IF(inclus(coupling,'GAIA ').AND.nsusp_tel.GT.0) THEN
1999 !
2000 ! U AND V WITH 2D STRUCTURE : BOTTOM VELOCITY AS A 2D
2001 ! VARIABLE
2002  CALL cpstvc(u2d,u)
2003  CALL cpstvc(v2d,v)
2004 !
2005 ! NOW RUNS ONE TURN OF GAIA'S TIME LOOP
2006 ! AND RETURNS
2007  CALL config_code(5)
2008  IF(debug.GT.0) WRITE(lu,*) 'CALLING GAIA_STEP 2'
2009  CALL gaia_step(
2010  & lt,graprd,lisprd,nit_ori,u2d,v2d,h,zf,
2011  & uetcar,deltar,cf,rugof,code1,
2013  & rho0,grav,
2014 ! VARIABLES TRANSMITTED FROM TOMAWAC
2015  & dirmoy,hm0,tpr5,orbvel,.true.)
2016  IF(debug.GT.0) WRITE(lu,*) 'BACK GAIA_STEP 2'
2017  CALL config_code(1)
2018 !
2019 ! check if this is necessary
2020 ! RETRIEVES ORIGINAL U AND V STRUCTURE
2021  CALL cpstvc(un,u)
2022  CALL cpstvc(vn,v)
2023 ! end check
2024  ENDIF
2025 !
2026 ! UPDATES GEOMETRY IF THE BOTTOM HAS EVOLVED
2027 !
2028  IF(inclus(coupling,'SISYPHE').OR.inclus(coupling,'GAIA ')
2029  & .OR.s3d_sedi) THEN
2030 !
2031 ! COPIES MODIFIED BOTTOM TOPOGRAPHY INTO Z AND ZPROP
2032  CALL ov('X=Y ', x=z(1:npoin2), y=zf%R, dim1=npoin2)
2033  CALL ov('X=Y ', x=zprop%R(1:npoin2), y=zf%R, dim1=npoin2)
2034 ! COMPUTES NEW BOTTOM GRADIENTS AFTER SEDIMENTATION
2035  CALL grad2d(gradzf%ADR(1)%P,gradzf%ADR(2)%P,zprop,nplan,svide,
2036  & unsv2d,t2_02,t2_03,t2_04,
2037  & ielm2h,mesh2d,msk,maskel)
2038 ! COMPUTES NEW Z COORDINATES
2039  CALL calcot(z,h%R)
2040 ! USEFUL ? NOT SURE, IS DONE AT EACH TIMESTEP ELSEWHERE, SO..
2041 ! CALL CALCOT(ZPROP%R,HPROP%R)
2045  CALL vector(volu, '=', 'MASBAS ',ielm3,1.d0-aggloh,
2047  IF(aggloh.GT.1.d-6) THEN
2048  CALL vector(volu, '+', 'MASBAS2 ',ielm3,aggloh,
2050  ENDIF
2051  IF(ncsize.GT.1) THEN
2052  CALL os('X=Y ',x=volupar,y=volu)
2053  CALL parcom(volupar,2,mesh3d)
2054  ENDIF
2055 !
2056  ENDIF
2057 !
2058 !-----------------------------------------------------------------------
2059 !
2060 ! PREPARES 2D AND 3D OUTPUT
2061 !
2062 ! ALWAYS CALLED (SEE E.G. OUTPUT MAXZ)
2063 !
2064  CALL preres_telemac3d
2065 !
2066 ! CALLED IF OUTPUTS REQUESTED
2067 !
2068  IF(mod(lt,graprd).EQ.0.AND.lt.GE.gradeb) THEN
2069 !
2070 ! 3D OUTPUT
2071 !
2072  IF(t3d_files(t3dres)%NAME(1:1).NE.' ') THEN
2073  CALL bief_desimp(t3d_files(t3dres)%FMT,varso3,
2074  & npoin3,t3d_files(t3dres)%LU,at,lt,
2075  & lisprd,graprd,
2077  ENDIF
2078 !
2079 ! 3D OUTPUT FOR RESTART
2080 !
2081  IF(lt.EQ.nit_ori.AND.restart_mode
2082  & .AND.t3d_files(t3drst)%NAME(1:1).NE.' ') THEN
2084  & t3d_files(t3drst)%LU,at,lt,
2085  & 1,nit_ori,sorest,soris3,maxva3,text3,0,0)
2086  ENDIF
2087 !
2088 ! 2D OUTPUT
2089 !
2090  IF(t3d_files(t3dhyd)%NAME(1:1).NE.' ') THEN
2091  CALL bief_desimp(t3d_files(t3dhyd)%FMT,varsor,
2092  & npoin2,t3d_files(t3dhyd)%LU,at,lt,
2093  & lisprd,graprd,
2095  ENDIF
2096 !
2097  ENDIF
2098 !
2099 ! SEDIMENTOLOGY OUTPUT FOR SEDI
2100 !
2101  IF(s3d_sedi.AND.t3d_files(s3d_t3dsed)%NAME(1:1).NE.' ') THEN
2102  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE DESSED'
2103  CALL dessed(npf%I,s3d_ivide%R,s3d_epai,s3d_hdep%R,
2104  & s3d_temp%R,zr%R,npoin2,s3d_npfmax,
2107  & s3d_birsed,0)
2108  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE DESSED'
2109  ENDIF
2110 !
2111 ! OPTIONAL USER OUTPUT
2112 !
2114 !
2115 ! SEDIMENT OUTPUT FOR SEDI
2116 !
2117  IF(s3d_sedi) THEN
2118  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE IMPSED'
2120  & s3d_pdepo%R,s3d_fluer%R,
2121  & zr%R,zf%R,ta%ADR(ntrac)%P%R,s3d_wchu%R,x,y,
2123  & s3d_rhos,s3d_cfmax,
2125  & prive,lisprd)
2126  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE IMPSED'
2127  ENDIF
2128 !
2129 !=======================================================================
2130 ! DROGUES/FLOATS/BUOYS
2131 !=======================================================================
2132 !
2133  IF(nflot_max.GT.0.AND..NOT.spill_model) THEN
2134 !
2135  IF(spheri) THEN
2136  CALL os('X=Y/Z ',x=uconv,y=uconv,z=mesh3d%COSLAT)
2137  CALL os('X=Y/Z ',x=vconv,y=vconv,z=mesh3d%COSLAT)
2138  ENDIF
2139 !
2140 ! ADDING AND REMOVING DROGUES
2141 !
2142  IF(debug.GT.0) WRITE(lu,*) 'CALLING FLO3D'
2143  CALL flot3d(xflot%R,yflot%R,zflot%R,nflot,nflot_max,x,y,z,
2144  & mesh3d%IKLE%I,
2145  & mesh3d%NELEM,mesh3d%NELMAX,npoin3,nplan,
2146  & tagflo%I,clsflo%I,shpflo%R,shzflo%R,eltflo%I,etaflo%I,
2147  & mesh3d,lt,nit_ori,at)
2148  IF(debug.GT.0) WRITE(lu,*) 'BACK FROM FLO3D'
2149 !
2150  IF(infogr) CALL mittit(12,at,lt)
2151 !
2152 ! MOVING THEM
2153 !
2154  IF(debug.GT.0) WRITE(lu,*) 'CALLING DERIVE'
2155  CALL derive(uconv%R,vconv%R,wconv%R,dt,at,
2156  & x,y,z,
2157  & mesh2d%IKLE%I,mesh3d%IFABOR%I,lt,ielm3,uconv%ELM,
2158  & 3,3,
2159  & npoin3,npoin2,nelem2,mesh2d%NELMAX,
2160  & mesh2d%SURDET%R,xflot%R,yflot%R,zflot%R,
2161  & shpflo%R,shzflo%R,tagflo%I,clsflo%I,eltflo%I,etaflo%I,
2163  & it1%I,t3_01%R,t3_02%R,t3_03%R,it2%I,
2164 ! NO STOCHASTIC DIFFUSION
2165  & mtra1%X%R,mtra2%X%R,npoin3,0,svide,
2166  & nplan,zchar%R,transf)
2167  IF(debug.GT.0) WRITE(lu,*) 'BACK FROM DERIVE'
2168 !
2169 ! PRINTING THEM
2170 !
2171  IF(debug.GT.0) WRITE(lu,*) 'CALLING UTIMP_DROGUES'
2173  & xflot%R,yflot%R,zflot%R,tagflo%I,clsflo%I,
2176  IF(debug.GT.0) WRITE(lu,*) 'BACK FROM UTIMP_DROGUES'
2177 !
2178  IF(spheri) THEN
2179  CALL os('X=XY ',x=uconv,y=mesh3d%COSLAT)
2180  CALL os('X=XY ',x=vconv,y=mesh3d%COSLAT)
2181  ENDIF
2182 !
2183  ENDIF
2184 !
2185 !-----------------------------------------------------------------------
2186 !
2187 ! MASS BALANCE FOR THE CURRENT TIMESTEP
2188 !
2189  IF (bilmas) THEN
2190 !
2191  IF (.NOT.infmas) infogr = .false.
2192  infogr = infogr .AND. listin
2193  IF (infogr) CALL mittit(10,at,lt)
2194 !
2195  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE MASS3D'
2196  CALL mass3d(infogr)
2197  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE MASS3D'
2198 !
2199 !
2200  IF(s3d_sedi) THEN
2201 !
2202 ! DETERMINE S3D_MASSUSP: MASS IN SUSPENSION
2203 ! S3D_MASBED: MASS OF SEDIMENT BED
2204 ! S3D_MASDEP: DEPOSITED MASS
2205  s3d_massusp= masse%R(5+ntrac)
2206 ! INITIALISATION
2207  IF(lt.EQ.1) s3d_massusp0= s3d_massusp
2208 !
2209 !GA: SED3D HAS BEEN MODIFIED TO ALLOW TWO SEDIMENT CLASSES
2210  IF(infogr) THEN
2211  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SED3D'
2213  & s3d_epai,s3d_conc,
2214  & t2_01%R,
2215  & npoin2,s3d_ncouch,
2216  & at,volu2d%R,
2218 !
2219  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SED3D'
2220  ENDIF
2221 !
2222  ENDIF
2223 !
2224  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE BIL3D'
2225  CALL bil3d(lt,nit_ori,mesh3d%IKLBOR%I,nptfr2,netage)
2226  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE BIL3D'
2227 !
2228  ENDIF
2229 !
2230 ! COMPARES WITH REFERENCE FILE
2231 !
2232  IF(valid.AND.t3d_files(t3dres)%NAME(1:1).NE.' ') THEN
2233  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE BIEF_VALIDA'
2234  CALL bief_valida(trav3,textp3,
2235  & t3d_files(t3dref)%LU,t3d_files(t3dref)%FMT,
2236  & varso3,text3,
2237  & t3d_files(t3dres)%LU,t3d_files(t3dres)%FMT,
2238  & maxva3,npoin3,lt,nit_ori,alire3d)
2239  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE BIEF_VALIDA'
2240  ELSEIF(valid.AND.t3d_files(t3dres)%NAME(1:1).EQ.' '.AND.
2241  & lt.EQ.nit_ori) THEN
2242  WRITE(lu,*) ' '
2243  WRITE(lu,*) ' '
2244  WRITE(lu,*) 'NO VALIDATION IF NO'
2245  WRITE(lu,*) '3D RESULT FILE!!!'
2246  ENDIF
2247 !
2248 !
2249 ! CHECKS VALUES SHARED BETWEEN SUBDOMAINS
2250 !
2251 ! CALL CHECK_DIGITS(H ,T2_01,MESH2D)
2252 ! CALL CHECK_DIGITS(U ,T3_01,MESH3D)
2253 ! CALL CHECK_DIGITS(V ,T3_01,MESH3D)
2254 ! CALL CHECK_DIGITS(W ,T3_01,MESH3D)
2255 ! IF(NTRAC.GT.0) THEN
2256 ! DO ITRAC=1,NTRAC
2257 ! CALL CHECK_DIGITS(TA%ADR(ITRAC)%P,T3_01,MESH3D)
2258 ! ENDDO
2259 ! ENDIF
2260 !
2261 #if defined COMPAD
2263 #endif
2264 !
2265  IF(lt.LT.nit) GO TO 700
2266 ! END OF TIME LOOP
2267 !
2268 !=======================================================================
2269 ! THE TIME LOOP ENDS HERE
2270 !=======================================================================
2271 !
2272  IF(pass.NE.1) THEN
2273  IF(listin) WRITE(lu,19)
2274 19 FORMAT(/,1x,'END OF TIME LOOP',////)
2275  ENDIF
2276 !
2277 !-----------------------------------------------------------------------
2278 !
2279 #if defined COMPAD
2280  CALL ad_telemac3d_end
2281 #endif
2282 !
2283  RETURN
2284  END
2285 
type(bief_obj), target us2d
type(bief_obj), target limpro
type(bief_obj), target eborl
type(bief_obj), target volu
subroutine ad_telemac3d_timestep_end
type(bief_obj), target v
type(bief_obj), target volu3dpar
type(bief_obj), target likbof
type(bief_obj), target s0ep
type(bief_obj), target zr
type(bief_obj), target mtra2
type(bief_file), dimension(maxlu_t3d), target t3d_files
double precision, dimension(:), pointer ubus
double precision, target rho0
type(bief_obj), target zf
type(bief_obj), target viscta
type(bief_obj), target liwbos
type(bief_obj), pointer t3_08
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
type(bief_obj), pointer t3_09
integer, dimension(:), allocatable frtype
type(bief_obj), pointer it2
type(bief_obj), target fludpt
Deposition flux for implicitation.
type(bief_obj), target hprop
type(bief_obj), target s0ak
subroutine utimp_drogues(LTL, ATL, NPOIN2, NPOIN3, XFLOT, YFLOT, ZFLOT, TAGFLO, CLSFLO, NFLOT, NFLOT_MAX, FLOPRD, DEJA, T2DFLO, T2DBLO, MARDAT, MARTIM)
Definition: utimp_drogues.f:8
type(bief_obj), target ta_sce
type(bief_obj), target flbor
type(bief_obj), target strain
subroutine flot3d(XFLOT, YFLOT, ZFLOT, NFLOT, NFLOT_MAX, X, Y, Z, IKLE, NELEM, NELMAX, NPOIN, NPLAN, TAGFLO, CLSFLO, SHPFLO, SHZFLO, ELTFLO, ETAFLO, MESH3D, LT, NIT, AT)
Definition: flot3d.f:8
type(bief_obj), target bebors
subroutine fsgrad(GRADZS, ZFLATS, Z, ZF, IELM2H, MESH2D, MSK, MASKEL, UNSV2D, T2_01, NPOIN2, OPTBAN, S)
Definition: fsgrad.f:8
subroutine calcot(ZZ, HH)
Definition: calcot.f:7
type(bief_obj), target, public windy
type(bief_obj), target lrgbus
subroutine, public gotm_coupling_step
type(bief_obj), target s3d_fludp
subroutine source(S0U, S0V, S0W, S1U, S1V, S1W, UN3, VN3, WSN3, WN3, VOLU, VOLUN, T3, NPOIN3, NTRAC, LT, AT, DT, PRIVE, NONHYD, NPOIN2, NSCE, ISCE, KSCE, QSCE, USCE, VSCE, MAXSCE)
Definition: source.f:10
type(bief_obj), target vbors
type(bief_obj), target buborf
type(bief_obj), target mmurd
type(bief_obj), target ta
type(bief_obj), pointer t2_03
type(bief_obj), target ipbot
type(bief_obj), target dirmoy
type(bief_obj), target windspd
subroutine vitchu(S3D_WCHU, S3D_WCHU0, U, V, S3D_TURBA, S3D_TURBB, TRAV1, TRAV2, TRAV3, S, MESH3D, IELM3, NPOIN2, NPOIN3, NPLAN, NTRAC, MSK, MASKEL, UETCAR, TA, HN, S3D_FLOC, S3D_FLOC_TYPE, S3D_HINDER, S3D_HIND_TYPE, S3D_CGEL, S3D_CINI)
Definition: vitchu.f:10
subroutine vissma(VISCVI, VISCTA, DNUTAH, DNUVIH, DNUVIV, DNUTAV, U, V, W, TRAV1, TRAV2, TRAV3, TRAV4, TRAV5, TRAV6, SVIDE, MESH3, IELM3, NTRAC, MSK, MASKEL, ITURBV)
Definition: vissma.f:9
type(bief_obj), target s3d_fludpnc
type(bief_obj), target vstokes
type(bief_obj), target s3d_fluer
type(bief_obj), target haubus
subroutine vermoy(FINT1, FINT2, F1, F2, NFONC, Z, TRA01, TRA02, TRA03, IPLAN1, IPLAN2, NPOIN2, NPLAN, OPTBAN)
Definition: vermoy.f:8
type(bief_obj), target uetcal
type(bief_obj), target s3d_wchu
type(bief_obj), pointer t3_04
subroutine viscos(VISCVI, VISCTA, DNUTAV, DNUTAH, DNUVIV, DNUVIH, NTRAC, ITURBH, ITURBV)
Definition: viscos.f:7
type(bief_obj), target uborl
subroutine flux_ef_vf_3d(FLOW, W2D, W3D, NSEG2D, NELEM2, NELMAX2, MESH2D, INIFLO, IOPT, SENS, IELM3, NPLAN, IKLE, NELMAX, KNOLG)
Definition: flux_ef_vf_3d.f:8
type(bief_obj), target zprop
type(bief_obj), pointer t2_11
type(bief_obj), target s3d_fludptnc
type(bief_obj), target zt
type(bief_obj), target smh
type(slvcfg), dimension(:), allocatable slvdta
type(bief_obj), target pluie
type(bief_obj), target tagflo
type(bief_mesh), target mesh2d
subroutine findksce(NPOIN2, NPLAN, Z, NSCE, ISCE, ZSCE, KSCE, INFO)
Definition: findksce.f:7
type(bief_obj), target anuborf
integer, parameter kadh
type(bief_obj), target, public tair
Definition: meteo_telemac.f:44
integer, dimension(maxvar) alire3d
type(bief_obj), target bkborl
type(bief_obj), target liubol
type(bief_obj), target s3d_esomt
type(bief_obj), target smv
type(bief_obj), pointer ikle3
type(bief_obj), target tbus
type(bief_obj), pointer t2_10
type(bief_obj), pointer t3_07
type(bief_obj), target vbor2d
subroutine bed_fluxes
Definition: bed_fluxes.f:4
type(bief_obj), target bwborl
type(bief_obj), pointer t2_20
type(bief_obj), target akn
type(bief_obj), target likbos
type(bief_obj), target dvs2d
type(bief_obj), target unsv3d
double precision, public cst_windy
type(bief_obj), target rho
subroutine bord3d(NFRLIQ)
Definition: bord3d.f:7
subroutine airwik2(LIHBOR, UBORF, VBORF, WBORF, LIUBOF, LIVBOF, LIWBOF, UBORL, VBORL, WBORL, LIUBOL, LIVBOL, LIWBOL, UBORS, VBORS, WBORS, LIUBOS, LIVBOS, LIWBOS, U, V, W, XNEBOR, YNEBOR, NBOR, NPTFR, NPLAN, NPOIN2, KENT, KADH, KLOG, KDEB, VELPROLAT)
Definition: airwik2.f:10
subroutine gaia_step(LOOPCOUNT, GRAFCOUNT, LISTCOUNT, TELNIT, U_TEL, V_TEL, H_TEL, ZF_TEL, UETCAR, DELTAR, CF_TEL, KS_TEL, CODE, U3D, V3D, T_TEL, VISC_TEL, DT_TEL, CHARR_TEL, SUSP_TEL, XMVE_TEL, GRAV_TEL, THETAW_TEL, HW_TEL, TW_TEL, UW_TEL, YAGOUT, API_ITER, GRCOMP)
Definition: gaia_step.F:12
type(bief_obj), target rugof
type(bief_obj), target ubor2d
type(bief_obj), target ep
type(bief_obj), target auborl
type(bief_obj), target rho4aed2
subroutine allblo(BLO, NOM)
Definition: allblo.f:7
type(bief_obj), target nun
double precision, dimension(:,:), allocatable, target s3d_epai
type(bief_obj), target zflats
type(bief_obj), pointer t3_12
type(bief_obj), target kborf
type(bief_obj), target vs2d
type(bief_obj), target anubors
type(bief_obj), target lbus
type(bief_obj), target v2dpar
subroutine prediv(PD, UP, VP, WP, INFO, BC, OPT, DIRSUR, DIRBOT, DIRLAT)
Definition: prediv.F:7
type(bief_obj), target ctrash
double precision, dimension(:), allocatable, target t0ac
type(bief_obj), target dm1
subroutine kepcl3(KBORF, EBORF, LIKBOF, LIEBOF, KBORL, EBORL, LIKBOL, LIEBOL, LIUBOL, KBORS, EBORS, LIKBOS, LIEBOS, DISBOR, AK, H, Z, NBOR, NPOIN2, NPLAN, NPTFR, KARMAN, CMU, KMIN, EMIN, KENT, KENTU, KSORT, KADH, KLOG, UETCAR, FICTIF)
Definition: kepcl3.f:13
type(bief_obj), target zchar
type(bief_obj), target vn2d
type(bief_obj), target varso3
type(bief_obj), pointer x2
type(bief_obj), target altbus
type(bief_obj), target prive
type(bief_obj), target aeborl
type(bief_obj), target atabos
type(bief_obj), target wborl
type(bief_obj), target litabf
type(bief_obj), target btabof
type(bief_obj), target bubors
subroutine soukep(CV1, CV2, S1K, S1E, U, V, W, DELTAR, RI, DUDX, DUDY, DUDZ, DVDX, DVDY, DVDZ, DWDX, DWDY, DWDZ, DTADZ, AK, EP, C1, C2, CMU, GRAV, NPOIN3, MSK, MASKEL, MESH3D, IELM3, S, VENT, WINDX, WINDY, NPOIN2, KMIN, PRANDTL)
Definition: soukep.f:10
type(bief_obj), target litabl
type(bief_obj), pointer t3_05
type(bief_obj), target kborsave
subroutine telemac3d_init
Definition: telemac3d_init.F:4
type(bief_obj), target un
type(bief_obj), target uetcar
type(bief_obj), target bkbors
subroutine meteo(PATMOS, WINDX, WINDY, FUAIR, FVAIR, AT, LT, NPOIN, VENT, ATMOS, ATMFILEA, ATMFILEB, FILES, LISTIN, PATMOS_VALUE, AWATER_QUALITY, PLUIE, AOPTWIND, AWIND_SPD)
Definition: meteo.f:9
double precision function t3d_debsce(TIME, I, DISCE)
Definition: t3d_debsce.f:7
type(bief_obj), target s1u
type(bief_obj), target circ
subroutine trisou(CV1, CV2, SCV1, SCV2, UN3, VN3, X, Y, Z, ZS, DELTAR, MESH3, FCOR, CORIOL, NTRAC, AT, SURFAC, T1, ST1, W1, W2, W3, GRAV, NPOIN3, NELEM3, NPOIN2, NELEM2, NPLAN, NETAGE, IKLE3, LV, MSK, MASKEL, INCHYD, SVOLU, SVIDE, IELM3, SMASKEL, NREJEU, ISCE, KSCE, QSCE, USCE, VSCE, GRADZSX, GRADZSY, MESH2D, ST2, T2, ST3, T3, LONGIT, YASEM3D, SCHCVI, DENLAW, FXH, FYH, COUROU, NPTH, T3D_FILES, T3DBI1)
Definition: trisou.f:14
type(bief_obj), target s0v
logical, dimension(:), allocatable calcrain
type(bief_obj), target eborsave
integer, parameter kentu
type(bief_obj), target uborsave
type(bief_obj), target liebof
subroutine bief_allvec_in_block(BLO, N, NAT, NOMGEN, IELM, NDIM, STATUT, MESH)
logical, dimension(maxvar) sorg2d
type(bief_obj), target cfwc
subroutine cvdf3d(FD, FC, FN, VISCF, SIGMAF, S0F, YAS0F, S1F, YAS1F, FBORL, FBORF, FBORS, AFBORL, AFBORF, AFBORS, BFBORL, BFBORF, BFBORS, LIFBOL, LIFBOF, LIFBOS, FLUXB, FLUXF, FLUEXT, FLUEXTPAR, FMIN, CLIMIN, FMAX, CLIMAX, SCHCF, SCHDF, SLVDIF, TRBAF, INFOR, NEWDIF, CALFLU, T2_01, T2_03, T3_01, T3_02, T3_03, T3_04, MESH3D, IKLE3, MASKEL, MTRA1, NPTFR3, MMURD, MURD_TF, VOLU, VOLUPAR, VOLUN, VOLUNPAR, NBOR3, NPOIN3, NPOIN2, DT, MSK, NELEM3, NPLAN, IELM3, MSUPG, IELM2H, IELM2V, MDIFF, MTRA2, INCHYD, MASKBR, MASKPT, SEM3D, YASEM3D, SVIDE, IT1, TRAV3, MESH2D, OPTBAN, TETADI, YAWCHU, WCHU, S3D_WCHU, AGGLOD, NSCE, SOURCES, FSCE, NUMLIQ, DIRFLU, NFRLIQ, VOLUT, ZT, ZPROP, RAIN, PLUIE, PARAPLUIE, TRAIN, FLODEL, FLOPAR, SIGMAG, IPBOT, MAXADV, FLUDPT, FLUDP, FLUER, VOLU2D, V2DPAR, SETDEP, S3D_FLUDPT, S3D_FLUDP, S3D_FLUER, S3D_SETDEP, OPTSOU, ZN, OPTADV, NCO_DIST, NSP_DIST, TB2)
Definition: cvdf3d.f:24
type(bief_obj), target volut
subroutine masbas2d(VOLU2D, V2DPAR, UNSV2D, IELM, MESH, MSK, MASKEL, T1, S)
Definition: masbas2d.f:7
type(bief_obj), pointer t2_07
type(bief_obj), target ak_sce
type(bief_obj), target tpr5
type(bief_obj), target trn
subroutine tbord(AUBORL, RUGOL, DISBOR, NELBOR, NULONE, IKLE, NELMAX2, U, V, W, NBOR, NPOIN2, NPLAN, NPTFR, DNUVIH, DNUVIV, KARMAN, LISRUL, KFROTL, UETCAL, NONHYD, UTANG, MESH2D)
Definition: tbord.f:11
type(bief_obj), target s1ta
double precision, dimension(:), allocatable dnutav
type(bief_obj), target akc
subroutine thomps_2dto3d
Definition: thomps_2dto3d.f:4
type(bief_obj), target unsv2d
type(bief_obj), target fricbus
subroutine om(OP, M, N, D, C, MESH)
Definition: om.f:7
type(bief_obj), target wbors
double precision, dimension(:), allocatable, target betac
type(bief_obj), target s3d_fludpc
type(bief_obj), target taborl
double precision function t3d_trsce(TIME, I, ITRAC)
Definition: t3d_trsce.f:7
type(bief_obj), target s1v
subroutine ad_telemac3d_end
type(bief_obj), target wborsave
type(bief_obj), target s3d_temp
type(bief_obj), target btabos
type(bief_obj), target maskel
type(bief_obj), target liubof
type(bief_obj), target fyh
subroutine fonvas(S3D_EPAI, S3D_CONC, S3D_HDEP, S3D_FLUDP, S3D_FLUDPT, S3D_FLUER, ZF, TA, NPOIN2, NPOIN3, S3D_NCOUCH, DT, S3D_ZF_S, S3D_ESOMT, VOLU2D, S3D_MASDEP, S3D_SETDEP, ZR, TS, S3D_FLUDPTC, S3D_FLUDPTNC, S3D_FLUERC, S3D_FLUERNC, S3D_MIXTE, S3D_FLUDPC, S3D_FLUDPNC, S3D_PVSCO, S3D_PVSNCO, S3D_CFDEP, S3D_EPAICO, S3D_EPAINCO)
Definition: fonvas.f:15
subroutine impsed(S3D_IVIDE, S3D_EPAI, S3D_CONC, S3D_TEMP, S3D_HDEP, PDEPOT, S3D_FLUER, ZR, ZF, TA, WC, X, Y, NPOIN2, NPOIN3, S3D_NPFMAX, S3D_NCOUCH, NPF, LT, S3D_RHOS, S3D_CFMAX, S3D_CFDEP, S3D_EPAI0, S3D_TASSE, S3D_GIBSON, PRIVE, LISPRD)
Definition: impsed.f:11
type(bief_obj), pointer t3_06
type(bief_obj), target longbus
type(bief_obj), target yflot
type(bief_obj), target liwbol
double precision, dimension(:), allocatable train
subroutine mask3d(IFABOR3D, MASKEL, MASKPT, MASKBR, X, Y, ZF, ZFE, H, HMIN, AT, LT, ITRA01, NELBO3, NELMA2, NELEM2, NPOIN2, NELEB2D, NPLAN, NETAGE, IELM3, MESH2D)
Definition: mask3d.f:9
type(bief_obj), target vc
subroutine buse(RELAXB, NBUSE, ENTBUS, SORBUS, GRAV, H, ZF, DBUS, LRGBUS, HAUBUS, CLPBUS, ALTBUS, CSBUS, CEBUS, ANGBUS, LBUS, NTRAC, T, TBUS, UBUS, VBUS, U, V, ENTET, CV, C56, CV5, C5, CTRASH, FRICBUS, LONGBUS, CIRC, DELBUS, OPTBUSE, V2DPAR, DT, SECBUS, MAXSOURCE, NPTSCE, NPOIN2, KSCE)
Definition: buse.f:13
type(bief_obj), target wconv
type(bief_obj), target flux
type(bief_obj), target s3d_pdepo
type(bief_obj), target litabs
type(bief_obj), target tabors
type(bief_obj), pointer t3_10
logical, dimension(maxva3) sorg3d
type(bief_obj), target temp4aed2
subroutine viscko(VISCVI, VISCTA, ROTAT, AK, EP, NTRAC, DNUVIH, DNUVIV, DNUTAH, DNUTAV, ITURBH, ITURBV, T1, T2)
Definition: viscko.f:8
type(bief_obj), target massen
type(bief_obj), target, public windx
type(bief_obj), target s0w
integer, parameter kent
type(bief_obj), pointer t2_16
type(bief_obj), pointer surfa2
type(bief_obj), target s3d_hdep
type(bief_obj), target fdk
type(bief_obj), target fluextpar
type(bief_obj), pointer t3_13
type(bief_obj), target bwbors
subroutine drsurr(DELTAR, TA, BETAC, T0AC, RHO, RHO0, XMVS0, S3D_RHOS, DENLAW, S3D_SEDI, NTRAC, IND_T, IND_S, IND_SED, NSUSP_TEL, S3D_MIXTE, NUM_ISUSP_ICLA, NSICLA)
Definition: drsurr.f:9
type(bief_obj), target sem3d
type(bief_obj), pointer it1
type(bief_obj), target atabol
double precision, dimension(:), pointer vbus
subroutine grad2d(DFDX, DFDY, FU, NPLAN, S, UNSV2D, FU2, FU3, FU4, IELM2, MESH2D, MSK, MASKEL)
Definition: grad2d.f:7
type(bief_obj), target aeborf
character(len=32), dimension(maxva3) text3
type(bief_obj), target aubors
type(bief_obj), pointer t2_23
double precision, target prandtl
type(bief_obj), target maskbr
type(bief_obj), target uborf
type(bief_obj), pointer t2_19
type(bief_obj), target ubors
type(bief_obj), pointer t2_22
subroutine velres(U, V, W, DP, PX, PY, PZ, MSK, MASKEL, MESH3D, S, IELM3, OPTBAN, UNSVOL, DO_UNSVOL, NPOIN3, NPOIN2, SIGMAG, IPBOT, AGGLOH, KSORT, NPTFR3, LIUBOL, CONCOR)
Definition: velres.f:9
double precision, public cst_patmos
type(bief_obj), target s3d_cref
type(bief_obj), target nuborsave
subroutine clsedi(ATABOF, BTABOF, WC, Z, HN, DELTAR, TOB, DENSI, S3D_EPAI, S3D_CFDEP, S3D_CONC, S3D_HDEP, S3D_FLUER, S3D_FLUDPT, LITABF, KLOG, NPOIN3, NPOIN2, NPLAN, S3D_NCOUCH, DT, RHO0, S3D_RHOS, S3D_TOCD, S3D_MPART, S3D_TOCE, UETCAR, GRAV, S3D_SEDCO, S3D_DMOY, S3D_CREF, ZREF, CF, S3D_AC, S3D_KSPRATIO, S3D_ICR, S3D_ICQ, RUGOF, S3D_SETDEP, HMIN, S3D_WCS, S3D_EPAICO, S3D_EPAINCO, S3D_MIXTE, S3D_SEDNCO, S3D_FLUDPTC, S3D_FLUDPTNC, S3D_FLUERC, S3D_FLUERNC, NTRAC, ITRAC)
Definition: clsedi.f:19
type(bief_obj), target mtra1
logical, dimension(maxva3) sorest
type(bief_obj), target livbos
type(bief_obj), target bvbors
type(bief_obj), target s0nu
type(bief_obj), pointer t2_18
type(bief_obj), target masse
type(bief_obj), target vborl
type(bief_obj), target vborsave
type(bief_obj), pointer t3_14
type(bief_obj), target sali4aed2
integer, dimension(:), pointer kentbus
double precision, public cst_windx
type(bief_obj), target linubos
subroutine correction_depth_3d(GLOSEG, DIMGLO)
type(bief_obj), target livbof
type(bief_obj), target s3d_wcs
type(bief_obj), target s3d_dmoy
type(bief_obj), pointer t3_11
integer, dimension(:), allocatable dirflu
type(bief_obj), target angbus
type(bief_obj), target mdiff
type(bief_obj), target npf
type(bief_obj), target ri
type(bief_obj), target v_sce
type(bief_obj), target s1nu
integer, dimension(:), allocatable, target isce
type(bief_obj), target eltflo
type(bief_obj), target s3d_pvsnco
type(bief_obj), target nuborf
CEDRIC GOEURY (LHSV & LNHE) 22/05/2014 V7P0 Second version
Definition: oilspill.f:62
type(bief_obj), target trav3
type(bief_obj), target volunpar
integer, dimension(3) martim
type(bief_obj), pointer t2_04
type(bief_obj), target v2d
type(bief_obj), target delbus
subroutine compute_settling_vel(WCHU, U, V, TRAV1, TRAV2, TRAV3, S, MESH3D, IELM3, NPOIN2, NPOIN3, NPLAN, MSK, MASKEL, UETCAR, TA, HN)
type(bief_obj), target fluxb
type(bief_obj), target s3d_pvsco
type(bief_obj), target s3d_epainco
subroutine wac(PART, NIT_ORI)
Definition: wac.F:7
type(bief_obj), target ud
type(bief_obj), pointer t3_16
subroutine viscsa(VISCVI, VISCNU, NU, DNUVIH, DNUVIV, AK, EP, STRAIN)
Definition: viscsa.f:8
type(bief_obj), target clsflo
type(bief_obj), target beborf
type(bief_obj), target ustokes
type(bief_obj), target volupar
double precision, dimension(:), allocatable, target zsce
type(bief_obj), target btabol
type(bief_obj), target hbor
type(bief_obj), target c5
type(bief_obj), target un2d
subroutine visclip(VISCVI, VISCTA, H, NPLAN, NPOIN2, NTRAC, HLIM)
Definition: visclip.f:7
type(bief_obj), target secbus
logical, dimension(maxva3) soris3
type(bief_obj), target liebol
type(bief_obj), target kborl
subroutine ad_telemac3d_begin
type(bief_obj), target thick4aed2
subroutine plane_bottom(IPBOT, Z, NPOIN2, NPLAN, SIGMAG, OPTBAN)
Definition: plane_bottom.f:7
type(bief_obj), target numliq
type(bief_obj), target rotat
type(bief_obj), target atabof
subroutine mittit(IETAPE, AT, LT)
Definition: mittit.f:7
type(bief_obj), target fluext
type(bief_obj), target w
logical function inclus(C1, C2)
Definition: inclus.f:7
integer, target nsicla
Number of sediment classes of bed material (less than NISCLM)
type(bief_obj), target bnubors
type(bief_obj), target murd_tf
type(bief_obj), target c56
subroutine thomps_bc(OPTION)
Definition: thomps_bc.f:7
type(bief_obj), target s0u
type(bief_obj), target s3d_zf_s
type(bief_obj), target s3d_fludptc
double precision, parameter eps_aed2
type(bief_obj), target zfe
double precision, dimension(:), allocatable, target qsce
type(bief_obj), target gradzn
integer, dimension(:), allocatable, target ksce
type(bief_obj), target cebus
subroutine coefro(CF, H, U, V, KARMAN, KFROT, CHESTR, GRAV, MESH, T1, YAFV)
Definition: coefro.f:7
type(bief_obj), target aebors
type(bief_obj), target u
type(bief_obj), target wd
type(bief_obj), target dssudt
type(bief_obj), target uc
type(bief_obj), target sources
type(bief_obj), target akborl
type(bief_obj), target tb2
type(bief_obj), target rugol
type(bief_obj), target viscnu
type(bief_obj), target s3d_fludpt
type(bief_obj), target clpbus
type(bief_obj), target buborl
subroutine mesh_prop(HPROP, HN, H, PROLIN, HAULIN, TETA, NSOUSI, ZPROP, IPBOT, NPOIN2, NPLAN, OPTBAN, SIGMAG, OPT_HNEG, MESH3D, VOLU3D, VOLU3DPAR, UNSV3D, MASKEL, IELM3)
Definition: mesh_prop.f:9
type(bief_obj), pointer t2_12
type(bief_obj), target cf
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
subroutine flux3dlim(FLOW, FLULIM, NPLAN, NSEG2D, NPOIN2, OPT)
Definition: flux3dlim.f:7
type(bief_obj), target volu2d
type(bief_obj), pointer t2_06
type(bief_obj), pointer t3_02
type(bief_obj), target zn
logical, dimension(maxva3) sorim3
type(bief_obj), target s1ep
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
type(bief_obj), target s3d_fluerc
type(bief_obj), target uconv
type(bief_obj), pointer nbor3
type(bief_obj), target nuborl
type(bief_obj), target nuc
type(bief_obj), pointer t2_21
type(bief_obj), target livbol
type(bief_obj), target fxh
type(bief_obj), pointer t2_17
type(bief_obj), target liubos
subroutine source_trac
Definition: source_trac.f:4
type(bief_obj), target wchu
type(bief_obj), target zconv
subroutine config_code(ICODE)
Definition: config_code.f:7
type(bief_obj), target zflot
type(bief_obj), target varsor
subroutine utimp(GRADEBL, GRAPRDL, LISDEBL, LISPRDL)
Definition: utimp.f:7
type(bief_obj), target trborsave
type(bief_obj), target nu
character(len=32), dimension(maxvar) texte
type(bief_obj), target benth4aed2
type(bief_obj), target grazco
type(bief_obj), target cv
double precision, dimension(:), allocatable dnutah
type(bief_obj), target vconv
type(bief_obj), target anuborl
type(bief_obj), pointer y2
type(bief_obj), target wdist
type(bief_obj), target bkborf
type(bief_obj), target s3d_ivide
double precision, dimension(:), pointer y
subroutine sources_sinks
Definition: sources_sinks.f:4
integer, dimension(:), pointer entbus
type(bief_obj), target zref
type(bief_obj), target rotan
double precision, dimension(:,:), allocatable, target s3d_toce
double precision, dimension(:), pointer x
type(bief_obj), target csbus
type(bief_obj), target flulim
type(bief_obj), target s1w
type(bief_obj), target u_sce
Definition: tel4del.f:2
type(bief_obj), pointer t2_08
subroutine compute_bc_sedi
subroutine thomps(HBOR, UBOR, VBOR, TBOR, U, V, H, T, ZF, X, Y, NBOR, FRTYPE, C, UCONV, VCONV, XCONV, YCONV, LIHBOR, LIUBOR, LIVBOR, IT1, W1R, W2R, W3R, HBTIL, UBTIL, VBTIL, TBTIL, ZBTIL, SURDET, IKLE, IFABOR, NELEM, MESH, XNEBOR, YNEBOR, NPOIN, NPTFR, DT, GRAV, NTRAC, NFRLIQ, KENT, KENTU, MSK, MASKEL, NELMAX, IELM, SHPP, NUMLIQ, SHP, DX_T, DY_T, DZ_T, IT3, IT4, HFIELD, UFIELD, VFIELD, ZS, GZSX, GZSY, SHPBUF)
Definition: thomps.f:15
subroutine tel4delwaq(NPOIN, NPOIN2, NSEG, IKLE, ELTSEG, GLOSEG, MAXSEG, X, Y, NPTFR, LIHBOR, NBOR, NOLAY, AAT, DDT, LLT, NNIT, HNEW, HPROP, ZNEW, U, V, SALI, TEMP, VISC, TITRE, NOMGEO, NOMLIM, NSTEPA, NNSOU, NNMAB, NNCOU, NNINI, NNVEB, NNMAF, NNCOB, NNSAL, NNTEM, NNVEL, NNVIS, INFOGR, NELEM2, SALI_DEL, TEMP_DEL, VELO_DEL, DIFF_DEL, MARDAT, MARTIM, FLOW, V2DPAR, KNOLG, TEL_FILES)
Definition: tel4del.f:43
subroutine soukom(CV1, CV2, S1K, S1E, U, V, W, DELTAR, DUDX, DUDY, DUDZ, DVDX, DVDY, DVDZ, DWDX, DWDY, DWDZ, DTADZ, DKDX, DKDY, DKDZ, DODX, DODY, DODZ, ROTAT, AK, EP, ALPHA, BETA, BETAS, GRAV, TR, NPOIN3, MSK, MASKEL, MESH3D, IELM3, S)
Definition: soukom.f:10
subroutine lichek(LIMPRP, NPTFR, IKLBOR, NELEB2, NELEBX2)
Definition: lichek.f:7
double precision, target dt
type(bief_obj), target likbol
logical, dimension(maxvar) sorimp
integer, dimension(:), pointer ksorbus
subroutine bil3d(LT, NIT, IKLBORL, NPTFR, NETAG)
Definition: bil3d.f:7
type(bief_obj), target dp
double precision, dimension(:), pointer z
type(bief_obj), target svide
double precision, target at
type(bief_obj), target ebors
subroutine sacl3(NUBORF, LINUBOF, NUBORL, LINUBOL, LIUBOL, H, Z, NBOR, NPOIN2, NPLAN, NPTFR, KARMAN, UETCAR, NUMIN, KENT, KENTU, KSORT, KADH, KLOG, FICTIF)
Definition: sacl3.f:11
type(bief_obj), pointer t2_09
type(bief_obj), target maskpt
type(bief_obj), pointer t3_15
type(bief_obj), target wborf
type(bief_obj), target volun
integer, dimension(:), allocatable optadv_tr
type(bief_obj), target eborf
type(bief_obj), target lihbor
type(bief_obj), pointer t2_15
type(bief_obj), target wn
type(bief_obj), pointer nbor2
subroutine visclm(VISCVI, VISCTA, RI, U, V, DELTAR, Z, HN, TRAV1, TRAV2, TRAV3, TRAV4, TRAV5, TRAV7, MESH3D, IELM3, GRAV, NPLAN, NPOIN3, NPOIN2, NTRAC, MSK, MASKEL, MIXING, DAMPING, DNUVIV, DNUTAV, KARMAN, PRANDTL, KFROT, RUGOF, ZF, LINLOG, IPBOT)
Definition: visclm.f:11
type(bief_obj), target h
type(bief_obj), target gradzf
type(bief_obj), target epc
type(bief_obj), target vn
type(bief_obj), pointer t2_01
type(bief_obj), target msupg
type(bief_obj), target tac
type(bief_obj), target s3d_fluernc
type(bief_obj), target smu
type(bief_obj), target s1ak
type(bief_obj), pointer t2_14
type(bief_obj), pointer t3_03
type(bief_obj), target liebos
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
type(bief_obj), pointer it4
logical, dimension(:), allocatable calcflu
subroutine sousa(S0NU, S1NU, U, V, W, ROTAN, STRAIN, TRNU, NU, NPOIN3, MSK, MASKEL, MESH3D, IELM3, S, WDIST, NPOIN2, ITURB)
Definition: sousa.f:9
type(bief_obj), target u2d
subroutine preadv(W, WS, ZPROP, ISOUSI, LT, VOLU, VOLUN)
Definition: preadv.f:7
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
type(bief_obj), pointer t3_17
type(bief_obj), target shpflo
type(bief_obj), target dvs2dy
type(bief_obj), target hn
integer, dimension(3) mardat
type(bief_obj), pointer t2_13
subroutine bief_valida(VARREF, TEXTREF, UREF, REFFORMAT, VARRES, TEXTRES, URES, RESFORMAT, MAXTAB, NP, IT, MAXIT, ACOMPARER)
Definition: bief_valida.f:8
type(bief_obj), target s3d_epaico
type(bief_obj), target bvborf
type(bief_obj), target hm0
type(bief_obj), target, public patmos
subroutine tfond(AUBOR, CF, U2D, V2D, U3D, V3D, W3D, KARMAN, LISRUF, PROPNU, Z, NPOIN, KFROT, RUGOF, UETCAR, NONHYD, OPTBAN, HN, GRAV, IPBOT, NPLAN)
Definition: tfond.f:8
double precision, dimension(:,:), allocatable, target s3d_conc
type(bief_obj), target fludp
Deposition flux.
type(bief_obj), target ws
subroutine wave_equation(ISOUSI)
Definition: wave_equation.F:7
subroutine ad_telemac3d_timestep_begin
type(bief_obj), target bwborf
type(bief_obj), target fluer
Erosion flux.
type(bief_obj), target etaflo
double precision, dimension(:), allocatable qsce2
type(bief_obj), target akbors
type(bief_obj), target nubors
type(bief_obj), pointer t3_01
type(bief_obj), target taborf
integer, dimension(:), allocatable schcta
subroutine mass3d(INFO)
Definition: mass3d.f:7
type(bief_obj), target liwbof
type(bief_obj), target dbus
character(len=32), dimension(maxva3) textp3
subroutine viscke(VISCVI, VISCTA, AK, EP, NTRAC, CMU, DNUVIH, DNUVIV, DNUTAH, DNUTAV, EMIN, ITURBH, ITURBV, PRANDTL)
Definition: viscke.f:8
subroutine derive(U, V, W, DT, AT, X, Y, Z, IKLE, IFABOR, LT, IELM, IELMU, NDP, NDP2, NPOIN, NPOIN2, NELEM, NELMAX, SURDET, XFLOT, YFLOT, ZFLOT, SHPFLO, SHZFLO, TAGFLO, CLSFLO, ELTFLO, ETAFLO, NFLOT, NFLOT_MAX, MESH, ISUB, DX, DY, DZ, ELTBUF, SHPBUF, SHZBUF, SIZEBUF, STOCHA, VISC, NPLAN, ZSTAR, TRANSF, AALGAE, DALGAE, RALGAE, EALGAE, TALGAE, YALGAE, REL_ALGAE, TW1_ALGAE, TW2_ALGAE, A_ALGAE, ORBVEL, AK, EP, H)
Definition: derive.f:16
type(bief_obj), target beborl
type(bief_obj), target shzflo
integer, dimension(:), pointer sorbus
type(bief_obj), target s0ta
type(bief_obj), target vborf
type(bief_obj), target nu_sce
type(bief_obj), target linubof
type(bief_obj), pointer it3
type(bief_obj), target orbvel
type(bief_obj), target bnuborf
type(bief_obj), target viscvi
type(bief_obj), target akborf
type(bief_obj), target cv5
type(bief_obj), target mat2d
type(bief_obj), target parapluie
type(bief_obj), target kbors
subroutine telemac3d(PASS, NIT_ORI)
Definition: telemac3d.F:7
subroutine t3d_wac_cpl_update(NIT_ORI)
integer, parameter klog
type(bief_obj), target wc
subroutine kepicl(LIKBOF, LIEBOF, LIUBOF, LIKBOL, LIEBOL, LIUBOL, LIKBOS, LIEBOS, NPTFR, NPLAN, NPOIN2, KENT, KSORT, KENTU)
Definition: kepicl.f:8
type(bief_obj), target auborf
subroutine preres_telemac3d
type(bief_obj), target flopar
type(bief_obj), pointer z3
subroutine sisyphe(PART, LOOPCOUNT, GRAFCOUNT, LISTCOUNT, TELNIT, U_TEL, V_TEL, H_TEL, HN_TEL, ZF_TEL, UETCAR, CF_TEL, KS_TEL, CONSTFLOW, NSIS_CFD, SISYPHE_CFD, CODE, PERICOU, U3D, V3D, T_TEL, VISC_TEL, DT_TEL, CHARR_TEL, SUSP_TEL, FLBOR_TEL, SOLSYS, DM1, UCONV_TEL, VCONV_TEL, ZCONV, THETAW_TEL, HW_TEL, TW_TEL, UW_TEL, YAGOUT, API_ITER, GRCOMP)
Definition: sisyphe.F:12
type(bief_obj), target flodel
subroutine dessed(NPF, S3D_IVIDE, S3D_EPAI, S3D_HDEP, S3D_TEMP, ZR, NPOIN2, S3D_NPFMAX, S3D_NCOUCH, GRAPRD, LT, S3D_DTC, S3D_TASSE, S3D_GIBSON, NRSED, TITCAS, FMTRSED, GRADEB)
Definition: dessed.f:9
type(bief_obj), target deltar
type(bief_obj), target gradzs
type(bief_obj), target dus2d
character(len=path_len), target coupling
type(bief_obj), target w_sce
subroutine prebor(HBOR, UBOR, VBOR, TBOR, U, V, H, HN, T, NBOR, NPOIN, NPTFR, NTRAC, NFRLIQ, FRTYPE, NUMLIQ)
Definition: prebor.f:8
subroutine bief_desimp(FORMAT_RES, VARSOR, N, NRES, AT, LT, LISPRD, LEOPRD, SORLEO, SORIMP, MAXVAR, TEXTE, PTINIG, PTINIL, MESH, IIMP, ILEO, COMPGRAPH)
Definition: bief_desimp.f:9
subroutine sed3d(S3D_MASBED, S3D_MASBED0, S3D_MASDEP, S3D_EPAI, S3D_CONC, TRA02, NPOIN2, S3D_NCOUCH, AT, VOLU2D, S3D_CFDEP, S3D_EPAICO, S3D_EPAINCO, S3D_MIXTE)
Definition: sed3d.f:11
integer nsusp_tel
Number of suspension sediment classes for TELEMAC3D or TELEMAC2D (less than NISCLM) ...
type(bief_obj), target ak
type(bief_obj), target bvborl
integer, parameter ksort
subroutine komcl3(KBORF, EBORF, LIKBOF, LIEBOF, LIUBOF, KBORL, EBORL, LIKBOL, LIEBOL, LIUBOL, EBORS, LIEBOS, DISBOR, AK, U, V, H, Z, NBOR, NPOIN2, NPLAN, NPTFR, KARMAN, BETAS, OMSTAR, KMIN, EMIN, KENTU, KENT, KADH, KLOG, UETCAR, UETCAL)
Definition: komcl3.f:13
type(bief_obj), target xflot
subroutine oil_spill_3d(LT, IELM2H, MESH2D, NFLOT_MAX, T3D_FILES, MAXLU_T3D, NPOIN2, T3DMIG, UCONV, VCONV, WCONV, NFLOT, NPLAN, MESH3D, AT, DT, GRAV, CF, X, Y, Z, H, HN, IELM3, NPOIN3, NELEM2, XFLOT, YFLOT, ZFLOT, SHPFLO, SHZFLO, TAGFLO, CLSFLO, ELTFLO, ETAFLO, FLOPRD, T3DFLO, IT1, IT2, T3_01, T3_02, T3_03, MTRA1, MTRA2, VISCVI, WINDX, WINDY, UNSV3D, NTRAC, TRN, TRAV3, ATABOS, T2_17, VENT)
Definition: oilspill.f:431
integer, dimension(maxvar) alire2d
type(bief_obj), target bnuborl
subroutine sapicl(LINUBOF, LIUBOF, LINUBOL, LIUBOL, LINUBOS, NPTFR, NPLAN, NPOIN2, KENT, KSORT)
Definition: sapicl.f:8
type(bief_obj), pointer t2_02
subroutine ad_telemac3d_subiteration_end
type(bief_obj), pointer w1
type(bief_mesh), target mesh3d
subroutine corstr
Definition: corstr.f:4
type(bief_obj), target epn
type(bief_obj), target ep_sce
type(bief_obj), target vd
type(bief_obj), target linubol
Definition: bief.f:3
subroutine ad_telemac3d_subiteration_begin
subroutine clip(F, XMIN, CLPMIN, XMAX, CLPMAX, NPOIN)
Definition: clip.f:7
type(bief_obj), target dus2dx
type(bief_obj), target volu3d