Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync WW3 develop to dev/ufs-weather-model #987

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
54 changes: 27 additions & 27 deletions model/src/w3gridmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion model/src/w3iogrmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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, &
Expand Down
16 changes: 8 additions & 8 deletions model/src/w3profsmd_pdlib.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
!
Expand Down Expand Up @@ -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))
Expand All @@ -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

Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -6656,15 +6656,15 @@ 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
!/

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))

!/ ------------------------------------------------------------------- /
Expand Down