Back to home page

MITgcm

 
 

    


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

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
e0a2f8aec4 Jean*0001 #include "LAND_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C     !ROUTINE: LAND_READPARMS
                0005 C     !INTERFACE:
                0006       SUBROUTINE LAND_READPARMS( myThid )
                0007 
                0008 C     !DESCRIPTION: \bv
                0009 C     *==========================================================*
                0010 C     | S/R LAND_READPARMS
d2895c0628 Jean*0011 C     | o Read Land package parameters from parameter
                0012 C     |   file "data.land"
e0a2f8aec4 Jean*0013 C     *==========================================================*
                0014 C     \ev
3a10a8cfd8 Jean*0015 
e0a2f8aec4 Jean*0016 C     !USES:
                0017       IMPLICIT NONE
                0018 
                0019 C     == Global variables ===
                0020 C-- size for MITgcm & Land package :
                0021 #include "LAND_SIZE.h"
                0022 
                0023 #include "EEPARAMS.h"
                0024 #include "PARAMS.h"
                0025 #include "LAND_PARAMS.h"
cf701ea57b Ed H*0026 #ifdef ALLOW_MNC
d2895c0628 Jean*0027 # include "MNC_PARAMS.h"
cf701ea57b Ed H*0028 #endif
e0a2f8aec4 Jean*0029 
                0030 C     !INPUT/OUTPUT PARAMETERS:
d2895c0628 Jean*0031 C     myThid     :: my Thread Id number
e0a2f8aec4 Jean*0032       INTEGER myThid
                0033 
                0034 #ifdef ALLOW_LAND
d2895c0628 Jean*0035 C     !LOCAL VARIABLES:
                0036 C     msgBuf     :: Informational/error message buffer
e0a2f8aec4 Jean*0037 C     iUnit      :: Work variable for IO unit number
                0038 C     k          :: loop counter
b7411f1a84 Jean*0039 C     land_taveFreq :: retired; Frequency^-1 for time-Aver. output (s)
e0a2f8aec4 Jean*0040       CHARACTER*(MAX_LEN_MBUF) msgBuf
d2895c0628 Jean*0041       INTEGER iUnit, k
e0a2f8aec4 Jean*0042       _RL tmpvar
b7411f1a84 Jean*0043 C-    retired parameters:
                0044       _RL land_taveFreq
                0045       LOGICAL land_timeave_mnc
d2895c0628 Jean*0046 CEOP
e0a2f8aec4 Jean*0047 
                0048 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0049 
                0050 C--   Land model parameters:
89992793c5 Jean*0051 C     land_calc_grT  :: step forward ground Temperature
                0052 C     land_calc_grW  :: step forward soil moiture
                0053 C     land_impl_grT  :: solve ground Temperature implicitly
                0054 C     land_calc_snow :: step forward snow thickness
                0055 C     land_calc_alb  :: compute albedo of snow over land
                0056 C     land_oldPickup :: restart from an old pickup (= before checkpoint 52j)
                0057 C     land_grT_iniFile  :: File containing initial ground Temp.
                0058 C     land_grW_iniFile  :: File containing initial ground Water.
                0059 C     land_snow_iniFile :: File containing initial snow thickness.
                0060 C     land_deltaT    :: land model time-step
                0061 C     land_diagFreq  :: Frequency^-1 for diagnostic output (s)
                0062 C     land_monFreq   :: Frequency^-1 for monitor    output (s)
                0063 C     land_dzF       :: layer thickness
e0a2f8aec4 Jean*0064       NAMELIST /LAND_MODEL_PAR/
3a10a8cfd8 Jean*0065      &    land_calc_grT, land_calc_grW,
89992793c5 Jean*0066      &    land_impl_grT, land_calc_snow,
3a10a8cfd8 Jean*0067      &    land_calc_alb, land_oldPickup,
89992793c5 Jean*0068      &    land_grT_iniFile, land_grW_iniFile, land_snow_iniFile,
                0069      &    land_deltaT, land_taveFreq, land_diagFreq, land_monFreq,
