diff --git a/.gitignore b/.gitignore index c9578cdc5..e983f997b 100644 --- a/.gitignore +++ b/.gitignore @@ -98,6 +98,9 @@ regtests/ww3_tp2.14/input/ww3_shel.inp regtests/ww3_tp2.14/input/ww3_shel.nml regtests/ww3_tp2.15/input_rho/ww3_prnc.inp regtests/ww3_tp2.17/input/inlet.msh +regtests/ww3_tp2.19/input/Boers.msh +regtests/ww3_tp2.19/input/meshbnd.msh +regtests/ww3_ufs1.1/input_unstr/global_1deg_unstr.msh regtests/ww3_tp2.21/input/mesh.msh regtests/ww3_tp2.21/input/obstructions_local.glo_unst.in regtests/ww3_tp2.21/input/obstructions_shadow.glo_unst.in diff --git a/model/src/w3gridmd.F90 b/model/src/w3gridmd.F90 index f0da46318..281ed7a3f 100644 --- a/model/src/w3gridmd.F90 +++ b/model/src/w3gridmd.F90 @@ -897,36 +897,36 @@ MODULE W3GRIDMD #ifdef W3_PR3 REAL :: WDTHCG, WDTHTH #endif - LOGICAL :: JGS_TERMINATE_MAXITER = .TRUE. - LOGICAL :: JGS_TERMINATE_DIFFERENCE = .TRUE. - LOGICAL :: JGS_TERMINATE_NORM = .TRUE. - LOGICAL :: JGS_LIMITER = .FALSE. - INTEGER :: JGS_LIMITER_FUNC = 1 - LOGICAL :: JGS_BLOCK_GAUSS_SEIDEL = .TRUE. - LOGICAL :: JGS_USE_JACOBI = .TRUE. - LOGICAL :: JGS_SOURCE_NONLINEAR = .FALSE. - LOGICAL :: UGOBCAUTO = .FALSE. - LOGICAL :: UGBCCFL = .FALSE. - LOGICAL :: EXPFSN = .TRUE. - LOGICAL :: EXPFSPSI = .FALSE. - LOGICAL :: EXPFSFCT = .FALSE. - LOGICAL :: IMPFSN = .FALSE. - LOGICAL :: EXPTOTAL = .FALSE. - LOGICAL :: IMPTOTAL = .FALSE. - LOGICAL :: IMPREFRACTION = .FALSE. - LOGICAL :: IMPFREQSHIFT = .FALSE. - LOGICAL :: IMPSOURCE = .FALSE. - LOGICAL :: SETUP_APPLY_WLV = .FALSE. - INTEGER :: JGS_MAXITER=100 + LOGICAL :: JGS_TERMINATE_MAXITER + LOGICAL :: JGS_TERMINATE_DIFFERENCE + LOGICAL :: JGS_TERMINATE_NORM + LOGICAL :: JGS_LIMITER + INTEGER :: JGS_LIMITER_FUNC + LOGICAL :: JGS_BLOCK_GAUSS_SEIDEL + LOGICAL :: JGS_USE_JACOBI + LOGICAL :: JGS_SOURCE_NONLINEAR + LOGICAL :: UGOBCAUTO + LOGICAL :: UGBCCFL + LOGICAL :: EXPFSN + LOGICAL :: EXPFSPSI + LOGICAL :: EXPFSFCT + LOGICAL :: IMPFSN + LOGICAL :: EXPTOTAL + LOGICAL :: IMPTOTAL + LOGICAL :: IMPREFRACTION + LOGICAL :: IMPFREQSHIFT + LOGICAL :: IMPSOURCE + LOGICAL :: SETUP_APPLY_WLV + INTEGER :: JGS_MAXITER INTEGER :: nbSel INTEGER :: UNSTSCHEMES(6) INTEGER :: UNSTSCHEME - INTEGER :: JGS_NLEVEL = 0 - REAL*8 :: JGS_PMIN = 0. - REAL*8 :: JGS_DIFF_THR = 1.E-10 - REAL*8 :: JGS_NORM_THR = 1.E-20 - REAL*8 :: SOLVERTHR_SETUP = 1.E-20 - REAL*8 :: CRIT_DEP_SETUP = 0. + INTEGER :: JGS_NLEVEL + REAL*8 :: JGS_PMIN + REAL*8 :: JGS_DIFF_THR + REAL*8 :: JGS_NORM_THR + REAL*8 :: SOLVERTHR_SETUP + REAL*8 :: CRIT_DEP_SETUP ! CHARACTER :: UGOBCFILE*60 REAL :: UGOBCDEPTH diff --git a/model/src/w3iogrmd.F90 b/model/src/w3iogrmd.F90 index 727e677ae..3aa2688ab 100644 --- a/model/src/w3iogrmd.F90 +++ b/model/src/w3iogrmd.F90 @@ -746,9 +746,10 @@ SUBROUTINE W3IOGR ( INXOUT, NDSM, IMOD, FEXT ) B_JGS_NORM_THR, & B_JGS_NLEVEL, & B_JGS_SOURCE_NONLINEAR - !Init COUNTCON to zero, it needs to be set somewhere or + !Init COUNTCON and IOBDP to zero, it needs to be set somewhere or !removed COUNTCON=0 + IOBDP=0 WRITE (NDSM) & X0, Y0, SX, SY, DXYMAX, XGRD, YGRD, TRIGP, TRIA, & LEN, IEN, ANGLE0, ANGLE, SI, MAXX, MAXY, & diff --git a/model/src/w3profsmd_pdlib.F90 b/model/src/w3profsmd_pdlib.F90 index 9564fc49d..c5b3486da 100644 --- a/model/src/w3profsmd_pdlib.F90 +++ b/model/src/w3profsmd_pdlib.F90 @@ -6416,7 +6416,7 @@ SUBROUTINE PDLIB_EXPLICIT_BLOCK(IMOD, FACX, FACY, DTG, VGX, VGY, LCALC) REAL, PARAMETER :: ONESIXTH = 1.0/6.0 REAL, PARAMETER :: ZERO = 0.0 - REAL, PARAMETER :: THR = 1E-12 + REAL, PARAMETER :: THR = 1.0E-12 INTEGER :: IK, ISP, ITH, IE, IP, IT, IBI, NI(3), I1, I2, I3, JX, IERR, IP_GLOB, ISEA ! @@ -6507,7 +6507,7 @@ SUBROUTINE PDLIB_EXPLICIT_BLOCK(IMOD, FACX, FACY, DTG, VGX, VGY, LCALC) DTMAXEXP = 1.E10 DTMAX = 1.E10 - DO IP = 1, np + DO IP = 1, npa IF (IOBP_LOC(IP) .EQ. 1 .OR. FSBCCFL) THEN DO ITH = 1, NTH DTMAXEXP(ITH) = PDLIB_SI(IP)/MAX(THR,KKSUM(ITH,IP)*IOBDP_LOC(IP)) @@ -6531,7 +6531,7 @@ SUBROUTINE PDLIB_EXPLICIT_BLOCK(IMOD, FACX, FACY, DTG, VGX, VGY, LCALC) ITER(IK) = ABS(NINT(CFLXY)) END IF - DO IP = 1, np + DO IP = 1, npa DTSI(IP) = DBLE(DTMAXGL)/DBLE(ITER(IK))/PDLIB_SI(IP) ! Some precalculations for the time integration. END DO @@ -6545,7 +6545,7 @@ SUBROUTINE PDLIB_EXPLICIT_BLOCK(IMOD, FACX, FACY, DTG, VGX, VGY, LCALC) u(ith,ip) = va(isp,ip) / cgsig(ip) * clats(iplg(ip)) enddo enddo - UOLD = U + CALL PDLIB_exchange2DREAL(U) DO IT = 1, ITER(IK) ST = ZERO @@ -6558,14 +6558,14 @@ SUBROUTINE PDLIB_EXPLICIT_BLOCK(IMOD, FACX, FACY, DTG, VGX, VGY, LCALC) ST(ITH,NI(3)) = ST(ITH,NI(3)) + KELEM3(ITH,IE,IK) * (U(ITH,NI(3)) - UTILDE(ITH)) ! the 2nd term are the theta values of each node ... ENDDO END DO ! IE - DO IP = 1, NP + DO IP = 1, NPA DO ITH = 1, NTH U(ITH,IP) = MAX(ZERO,U(ITH,IP)-DTSI(IP)*ST(ITH,IP)*(1-IOBPA_LOC(IP)))*IOBPD_LOC(ITH,IP)*IOBDP_LOC(IP) #ifdef W3_REF1 IF (REFPARS(3).LT.0.5.AND.IOBPD_LOC(ITH,IP).EQ.0.AND.IOBPA_LOC(IP).EQ.0) U(ITH,IP) = UOLD(ITH,IP) ! restores reflected boundary values #endif ENDDO - ENDDO ! IE + ENDDO ! IP IF ( FLBPI ) THEN DO ITH = 1, NTH @@ -6656,7 +6656,7 @@ SUBROUTINE BLOCK_SOLVER_EXPLICIT_INIT() #endif USE W3GDATMD, only: NTH, NK #ifdef W3_PDLIB - USE YOWNODEPOOL, only: np + USE YOWNODEPOOL, only: np, npa USE YOWELEMENTPOOL, only: ne #endif IMPLICIT NONE @@ -6664,7 +6664,7 @@ SUBROUTINE BLOCK_SOLVER_EXPLICIT_INIT() ALLOCATE(FLALL1(NTH,NE,NK), FLALL2(NTH,NE,NK), FLALL3(NTH,NE,NK)) ALLOCATE(KELEM1(NTH,NE,NK), KELEM2(NTH,NE,NK), KELEM3(NTH,NE,NK)) - ALLOCATE(NM(NTH,NE,NK), DTSI(NP)) + ALLOCATE(NM(NTH,NE,NK), DTSI(NPA)) ALLOCATE(ITER(NK)) !/ ------------------------------------------------------------------- /