Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-07 06:08:51 UTC

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
ffe464dc7d Mart*0001 #include "SHELFICE_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C !ROUTINE: SHELFICE_READPARMS
                0005 
                0006 C !INTERFACE: ==========================================================
                0007       SUBROUTINE SHELFICE_READPARMS( myThid )
                0008 
                0009 C !DESCRIPTION:
                0010 C     Initialize SHELFICE parameters, read in data.shelfice
                0011 
                0012 C !USES: ===============================================================
                0013       IMPLICIT NONE
                0014 #include "SIZE.h"
                0015 #include "EEPARAMS.h"
                0016 #include "PARAMS.h"
359d9ec3d7 Patr*0017 #include "SHELFICE.h"
abed653eb5 Mart*0018 #ifdef ALLOW_COST
                0019 # include "SHELFICE_COST.h"
                0020 #endif /* ALLOW_COST */
ffe464dc7d Mart*0021 #ifdef ALLOW_MNC
                0022 # include "MNC_PARAMS.h"
                0023 #endif
                0024 
                0025 C !INPUT PARAMETERS: ===================================================
                0026 C  myThid               :: thread number
                0027       INTEGER myThid
                0028 
                0029 C !OUTPUT PARAMETERS: ==================================================
                0030 C  none
                0031 
                0032 #ifdef ALLOW_SHELFICE
                0033 
                0034 C !LOCAL VARIABLES: ====================================================
bee329ac67 Jean*0035 C  iUnit                :: unit number for I/O
                0036 C  msgBuf               :: message buffer
ffe464dc7d Mart*0037       INTEGER iUnit
                0038       CHARACTER*(MAX_LEN_MBUF) msgBuf
b7411f1a84 Jean*0039 C-    retired parameters:
                0040       _RL SHELFICE_taveFreq
                0041       LOGICAL SHELFICE_tave_mnc
ffe464dc7d Mart*0042 CEOP
                0043 
                0044       NAMELIST /SHELFICE_PARM01/
7b8b86ab99 Timo*0045      &     SHELFICEsaltToHeatRatio,
17292dde13 Mart*0046      &     SHELFICEheatTransCoeff,
                0047      &     SHELFICEsaltTransCoeff,
005af54e38 Jean*0048      &     SHELFICEMassStepping, SHI_update_kTopC,
17292dde13 Mart*0049      &     rhoShelfice, SHELFICEkappa,
                0050      &     SHELFICElatentHeat, SHELFICEHeatCapacity_Cp,
abcbe3b2bf Jean*0051      &     no_slip_shelfice, SHELFICEDragLinear,
                0052      &     SHELFICEDragQuadratic, SHELFICEselectDragQuadr,
00f81e6785 Ou W*0053      &     SHELFICEthetaSurface, SHELFICEsalinity,
abcbe3b2bf Jean*0054      &     useISOMIPTD,
71125c711d Mart*0055      &     SHELFICEconserve, SHELFICEboundaryLayer,
9952f046d7 dngo*0056      &     SHI_withBL_realFWflux, SHI_withBL_uStarTopDz,
ffe464dc7d Mart*0057      &     SHELFICEwriteState,
                0058      &     SHELFICE_dumpFreq,
                0059      &     SHELFICE_taveFreq,
                0060      &     SHELFICE_tave_mnc,
6247293a5a Mart*0061      &     SHELFICE_dump_mnc,
9c84481760 Jean*0062      &     SHELFICEtopoFile,
                0063      &     SHELFICEmassFile, SHELFICEloadAnomalyFile,
4014d9eb9b Dimi*0064      &     SHELFICEMassDynTendFile, SHELFICETransCoeffTFile,
542be861d2 Dani*0065      &     SHELFICEDynMassOnly,
37e32ac0e0 Mart*0066      &     SHELFICEadvDiffHeatFlux,
b06dffee6b Jean*0067      &     SHELFICEuseGammaFrict, SHELFICE_oldCalcUStar,
99068806b1 Patr*0068      &     shiCdrag, shiZetaN, shiRc,
9952f046d7 dngo*0069      &     shiPrandtl, shiSchmidt, shiKinVisc,
359d9ec3d7 Patr*0070 #ifdef ALLOW_COST
9952f046d7 dngo*0071      &     mult_shelfice,
                0072      &     mult_shifwflx, wshifwflx0, shifwflx_errfile,
