Back to home page

MITgcm

 
 

    


File indexing completed on 2024-01-13 06:10:45 UTC

view on githubraw file Latest commit 005af54e on 2024-01-12 20:10:27 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
                0039 CEOP
                0040 
                0041       NAMELIST /SHELFICE_PARM01/
7b8b86ab99 Timo*0042      &     SHELFICEsaltToHeatRatio,
17292dde13 Mart*0043      &     SHELFICEheatTransCoeff,
                0044      &     SHELFICEsaltTransCoeff,
005af54e38 Jean*0045      &     SHELFICEMassStepping, SHI_update_kTopC,
17292dde13 Mart*0046      &     rhoShelfice, SHELFICEkappa,
                0047      &     SHELFICElatentHeat, SHELFICEHeatCapacity_Cp,
abcbe3b2bf Jean*0048      &     no_slip_shelfice, SHELFICEDragLinear,
                0049      &     SHELFICEDragQuadratic, SHELFICEselectDragQuadr,
17292dde13 Mart*0050      &     SHELFICEthetaSurface,
abcbe3b2bf Jean*0051      &     useISOMIPTD,
71125c711d Mart*0052      &     SHELFICEconserve, SHELFICEboundaryLayer,
9952f046d7 dngo*0053      &     SHI_withBL_realFWflux, SHI_withBL_uStarTopDz,
ffe464dc7d Mart*0054      &     SHELFICEwriteState,
                0055      &     SHELFICE_dumpFreq,
                0056      &     SHELFICE_taveFreq,
                0057      &     SHELFICE_tave_mnc,
6247293a5a Mart*0058      &     SHELFICE_dump_mnc,
9c84481760 Jean*0059      &     SHELFICEtopoFile,
                0060      &     SHELFICEmassFile, SHELFICEloadAnomalyFile,
4014d9eb9b Dimi*0061      &     SHELFICEMassDynTendFile, SHELFICETransCoeffTFile,
542be861d2 Dani*0062      &     SHELFICEDynMassOnly,
37e32ac0e0 Mart*0063      &     SHELFICEadvDiffHeatFlux,
b06dffee6b Jean*0064      &     SHELFICEuseGammaFrict, SHELFICE_oldCalcUStar,
99068806b1 Patr*0065      &     shiCdrag, shiZetaN, shiRc,
9952f046d7 dngo*0066      &     shiPrandtl, shiSchmidt, shiKinVisc,
359d9ec3d7 Patr*0067 #ifdef ALLOW_COST
9952f046d7 dngo*0068      &     mult_shelfice,
                0069      &     mult_shifwflx, wshifwflx0, shifwflx_errfile,
359d9ec3d7 Patr*0070 #endif
9952f046d7 dngo*0071      &     SHELFICEremeshFrequency,
                0072      &     SHELFICEsplitThreshold, SHELFICEmergeThreshold
ffe464dc7d Mart*0073 
ae4c29e0db Jean*0074 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0075 
                0076       IF ( .NOT.useShelfIce ) THEN
                0077 C-    pkg SHELFICE is not used
                0078         _BEGIN_MASTER(myThid)
                0079 C-    Track pkg activation status:
a00f55baae Jean*0080          SHELFICEisOn = .FALSE.
ae4c29e0db Jean*0081 C     print a (weak) warning if data.shelfice is found
                0082          CALL PACKAGES_UNUSED_MSG( 'useShelfIce', ' ', ' ' )
                0083         _END_MASTER(myThid)
                0084         RETURN
                0085       ENDIF
                0086 
a93eea6699 Jean*0087       _BEGIN_MASTER(myThid)
                0088 
ffe464dc7d Mart*0089 C This routine has been called by the main model so we set our
                0090 C internal flag to indicate we are in business
a0178c5a01 Jean*0091       SHELFICEisOn = .TRUE.
ffe464dc7d Mart*0092 
                0093 C Set defaults values for parameters in SHELFICE.h
17292dde13 Mart*0094       useISOMIPTD              = .FALSE.
71125c711d Mart*0095       SHELFICEconserve         = .FALSE.
40b188dddd Mart*0096       SHELFICEboundaryLayer    = .FALSE.
9952f046d7 dngo*0097       SHI_withBL_realFWflux    = .FALSE.
                0098       SHI_withBL_uStarTopDz    = .FALSE.