cf701ea57b Ed H*0070      &    land_dzF,
3a10a8cfd8 Jean*0071      &    land_timeave_mnc, land_snapshot_mnc, land_mon_mnc,
                0072      &    land_pickup_write_mnc, land_pickup_read_mnc
cf701ea57b Ed H*0073 
e0a2f8aec4 Jean*0074 C--   Physical constants :
                0075 C     land_grdLambda  :: Thermal conductivity of the ground
89992793c5 Jean*0076 C     land_heatCs     :: Heat capacity of dry soil (J/m3/K)
                0077 C     land_CpWater    :: Heat capacity of water    (J/kg/K)
e0a2f8aec4 Jean*0078 C     land_wTauDiff   :: soil moisture diffusion time scale
                0079 C     land_waterCap   :: field capacity per meter of soil
                0080 C     land_fractRunOff:: fraction of water in excess which run-off
89992793c5 Jean*0081 C     land_rhoLiqW    :: density of liquid water (kg/m3)
                0082 C     land_rhoSnow    :: density of snow (kg/m3)
                0083 C     land_Lfreez     :: Latent heat of freezing (J/kg)
b30f09edfc Jean*0084 C     land_hMaxSnow   :: Maximum snow-thickness  (m)
                0085 C     diffKsnow       :: thermal conductivity of snow (W/m/K)
89992793c5 Jean*0086 C     timeSnowAge     :: snow aging time scale   (s)
                0087 C     hNewSnowAge     :: new snow thickness that refresh the snow-age (by 1/e)
                0088 C     albColdSnow     :: albedo of cold (=dry) new snow (Tsfc < -10)
                0089 C     albWarmSnow     :: albedo of warm (=wet) new snow (Tsfc = 0)
                0090 C     albOldSnow      :: albedo of old snow (snowAge > 35.d)
                0091 C     hAlbSnow        :: snow thickness for albedo transition: snow/ground
e0a2f8aec4 Jean*0092 
                0093       NAMELIST /LAND_PHYS_PAR/
89992793c5 Jean*0094      &    land_grdLambda, land_heatCs, land_CpWater,
                0095      &    land_wTauDiff, land_waterCap, land_fractRunOff,
                0096      &    land_rhoLiqW,
3a10a8cfd8 Jean*0097      &    land_rhoSnow, land_Lfreez,
b30f09edfc Jean*0098      &    land_hMaxSnow, diffKsnow, timeSnowAge, hNewSnowAge,
1f792166dd Davi*0099      &    albColdSnow, albWarmSnow, tempSnowAlbL, albOldSnow, hAlbSnow
e0a2f8aec4 Jean*0100 
                0101 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0102 
d2895c0628 Jean*0103       IF ( .NOT.useLand ) THEN
                0104 C-    pkg LAND is not used
                0105         _BEGIN_MASTER(myThid)
                0106 C-    Track pkg activation status:
                0107 C     print a (weak) warning if data.land is found
                0108          CALL PACKAGES_UNUSED_MSG( 'useLand', ' ', ' ' )
                0109         _END_MASTER(myThid)
                0110         RETURN
                0111       ENDIF
                0112 
a9446a7f45 Jean*0113       _BEGIN_MASTER(myThid)
                0114 
e0a2f8aec4 Jean*0115 C-    Set default value:
3a10a8cfd8 Jean*0116       land_calc_grT = .TRUE.
e0a2f8aec4 Jean*0117       land_calc_grW = .TRUE.
3a10a8cfd8 Jean*0118       land_impl_grT = .TRUE.
                0119       land_calc_snow= .TRUE.
                0120       land_calc_alb = .TRUE.
                0121       land_oldPickup= .FALSE.
a8844d79c5 Jean*0122       land_grT_iniFile = ' '
                0123       land_grW_iniFile = ' '
89992793c5 Jean*0124       land_snow_iniFile= ' '
b7411f1a84 Jean*0125       land_deltaT   = deltaTClock
e0a2f8aec4 Jean*0126       land_diagFreq = dumpFreq
89992793c5 Jean*0127       land_monFreq = monitorFreq
cf701ea57b Ed H*0128 #ifdef ALLOW_MNC
                0129       land_snapshot_mnc      = snapshot_mnc .AND. useMNC