359d9ec3d7 Patr*0073 #endif
9952f046d7 dngo*0074      &     SHELFICEremeshFrequency,
                0075      &     SHELFICEsplitThreshold, SHELFICEmergeThreshold
ffe464dc7d Mart*0076 
ae4c29e0db Jean*0077 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0078 
                0079       IF ( .NOT.useShelfIce ) THEN
                0080 C-    pkg SHELFICE is not used
                0081         _BEGIN_MASTER(myThid)
                0082 C-    Track pkg activation status:
a00f55baae Jean*0083          SHELFICEisOn = .FALSE.
ae4c29e0db Jean*0084 C     print a (weak) warning if data.shelfice is found
                0085          CALL PACKAGES_UNUSED_MSG( 'useShelfIce', ' ', ' ' )
                0086         _END_MASTER(myThid)
                0087         RETURN
                0088       ENDIF
                0089 
a93eea6699 Jean*0090       _BEGIN_MASTER(myThid)
                0091 
ffe464dc7d Mart*0092 C This routine has been called by the main model so we set our
                0093 C internal flag to indicate we are in business
a0178c5a01 Jean*0094       SHELFICEisOn = .TRUE.
ffe464dc7d Mart*0095 
                0096 C Set defaults values for parameters in SHELFICE.h
17292dde13 Mart*0097       useISOMIPTD              = .FALSE.
71125c711d Mart*0098       SHELFICEconserve         = .FALSE.
40b188dddd Mart*0099       SHELFICEboundaryLayer    = .FALSE.
9952f046d7 dngo*0100       SHI_withBL_realFWflux    = .FALSE.
                0101       SHI_withBL_uStarTopDz    = .FALSE.
a0178c5a01 Jean*0102       SHELFICEMassStepping     = .FALSE.
005af54e38 Jean*0103 #ifdef ALLOW_SHELFICE_REMESHING
                0104       SHI_update_kTopC         = .TRUE.
                0105 #else
                0106       SHI_update_kTopC         = .FALSE.
                0107 #endif
542be861d2 Dani*0108       SHELFICEDynMassOnly      = .FALSE.
8194bc4a99 Mart*0109       SHELFICEtopoFile         = ' '
9c84481760 Jean*0110       SHELFICEmassFile         = ' '
                0111       SHELFICEloadAnomalyFile  = ' '
a0178c5a01 Jean*0112       SHELFICEMassDynTendFile  = ' '
4014d9eb9b Dimi*0113       SHELFICETransCoeffTFile  = ' '
17292dde13 Mart*0114       SHELFICElatentHeat       =  334.0 _d 3
                0115       SHELFICEHeatCapacity_Cp  = 2000.0 _d 0
                0116       rhoShelfIce              =  917.0 _d 0
7b8b86ab99 Timo*0117       SHELFICEsaltToHeatRatio  =   5.05 _d -03
17292dde13 Mart*0118       SHELFICEheatTransCoeff   =    1.0 _d -04
                0119       SHELFICEsaltTransCoeff   = UNSET_RL
00f81e6785 Ou W*0120 C--   Molecular thermal conductivity ice shelf (m^2/s)
17292dde13 Mart*0121       SHELFICEkappa            =   1.54 _d -06
                0122       SHELFICEthetaSurface     = - 20.0 _d 0
00f81e6785 Ou W*0123       SHELFICEsalinity         = 0.0 _d 0
ffe464dc7d Mart*0124       no_slip_shelfice         = no_slip_bottom
                0125       SHELFICEDragLinear       = bottomDragLinear
