Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c0e081b
Update SEAICE_OPTIONS.h
amc2507 Aug 8, 2025
6598046
Update seaice_evp.F
amc2507 Aug 8, 2025
98df2e5
Merge branch 'MITgcm:master' into MITgcm_evp
amc2507 Aug 13, 2025
bf93bc6
Update SEAICE_OPTIONS.h
amc2507 Aug 13, 2025
0a893ec
Update seaice_evp.F
amc2507 Aug 13, 2025
e588134
Update SEAICE_PARAMS.h
amc2507 Aug 13, 2025
30f7c68
Update SEAICE_PARAMS.h
amc2507 Aug 13, 2025
0372946
Add a run-time flag for regularizations in EVP
amc2507 Aug 13, 2025
f0b613b
Add a run-time flag for regularizations in EVP
amc2507 Aug 13, 2025
12df640
Add a run-time flag for regularizations in EVP
amc2507 Aug 13, 2025
e5fba5b
Add a run-time flag for regularizations in EVP
amc2507 Aug 14, 2025
01e63f6
Add a run-time flag for regularizations in EVP
amc2507 Aug 14, 2025
d26dca2
Add a run-time flag for regularizations in EVP
amc2507 Aug 14, 2025
930a6d4
Add a run-time flag for regularizations in EVP
amc2507 Aug 14, 2025
e7c8481
add verification experiment for SEAICEevpRegDenomUV=T
mjlosch Oct 15, 2025
33e4fab
sneak in small modification: do not write coastRoughU/V if not used
mjlosch Oct 15, 2025
02dede5
Update SEAICE_PARAMS.h
amc2507 Oct 27, 2025
9c97407
Update SEAICE_PARAMS.h
amc2507 Oct 27, 2025
d953c5b
Update seaice_evp.F
amc2507 Oct 27, 2025
9fc4cee
Update seaice_readparms.F
amc2507 Oct 27, 2025
2f8906d
Update seaice_summary.F
amc2507 Oct 27, 2025
548d7ce
Update data.seaice
amc2507 Oct 27, 2025
ec7073a
Update seaice_readparms.F
amc2507 Oct 27, 2025
92eee8a
Update seaice_summary.F
amc2507 Oct 27, 2025
44f680a
make sure that default does not break existing setups
mjlosch Oct 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions doc/phys_pkgs/seaice.rst
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,9 @@ General flags and parameters
+------------------------------------+------------------------------+-------------------------------------------------------------------------+
| :varlink:`SEAICEaEVPalphaMin` | 5.0 | aEVP lower limit of alpha and beta (non-dim.), see :cite:`kimmritz:16` |
+------------------------------------+------------------------------+-------------------------------------------------------------------------+
| :varlink:`SEAICE_evpAreaReg` | -1.0 | a minimun ice fraction for regularizations of denomU/V in EVP; |
| | | off by default (-1), 1.E-5 is a useful value for high-res simulation |
+------------------------------------+------------------------------+-------------------------------------------------------------------------+
| :varlink:`SEAICE_elasticParm` | 0.33333333 | EVP parameter :math:`E_0` (non-dim.), sets relaxation timescale |
| | | :varlink:`SEAICE_evpTauRelax` = |
| | | :varlink:`SEAICE_elasticParm` * :varlink:`SEAICE_deltaTdyn` |
Expand Down
8 changes: 6 additions & 2 deletions pkg/seaice/SEAICE_PARAMS.h
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,10 @@ C SEAICEaEVPcStar :: multiple of stabilty factor: alpha*beta=cstar*gamma
C SEAICEaEVPalphaMin :: lower limit of alpha and beta, regularisation
C to prevent singularities of system matrix,
C e.g. when ice concentration is too low.
C SEAICE_evpAreaReg :: Specifies a minimun ice fraction for the purposes
C of regularizations in the calculation of denomU/V,
C to enhance the stability of EVP; off by default,
C turn on with a sensible value, e.g. 1e-5
C SEAICEnonLinTol :: non-linear tolerance parameter for implicit solvers
C JFNKgamma_lin_min/max :: tolerance parameters for linear JFNK solver
C JFNKres_t :: tolerance parameter for FGMRES residual
Expand Down Expand Up @@ -560,7 +564,7 @@ C
_RL SEAICE_evpAlpha, SEAICE_evpBeta
_RL SEAICE_evpDampC, SEAICE_zetaMin, SEAICE_zetaMaxFac
_RL SEAICEaEVPcoeff, SEAICEaEVPcStar, SEAICEaEVPalphaMin
_RL SEAICEpresH0
_RL SEAICE_evpAreaReg, SEAICEpresH0
_RL SEAICEdiffKhArea, SEAICEdiffKhHeff, SEAICEdiffKhSnow
_RL SEAICEdiffKhSalt
_RL SEAICE_tauAreaObsRelax
Expand All @@ -576,7 +580,7 @@ C
& SEAICE_evpAlpha, SEAICE_evpBeta,
& SEAICEaEVPcoeff, SEAICEaEVPcStar, SEAICEaEVPalphaMin,
& SEAICE_evpDampC, SEAICE_zetaMin, SEAICE_zetaMaxFac,
& SEAICEpresH0,
& SEAICE_evpAreaReg, SEAICEpresH0,
& SEAICE_monFreq, SEAICE_dumpFreq, SEAICE_taveFreq,
& SEAICE_initialHEFF,
& SEAICE_rhoAir, SEAICE_rhoIce, SEAICE_rhoSnow, ICE2WATR,
Expand Down
15 changes: 13 additions & 2 deletions pkg/seaice/seaice_evp.F
Original file line number Diff line number Diff line change
Expand Up @@ -883,12 +883,23 @@ SUBROUTINE SEAICE_EVP( myTime, myIter, myThid )
tmp = evpStarFac*recip_deltaT
betaFacP1V = betaFacV + tmp
betaFacP1U = betaFacU + tmp
denomU = seaiceMassU(i,j,bi,bj)*betaFacP1U
IF ( SEAICE_evpAreaReg .GT. 0. _d 0 ) THEN
denomU = MAX(seaiceMassU(i,j,bi,bj),SEAICE_evpAreaReg
& * seaice_rhoIce)*betaFacP1U
& + 0.5 _d 0*( DWATN(i,j,bi,bj) + DWATN(i-1,j,bi,bj) )
& * COSWAT * MAX(areaW(i,j,bi,bj),SEAICE_evpAreaReg)
denomV = MAX(seaiceMassV(i,j,bi,bj),SEAICE_evpAreaReg
& * seaice_rhoIce)*betaFacP1V
& + 0.5 _d 0*( DWATN(i,j,bi,bj) + DWATN(i,j-1,bi,bj) )
& * COSWAT * MAX(areaS(i,j,bi,bj),SEAICE_evpAreaReg)
ELSE
denomU = seaiceMassU(i,j,bi,bj)*betaFacP1U
& + 0.5 _d 0*( DWATN(i,j,bi,bj) + DWATN(i-1,j,bi,bj) )
& * COSWAT * areaW(i,j,bi,bj)
denomV = seaiceMassV(i,j,bi,bj)*betaFacP1V
denomV = seaiceMassV(i,j,bi,bj)*betaFacP1V
& + 0.5 _d 0*( DWATN(i,j,bi,bj) + DWATN(i,j-1,bi,bj) )
& * COSWAT * areaS(i,j,bi,bj)
ENDIF
#ifdef SEAICE_ALLOW_BOTTOMDRAG
denomU = denomU + areaW(i,j,bi,bj)
& * 0.5 _d 0*( CbotC(i,j,bi,bj) + CbotC(i-1,j,bi,bj) )
Expand Down
12 changes: 8 additions & 4 deletions pkg/seaice/seaice_init_fixed.F
Original file line number Diff line number Diff line change
Expand Up @@ -471,10 +471,14 @@ SUBROUTINE SEAICE_INIT_FIXED( myThid )
ENDIF