3a10a8cfd8 Jean*0130       land_mon_mnc           = monitor_mnc .AND. useMNC
cf701ea57b Ed H*0131       land_pickup_write_mnc  = pickup_write_mnc .AND. useMNC
                0132       land_pickup_read_mnc   = pickup_read_mnc .AND. useMNC
                0133 #else
                0134       land_snapshot_mnc      = .FALSE.
3a10a8cfd8 Jean*0135       land_mon_mnc           = .FALSE.
cf701ea57b Ed H*0136       land_pickup_write_mnc  = .FALSE.
                0137       land_pickup_read_mnc   = .FALSE.
                0138 #endif
e0a2f8aec4 Jean*0139       land_grdLambda= 0.42 _d 0
                0140       land_heatCs   = 1.13 _d 6
89992793c5 Jean*0141       land_CpWater  =  4.2 _d 3
                0142 c     land_CpWater  = HeatCapacity_Cp
e0a2f8aec4 Jean*0143       land_wTauDiff =  48. _d 0*3600. _d 0
                0144       land_waterCap = 0.24 _d 0
                0145       land_fractRunOff = 0.5 _d 0
89992793c5 Jean*0146       land_rhoLiqW  = rhoConstFresh
                0147 C-    snow parameters:
                0148       land_rhoSnow  = 330. _d 0
                0149       land_Lfreez   = 334. _d 3
b30f09edfc Jean*0150       land_hMaxSnow = 1. _d 3
89992793c5 Jean*0151       diffKsnow     = 0.30 _d 0
                0152       timeSnowAge   = 50. _d 0 * 86400. _d 0
                0153       hNewSnowAge   = 2. _d -3
                0154       albColdSnow   = 0.85 _d 0
                0155       albWarmSnow   = 0.70 _d 0
1f792166dd Davi*0156       tempSnowAlbL  = -10. _d 0
89992793c5 Jean*0157       albOldSnow    = 0.55 _d 0
                0158       hAlbSnow      = 0.30 _d 0
                0159 C-    layer thickness:
e0a2f8aec4 Jean*0160       DO k=1,land_nLev
                0161        land_dzF(k) = -1.
                0162        land_rec_dzC(k) = -1.
                0163       ENDDO
3a10a8cfd8 Jean*0164 
b7411f1a84 Jean*0165 C-    retired parms default:
                0166       land_timeave_mnc = .FALSE.
                0167       land_taveFreq = UNSET_RL
                0168 
e0a2f8aec4 Jean*0169       WRITE(msgBuf,'(A)') ' LAND_READPARMS: opening data.land'
a9446a7f45 Jean*0170       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0171      I                    SQUEEZE_RIGHT, myThid )
e0a2f8aec4 Jean*0172 
                0173       CALL OPEN_COPY_DATA_FILE( 'data.land', 'LAND_READPARMS',
                0174      O                          iUnit, myThid )
                0175 
                0176 C--   Read parameters from open data file:
                0177 
                0178 C-    Parameters for Land model:
                0179       READ(UNIT=iUnit,NML=LAND_MODEL_PAR)
                0180 
                0181 C-    Physical Constants for Land package
                0182       READ(UNIT=iUnit,NML=LAND_PHYS_PAR)
                0183 
3a10a8cfd8 Jean*0184       WRITE(msgBuf,'(A)')
e0a2f8aec4 Jean*0185      &   ' LAND_READPARMS: finished reading data.land'
a9446a7f45 Jean*0186       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0187      I                    SQUEEZE_RIGHT, myThid )
3a10a8cfd8 Jean*0188 
e0a2f8aec4 Jean*0189 C--   Close the open data file
7a77863887 Mart*0190 #ifdef SINGLE_DISK_IO
e0a2f8aec4 Jean*0191       CLOSE(iUnit)
7a77863887 Mart*0192 #else
                0193       CLOSE(iUnit,STATUS='DELETE')
                0194 #endif /* SINGLE_DISK_IO */
e0a2f8aec4 Jean*0195 
                0196 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
