C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/aim_readparms.F,v 1.21 2018/01/11 01:55:53 jmc Exp $ C $Name: $ #include "AIM_OPTIONS.h" CBOP C !ROUTINE: AIM_READPARMS C !INTERFACE: SUBROUTINE AIM_READPARMS( myThid ) C !DESCRIPTION: \bv C *==========================================================* C | S/R AIM_READPARMS C | o Read AIM physics package parameters C *==========================================================* C | Initialized parameter in common blocks: C | FORCON, SFLCON, CNVCON, LSCCON, RADCON, VDICON C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global variables === #include "AIM_SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "AIM_PARAMS.h" #include "AIM_CO2.h" #ifdef ALLOW_MNC #include "MNC_PARAMS.h" #endif C- Physical constants + functions of sigma and latitude c #include "com_physcon.h" C- Constants for sub-grid-scale physics #include "com_forcon.h" #include "com_sflcon.h" #include "com_cnvcon.h" #include "com_lsccon.h" #include "com_radcon.h" #include "com_vdicon.h" C !INPUT/OUTPUT PARAMETERS: C == Routine Arguments == C myThid :: my Thread Id number INTEGER myThid CEOP #ifdef ALLOW_AIM C == Local Variables == C msgBuf :: Informational/error message buffer C iUnit :: Work variable for IO unit number C aim_fixed_pCO2 :: fixed and uniform pCO2 value for AIM radiation C atmpCO2init :: Atmospheric pCO2 initial value of well-mixed atm. box CHARACTER*(MAX_LEN_MBUF) msgBuf CHARACTER*10 endList INTEGER buffI(1) INTEGER iUnit INTEGER errCount _RL aim_fixed_pCO2 _RL atmpCO2init C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C-- AIM interface parameter (common AIM_PARM_?): C aim_useFMsurfBC :: select surface B.C. from Franco Molteni C aim_useMMsurfFc :: select Monthly Mean surface forcing (e.g., NCEP) C aim_surfForc_TimePeriod :: Length of forcing time period (e.g. 1 month) C aim_surfForc_NppCycle :: Number of time period per Cycle (e.g. 12) C aim_surfForc_TransRatio :: transition ratio from one month to the next C aim_surfPotTemp :: surf.Temp input file is in Pot.Temp (aim_useMMsurfFc) C aim_energPrecip :: account for energy of precipitation (snow & rain temp) C aim_splitSIOsFx :: compute separately Sea-Ice & Ocean surf. Flux C (also land SW & LW) ; default=F as in original version C aim_MMsufx :: sufix for all Monthly Mean surface forcing files C aim_MMsufxLength :: Length of sufix (Monthly Mean surf. forc. files) C aim_LandFile :: file name for Land fraction (F.M. surfBC) C aim_albFile :: file name for Albedo input file (F.M. surfBC) C aim_vegFile :: file name for vegetation fraction (F.M. surfBC) C aim_sstFile :: file name for Sea.Surf.Temp (F.M. surfBC) C aim_lstFile :: file name for Land.Surf.Temp (F.M. surfBC) C aim_oiceFile :: file name for Sea Ice fraction (F.M. surfBC) C aim_snowFile :: file name for Snow depth (F.M. surfBC) C aim_swcFile :: file name for Soil Water content (F.M. surfBC) C aim_dragStrato :: stratospheric-drag damping time scale (s) C aim_select_pCO2 :: select AIM CO2 formulation (= 0,1,2 or 3) C aim_selectOceAlbedo :: Ocean albedo(latitude) scheme (integer) C :: 0 = constant (default); 1 = Briegleb et al. 1986 C aim_clrSkyDiag :: compute clear-sky radiation for diagnostics C aim_taveFreq :: Frequency^-1 for time-average output (s) C aim_diagFreq :: Frequency^-1 for diagnostic output (s) C aim_tendFreq :: Frequency^-1 for tendencies output (s) NAMELIST //AIM_PARAMS & aim_useFMsurfBC, aim_useMMsurfFc, & aim_surfForc_TimePeriod, aim_surfForc_NppCycle, & aim_surfForc_TransRatio, aim_surfPotTemp, & aim_energPrecip, aim_splitSIOsFx, & aim_MMsufx, aim_MMsufxLength, & aim_LandFile, aim_albFile, aim_vegFile, & aim_sstFile, aim_lstFile, aim_oiceFile, aim_snowFile, & aim_swcFile, aim_qfxFile, & aim_dragStrato, aim_selectOceAlbedo, & aim_select_pCO2, aim_abs_pCO2, aim_fixed_pCO2, atmpCO2init, & aim_clrSkyDiag, aim_taveFreq, aim_diagFreq, aim_tendFreq, & aim_timeave_mnc, aim_snapshot_mnc, & aim_pickup_write_mnc, aim_pickup_read_mnc C-- Physical constants (common PHYCON) : C P0 = reference pressure [Pa=N/m2] C GG = gravity accel. [m/s2] C RD = gas constant for dry air [J/kg/K] C CP = specific heat at constant pressure [J/kg/K] C ALHC = latent heat of condensation [J/g] C ALHF = latent heat of freezing [J/g] C SBC = Stefan-Boltzmann constant C rainCP = heat capacity of liquid water [J/g/K] C tFreeze = freezing temperature of pure water [K] C-- Constants for forcing fields (common FORCON) : C SOLC = Solar constant (area averaged) in W/m^2 C OBLIQ = Obliquity (in degree) only used if #define ALLOW_INSOLATION C ALBSEA = Albedo over sea C ALBICE = Albedo over sea ice (for ice fraction = 1) C ALBSN = Albedo over snow (for snow depth > SDALB) C SDALB = Snow depth (mm water) corresponding to maximum albedo C SWCAP = Soil wetness at field capacity (volume fraction) C SWWIL = Soil wetness at wilting point (volume fraction) C hSnowWetness :: snow depth (m) corresponding to maximum wetness NAMELIST //AIM_PAR_FOR & SOLC, ALBSEA, ALBICE, ALBSN, & SDALB, SWCAP, SWWIL, hSnowWetness, OBLIQ C-- Constants for surface fluxes (common SFLCON) : C FWIND0 = ratio of near-sfc wind to lowest-level wind C FTEMP0 = weight for near-sfc temperature extrapolation (0-1) : C 1 : linear extrapolation from two lowest levels C 0 : constant potential temperature ( = lowest level) C FHUM0 = weight for near-sfc specific humidity extrapolation (0-1) : C 1 : extrap. with constant relative hum. ( = lowest level) C 0 : constant specific hum. ( = lowest level) C CDL = drag coefficient for momentum over land C CDS = drag coefficient for momentum over sea C CHL = heat exchange coefficient over land C CHS = heat exchange coefficient over sea C VGUST = wind speed for sub-grid-scale gusts C CTDAY = daily-cycle correction (dTskin/dSSRad) C DTHETA = Potential temp. gradient for stability correction C dTstab = potential temp. increment for stability function derivative C FSTAB = Amplitude of stability correction (fraction) C HDRAG = Height scale for orographic correction C FHDRAG = Amplitude of orographic correction (fraction) NAMELIST //AIM_PAR_SFL & FWIND0, FTEMP0, FHUM0, & CDL, CDS, CHL, CHS, VGUST, CTDAY, & DTHETA, dTstab, FSTAB, HDRAG, FHDRAG C-- Convection constants (common CNVCON) : C PSMIN = minimum (norm.) sfc. pressure for the occurrence of convection C TRCNV = time of relaxation (in hours) towards reference state C QBL = specific hum. threshold in the boundary layer C RHBL = relative hum. threshold in the boundary layer C RHIL = rel. hum. threshold in intermed. layers for secondary mass flux C ENTMAX = max. entrainment as a fraction of cloud-base mass flux C SMF = ratio between secondary and primary mass flux at cloud-base NAMELIST //AIM_PAR_CNV & PSMIN, TRCNV, QBL, RHBL, RHIL, ENTMAX, SMF C-- Constants for large-scale condendation (common LSCCON) : C TRLSC = Relaxation time (in hours) for specific humidity C RHLSC = Maximum relative humidity threshold (at sigma=1) C DRHLSC = Vertical range of relative humidity threshold C QSMAX = used to define the maximum latent heat release NAMELIST //AIM_PAR_LSC & TRLSC, RHLSC, DRHLSC, QSMAX C-- Radiation constants (common RADCON) : C RHCL1 = relative hum. corresponding to cloud cover = 0 C RHCL2 = relative hum. corresponding to cloud cover = 1 C QACL1 = specific hum. threshold for cloud cover in the upper troposphere C QACL2 = specific hum. threshold for cloud cover in the upper troposphere C ALBCL = cloud albedo (for cloud cover = 1) C EPSSW = fraction of incoming solar radiation absorbed by ozone C EPSLW = fraction of surface LW radiation emitted directly to space C EMISFC = longwave surface emissivity C--: shortwave absorptivities (for dp = 10^5 Pa) : C ABSDRY = abs. of dry air (visible band) C ABSAER = abs. of aerosols (visible band) C ABSWV1 = abs. of water vapour (visible band, for dq = 1 g/kg) C ABSWV2 = abs. of water vapour (near IR band, for dq = 1 g/kg) C ABSCL1 = abs. of clouds (visible band, constant term) C ABSCL2 = abs. of clouds (visible band, for dw = 1 g/kg) C--: longwave absorptivities (per dp = 10^5 Pa) : C ABLWIN = abs. of air in "window" band C ABLCO2 = abs. of air in CO2 band C ABLWV1 = abs. of water vapour in H2O band 1 (weak), for dq = 1 g/kg C ABLWV2 = abs. of water vapour in H2O band 2 (strong), for dq = 1 g/kg C ABLCL1 = abs. of clouds in "window" band, constant term C ABLCL2 = abs. of clouds in "window" band, for dw = 1 g/kg NAMELIST //AIM_PAR_RAD & RHCL1, RHCL2, QACL1, QACL2, ALBCL, & EPSSW, EPSLW, EMISFC, & ABSDRY, ABSAER, ABSWV1, ABSWV2, ABSCL1, ABSCL2, & ABLWIN, ABLCO2, ABLWV1, ABLWV2, ABLCL1, ABLCL2 C-- Constants for vertical dif. and sh. conv. (common VDICON) : C TRSHC = relaxation time (in hours) for shallow convection C TRVDI = relaxation time (in hours) for moisture diffusion C TRVDS = relaxation time (in hours) for super-adiab. conditions C RHGRAD = maximum gradient of relative humidity (d_RH/d_sigma) C SEGRAD = minimum gradient of dry static energy (d_DSE/d_phi) NAMELIST //AIM_PAR_VDI & TRSHC, TRVDI, TRVDS, RHGRAD, SEGRAD C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| _BEGIN_MASTER(myThid) C-- Set default value for AIM interface code (AIM_PARAMS.h): aim_useFMsurfBC = .TRUE. aim_useMMsurfFc = .FALSE. aim_surfPotTemp = .FALSE. aim_energPrecip = .FALSE. aim_splitSIOsFx = .FALSE. aim_clrSkyDiag = .FALSE. #ifdef ALLOW_MNC aim_timeave_mnc = timeave_mnc .AND. useMNC aim_snapshot_mnc = snapshot_mnc .AND. useMNC aim_pickup_write_mnc = pickup_write_mnc .AND. useMNC aim_pickup_read_mnc = pickup_read_mnc .AND. useMNC #else aim_timeave_mnc = .FALSE. aim_snapshot_mnc = .FALSE. aim_pickup_write_mnc = .FALSE. aim_pickup_read_mnc = .FALSE. #endif aim_MMsufx = '.bin' aim_MMsufxLength = 4 C- Length (s) of one time period: aim_surfForc_TimePeriod = 30.*86400. C- Number of time period per Cycle: aim_surfForc_NppCycle = 12 C- define how fast the (linear) transition is from one month to the next C = 1 -> linear between 2 midle month C > TimePeriod/deltaT -> jump from one month to the next one aim_surfForc_TransRatio = 1. aim_LandFile = ' ' aim_albFile = ' ' aim_vegFile = ' ' aim_sstFile = ' ' aim_lstFile = ' ' aim_oiceFile = ' ' aim_snowFile = ' ' aim_swcFile = ' ' aim_qfxFile = ' ' aim_dragStrato = 0. aim_selectOceAlbedo = 0 aim_select_pCO2 = 0 aim_ref_pCO2 = 320. _d -6 C- note: default value of aim_abs_pCO2 has to be changed to something meaningful aim_abs_pCO2 = 1. aim_fixed_pCO2 = UNSET_RL atmpCO2init = UNSET_RL C- aim_taveFreq = taveFreq aim_diagFreq = dumpFreq aim_tendFreq = 0. OBLIQ = 23.45 _d 0 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| WRITE(msgBuf,'(A)') ' AIM_READPARMS: opening data.aimphys' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) CALL OPEN_COPY_DATA_FILE( 'data.aimphys', 'AIM_READPARMS', O iUnit, myThid ) C-- Read parameters from open data file: C- Parameters for AIM interface code: READ(UNIT=iUnit,NML=AIM_PARAMS) C- Constants for boundary forcing READ(UNIT=iUnit,NML=AIM_PAR_FOR) C- Constants for surface fluxes READ(UNIT=iUnit,NML=AIM_PAR_SFL) C- Constants for convection READ(UNIT=iUnit,NML=AIM_PAR_CNV) C- Constants for large-scale condensation READ(UNIT=iUnit,NML=AIM_PAR_LSC) C- Constants for radiation READ(UNIT=iUnit,NML=AIM_PAR_RAD) C- Constants for vertical diffusion and sh. conv. READ(UNIT=iUnit,NML=AIM_PAR_VDI) WRITE(msgBuf,'(A)') & ' AIM_READPARMS: finished reading data.aimphys' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Close the open data file #ifdef SINGLE_DISK_IO CLOSE(iUnit) #else CLOSE(iUnit,STATUS='DELETE') #endif /* SINGLE_DISK_IO */ C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C-- Check parameters and model configuration errCount = 0 IF ( aim_select_pCO2.LT.0 .OR. aim_select_pCO2.GT.3 ) THEN WRITE(msgBuf,'(2A)') 'AIM_READPARMS: ', & 'Invalid value for "aim_select_pCO2"' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #ifndef ALLOW_AIM_CO2 IF ( aim_select_pCO2.GE.2 .AND. aim_select_pCO2.LE.3 ) THEN WRITE(msgBuf,'(2A)') 'AIM_READPARMS: ', & 'aim_select_pCO2 > 1 but ALLOW_AIM_CO2 undef' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)') & 'Re-compile with: #define ALLOW_AIM_CO2 (AIM_OPTIONS.h)' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #endif /* ndef ALLOW_AIM_CO2 */ IF ( aim_fixed_pCO2.EQ.UNSET_RL ) THEN aim_fixed_pCO2 = aim_ref_pCO2 ELSEIF ( aim_select_pCO2.NE.1 .AND. & aim_select_pCO2.GE.0 .AND. aim_select_pCO2.LE.3 ) THEN WRITE(msgBuf,'(2A)') 'AIM_READPARMS: ', & 'aim_fixed_pCO2 only used if aim_select_pCO2=1' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF IF ( atmpCO2init.EQ.UNSET_RL ) THEN atmpCO2init = aim_ref_pCO2 ELSEIF ( aim_select_pCO2.GE.0 .AND. aim_select_pCO2.LT.2 ) THEN WRITE(msgBuf,'(2A)') '** WARNING ** AIM_READPARMS: ', & 'atmpCO2init only used if aim_select_pCO2 > 1' CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, & SQUEEZE_RIGHT, myThid ) ENDIF #ifndef ALLOW_CLR_SKY_DIAG C- If aim_clrSkyDiag is set, then must compile the Clear-Sky Diagnostic code IF ( aim_clrSkyDiag ) THEN WRITE(msgBuf,'(2A)') 'AIM_READPARMS: ', & 'aim_clrSkyDiag=T but ALLOW_CLR_SKY_DIAG undef' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)') & 'Re-compile with: #define ALLOW_CLR_SKY_DIAG (AIM_OPTIONS.h)' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #endif C- If aim_taveFreq is positive, then must compile the aim-diagnostics code #ifndef ALLOW_AIM_TAVE IF (aim_taveFreq.GT.0.) THEN WRITE(msgBuf,'(A)') & 'AIM_READPARMS: aim_taveFreq > 0 but ALLOW_AIM_TAVE undefined' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)') & 'Re-compile with: #define ALLOW_AIM_TAVE (AIM_OPTIONS.h)' CALL PRINT_ERROR( msgBuf, myThid ) errCount = errCount + 1 ENDIF #endif /* ALLOW_AIM_TAVE */ #ifdef ALLOW_MNC aim_timeave_mnc = useMNC .AND. aim_timeave_mnc aim_snapshot_mnc = useMNC .AND. aim_snapshot_mnc aim_pickup_write_mnc = useMNC .AND. aim_pickup_write_mnc aim_pickup_read_mnc = useMNC .AND. aim_pickup_read_mnc #else /* ALLOW_MNC */ aim_timeave_mnc = .FALSE. aim_snapshot_mnc = .FALSE. aim_pickup_write_mnc = .FALSE. aim_pickup_read_mnc = .FALSE. #endif /* ALLOW_MNC */ aim_timeave_mdsio = (.NOT. aim_timeave_mnc) & .OR. outputTypesInclusive aim_snapshot_mdsio = (.NOT. aim_snapshot_mnc) & .OR. outputTypesInclusive aim_pickup_write_mdsio = (.NOT. aim_pickup_write_mnc) & .OR. outputTypesInclusive aim_pickup_read_mdsio = (.NOT. aim_pickup_read_mnc) & .OR. outputTypesInclusive C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C-- Print out parameter values : iUnit = standardMessageUnit endList = ' ; ' WRITE(msgBuf,'(A)') ' ' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A)') '// ===================================' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A)') '// AIM physics parameters :' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(A)') '// ===================================' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) CALL WRITE_0D_L( useLand, INDEX_NONE, & 'useLand =', &' /* use Land package for surf.BC over land */') C- namelist AIM_PARAMS: CALL WRITE_0D_L( aim_useFMsurfBC, INDEX_NONE, & 'aim_useFMsurfBC =', &' /* F.Molteni surf. BC scheme on/off flag */') CALL WRITE_0D_L( aim_useMMsurfFc, INDEX_NONE, & 'aim_useMMsurfFc =', &' /* Monthly Mean surf. Forcing on/off flag */') CALL WRITE_0D_RL(aim_surfForc_TimePeriod, INDEX_NONE, & 'aim_surfForc_TimePeriod =', & ' /* Length of forcing time period (s) */') CALL WRITE_0D_I( aim_surfForc_NppCycle, INDEX_NONE, & 'aim_surfForc_NppCycle =', & ' /* Number of time period per Cycle */') CALL WRITE_0D_RL(aim_surfForc_TransRatio, INDEX_NONE, & 'aim_surfForc_TransRatio =', & ' /* transition ratio from one month to the next */') CALL WRITE_0D_L( aim_surfPotTemp, INDEX_NONE, & 'aim_surfPotTemp =', &' /* Surf Temp file in Pot.Temp on/off flag */') CALL WRITE_0D_L( aim_energPrecip, INDEX_NONE, & 'aim_energPrecip =', & ' /* account for energy of precip. on/off flag */') CALL WRITE_0D_L( aim_splitSIOsFx, INDEX_NONE, & 'aim_splitSIOsFx =', & ' /* separate Sea-Ice & Ocean Flux on/off flag */') CALL WRITE_0D_RL(aim_dragStrato,INDEX_NONE,'aim_dragStrato=', & ' /* stratospheric-drag damping time scale (s) */') CALL WRITE_0D_I( aim_selectOceAlbedo, INDEX_NONE, & 'aim_selectOceAlbedo =', ' /* Ocean albedo(latitude) flag */') C- WRITE(msgBuf,'(2A)') 'aim_select_pCO2=', & ' /* select AIM CO2 option */' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) buffI(1) = aim_select_pCO2 CALL PRINT_LIST_I( buffI, 1, 1, INDEX_NONE, & .FALSE., .TRUE., iUnit ) WRITE(msgBuf,'(2A)') & ' =0: prescribed LW absorption in CO2 band (=ABLCO2)' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(2A)') & ' =1: absorption fct of prescribed pCO2 (=aim_fixed_pCO2)' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(2A)') & ' =2: same as 0 with passive, well-mixed pCO2 atm box' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) WRITE(msgBuf,'(2A)') & ' =3: same as 1 with evolving, well-mixed pCO2 atm-box' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) CALL PRINT_MESSAGE(endList, iUnit, SQUEEZE_RIGHT, myThid ) IF ( aim_select_pCO2.EQ.1 .OR. aim_select_pCO2.EQ.3 ) & CALL WRITE_0D_RL( aim_abs_pCO2, INDEX_NONE, & 'aim_abs_pCO2 =', ' /* pCO2 dep. coeff. of CO2 absortion */') IF ( aim_select_pCO2.EQ.1 ) & CALL WRITE_0D_RL( aim_fixed_pCO2, INDEX_NONE, & 'aim_fixed_pCO2 =', ' /* fixed pCO2 for AIM radiation */') #ifdef ALLOW_AIM_CO2 CALL WRITE_0D_RL( atmpCO2init, INDEX_NONE, & 'atmpCO2init =', ' /* Initial atm-box pCO2 */') #endif CALL WRITE_0D_L( aim_clrSkyDiag, INDEX_NONE, & 'aim_clrSkyDiag =', & ' /* do clear-sky radiation diagnostics */') CALL WRITE_0D_RL( aim_taveFreq, INDEX_NONE,'aim_taveFreq =', & ' /* Frequency^-1 for time-Aver. output (s) */') CALL WRITE_0D_RL( aim_diagFreq, INDEX_NONE,'aim_diagFreq =', & ' /* Frequency^-1 for diagnostic output (s) */') CALL WRITE_0D_RL( aim_tendFreq, INDEX_NONE,'aim_tendFreq =', & ' /* Frequency^-1 for tendencies output (s) */') C- namelist AIM_PAR_FOR: CALL WRITE_0D_RL( SOLC, INDEX_NONE,'AIM_FOR: SOLC =', & ' /* Solar constant (area averaged) in W/m2 */') CALL WRITE_0D_RL( OBLIQ, INDEX_NONE,'AIM_FOR: OBLIQ =', & ' /* Obliquity (degree) used with ALLOW_INSOLATION */') CALL WRITE_0D_RL( ALBSEA,INDEX_NONE,'AIM_FOR: ALBSEA =', & ' /* Albedo over sea [0-1] */') CALL WRITE_0D_RL( ALBICE,INDEX_NONE,'AIM_FOR: ALBICE =', & ' /* Albedo over sea ice (for ice fraction =1) */') CALL WRITE_0D_RL( ALBSN, INDEX_NONE,'AIM_FOR: ALBSN =', & ' /* Albedo over snow (for snow depth > SDALB) */') CALL WRITE_0D_RL( SDALB, INDEX_NONE,'AIM_FOR: SDALB =', & ' /* Snow depth (mm H2O) corresp. maximum albedo */') CALL WRITE_0D_RL( SWCAP, INDEX_NONE,'AIM_FOR: SWCAP =', & ' /* Soil wetness at field capacity (Vol.fract.) */') CALL WRITE_0D_RL( SWWIL, INDEX_NONE,'AIM_FOR: SWWIL =', & ' /* Soil wetness at wilting point (Vol.fract.) */') CALL WRITE_0D_RL( hSnowWetness, INDEX_NONE, & 'AIM_FOR: hSnowWetness=', & ' /* snow depth corresp. maximum wetness (m) */') C- namelist AIM_PAR_SFL: CALL WRITE_0D_RL( FWIND0,INDEX_NONE,'AIM_SFL: FWIND0 =', & ' /* ratio of near-sfc wind to lowest-level wind */') CALL WRITE_0D_RL( FTEMP0,INDEX_NONE,'AIM_SFL: FTEMP0 =', & ' /* weight for near-sfc temp. extrapolation (0-1)*/') CALL WRITE_0D_RL( FHUM0, INDEX_NONE,'AIM_SFL: FHUM0 =', & ' /* weight for near-sfc spec.humid. extrap. (0-1)*/') CALL WRITE_0D_RL( CDL, INDEX_NONE,'AIM_SFL: CDL =', & ' /* drag coefficient for momentum over land */') CALL WRITE_0D_RL( CDS, INDEX_NONE,'AIM_SFL: CDS =', & ' /* drag coefficient for momentum over sea */') CALL WRITE_0D_RL( CHL, INDEX_NONE,'AIM_SFL: CHL =', & ' /* heat exchange coefficient over land */') CALL WRITE_0D_RL( CHS, INDEX_NONE,'AIM_SFL: CHS =', & ' /* heat exchange coefficient over sea */') CALL WRITE_0D_RL( VGUST, INDEX_NONE,'AIM_SFL: VGUST =', & ' /* wind speed [m/s] for sub-grid-scale gusts */') CALL WRITE_0D_RL( CTDAY, INDEX_NONE,'AIM_SFL: CTDAY =', & ' /* daily-cycle correction (dTskin/dSSRad) */') CALL WRITE_0D_RL( DTHETA,INDEX_NONE,'AIM_SFL: DTHETA =', & ' /* Pot.Temp. gradient for stability correction */') CALL WRITE_0D_RL( dTstab,INDEX_NONE,'AIM_SFL: dTstab =', & ' /* Pot.Temp. increment for stab.funct. derivative */') CALL WRITE_0D_RL( FSTAB, INDEX_NONE,'AIM_SFL: FSTAB =', & ' /* Amplitude of stability correction (fract.) */') CALL WRITE_0D_RL( HDRAG, INDEX_NONE,'AIM_SFL: HDRAG =', & ' /* Height scale for orographic correction */') CALL WRITE_0D_RL( FHDRAG,INDEX_NONE,'AIM_SFL: FHDRAG =', & ' /* Amplitude of orographic correction (fract.)*/') C- namelist AIM_PAR_CNV: CALL WRITE_0D_RL( PSMIN, INDEX_NONE,'AIM_CNV: PSMIN =', & ' /* min norm.sfc.P. for occurrence of convect. */') CALL WRITE_0D_RL( TRCNV, INDEX_NONE,'AIM_CNV: TRCNV =', & ' /* time of relaxation [h] towards ref state */') CALL WRITE_0D_RL( QBL, INDEX_NONE,'AIM_CNV: QBL =', & ' /* specific hum. threshold in the Bound.layer */') CALL WRITE_0D_RL( RHBL, INDEX_NONE,'AIM_CNV: RHBL =', & ' /* relative hum. threshold in the Bound.layer */') CALL WRITE_0D_RL( RHIL, INDEX_NONE,'AIM_CNV: RHIL =', & ' /* rel.hum. threshold (intern) for 2nd mass.Flx*/') CALL WRITE_0D_RL( ENTMAX,INDEX_NONE,'AIM_CNV: ENTMAX =', & ' /* time of relaxation [h] towards neutral eq. */') CALL WRITE_0D_RL( SMF, INDEX_NONE,'AIM_CNV: SMF =', & ' /* ratio 2ndary/primary mass.Flx at cloud-base*/') C- namelist AIM_PAR_LSC: CALL WRITE_0D_RL( TRLSC, INDEX_NONE,'AIM_LSC: TRLSC =', & ' /* relaxation time [h] for supersat. spec.hum. */') CALL WRITE_0D_RL( RHLSC, INDEX_NONE,'AIM_LSC: RHLSC =', & ' /* Max rel.humidity threshold (at sigma=1) */') CALL WRITE_0D_RL( DRHLSC,INDEX_NONE,'AIM_LSC: DRHLSC =', & ' /* Vertical range of rel.humidity threshold */') CALL WRITE_0D_RL( QSMAX, INDEX_NONE,'AIM_LSC: QSMAX =', & ' /* Define the maximum latent heat release */') C- namelist AIM_PAR_RAD: CALL WRITE_0D_RL( RHCL1, INDEX_NONE,'AIM_RAD: RHCL1 =', & ' /* rel.hum. corresponding to cloud cover = 0 */') CALL WRITE_0D_RL( RHCL2, INDEX_NONE,'AIM_RAD: RHCL2 =', & ' /* rel.hum. corresponding to cloud cover = 1 */') CALL WRITE_0D_RL( QACL1, INDEX_NONE,'AIM_RAD: QACL1 =', & ' /* spec.hum. threshold for cloud, upper trop. */') CALL WRITE_0D_RL( QACL2, INDEX_NONE,'AIM_RAD: QACL2 =', & ' /* spec.hum. threshold for cloud, upper trop. */') CALL WRITE_0D_RL( ALBCL, INDEX_NONE,'AIM_RAD: ALBCL =', & ' /* cloud albedo (for cloud cover = 1) */') CALL WRITE_0D_RL( EPSSW, INDEX_NONE,'AIM_RAD: EPSSW =', & ' /* fract. of inc.solar rad. absorbed by ozone */') CALL WRITE_0D_RL( EPSLW, INDEX_NONE,'AIM_RAD: EPSLW =', & ' /* fract. of sfc LW emitted directly to space */') CALL WRITE_0D_RL( EMISFC,INDEX_NONE,'AIM_RAD: EMISFC =', & ' /* longwave surface emissivity */') WRITE(msgBuf,'(A)') & ' AIM_RAD : ShortWave absorptivities (for dp = 10^5 Pa) :' CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid ) CALL WRITE_0D_RL( ABSDRY,INDEX_NONE,'AIM_RAD: ABSDRY =', & ' /* abs. of dry air (visible band) */') CALL WRITE_0D_RL( ABSAER,INDEX_NONE,'AIM_RAD: ABSAER =', & ' /* abs. of aerosols (visible band) */') CALL WRITE_0D_RL( ABSWV1,INDEX_NONE,'AIM_RAD: ABSWV1 =', & ' /* abs. of water vap. (vis. band)(/dq, 1g/kg) */') CALL WRITE_0D_RL( ABSWV2,INDEX_NONE,'AIM_RAD: ABSWV2 =', & ' /* abs. of water vap.(near IR bd)(/dq, 1g/kg) */') CALL WRITE_0D_RL( ABSCL1,INDEX_NONE,'AIM_RAD: ABSCL1 =', & ' /* abs. of clouds (vis.band)(constant term) */') CALL WRITE_0D_RL( ABSCL2,INDEX_NONE,'AIM_RAD: ABSCL2 =', & ' /* abs. of clouds (vis.band) (/dw, 1g/kg) */') WRITE(msgBuf,'(A)') & ' AIM_RAD : LongWave absorptivities (per dp = 10^5 Pa) :' CALL WRITE_0D_RL( ABLWIN,INDEX_NONE,'AIM_RAD: ABLWIN =', & ' /* abs. of air in "window" band */') CALL WRITE_0D_RL( ABLCO2,INDEX_NONE,'AIM_RAD: ABLCO2 =', & ' /* abs. of air in CO2 band */') CALL WRITE_0D_RL( ABLWV1,INDEX_NONE,'AIM_RAD: ABLWV1 =', & ' /* abs. of Water vap. H2O bd-1(weak)(/dq,1g/kg)*/') CALL WRITE_0D_RL( ABLWV2,INDEX_NONE,'AIM_RAD: ABLWV2 =', & ' /* abs. of W. vap., H2O bd-2(strong)(/dq,1g/kg)*/') CALL WRITE_0D_RL( ABLCL1,INDEX_NONE,'AIM_RAD: ABLCL1 =', & ' /* abs. of clouds in window band (const term) */') CALL WRITE_0D_RL( ABLCL2,INDEX_NONE,'AIM_RAD: ABLCL2 =', & ' /* abs. of clouds in window band (/dw, 1g/kg) */') C- namelist AIM_PAR_VDI: CALL WRITE_0D_RL( TRSHC, INDEX_NONE,'AIM_VDI: TRSHC =', & ' /* relaxation time [h] for shallow convection */') CALL WRITE_0D_RL( TRVDI, INDEX_NONE,'AIM_VDI: TRVDI =', & ' /* relaxation time [h] for moisture diffusion */') CALL WRITE_0D_RL( TRVDS, INDEX_NONE,'AIM_VDI: TRVDS =', & ' /* relaxation time [h] for super-adiab. cond. */') CALL WRITE_0D_RL( RHGRAD,INDEX_NONE,'AIM_VDI: RHGRAD =', & ' /* max gradient of rel.humidity (d_RH/d_sigma)*/') CALL WRITE_0D_RL( SEGRAD,INDEX_NONE,'AIM_VDI: SEGRAD =', & ' /* max grad. of dry static Energy(d_DSE/d_phi)*/') IF ( errCount.GE.1 ) THEN WRITE(msgBuf,'(A,I3,A)') & 'AIM_READPARMS: detected', errCount,' fatal error(s)' CALL PRINT_ERROR( msgBuf, myThid ) CALL ALL_PROC_DIE( 0 ) STOP 'ABNORMAL END: S/R AIM_READPARMS' ENDIF C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C- Initialise CO2 concentration (a better place would be from AIM_INIT_VARIA): aim_pCO2 = aim_fixed_pCO2 #ifdef ALLOW_AIM_CO2 atm_pCO2 = atmpCO2init #endif /* ALLOW_AIM_CO2 */ _END_MASTER(myThid) C-- Everyone else must wait for the parameters to be loaded _BARRIER #endif /* ALLOW_AIM */ RETURN END