c1ea362d1d Patr*0126       SHELFICEDragQuadratic    = UNSET_RL
d1e8335be4 Jean*0127       SHELFICEselectDragQuadr  = -1
ffe464dc7d Mart*0128       SHELFICEwriteState       = .FALSE.
                0129       SHELFICE_dumpFreq        = dumpFreq
37e32ac0e0 Mart*0130       SHELFICEadvDiffHeatFlux  = .FALSE.
e4305b0f18 Patr*0131       SHELFICEuseGammaFrict    = .FALSE.
b06dffee6b Jean*0132       SHELFICE_oldCalcUStar    = .FALSE.
9952f046d7 dngo*0133       SHELFICEremeshFrequency  = 0.
                0134       SHELFICEsplitThreshold   = hFacMin*1.1 _d 0 + 1. _d 0
                0135       SHELFICEmergeThreshold   = hFacMin*0.9 _d 0
99068806b1 Patr*0136 C these params. are default of Holland and Jenkins (1999)
e4305b0f18 Patr*0137       shiCdrag                 = 0.0015 _d 0
                0138       shiZetaN                 = 0.052 _d 0
                0139       shiRc                    = 0.2 _d 0
99068806b1 Patr*0140       shiPrandtl               = 13.8 _d 0
                0141       shiSchmidt               = 2432.0 _d 0
                0142       shiKinVisc               = 1.95 _d -6
359d9ec3d7 Patr*0143 #ifdef ALLOW_COST
                0144       mult_shelfice            = 0. _d 0
abed653eb5 Mart*0145       mult_shifwflx            = 0. _d 0
                0146       wshifwflx0               = 0. _d 0
                0147       shifwflx_errfile         = ' '
359d9ec3d7 Patr*0148 #endif
ffe464dc7d Mart*0149 #ifdef ALLOW_MNC
                0150       SHELFICE_dump_mnc = snapshot_mnc
                0151 #else
                0152       SHELFICE_dump_mnc = .FALSE.
                0153 #endif
b7411f1a84 Jean*0154 C-    retired params:
                0155       SHELFICE_taveFreq = UNSET_RL
                0156       SHELFICE_tave_mnc = .FALSE.
ffe464dc7d Mart*0157 
                0158 C Open and read the data.shelfice file
                0159       WRITE(msgBuf,'(A)') ' SHELFICE_READPARMS: opening data.shelfice'
                0160       CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
a93eea6699 Jean*0161      &                   SQUEEZE_RIGHT, myThid )
ffe464dc7d Mart*0162       CALL OPEN_COPY_DATA_FILE(
                0163      I                   'data.shelfice', 'SHELFICE_READPARMS',
                0164      O                   iUnit,
                0165      I                   myThid )
                0166       READ(UNIT=iUnit,NML=SHELFICE_PARM01)
                0167       WRITE(msgBuf,'(A)')
                0168      &  ' SHELFICE_READPARMS: finished reading data.shelfice'
                0169       CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
a93eea6699 Jean*0170      &                   SQUEEZE_RIGHT, myThid )
ffe464dc7d Mart*0171 
                0172 C Close the open data file
7a77863887 Mart*0173 #ifdef SINGLE_DISK_IO
ffe464dc7d Mart*0174       CLOSE(iUnit)
7a77863887 Mart*0175 #else
                0176       CLOSE(iUnit,STATUS='DELETE')
                0177 #endif /* SINGLE_DISK_IO */