a0178c5a01 Jean*0099       SHELFICEMassStepping     = .FALSE.
005af54e38 Jean*0100 #ifdef ALLOW_SHELFICE_REMESHING
                0101       SHI_update_kTopC         = .TRUE.
                0102 #else
                0103       SHI_update_kTopC         = .FALSE.
                0104 #endif
542be861d2 Dani*0105       SHELFICEDynMassOnly      = .FALSE.
8194bc4a99 Mart*0106       SHELFICEtopoFile         = ' '
9c84481760 Jean*0107       SHELFICEmassFile         = ' '
                0108       SHELFICEloadAnomalyFile  = ' '
a0178c5a01 Jean*0109       SHELFICEMassDynTendFile  = ' '
4014d9eb9b Dimi*0110       SHELFICETransCoeffTFile  = ' '
17292dde13 Mart*0111       SHELFICElatentHeat       =  334.0 _d 3
                0112       SHELFICEHeatCapacity_Cp  = 2000.0 _d 0
                0113       rhoShelfIce              =  917.0 _d 0
7b8b86ab99 Timo*0114       SHELFICEsaltToHeatRatio  =   5.05 _d -03
17292dde13 Mart*0115       SHELFICEheatTransCoeff   =    1.0 _d -04
                0116       SHELFICEsaltTransCoeff   = UNSET_RL
                0117       SHELFICEkappa            =   1.54 _d -06
                0118       SHELFICEthetaSurface     = - 20.0 _d 0
ffe464dc7d Mart*0119       no_slip_shelfice         = no_slip_bottom
                0120       SHELFICEDragLinear       = bottomDragLinear
c1ea362d1d Patr*0121       SHELFICEDragQuadratic    = UNSET_RL
d1e8335be4 Jean*0122       SHELFICEselectDragQuadr  = -1
ffe464dc7d Mart*0123       SHELFICEwriteState       = .FALSE.
                0124       SHELFICE_dumpFreq        = dumpFreq
                0125       SHELFICE_taveFreq        = taveFreq
37e32ac0e0 Mart*0126       SHELFICEadvDiffHeatFlux  = .FALSE.
e4305b0f18 Patr*0127       SHELFICEuseGammaFrict    = .FALSE.
b06dffee6b Jean*0128       SHELFICE_oldCalcUStar    = .FALSE.
9952f046d7 dngo*0129       SHELFICEremeshFrequency  = 0.
                0130       SHELFICEsplitThreshold   = hFacMin*1.1 _d 0 + 1. _d 0
                0131       SHELFICEmergeThreshold   = hFacMin*0.9 _d 0
99068806b1 Patr*0132 C these params. are default of Holland and Jenkins (1999)
e4305b0f18 Patr*0133       shiCdrag                 = 0.0015 _d 0
                0134       shiZetaN                 = 0.052 _d 0
                0135       shiRc                    = 0.2 _d 0
99068806b1 Patr*0136       shiPrandtl               = 13.8 _d 0
                0137       shiSchmidt               = 2432.0 _d 0
                0138       shiKinVisc               = 1.95 _d -6
359d9ec3d7 Patr*0139 #ifdef ALLOW_COST
                0140       mult_shelfice            = 0. _d 0
abed653eb5 Mart*0141       mult_shifwflx            = 0. _d 0
                0142       wshifwflx0               = 0. _d 0
                0143       shifwflx_errfile         = ' '
359d9ec3d7 Patr*0144 #endif
ffe464dc7d Mart*0145 #ifdef ALLOW_MNC
                0146       SHELFICE_tave_mnc = timeave_mnc
                0147       SHELFICE_dump_mnc = snapshot_mnc
                0148 #else
                0149       SHELFICE_tave_mnc = .FALSE.
                0150       SHELFICE_dump_mnc = .FALSE.
                0151 #endif
                0152 
                0153 C Open and read the data.shelfice file
                0154       WRITE(msgBuf,'(A)') ' SHELFICE_READPARMS: opening data.shelfice'
                0155       CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
