89 INTEGER,
INTENT(IN) :: PART
90 INTEGER,
INTENT(IN),
OPTIONAL :: NIT_ORI
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
99 INTEGER DATE(3),TIME(3),IP
101 INTEGER ADC,MDC,JDC,HDC
102 LOGICAL IMPRES, DEBRES
121 IF(
debug.GT.0)
WRITE(
lu,*)
'ENTERING TOMAWAC, WITH T_TEL=',
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,*)
'***************************************' 139 IF(abs(nint(dt_max/dt_min)-dt_max/dt_min).GT.1.d-6)
THEN 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,*)
'***************************************' 162 time(2)=int(
ddc-100.d0*hdc)
168 IF((
namwxy(1:1).NE.
' ').AND.
172 &
WRITE(
lu,*)
'CALLING READ_SPECTRA_COORDS FOR PRINTOUT' 174 IF(
debug.GT.0)
WRITE(
lu,*)
'BACK FROM READ_SPECTRA_COORDS' 183 IF((
namixy(1:1).NE.
' ').AND.
187 &
WRITE(
lu,*)
'CALLING READ_SPECTRA_COORDS FOR IMPOSED SPECTRA' 189 IF(
debug.GT.0)
WRITE(
lu,*)
'BACK FROM READ_SPECTRA_COORDS' 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' 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,*)
'***************************************' 240 IF(
debug.GT.0)
WRITE(
lu,*)
'APPEL DE RECEIVE_COUPLE' 242 IF(
debug.GT.0)
WRITE(
lu,*)
'RETOUR DE RECEIVE_COUPLE' 266 IF(debug.GT.0)
WRITE(lu,*)
'TIME LOOP BEGINNING' 285 CALL impr(lisprd,lt,at,lt,3)
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' 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,
302 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE ECRETE' 305 IF (maree.OR.couran) lt1=(lt/lam)*lam
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' 319 IF(depth(ip).LT.promin) depth(ip)=0.9d0*promin
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' 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' 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)
338 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE PREPRO 2' 347 WRITE(lu,*)
'*********************************' 348 WRITE(lu,*)
'DIFFRACTION IS TAKEN INTO ACCOUNT' 349 WRITE(lu,*)
'*********************************' 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' 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' 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 381 WRITE(lu,*)
'**************************' 382 WRITE(lu,*)
' UNKNOWN OPTION FOR ' 383 WRITE(lu,*)
' STRONG CURRENTS ' 384 WRITE(lu,*)
'**************************' 387 ELSEIF(sdscu.EQ.2.AND..NOT.tsou)
THEN 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,*)
'****************************' 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)
409 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE SEMIMP' 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' 425 IF(lt.GE.gradeb.AND.mod(lt-gradeb,graprd).EQ.0) impres=.true.
426 IF(lt.EQ.gradeb) debres=.true.
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,
438 & tra32, npoin2, ndire,nf)
440 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE TRANSF' 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)
451 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE DUMP2D' 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,
458 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE BIEF_DESIMP' 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)
469 CALL ecrspe(f, ndire, nf, npoin2, irec, tsder,
470 & noleo, npleo, debres,date, time, mesh%KNOLG%I, mesh)
472 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE ECRSPE' 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,
480 & tra31, tra32, npoin2, ndire, nf)
481 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE TRANSF' 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' 489 IF(debug.GT.0)
WRITE(lu,*)
'APPEL DE 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' 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' 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' 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,
513 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE FDISSK' 517 IF(debug.GT.0)
WRITE(lu,*)
'APPEL DE VITFON' 518 CALL vitfon(vifond, tstot, xk, nf,
520 IF(debug.GT.0)
WRITE(lu,*)
'APPEL DE 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' 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' 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)
559 CALL transf(tstot, f, xk, itr11, itr12,itr13, tra31, tra32,
561 CALL radiat(cpl_wac_data%FX_WAC%R, cpl_wac_data%FY_WAC%R,
562 & xk, tstot, cg, tsder, tra36, tra37, tra38, tra39)
564 CALL ov(
'X=Y ', x=cpl_wac_data%UV_WAC%R, y=suv%R,
566 CALL ov(
'X=Y ', x=cpl_wac_data%VV_WAC%R, y=svv%R,
569 IF(
inclus(coupling,
'SISYPHE').OR.
inclus(coupling,
'GAIA'))
574 CALL tetmoy(cpl_wac_data%DIRMOY_TEL%R, tstot, ndire,nf,
578 cpl_wac_data%DIRMOY_TEL%R(ip) =
579 & (pisur2-cpl_wac_data%DIRMOY_TEL%R(ip))*gradeg
583 cpl_wac_data%DIRMOY_TEL%R(ip) =
584 & cpl_wac_data%DIRMOY_TEL%R(ip)*gradeg
588 CALL totnrj(tra37, tstot, nf, ndire, npoin2)
590 cpl_wac_data%HM0_TEL%R(ip)=4.d0*sqrt(tra37(ip))
593 CALL fpread(cpl_wac_data%TPR5_TEL%R, tstot,
594 & nf, ndire, npoin2, 5.d0)
596 cpl_wac_data%TPR5_TEL%R(ip)=
597 & 1.d0/min(max(cpl_wac_data%TPR5_TEL%R(ip),freq(1)),freq(nf))
600 CALL vitfon(cpl_wac_data%ORBVEL_TEL%R, tstot, xk, nf,
603 IF (alg_dislodge)
THEN 604 CALL vitfon(cpl_wac_data%ORBVEL_TEL%R, tstot, xk, nf,
629 IF(part.EQ.wac_cpl_run) nit=dummy
630 IF(
PRESENT(nit_ori))
THEN 637 IF(abs(at-at0-total_iter*dt).LT.1.d-6)
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' 653 IF(debug.GT.0)
WRITE(lu,*)
'CALLING BIEF_VALIDA' 655 & varsor, texte, lures, fmtres,
656 & maxvar,npoin2, nit, nit,alire)
657 IF(debug.GT.0)
WRITE(lu,*)
'RETOUR DE BIEF_VALIDA' 674 IF (
inclus(coupling,
'TOMAWAC2'))
THEN 677 cosdir_tel%R(i) = cos(deg2rad*dirmoy_tel%R(i))
678 sindir_tel%R(i) = sin(deg2rad*dirmoy_tel%R(i))
680 CALL send_couple(2,npoin2,nvartom2tel,tom2tel)
subroutine get_mesh_nptir(FFORMAT, FID, NPTIR, IERR)
character(len=path_len), pointer namwxy
type(bief_obj), target hm0_tel
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine prepro(CX, CY, IKLE2, IFABOR, ELT, ETA, FRE, XK, CG, ITR01, NPOIN3, NPOIN2, NELEM2, NDIRE, NF, COURAN)
subroutine vitfon(VIFOND, F, XK, NF, NPOIN2, NDIRE)
character(len=path_len), pointer namixy
subroutine fric3d(CFWC, NPOIN2, DIRHOU, U_TEL, V_TEL, UWBM)
subroutine propa(F, B, ELT, ETA, FRE, NPOIN3, NPOIN2, NDIRE, NF, COURAN, TRA01)
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)
subroutine moudiss1(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
type(bief_obj), target tpr5_tel
type(bief_obj), target uv_wac
subroutine tetmoy(TETAM, F, NDIRE, NF, NPOIN2)
subroutine ecrete(F, DEPTH, NPOIN2, NDIRE, NF, PROMIN)
subroutine fdiss3d(FDX, FDY, NPOIN2, XK, NDIRE, FS, NF)
type(bief_obj), target v_tel
subroutine windiss3(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
subroutine radiat(FX1, FY1, XK1, FS, CG1, CGSUC1, DSXXDX, DSXYDX, DSXYDY, DSYYDY)
type(bief_obj), target fy_wac
subroutine wipj(WIP, FS, NPOIN2, XK, WIPDX, WIPDY, NDIRE, NF)
subroutine totnrj(VARIAN, F, NF, NDIRE, NPOIN2)
integer, parameter wac_cpl_run
type(cpl_wac_data_obj) cpl_wac_data
subroutine windiss2(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
integer, parameter wac_cpl_init
subroutine ad_tomawac_timestep_begin
subroutine wac(PART, NIT_ORI)
subroutine predif(CX, CY, IKLE2, IFABOR, ELT, ETA, XK, CG, ITR01, NPOIN3, NPOIN2, NELEM2, NDIRE, NF, COURAN, F, RX, RY, RXX, RYY, NEIGB)
subroutine ad_tomawac_timestep_end
subroutine ad_tomawac_initialisation_begin
subroutine transf(FA, FR, XK, KNEW, NEWF, NEWF1, TAUX1, TAUX2, NPOIN2, NDIRE, NF)
logical function inclus(C1, C2)
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)
subroutine dump2d(XF1, NP1)
subroutine impr(LISPRD, LT, AT, ISITS, ICOD)
double precision, dimension(:), allocatable xspe
subroutine ad_tomawac_begin
subroutine cormar(PART, UTEL, VTEL, HTEL)
subroutine uvstokes(UST, VST, WST, FS, NPOIN2, XK, ZFJ, NDIRE, ZTEL, NZ, NF)
subroutine windiss1(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF)
type(bief_obj), target orbvel_tel
subroutine ecrspe(F, NDIRE, NF, NPOIN2, LT, AUXIL, NOLEO, NLEO, DEBRES, DATE, TIME, KNOLG, MESH)
subroutine sor3d(F, NDIRE, NF, NPOIN2, VENT, COURAN, MAREE, TITRE, TRA01, MESH3D)
integer, dimension(:), allocatable noleo
type(bief_obj), target h_tel
subroutine moudiss2(FWX, FWY, NPOIN2, XK, NDIRE, FS, NF, TAUX1, F_INT)
subroutine bief_valida(VARREF, TEXTREF, UREF, REFFORMAT, VARRES, TEXTRES, URES, RESFORMAT, MAXTAB, NP, IT, MAXIT, ACOMPARER)
subroutine ad_tomawac_end
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)
double precision, dimension(:), allocatable xleo
subroutine, public receive_couple(CID, NPOIN, NVAR, VARCOUPLE, DEFAULT_VAL)
subroutine fdissk(FDK, NPOIN2, NDIRE, FS, ZTEL, NZ, HSMJT, FZNORM, NF)
subroutine limite(F, FREQ, NPOIN2, NDIRE, NF)
subroutine fpread(FREAD, F, NF, NDIRE, NPOIN2, EXPO)
subroutine fbott3d(FBX, FBY, FS, NPOIN2, XK, NDIRE, NF)
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)
double precision, target dt
type(bief_file), dimension(maxlu_wac), target wac_files
integer, parameter wac_full_run