ffe464dc7d Mart*0178 
b7411f1a84 Jean*0179 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0180 C--   Check for retired parameters:
                0181       IF ( SHELFICE_taveFreq .NE. UNSET_RL ) THEN
                0182         WRITE(msgBuf,'(2A)') 'SHELFICE_READPARMS: "SHELFICE_taveFreq"',
                0183      &    ' is no longer allowed in file "data.shelfice"'
                0184         CALL PRINT_ERROR( msgBuf, myThid )
                0185         WRITE(msgBuf,'(2A)') 'SHELFICE_READPARMS: ',
                0186      &    ' since "pkg/timeave" has been removed.'
                0187         CALL PRINT_ERROR( msgBuf, myThid )
                0188 c       errCount = errCount + 1
                0189         STOP 'ABNORMAL END: S/R SHELFICE_READPARMS'
                0190       ENDIF
                0191       IF ( SHELFICE_tave_mnc ) THEN
                0192         WRITE(msgBuf,'(2A)') 'SHELFICE_READPARMS: "SHELFICE_tave_mnc"',
                0193      &    ' is no longer allowed in file "data.shelfice"'
                0194         CALL PRINT_ERROR( msgBuf, myThid )
                0195         WRITE(msgBuf,'(2A)') 'SHELFICE_READPARMS: ',
                0196      &    ' since "pkg/timeave" has been removed.'
                0197         CALL PRINT_ERROR( msgBuf, myThid )
                0198 c       errCount = errCount + 1
                0199         STOP 'ABNORMAL END: S/R SHELFICE_READPARMS'
                0200       ENDIF
                0201 
a93eea6699 Jean*0202 C Now set-up any remaining parameters that result from the input parameters
17292dde13 Mart*0203       IF ( SHELFICEsaltTransCoeff .EQ. UNSET_RL )
a93eea6699 Jean*0204      &     SHELFICEsaltTransCoeff =
7b8b86ab99 Timo*0205      &     SHELFICEsaltToHeatRatio * SHELFICEheatTransCoeff
ffe464dc7d Mart*0206 
b06dffee6b Jean*0207 C New calcUstar expression not available with SHELFICEboundaryLayer:
                0208       IF ( SHELFICEboundaryLayer ) SHELFICE_oldCalcUStar = .TRUE.
9952f046d7 dngo*0209 C  specific options within SHELFICEboundaryLayer:
                0210       SHI_withBL_realFWflux = SHI_withBL_realFWflux .AND.
                0211      &    SHELFICEboundaryLayer .AND. useRealFreshWaterFlux
                0212       SHI_withBL_uStarTopDz = SHI_withBL_uStarTopDz .AND.
                0213      &    SHELFICEboundaryLayer .AND. SHELFICEuseGammaFrict
b06dffee6b Jean*0214 
c1ea362d1d Patr*0215 C Set quadratic bottom drag depending on choices:
                0216       IF ( SHELFICEDragQuadratic .EQ. UNSET_RL) THEN
                0217        IF ( SHELFICEuseGammaFrict ) THEN
142816d65e Patr*0218         SHELFICEDragQuadratic = shiCdrag
                0219        ELSE
                0220         SHELFICEDragQuadratic = bottomDragQuadratic
                0221        ENDIF
c1ea362d1d Patr*0222       ENDIF
d1e8335be4 Jean*0223       IF ( SHELFICEDragQuadratic.EQ.0. _d 0 ) THEN
                0224         SHELFICEselectDragQuadr = -1
                0225       ELSEIF ( SHELFICEselectDragQuadr.EQ.-1 ) THEN
                0226         SHELFICEselectDragQuadr = MAX( 0, selectBotDragQuadr )
                0227       ENDIF
c1ea362d1d Patr*0228 
005af54e38 Jean*0229 C-    reset SHI_update_kTopC to avoid having to test for both:
                0230       SHI_update_kTopC = SHI_update_kTopC .AND. SHELFICEMassStepping
                0231 
ffe464dc7d Mart*0232 C-    Set Output type flags :
                0233       SHELFICE_dump_mdsio = .TRUE.
                0234 #ifdef ALLOW_MNC
                0235       IF (useMNC) THEN
                0236         IF ( .NOT.outputTypesInclusive
                0237      &       .AND. SHELFICE_dump_mnc ) SHELFICE_dump_mdsio = .FALSE.
                0238       ENDIF
                0239 #endif
                0240 
a93eea6699 Jean*0241       _END_MASTER(myThid)
                0242 C Everyone else must wait for the parameters to be loaded
                0243       _BARRIER
                0244 
ffe464dc7d Mart*0245 #endif /* ALLOW_SHELFICE */
                0246 
                0247       RETURN
                0248       END