CALL EXCH_UV_XY_RL( coastRoughU, coastRoughV, .FALSE., myThid )
CALL WRITE_FLD_XY_RL( 'coastRoughUnormalized',
& ' ', coastRoughU, -1, myThid )
CALL WRITE_FLD_XY_RL( 'coastRoughVnormalized',
& ' ', coastRoughV, -1, myThid )
C Write coastRoughU/V fields only we are actually going to use them
C to reduce unnecessary output
IF ( SEAICEsideDrag .NE. 0. _d 0 ) THEN
CALL WRITE_FLD_XY_RL( 'coastRoughUnormalized',
& ' ', coastRoughU, -1, myThid )
CALL WRITE_FLD_XY_RL( 'coastRoughVnormalized',
& ' ', coastRoughV, -1, myThid )
ENDIF
#endif /* SEAICE_ALLOW_SIDEDRAG */

#ifdef ALLOW_SHELFICE
Expand Down
2 changes: 2 additions & 0 deletions pkg/seaice/seaice_readparms.F
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ SUBROUTINE SEAICE_READPARMS( myThid )
& SEAICE_evpDampC, SEAICEnEVPstarSteps,
& SEAICE_evpAlpha, SEAICE_evpBeta,
& SEAICEaEVPcoeff, SEAICEaEVPcStar, SEAICEaEVPalphaMin,
& SEAICE_evpAreaReg,
& SEAICE_zetaMin, SEAICE_zetaMaxFac, SEAICEusePicardAsPrecon,
& SEAICEuseLSRflex, SEAICEuseKrylov, SEAICEuseJFNK,
& SEAICEnonLinIterMax, SEAICElinearIterMax, SEAICEnonLinTol,
Expand Down Expand Up @@ -373,6 +374,7 @@ SUBROUTINE SEAICE_READPARMS( myThid )
SEAICEaEVPcoeff = UNSET_RL
SEAICEaEVPcStar = UNSET_RL
SEAICEaEVPalphaMin = UNSET_RL
SEAICE_evpAreaReg = -1.
SEAICE_initialHEFF = ZERO
#ifdef SEAICE_ITD
C Coefficients used to calculate sea ice thickness category limits
Expand Down
2 changes: 2 additions & 0 deletions pkg/seaice/seaice_summary.F
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,8 @@ SUBROUTINE SEAICE_SUMMARY( myThid )
& 'SEAICEnEVPstarSteps =', ' /* num. of EVP* steps */')
CALL WRITE_0D_L ( SEAICEuseEVPpickup, INDEX_NONE,
& 'SEAICEuseEVPpickup=', ' /* start EVP solver with EVP pickup*/')
CALL WRITE_0D_RL ( SEAICE_evpAreaReg, INDEX_NONE,
& 'SEAICE_evpAreaReg =', ' /* EVP DenomU/V regularizations*/')
#endif /* SEAICE_ALLOW_EVP */
ENDIF