b7411f1a84 Jean*0197 
                0198 C--   Check for retired parameters:
                0199       IF ( land_taveFreq .NE. UNSET_RL ) THEN
                0200         WRITE(msgBuf,'(2A)') 'LAND_READPARMS: ',
                0201      &    '"land_taveFreq" is no longer allowed in file "data.land"'
                0202         CALL PRINT_ERROR( msgBuf, myThid )
                0203         WRITE(msgBuf,'(2A)') 'LAND_READPARMS: ',
                0204      &    ' since "pkg/timeave" has been removed.'
                0205         CALL PRINT_ERROR( msgBuf, myThid )
                0206 c       errCount = errCount + 1
                0207         STOP 'ABNORMAL END: S/R LAND_READPARMS'
                0208       ENDIF
                0209       IF ( land_timeave_mnc ) THEN
                0210         WRITE(msgBuf,'(2A)') 'LAND_READPARMS: "land_timeave_mnc"',
                0211      &    ' is no longer allowed in file "data.land"'
                0212         CALL PRINT_ERROR( msgBuf, myThid )
                0213         WRITE(msgBuf,'(2A)') 'LAND_READPARMS: ',
                0214      &    ' since "pkg/timeave" has been removed.'
                0215         CALL PRINT_ERROR( msgBuf, myThid )
                0216 c       errCount = errCount + 1
                0217         STOP 'ABNORMAL END: S/R LAND_READPARMS'
                0218       ENDIF
                0219 
d2895c0628 Jean*0220 C--   Derive other parameters:
89992793c5 Jean*0221 
                0222       land_impl_grT = land_calc_grT .AND. land_impl_grT
                0223 
                0224       tmpvar = 0. _d 0
                0225       DO k=1,land_nLev
                0226        tmpvar = tmpvar+land_dzF(k)
                0227        IF (tmpvar.GT.0. _d 0) land_rec_dzC(k) = 2. _d 0 / tmpvar
                0228        tmpvar = land_dzF(k)
                0229       ENDDO
3a10a8cfd8 Jean*0230       IF ( land_Lfreez.NE. 0. _d 0 ) THEN
89992793c5 Jean*0231         recip_Lfreez = 1. _d 0 / land_Lfreez
                0232       ELSE
                0233         recip_Lfreez = 0. _d 0
                0234       ENDIF
                0235 
cf701ea57b Ed H*0236 #ifdef ALLOW_MNC
3a10a8cfd8 Jean*0237       land_snapshot_mnc     = useMNC .AND. land_snapshot_mnc
                0238       land_mon_mnc          = useMNC .AND. land_mon_mnc
                0239       land_pickup_write_mnc = useMNC .AND. land_pickup_write_mnc
                0240       land_pickup_read_mnc  = useMNC .AND. land_pickup_read_mnc
                0241 
                0242       land_snapshot_mdsio     = (.NOT.land_snapshot_mnc)
                0243      &                      .OR. outputTypesInclusive
                0244       land_mon_stdio          = (.NOT.land_mon_mnc)
                0245      &                      .OR. outputTypesInclusive
                0246       land_pickup_write_mdsio = (.NOT.land_pickup_write_mnc)
                0247      &                      .OR. outputTypesInclusive
cf701ea57b Ed H*0248 #else
                0249       land_snapshot_mnc       = .FALSE.
3a10a8cfd8 Jean*0250       land_mon_mnc            = .FALSE.
cf701ea57b Ed H*0251       land_pickup_write_mnc   = .FALSE.
                0252       land_pickup_read_mnc    = .FALSE.
                0253       land_snapshot_mdsio     = .TRUE.
3a10a8cfd8 Jean*0254       land_mon_stdio          = .TRUE.
cf701ea57b Ed H*0255       land_pickup_write_mdsio = .TRUE.
                0256 #endif
                0257 
e0a2f8aec4 Jean*0258 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0259 
                0260       _END_MASTER(myThid)
3a10a8cfd8 Jean*0261 
e0a2f8aec4 Jean*0262 C--   Everyone else must wait for the parameters to be loaded
                0263       _BARRIER
                0264 
                0265 #endif /* ALLOW_LAND */
                0266 
                0267       RETURN
                0268       END