a93eea6699 Jean*0156      &                   SQUEEZE_RIGHT, myThid )
ffe464dc7d Mart*0157       CALL OPEN_COPY_DATA_FILE(
                0158      I                   'data.shelfice', 'SHELFICE_READPARMS',
                0159      O                   iUnit,
                0160      I                   myThid )
                0161       READ(UNIT=iUnit,NML=SHELFICE_PARM01)
                0162       WRITE(msgBuf,'(A)')
                0163      &  ' SHELFICE_READPARMS: finished reading data.shelfice'
                0164       CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
a93eea6699 Jean*0165      &                   SQUEEZE_RIGHT, myThid )
ffe464dc7d Mart*0166 
                0167 C Close the open data file
7a77863887 Mart*0168 #ifdef SINGLE_DISK_IO
ffe464dc7d Mart*0169       CLOSE(iUnit)
7a77863887 Mart*0170 #else
                0171       CLOSE(iUnit,STATUS='DELETE')
                0172 #endif /* SINGLE_DISK_IO */
ffe464dc7d Mart*0173 
a93eea6699 Jean*0174 C Now set-up any remaining parameters that result from the input parameters
17292dde13 Mart*0175       IF ( SHELFICEsaltTransCoeff .EQ. UNSET_RL )
a93eea6699 Jean*0176      &     SHELFICEsaltTransCoeff =
7b8b86ab99 Timo*0177      &     SHELFICEsaltToHeatRatio * SHELFICEheatTransCoeff
ffe464dc7d Mart*0178 
b06dffee6b Jean*0179 C New calcUstar expression not available with SHELFICEboundaryLayer:
                0180       IF ( SHELFICEboundaryLayer ) SHELFICE_oldCalcUStar = .TRUE.
9952f046d7 dngo*0181 C  specific options within SHELFICEboundaryLayer:
                0182       SHI_withBL_realFWflux = SHI_withBL_realFWflux .AND.
                0183      &    SHELFICEboundaryLayer .AND. useRealFreshWaterFlux
                0184       SHI_withBL_uStarTopDz = SHI_withBL_uStarTopDz .AND.
                0185      &    SHELFICEboundaryLayer .AND. SHELFICEuseGammaFrict
b06dffee6b Jean*0186 
c1ea362d1d Patr*0187 C Set quadratic bottom drag depending on choices:
                0188       IF ( SHELFICEDragQuadratic .EQ. UNSET_RL) THEN
                0189        IF ( SHELFICEuseGammaFrict ) THEN
142816d65e Patr*0190         SHELFICEDragQuadratic = shiCdrag
                0191        ELSE
                0192         SHELFICEDragQuadratic = bottomDragQuadratic
                0193        ENDIF
c1ea362d1d Patr*0194       ENDIF
d1e8335be4 Jean*0195       IF ( SHELFICEDragQuadratic.EQ.0. _d 0 ) THEN
                0196         SHELFICEselectDragQuadr = -1
                0197       ELSEIF ( SHELFICEselectDragQuadr.EQ.-1 ) THEN
                0198         SHELFICEselectDragQuadr = MAX( 0, selectBotDragQuadr )
                0199       ENDIF
c1ea362d1d Patr*0200 
005af54e38 Jean*0201 C-    reset SHI_update_kTopC to avoid having to test for both:
                0202       SHI_update_kTopC = SHI_update_kTopC .AND. SHELFICEMassStepping
                0203 
ffe464dc7d Mart*0204 C-    Set Output type flags :
                0205       SHELFICE_tave_mdsio = .TRUE.
                0206       SHELFICE_dump_mdsio = .TRUE.
                0207 #ifdef ALLOW_MNC
                0208       IF (useMNC) THEN
                0209         IF ( .NOT.outputTypesInclusive
                0210      &       .AND. SHELFICE_tave_mnc ) SHELFICE_tave_mdsio = .FALSE.
                0211         IF ( .NOT.outputTypesInclusive
                0212      &       .AND. SHELFICE_dump_mnc ) SHELFICE_dump_mdsio = .FALSE.
                0213       ENDIF
                0214 #endif
                0215 
a93eea6699 Jean*0216       _END_MASTER(myThid)
                0217 C Everyone else must wait for the parameters to be loaded
                0218       _BARRIER
                0219 
ffe464dc7d Mart*0220 #endif /* ALLOW_SHELFICE */
                0221 
                0222       RETURN
                0223       END