Expand Down
27 changes: 27 additions & 0 deletions verification/seaice_obcs/input.regDenom/data.seaice
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# SEAICE parameters
&SEAICE_PARM01
#- seaice dynamics params:
# turn on aEVP with some sensible parameters
SEAICEaEVPcoeff = 0.5,
SEAICEnEVPstarSteps = 500,
# test regularisation of EVP (helps especially for high resolution)
SEAICE_evpAreaReg = 0.00001,
#- seaice state & transport params:
SEAICEadvScheme = 7,
# add small diffKh to test diffusion with multi-dim advect.
SEAICEdiffKhArea = 20.,
SEAICE_saltFrac = 0.3,
#- seaice thermodyn params:
#SEAICE_multDim = 7, # this is the default
#- constant seawater freezing point:
SEAICE_tempFrz0 = -1.96,
SEAICE_dTempFrz_dS = 0.,
# use the new standard way of specifying ocean-ice turb. flux coeff:
# defaults:
# SEAICE_mcPheePiston= MCPHEE_TAPER_FAC*STANTON_NUMBER*USTAR_BASE=8.75e4
# and SEAICE_frazilFrac = 1.
SEAICE_mcPheePiston= 0.00004,
SEAICE_frazilFrac = 0.3,
#- seaice I/O params:
SEAICEwriteState = .TRUE.,
&
12 changes: 12 additions & 0 deletions verification/seaice_obcs/input.regDenom/eedata.mth
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Example "eedata" file for multi-threaded test
# (copy "eedata.mth" to "eedata" to use it)
# Lines beginning "#" are comments
# nTx - No. threads per process in X
# nTy - No. threads per process in Y
&EEPARMS
nTx=2,
nTy=1,
#debugMode=.TRUE.,
&
# Note: Some systems use & as the namelist terminator (as shown here).
# Other systems use a / character.
Loading
Loading