The TELEMAC-MASCARET system  trunk
wac.F
Go to the documentation of this file.
1 ! **************
2  SUBROUTINE wac
3 ! **************
4 !
5  & (part, nit_ori)
6 !
7 !**********************************************************************
8 ! TOMAWAC V7P3
9 !**********************************************************************
10 !
11 ! brief MAIN SUBROUTINE OF TOMAWAC
12 ! + SOLVES THE EQUATION FOR THE
13 ! + DIRECTIONAL WAVE SPECTRUM
14 !
15 ! history J-M HERVOUET (EDF - LNHE)
16 ! + 29/01/2013
17 ! + V6P3
18 ! +Radiation stresses for Telemac now computed independently of the
19 ! + printouts on results file.
20 ! + Call to tomawac_constants moved to lecdon_tomawac.
21 !
22 ! history J-M HERVOUET (EDF - LNHE)
23 ! + 22/03/2013
24 ! + V6P3
25 ! + New arguments DIRMOY_TEL,HM0_TEL, TPR5_TEL for transmission to
26 ! + Sisyphe through Telemac-2D or 3D. Values computed in case of triple
27 ! + coupling.
28 !
29 ! history E. GAGNAIRE-RENOU (EDF - LNHE)
30 ! + 12/09/2014
31 ! + V7P0
32 ! + New arguments for SEMIMP for wave-blocking effects
33 ! + Call the new routine LIMITE
34 !
35 ! history J-M HERVOUET (EDF - LNHE)
36 ! + 15/09/2014
37 ! + V7P0
38 ! + Initialisation of SUSOLD and STRA34 if .NOT.VENT
39 ! + (a former overlooked bug)
40 ! + PERCOU_WAC now used (correction by C. Villaret (HR+EDF)
41 ! + and Pablo*(Tassi+Santoro)).
42 !
43 ! history C VILLARET (HRW+EDF) & J-M HERVOUET (EDF - LNHE)
44 ! + 18/09/2014
45 ! + V7P0
46 ! + Adding the variable ORBVEL_TEL in argument (orbital velocity)
47 ! + for sending it back to the calling program.
48 !
49 ! history Y AUDOUIN (LNHE)
50 ! + 25/05/2015
51 ! + V7P0
52 ! + Modification to comply with the hermes module
53 !
54 ! history A JOLY (LNHE)
55 ! + 18/05/2017
56 ! + V7P3
57 ! + Possibility to read a text file with coordinates of the nodes
58 ! + for which a spectra will be written.
59 !
60 ! history A JOLY (LNHE)
61 ! + 18/05/2017
62 ! + V7P3
63 ! + Moved LIMWAC to the end of the time stepping operations to
64 ! + better impose dirac boundary conditions.
65 !
66 ! history A JOLY (EDF-LNHE)
67 ! + 18/05/2017
68 ! + V7P3
69 ! + In semimp, new condition to stop source terms being added to
70 ! + open boundaries.
71 !
72 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73 ! | PART |-->| -1: NO COUPLING
74 ! | | | 0: COUPLING WITH TELEMAC (INITIALISATION)
75 ! | | | 1: COUPLING WITH TELEMAC (LOOP OVER TIME STEPS)
76 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
77 !
78  USE bief
79  USE couple_mod
82  USE interface_tomawac, ex_wac => wac
83 !
85  IMPLICIT NONE
86 
87 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
88 !
89  INTEGER, INTENT(IN) :: PART
90  INTEGER, INTENT(IN),OPTIONAL :: NIT_ORI
91 !
92 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
93 !
94  DOUBLE PRECISION DT_MIN,DT_MAX
95  DOUBLE PRECISION, PARAMETER :: DEG2RAD = acos(0.0d0)/90.0d0
96  INTEGER DUMMY,LT_WAC, IREC, IERR, I
97 !
98  INTEGER LT1
99  INTEGER DATE(3),TIME(3),IP
100 !
101  INTEGER ADC,MDC,JDC,HDC
102  LOGICAL IMPRES, DEBRES
103  INTEGER TOTAL_ITER
104 !-----------------------------------------------------------------------
105 !
106  IF(part.EQ.wac_full_run.OR.
107  & part.EQ.wac_cpl_init.OR.
108  & part.EQ.wac_cpl_run.OR.
109  & part.EQ.wac_api_init) THEN
110 #if defined COMPAD
111  CALL ad_tomawac_begin
113 #endif
114 !=====C
115 ! 1 C INITIALISATIONS DES VARIABLES LOCALES
116 !=====C======================================
117 ! COUPLAGE : verification des conditions pour le couplage
118 ! TELEMAC-TOMAWAC
119 !
120  IF(part.EQ.wac_cpl_init.OR.part.EQ.wac_cpl_run) THEN
121  IF(debug.GT.0) WRITE(lu,*) 'ENTERING TOMAWAC, WITH T_TEL=',
122  & cpl_wac_data%AT_TEL,
123  & 'NIT_TEL',cpl_wac_data%NIT_TEL
124  IF(maree.OR.cousta.OR.dontel) THEN
125  WRITE(lu,*) ''
126  WRITE(lu,*) '***************************************'
127  WRITE(lu,*) ' ATTENTION : COUPLING TELEMAC-TOMAWAC :'
128  WRITE(lu,*) ' CURRENT/WATER LEVEL FILE CANNOT BE '
129  WRITE(lu,*) ' USED AS INPUT FILE. '
130  WRITE(lu,*) ' END OF THE COMPUTATION '
131  WRITE(lu,*) '***************************************'
132  CALL plante(1)
133  stop
134  ENDIF
135 !
136  dt_max=max(dt,cpl_wac_data%DT_TEL*cpl_wac_data%PERCOU_WAC)
137  dt_min=min(dt,cpl_wac_data%DT_TEL*cpl_wac_data%PERCOU_WAC)
138 !
139  IF(abs(nint(dt_max/dt_min)-dt_max/dt_min).GT.1.d-6) THEN
140  WRITE(lu,*) ''
141  WRITE(lu,*) '***************************************'
142  WRITE(lu,*) ' ATTENTION : COUPLING TELEMAC-TOMAWAC :'
143  WRITE(lu,*) ' THE CHOSEN TIME STEPS ARE NOT MULTIPLE'
144  WRITE(lu,*) ' OF EACH OTHER. '
145  WRITE(lu,*) ' END OF THE COMPUTATION '
146  WRITE(lu,*) '***************************************'
147  CALL plante(1)
148  stop
149  ENDIF
150  ENDIF
151 !
152 !.....1.4 INITIALISATION DES TABLEAUX DATE ET TIME
153 !
154  adc=int(ddc*1.d-8)
155  mdc=int(ddc*1.d-6)
156  jdc=int(ddc*1.d-4)
157  hdc=int(ddc*1.d-2)
158  date(1)=adc
159  date(2)=mdc-100*adc
160  date(3)=jdc-100*mdc
161  time(1)=hdc-100*jdc
162  time(2)=int(ddc-100.d0*hdc)
163  time(3)=0
164 !
165 !.....1.5 READ ASCII FILES WITH COORDINATES OF POINTS FOR WHICH
166 ! SPECTRA WILL NEED TO BE READ
167 !
168  IF((namwxy(1:1).NE.' ').AND.
169  & (part.EQ.wac_full_run.OR.part.EQ.wac_cpl_init.OR.
170  & part.EQ.wac_api_init))THEN
171  IF(debug.GT.0)
172  & WRITE(lu,*)'CALLING READ_SPECTRA_COORDS FOR PRINTOUT'
174  IF(debug.GT.0)WRITE(lu,*)'BACK FROM READ_SPECTRA_COORDS'
175 ! ALLOCATE THE MEMORY FOR THE NODE NUMBERS OF THE SPECTRA
176  IF(ALLOCATED(noleo))DEALLOCATE(noleo)
177  ALLOCATE(noleo(npleo))
178  ENDIF
179 !
180 !.....1.5 READ ASCII FILES WITH COORDINATES OF POINTS FOR WHICH
181 ! SPECTRA WILL NEED TO BE READ
182 !
183  IF((namixy(1:1).NE.' ').AND.
184  & (part.EQ.wac_full_run.OR.part.EQ.wac_cpl_init.OR.
185  & part.EQ.wac_api_init))THEN
186  IF(debug.GT.0)
187  & WRITE(lu,*)'CALLING READ_SPECTRA_COORDS FOR IMPOSED SPECTRA'
189  IF(debug.GT.0)WRITE(lu,*)'BACK FROM READ_SPECTRA_COORDS'
190  ENDIF
191 !
192  IF (inclus(coupling,'TOMAWAC2')) THEN
193  CALL get_mesh_nptir(wac_files(wacgeo)%FMT,
194  & wac_files(wacgeo)%LU,nptir,ierr)
195  ENDIF
196 !=====C
197 ! 2 LECTURE DES CONDITIONS LIMITES ET INDICES DES POINTS FRONTIERES
198 !=====C================================================================
199 !
200 ! COUPLAGE TELEMAC-TOMAWAC : initialisation
201 !
202  IF(part.EQ.wac_full_run.OR.part.EQ.wac_cpl_init.OR.
203  & part.EQ.wac_api_init) THEN
204  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE WAC_INIT'
205  CALL wac_init (part,impres,debres,date,time)
206  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE WAC_INIT'
207  ENDIF
208  ENDIF ! PART.LE.2
209 !
210 ! COUPLAGE TELEMAC-TOMAWAC
211  IF(part.NE.wac_cpl_init.AND.part.NE.wac_api_init) THEN
212 !
213 ! Preparation au couplage : on calcule le nombre de cycle
214 ! de la boucle en temps, selon la duree du pas de temps dans
215 ! Telemac (CPL_WAC_DATA%DT_TEL) et dans Tomawac (DT).
216 ! On assigne a DUMMY la valeur originaire du nombre de pas
217 ! de temps specifie dans le fichier .cas de Tomawac.
218 !
219  IF(part.EQ.wac_cpl_run) THEN
220  at=cpl_wac_data%AT_TEL
221  dummy=nit
222  IF(dt.GT.cpl_wac_data%DT_TEL*cpl_wac_data%PERCOU_WAC) THEN
223  WRITE(lu,*) ''
224  WRITE(lu,*) '***************************************'
225  WRITE(lu,*) ' ATTENTION : COUPLING TELEMAC-TOMAWAC :'
226  WRITE(lu,*) ' TOMAWAC TIME STEP CAN NOT BE GREATER '
227  WRITE(lu,*) ' THAN TELEMAC TIME STEP '
228  WRITE(lu,*) ' END OF THE COMPUTATION '
229  WRITE(lu,*) '***************************************'
230  CALL plante(1)
231  stop
232  ENDIF
233  IF(dt.LE.cpl_wac_data%DT_TEL*cpl_wac_data%PERCOU_WAC) THEN
234  nit = nint(cpl_wac_data%DT_TEL*cpl_wac_data%PERCOU_WAC/dt)
235  ENDIF
236 
237 ! RECEIVE DATA FROM TOMAWAC
238 ! WAC2
239  IF(inclus(coupling,'TOMAWAC2')) THEN
240  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE RECEIVE_COUPLE'
242  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE RECEIVE_COUPLE'
243  cpl_wac_data%U_TEL => u_tel
244  cpl_wac_data%V_TEL => v_tel
245  cpl_wac_data%H_TEL => h_tel
246  cpl_wac_data%FX_WAC => fx_wac
247  cpl_wac_data%FY_WAC => fy_wac
248  cpl_wac_data%UV_WAC => uv_wac
249  cpl_wac_data%VV_WAC => vv_wac
250  cpl_wac_data%DIRMOY_TEL => dirmoy_tel
251  cpl_wac_data%HM0_TEL => hm0_tel
252  cpl_wac_data%TPR5_TEL => tpr5_tel
253  cpl_wac_data%ORBVEL_TEL => orbvel_tel
254  ENDIF
255  ENDif! Fin COUPLAGE
256 !
257 ! COUPLAGE TELEMAC-TOMAWAC : LT est defini comme le numero de pas
258 ! de temps effectifs de TOMAWAC. La variable LT_WAC
259 ! compte les pas de temps de chaque boucle, meme
260 ! quand TOMAWAC est appele par TELEMAC
261 !
262 !=====C
263 ! 11 C BOUCLE EN TEMPS PRINCIPALE.
264 !=====C============================
265 !
266  IF(debug.GT.0) WRITE(lu,*) 'TIME LOOP BEGINNING'
267  DO lt_wac=1,nit
268 !
269 !------------------------------------------------------------------
270 !
271 #if defined COMPAD
273 #endif
274 !
275 !------------------------------------------------------------------
276 !
277 !.....11.1 AFFECTATION DE LA DATE DE FIN DU PAS DE TEMPS COURANT.
278 !
279  at=at+dt
280 ! TODO: Calcul de LT (NOTE JMH: WHY NOT LT=LT+1 ?)
281  lt=nint((at-at0)/dt)
282 !
283 ! Fin COUPLAGE
284 !
285  CALL impr(lisprd,lt,at,lt,3)
286 !
287 ! 11.2 AFFECTATION DES CONDITIONS AUX LIMITES.
288 !
289  IF (avant) THEN
290  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE LIMWAC'
291  CALL limwac(f, fbor, nptfr, ndire, nf, npoin2,
292  & kent, prive, npriv, wac_files(impspe))
293  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE LIMWAC'
294  ENDIF
295 !
296 ! 11.2 MISE A ZERO DU SPECTRE SUR LES POINTS OU PROF < PROMIN
297 ! I GUESS I DO NOT HAVE THOSE ANYMORE....SINCE I CHANGED DEPTH
298  IF (.NOT.proinf) THEN
299  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE ECRETE'
300  IF (ecret) CALL ecrete(sf%R,sdepth%R,npoin2,ndire,nf,
301  & promin)
302  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE ECRETE'
303  ENDIF
304 !
305  IF (maree.OR.couran) lt1=(lt/lam)*lam
306 !
307 !......11.3 UPDATING DEPTH AND CURRENTS
308 !
309 ! COUPLING TELEMAC-TOMAWAC OR CURRENTS AND/OR DEPTH IN A FILE
310 ! THEY ARE UPDATED HERE.
311 !
312  IF(maree.AND.lt.EQ.lt1.OR.
313  & (part.EQ.wac_cpl_run.AND.lt_wac.EQ.1)) THEN
314  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE CORMAR'
315  CALL cormar(part, cpl_wac_data%U_TEL,
316  & cpl_wac_data%V_TEL,cpl_wac_data%H_TEL)
317  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE CORMAR'
318  DO ip=1,npoin2
319  IF(depth(ip).LT.promin) depth(ip)=0.9d0*promin
320  ENDDO
321 !
322 !......11.3.1 PREPARING PROPAGATION (METHOD OF CHARACTERISTICS).
323 !
324  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE INIPHY'
325  CALL iniphy(xk, cg, b, npoin2, nf)
326  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE INIPHY'
327 !
328  IF(prop) THEN
329 !
330  CALL impr(lisprd,lt,at,lt,1)
331  CALL impr(lisprd,lt,at,lt,2)
332  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE PREPRO 2'
333 !
334  CALL prepro( stsder, ststot, ikle2, ibor, elt, eta, fre,
335  & xk, cg, itr01, npoin3, npoin2, nelem2,
336  & ndire, nf, couran.OR.part.EQ.wac_cpl_run)
337 ! Fin COUPLAGE
338  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE PREPRO 2'
339  ENDIF
340  ENDIF
341 ! Fin cycle IF((MAREE.AND.LT.EQ.LT1).OR.
342 ! (PART.EQ.WAC_CPL_RUN.AND.LT_WAC.EQ.1))
343 !------------------------------------------------------------------
344 ! V6P2 Diffraction : diffraction term calculation
345  IF(diffra.GT.0) THEN
346  IF(lt.EQ.nptdif)THEN
347  WRITE(lu,*)'*********************************'
348  WRITE(lu,*)'DIFFRACTION IS TAKEN INTO ACCOUNT'
349  WRITE(lu,*)'*********************************'
350  ENDIF
351  IF(lt.GE.nptdif) THEN
352  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE PREDIF'
353  CALL predif( stsder, ststot, ikle2, ibor, elt, eta,
354  & xk, cg, itr01, npoin3, npoin2, nelem2, ndire,
355  & nf, couran.OR.part.EQ.wac_cpl_run, f,
356  & rx, ry, rxx, ryy, neigb)
357  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE PREDIF'
358  ENDIF
359  ENDIF
360 ! V6P2 End diffraction
361 !-------------------------------------------------------------------
362 !
363 !.....11.3 PROPAGATION (INTERPOLATION AU PIED DES CARACTERISTIQUES).
364 !
365  IF(prop) THEN
366  CALL impr(lisprd,lt,at,lt,5)
367  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE PROPA',lt
368  CALL propa(f, b, elt, eta, fre ,npoin3, npoin2,
369  & ndire,nf, couran.OR.part.EQ.wac_cpl_run, tsder)
370  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE PROPA'
371  ENDIF
372 !
373 !.....11.4 ECRETE PAR RAPPORT A UN SPECTRE LIMITE APRES PROPAGATION.
374 !
375  IF(sdscu.EQ.1) THEN
376  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE LIMITE'
377  CALL limite(f, freq, npoin2, ndire, nf)
378  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE LIMITE'
379  ELSEIF(sdscu.GT.2) THEN
380  WRITE(lu,*) ''
381  WRITE(lu,*) '**************************'
382  WRITE(lu,*) ' UNKNOWN OPTION FOR '
383  WRITE(lu,*) ' STRONG CURRENTS '
384  WRITE(lu,*) '**************************'
385  CALL plante(1)
386  stop
387  ELSEIF(sdscu.EQ.2.AND..NOT.tsou) THEN
388  WRITE(lu,*) ''
389  WRITE(lu,*) '****************************'
390  WRITE(lu,*) ' CONSIDERATION OF SOURCE '
391  WRITE(lu,*) ' TERMS MANDATORY FOR '
392  WRITE(lu,*) ' OPTION 2 FOR STRONG '
393  WRITE(lu,*) ' CURRENTS '
394  WRITE(lu,*) '****************************'
395  CALL plante(1)
396  stop
397  ENDIF
398 !
399 !.....11.5 INTEGRATION DES TERMES SOURCES.
400 !
401  IF(tsou) THEN
402  CALL impr(lisprd,lt,at,nsits,4)
403  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SEMIMP'
404  CALL semimp( f, cf, xk, nf, ndire, npoin2,
405  & iangnl, tstot, tsder, told, tnew, tra35, tra36,
406  & tra37, tra38, tra39, t1, t2, t3, t4,
407  & mdia, ianmdi, coemdi, fbor)
408 
409  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SEMIMP'
410  ENDIF
411 !
412 ! 11.8 AFFECTATION DES CONDITIONS AUX LIMITES.
413 !
414  IF(.NOT.avant) THEN
415  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE LIMWAC'
416  CALL limwac(f, fbor, nptfr, ndire, nf, npoin2, kent,
417  & prive, npriv, wac_files(impspe))
418  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE LIMWAC'
419  ENDIF
420 !
421 !.....10.6 TEST POUR SAVOIR SI ON IMPRIME OU PAS.
422 ! """""""""""""""""""""""""""""""""""""""""""
423  impres=.false.
424  debres=.false.
425  IF(lt.GE.gradeb.AND.mod(lt-gradeb,graprd).EQ.0) impres=.true.
426  IF(lt.EQ.gradeb) debres=.true.
427 !
428  IF(impres) THEN
429 !
430 !.....11.7 PASSAGE EN FREQUENCE ABSOLUE.
431 ! """""""""""""""""""""""""""""""""""""""""""""
432 !
433  IF(couran.OR.part.EQ.wac_cpl_run) THEN
434  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE TRANSF'
435  IF(lt.GE.gradeb.AND.mod(lt-gradeb,graprd).EQ.0) THEN
436  CALL transf(tstot, f, xk, itr11, itr12,itr13, tra31,
437 ! WORK ARRAY UNTIL CALL ECRSPE BELOW
438  & tra32, npoin2, ndire,nf)
439  ENDIF
440  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TRANSF'
441  ENDIF
442 !
443 !.....11.9 IMPRESSION (EVENTUELLE) DES VARIABLES SUR LE MAILLAGE 2D.
444 !
445  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE DUMP2D'
446  IF(couran.OR.part.EQ.wac_cpl_run) THEN
447  CALL dump2d(tstot, npoin3*nf)
448  ELSE
449  CALL dump2d(f, npoin3*nf)
450  ENDIF
451  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE DUMP2D'
452 !
453  IF(namres.NE.' ') THEN
454  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE BIEF_DESIMP'
455  CALL bief_desimp(fmtres,varsor, npoin2,lures,at, lt,
456  & lisprd,graprd, sorleo,sorimp,maxvar,texte,gradeb,
457  & gradeb)
458  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE BIEF_DESIMP'
459  ENDIF
460 !
461 !.....11.10 IMPRESSION (EVENTUELLE) DES SPECTRES DIRECTIONNELS.
462 !
463  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE ECRSPE'
464  irec = (lt - gradeb)/graprd
465  IF(couran.OR.part.EQ.wac_cpl_run) THEN
466  CALL ecrspe(tstot, ndire, nf, npoin2, irec, tsder,
467  & noleo, npleo, debres,date, time, mesh%KNOLG%I, mesh)
468  ELSE
469  CALL ecrspe(f, ndire, nf, npoin2, irec, tsder,
470  & noleo, npleo, debres,date, time, mesh%KNOLG%I, mesh)
471  ENDIF
472  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE ECRSPE'
473 !
474  ENDIF
475  IF(part.EQ.wac_cpl_run.AND.lt_wac.EQ.nit) THEN
476  IF(cpl_wac_data%COUPL3D) THEN
477  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE TRANSF'
478  CALL transf(tstot, f, xk, itr11, itr12,itr13,
479 ! WORK ARRAY UNTIL CALL ECRSPE BELOW TRA32 IS USED IN FRIC3D
480  & tra31, tra32, npoin2, ndire, nf)
481  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE TRANSF'
482 ! DISSIPATION DUE TO DEPTH-INDUCED WAVE BREAKING
483  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FDISS3D'
484  CALL fdiss3d ( cpl_wac_data%FDXW%R, cpl_wac_data%FDYW%R,
485  & npoin2, xk, ndire, f, nf)
486  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FDISS3D'
487 
488 ! DISSIPATION DUE TO BOTTOM FRICTION
489  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FBOTT3D'
490  CALL fbott3d
491  & ( cpl_wac_data%FBXW%R, cpl_wac_data%FBYW%R, f,
492  & npoin2, xk, ndire,nf)
493  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FBOTT3D'
494 ! The velocity STOKES DRIFT HORIZONTAL COMPONENTS
495 ! ONE SHOULD CALL TRANSF BEFORE !!!
496  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE UVSTOKES'
497  CALL uvstokes( cpl_wac_data%USTW%R, cpl_wac_data%VSTW%R,
498  & cpl_wac_data%WSTW%R, tstot, npoin2,xk,zf, ndire,
499  & cpl_wac_data%ZTELW%R, cpl_wac_data%NZW,nf)
500  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE UVSTOKES'
501 
502 ! The wave induced pressure J
503  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE WIPJ'
504  CALL wipj (cpl_wac_data%WIPW%R, tstot, npoin2, xk,
505  & cpl_wac_data%WIPDXW%R,cpl_wac_data%WIPDYW%R, ndire, nf)
506  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE WIPJ'
507 !
508 ! WAVE ENHANCED MIXING
509  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FDISSK'
510  CALL fdissk( cpl_wac_data%FDKW%R, npoin2, ndire, f,
511  & cpl_wac_data%ZTELW%R,cpl_wac_data%NZW, tra38, tra37,
512  & nf)
513  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FDISSK'
514 
515 ! FRICTION COEFFICIENT - WAVES+CURRENTS
516 
517  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE VITFON'
518  CALL vitfon(vifond, tstot, xk, nf,
519  & npoin2,ndire)
520  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE FRIC3D'
521 ! MODIFIED COEFFICIENT TO TAKE INTO ACCOUNT WAVES+CURRENTS
522  CALL fric3d
523  & ( cpl_wac_data%CFWCW, npoin2, tra32,
524  & cpl_wac_data%U_TEL, cpl_wac_data%V_TEL, vifond)
525  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE FRIC3D'
526 ! SURFACE STRESS DUE TO WIND INPUT ENERGY AND WHITECAPPING
527  IF(vent) THEN
528  IF(svent.EQ.1) THEN
529  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE WINDISS1'
530  CALL windiss1( cpl_wac_data%FWX%R, cpl_wac_data%FWY%R,
531  & npoin2, xk, ndire, f, nf)
532  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE WINDISS1'
533  ELSEIF(svent.EQ.2) THEN
534  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE WINDISS2'
535  CALL windiss2( cpl_wac_data%FWX%R, cpl_wac_data%FWY%R,
536  & npoin2, xk, ndire, f, nf)
537  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE WINDISS2'
538  ELSEIF(svent.EQ.3) THEN
539  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE WINDISS3'
540  CALL windiss3( cpl_wac_data%FWX%R, cpl_wac_data%FWY%R,
541  & npoin2, xk, ndire, f, nf)
542  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE WINDISS3'
543  ENDIF
544  IF(smout.EQ.1) THEN
545  CALL moudiss1( cpl_wac_data%FWX%R, cpl_wac_data%FWY%R,
546  & npoin2, xk, ndire, f, nf)
547  ELSEIF(smout.EQ.2)THEN
548  CALL moudiss2( cpl_wac_data%FWX%R, cpl_wac_data%FWY%R,
549  & npoin2, xk, ndire, f, nf, t1, t2)
550  ENDIF
551  ENDIF
552 
553  ENDIF !IF (CPL_WAC_DATA%COUPL3D)
554 !
555 ! RADIATION STRESSES COMPUTED HERE FOR TELEMAC INDEPENDENTLY
556 ! OF THE PRINTS TO RESULT FILE, WHICH IS NOT MANDATORY
557 !
558 ! STSTOT WORK ARRAY (ABSOLUTE FREQUENCY) IN ALL THIS IF BLOCK
559  CALL transf(tstot, f, xk, itr11, itr12,itr13, tra31, tra32,
560  & npoin2,ndire, nf)
561  CALL radiat(cpl_wac_data%FX_WAC%R, cpl_wac_data%FY_WAC%R,
562  & xk, tstot, cg, tsder, tra36, tra37, tra38, tra39)
563  IF(vent) THEN
564  CALL ov('X=Y ', x=cpl_wac_data%UV_WAC%R, y=suv%R,
565  & dim1=npoin2)
566  CALL ov('X=Y ', x=cpl_wac_data%VV_WAC%R, y=svv%R,
567  & dim1=npoin2)
568  ENDIF
569  IF(inclus(coupling,'SISYPHE').OR.inclus(coupling,'GAIA'))
570  & THEN
571 ! 3 VARIABLES THAT WILL BE TRANSMITTED TO SISYPHE OR GAIA
572 ! ALL THIS IF BLOCK ADAPTED FROM DUMP2D
573 ! MEAN DIRECTION
574  CALL tetmoy(cpl_wac_data%DIRMOY_TEL%R, tstot, ndire,nf,
575  & npoin2)
576  IF(trigo) THEN
577  DO ip=1,npoin2
578  cpl_wac_data%DIRMOY_TEL%R(ip) =
579  & (pisur2-cpl_wac_data%DIRMOY_TEL%R(ip))*gradeg
580  ENDDO
581  ELSE
582  DO ip=1,npoin2
583  cpl_wac_data%DIRMOY_TEL%R(ip) =
584  & cpl_wac_data%DIRMOY_TEL%R(ip)*gradeg
585  ENDDO
586  ENDIF
587 ! SIGNIFICANT WAVE HEIGHT
588  CALL totnrj(tra37, tstot, nf, ndire, npoin2)
589  DO ip=1,npoin2
590  cpl_wac_data%HM0_TEL%R(ip)=4.d0*sqrt(tra37(ip))
591  ENDDO
592 ! TPR5
593  CALL fpread(cpl_wac_data%TPR5_TEL%R, tstot,
594  & nf, ndire, npoin2, 5.d0)
595  DO ip=1,npoin2
596  cpl_wac_data%TPR5_TEL%R(ip)=
597  & 1.d0/min(max(cpl_wac_data%TPR5_TEL%R(ip),freq(1)),freq(nf))
598  ENDDO
599 ! NEAR BED ORBITAL VELOCITY
600  CALL vitfon(cpl_wac_data%ORBVEL_TEL%R, tstot, xk, nf,
601  & npoin2,ndire)
602  ENDIF
603  IF (alg_dislodge) THEN
604  CALL vitfon(cpl_wac_data%ORBVEL_TEL%R, tstot, xk, nf,
605  & npoin2,ndire)
606  ENDIF
607 !
608  ENDIF
609 !
610 !------------------------------------------------------------------
611 !
612 #if defined COMPAD
614 #endif
615 !
616 !------------------------------------------------------------------
617 !
618  ENDDO ! LT_WAC
619 !
620 ! Fin COUPLAGE : fin du cycle IF(PART.NE.0)
621  ENDIF
622 !
623 !=====C
624 ! 12 C IMPRESSIONS GLOBALES (EVENTUELLES) EN FIN DE CALCUL.
625 !=====C=====================================================
626 !
627 ! COUPLAGE TELEMAC-TOMAWAC : reset de la variable NIT (nombre
628 ! de pas de temps de TOMAWAC indique dans la fichier .cas)
629  IF(part.EQ.wac_cpl_run) nit=dummy
630  IF(PRESENT(nit_ori)) THEN
631  total_iter = nit_ori
632  ELSE
633  total_iter = nit
634  ENDIF
635 ! Fin COUPLAGE
636 !
637  IF(abs(at-at0-total_iter*dt).LT.1.d-6) THEN
638 !
639  IF(glob) THEN
640  CALL impr(lisprd,nit,at,nit,6)
641  IF(debug.GT.0) WRITE(lu,*) 'APPEL DE SOR3D'
642  CALL sor3d(f, ndire, nf, npoin2, vent,
643  & couran.OR.part.EQ.wac_cpl_run,
644  & maree.OR.part.EQ.wac_cpl_run, titcas, tsder, mesh3d)
645  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE SOR3D'
646  ENDIF
647 !
648 !----------------------------------------------------------------------
649 !
650 ! VALIDATION DES RESULTATS SUR LE FICHIER DE REFERENCES
651 !
652  IF(valid) THEN
653  IF(debug.GT.0) WRITE(lu,*) 'CALLING BIEF_VALIDA'
654  CALL bief_valida(bst1, texte, luref, fmtref,
655  & varsor, texte, lures, fmtres,
656  & maxvar,npoin2, nit, nit,alire)
657  IF(debug.GT.0) WRITE(lu,*) 'RETOUR DE BIEF_VALIDA'
658  ENDIF
659 !
660  ENDIF
661 !
662 !------------------------------------------------------------------
663 !
664 #if defined COMPAD
665  CALL ad_tomawac_end
666 #endif
667 !
668 !------------------------------------------------------------------
669 !------------------------------------------------------------------------
670 !
671 ! SEND DATA BACK TO TELEMAC
672 !
673 ! WAC2
674  IF (inclus(coupling,'TOMAWAC2')) THEN
675  !CONVERT DIRECTIONS
676  DO i=1,npoin2
677  cosdir_tel%R(i) = cos(deg2rad*dirmoy_tel%R(i))
678  sindir_tel%R(i) = sin(deg2rad*dirmoy_tel%R(i))
679  ENDDO
680  CALL send_couple(2,npoin2,nvartom2tel,tom2tel)
681  ENDIF
682 !
683  RETURN
684  END
685 
subroutine get_mesh_nptir(FFORMAT, FID, NPTIR, IERR)
Definition: get_mesh_nptir.f:7
character(len=path_len), pointer namwxy
type(bief_obj), target hm0_tel
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine prepro(CX, CY, IKLE2, IFABOR, ELT, ETA, FRE, XK, CG, ITR01, NPOIN3, NPOIN2, NELEM2, NDIRE, NF, COURAN)
Definition: prepro.f:9
subroutine vitfon(VIFOND, F, XK, NF, NPOIN2, NDIRE)
Definition: vitfon.f:7
character(len=path_len), pointer namixy
subroutine fric3d(CFWC, NPOIN2, DIRHOU, U_TEL, V_TEL, UWBM)
Definition: fric3d.f:5
subroutine propa(F, B, ELT, ETA, FRE, NPOIN3, NPOIN2, NDIRE, NF, COURAN, TRA01)
Definition: propa.f:8
type(bief_obj), target u_tel
subroutine read_spectra_coords(FID, NP, XP, YP)
double precision, dimension(:), allocatable yspe
double precision, dimension(:), allocatable yleo
double precision, target at
subroutine iniphy(XK, CG, B, NPOIN2, NF)
Definition: iniphy.f:7
subroutine moudiss1(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
Definition: moudiss1.f:6
type(bief_obj), target tpr5_tel
type(bief_obj), target uv_wac
subroutine tetmoy(TETAM, F, NDIRE, NF, NPOIN2)
Definition: tetmoy.f:7
subroutine ecrete(F, DEPTH, NPOIN2, NDIRE, NF, PROMIN)
Definition: ecrete.f:7
subroutine fdiss3d(FDX, FDY, NPOIN2, XK, NDIRE, FS, NF)
Definition: fdiss3d.f:5
type(bief_obj), target v_tel
subroutine windiss3(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
Definition: windiss3.f:6
subroutine radiat(FX1, FY1, XK1, FS, CG1, CGSUC1, DSXXDX, DSXYDX, DSXYDY, DSYYDY)
Definition: radiat.f:8
type(bief_obj), target fy_wac
subroutine wipj(WIP, FS, NPOIN2, XK, WIPDX, WIPDY, NDIRE, NF)
Definition: wipj.f:4
subroutine totnrj(VARIAN, F, NF, NDIRE, NPOIN2)
Definition: totnrj.f:7
integer, parameter wac_cpl_run
type(cpl_wac_data_obj) cpl_wac_data
subroutine windiss2(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
Definition: windiss2.f:6
integer, parameter wac_cpl_init
subroutine ad_tomawac_timestep_begin
subroutine wac(PART, NIT_ORI)
Definition: wac.F:7
subroutine predif(CX, CY, IKLE2, IFABOR, ELT, ETA, XK, CG, ITR01, NPOIN3, NPOIN2, NELEM2, NDIRE, NF, COURAN, F, RX, RY, RXX, RYY, NEIGB)
Definition: predif.f:9
subroutine wac_init
Definition: wac_init.F:3
subroutine ad_tomawac_timestep_end
subroutine ad_tomawac_initialisation_begin
subroutine transf(FA, FR, XK, KNEW, NEWF, NEWF1, TAUX1, TAUX2, NPOIN2, NDIRE, NF)
Definition: transf.f:8
logical function inclus(C1, C2)
Definition: inclus.f:7
type(bief_obj), target vv_wac
integer, parameter wac_api_init
subroutine semimp(F, CF, XK, NF, NDIRE, NPOIN2, IANGNL, TSTOT, TSDER, TOLD, TNEW, Z0NEW, TWNEW, TAUX1, TAUX2, TAUX3, TAUX4, TAUX5, TAUX6, TAUX7, MDIA, IANMDI, COEMDI, FBOR)
Definition: semimp.f:10
subroutine dump2d(XF1, NP1)
Definition: dump2d.f:7
subroutine impr(LISPRD, LT, AT, ISITS, ICOD)
Definition: impr.f:7
double precision, dimension(:), allocatable xspe
subroutine ad_tomawac_begin
subroutine cormar(PART, UTEL, VTEL, HTEL)
Definition: cormar.f:7
subroutine uvstokes(UST, VST, WST, FS, NPOIN2, XK, ZFJ, NDIRE, ZTEL, NZ, NF)
Definition: uvstokes.f:5
subroutine windiss1(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
Definition: windiss1.f:6
type(bief_obj), target orbvel_tel
subroutine ecrspe(F, NDIRE, NF, NPOIN2, LT, AUXIL, NOLEO, NLEO, DEBRES, DATE, TIME, KNOLG, MESH)
Definition: ecrspe.f:8
subroutine sor3d(F, NDIRE, NF, NPOIN2, VENT, COURAN, MAREE, TITRE, TRA01, MESH3D)
Definition: sor3d.f:7
integer, dimension(:), allocatable noleo
type(bief_obj), target h_tel
subroutine moudiss2(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF, TAUX1, F_INT)
Definition: moudiss2.f:6
subroutine bief_valida(VARREF, TEXTREF, UREF, REFFORMAT, VARRES, TEXTRES, URES, RESFORMAT, MAXTAB, NP, IT, MAXIT, ACOMPARER)
Definition: bief_valida.f:8
subroutine ad_tomawac_end
Definition: ad_tomawac_end.f:3
type(bief_obj), target dirmoy_tel
type(bief_obj), target fx_wac
subroutine limwac(F, FBOR, NPTFR, NDIRE, NF, NPOIN2, KENT, PRIVE, NPRIV, IMP_FILE)
Definition: limwac.f:8
double precision, dimension(:), allocatable xleo
subroutine, public receive_couple(CID, NPOIN, NVAR, VARCOUPLE, DEFAULT_VAL)
Definition: couple_mod.F:838
subroutine fdissk(FDK, NPOIN2, NDIRE, FS, ZTEL, NZ, HSMJT, FZNORM, NF)
Definition: fdissk.f:6
subroutine limite(F, FREQ, NPOIN2, NDIRE, NF)
Definition: limite.f:6
subroutine fpread(FREAD, F, NF, NDIRE, NPOIN2, EXPO)
Definition: fpread.f:7
subroutine fbott3d(FBX, FBY, FS, NPOIN2, XK, NDIRE, NF)
Definition: fbott3d.f:5
character(len=path_len), target coupling
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
double precision, target dt
type(bief_file), dimension(maxlu_wac), target wac_files
integer, parameter wac_full_run
Definition: bief.f:3