C $Header: /u/gcmpack/MITgcm/pkg/aim/aim_read_physparms.F,v 1.1 2002/10/09 01:01:24 jmc Exp $
C $Name:  $

#include "AIM_OPTIONS.h"

CBOP
C     !ROUTINE: AIM_READ_PHYSPARMS
C     !INTERFACE:
      SUBROUTINE AIM_READ_PHYSPARMS( myThid )

C     !DESCRIPTION: \bv
C     *==========================================================*
C     | S/R AIM_READ_PHYSPARMS
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"
c #include "PARAMS.h"

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 -  Number of this instance
      INTEGER myThid
CEOP

#ifdef ALLOW_AIM

C     == Local Variables == 
C     msgBuf      - Informational/error meesage buffer
C     iUnit       - Work variable for IO unit number
      CHARACTER*(MAX_LEN_MBUF) msgBuf
      INTEGER iUnit

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

C--   Physical constants (common PHYCON) :
C      P0   = reference pressure
C      GG   = gravity accel.
C      RD   = gas constant for dry air
C      CP   = specific heat at constant pressure
C      ALHC = latent heat of condensation
C      SBC  = Stefan-Boltzmann constant            

C--   Constants for forcing fields (common FORCON) :
C      SOLC   = Solar constant (area averaged) in W/m^2
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 corresponding to maximum albedo
C      SWCAP  = Soil wetness capacity
C      SWWIL  = Soil wetness at wilting point 
      NAMELIST //AIM_PAR_FOR
     &    SOLC, ALBSEA, ALBICE, ALBSN,
     &    SDALB, SWCAP, SWWIL

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      SWMAX  = Soil wetness (in mm) corresp. to potential evapotranspiration  
      NAMELIST //AIM_PAR_SFL
     &    FWIND0, FTEMP0, FHUM0,
     &    CDL, CDS, CHL, CHS, VGUST, 
     &    SWMAX

C--   Convection constants (common CNVCON) :
C      RHBL   = relative hum. threshold in the boundary (lowest) layer
C      TRCNV  = time of relaxation (in hours) towards neutral equilibrium
C      ENTMAX = max. entrainment as a fraction of cloud-base mass flux
      NAMELIST //AIM_PAR_CNV
     &    RHBL, TRCNV, ENTMAX

C--   Constants for large-scale condendation (common LSCCON) : 
C      RHLSC  = Relative humidity threshold
C      TRLSC  = Relaxation time (in hours) for supersat. specific humidity 
      NAMELIST //AIM_PAR_LSC
     &    RHLSC, TRLSC

C--    Radiation constants (common RADCON) :
C      ABSSW  = shortwave absorptivity for dry air (per dp = 10^5 Pa)
C      ABSLW  =  longwave absorptivity for dry air (per dp = 10^5 Pa)
C      ABWSW  = shortwave absorptivity for water vapour (per dq = 1 g/kg)
C      ABWLW  =  longwave absorptivity for water vapour (per dq = 1 g/kg)
C      ABCSW  = shortwave absorptivity for cloud fraction
C      ABCLW  =  longwave absorptivity for cloud fraction
C      EPSSW  = fraction of incoming solar radiation absorbed by ozone
C      EPSLW  = fraction of surface LW radiation emitted directly to space
C      ALBCL  = cloud albedo (for cloud cover = 1)
C      RHCL1  = relative hum. corresponding to cloud cover = 0
C      RHCL2  = relative hum. corresponding to cloud cover = 1
C      QACL   = specific hum. threshold for cloud cover
      NAMELIST //AIM_PAR_RAD
     &    ABSSW, ABSLW, ABWSW, ABWLW, ABCSW, ABCLW,
     &    EPSSW, EPSLW,
     &    ALBCL, RHCL1, RHCL2, QACL

C--   Constants for vertical dif. and sh. conv. (common VDICON) : 
C      TRVDI  = relaxation time (in hours) for moisture diffusion
C      TRSHC  = relaxation time (in hours) for shallow convection
      NAMELIST //AIM_PAR_VDI
     &    TRVDI, TRSHC

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

      _BEGIN_MASTER(myThid)
      
      WRITE(msgBuf,'(A)') ' AIM_READ_PHYSPARMS: opening data.aimphys'
      CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)

      CALL OPEN_COPY_DATA_FILE( 'data.aimphys', 'AIM_READ_PHYSPARMS',
     O                          iUnit, myThid )

C--   Read parameters from open data file:

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_READ_PHYSPARMS: finished reading data.aimphys'
      CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
 
C--   Close the open data file
      CLOSE(iUnit)

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C--   Print out parameter values :

      WRITE(msgBuf,'(A)') ' '
      CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
      WRITE(msgBuf,'(A)') '// ==================================='
      CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
      WRITE(msgBuf,'(A)') '// AIM physics parameters :'
      CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
      WRITE(msgBuf,'(A)') '// ==================================='
      CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)

C- namelist AIM_PAR_FOR:
       CALL WRITE_0D_R8( SOLC,  INDEX_NONE,'AIM_FOR:   SOLC =',
     &  '   /* Solar constant (area averaged) in W/m2 */')

C- namelist AIM_PAR_SFL:
       CALL WRITE_0D_R8( FWIND0,INDEX_NONE,'AIM_SFL: FWIND0 =',
     &  '   /* ratio of near-sfc wind to lowest-level wind */')
       CALL WRITE_0D_R8( FTEMP0,INDEX_NONE,'AIM_SFL: FTEMP0 =',
     &  '  /* weight for near-sfc temp. extrapolation (0-1)*/')
       CALL WRITE_0D_R8( FHUM0, INDEX_NONE,'AIM_SFL:  FHUM0 =',
     &  '  /* weight for near-sfc spec.humid. extrap. (0-1)*/')
       CALL WRITE_0D_R8( CDL,   INDEX_NONE,'AIM_SFL:    CDL =',
     &  '   /* drag coefficient for momentum over land */')
       CALL WRITE_0D_R8( CDS,   INDEX_NONE,'AIM_SFL:    CDS =',
     &  '   /* drag coefficient for momentum over sea  */')
       CALL WRITE_0D_R8( CHL,   INDEX_NONE,'AIM_SFL:    CHL =',
     &  '   /* heat exchange coefficient over land */')
       CALL WRITE_0D_R8( CHS,   INDEX_NONE,'AIM_SFL:    CHS =',
     &  '   /* heat exchange coefficient over sea  */')
       CALL WRITE_0D_R8( VGUST, INDEX_NONE,'AIM_SFL:  VGUST =',
     &  '   /* wind speed [m/s] for sub-grid-scale gusts */')

C- namelist AIM_PAR_CNV:
       CALL WRITE_0D_R8( RHBL,  INDEX_NONE,'AIM_CNV:   RHBL =',
     &  '   /* rel. hum. threshold in the B.(lowest) layer */')
       CALL WRITE_0D_R8( TRCNV, INDEX_NONE,'AIM_CNV:  TRCNV =',
     &  '   /* time of relaxation [h] towards neutral eq. */')
       CALL WRITE_0D_R8( ENTMAX,INDEX_NONE,'AIM_CNV: ENTMAX =',
     &  '   /* time of relaxation [h] towards neutral eq. */')

C- namelist AIM_PAR_LSC:
       CALL WRITE_0D_R8( RHLSC, INDEX_NONE,'AIM_LSC:  RHLSC =',
     &  '   /* Relative humidity threshold */')
       CALL WRITE_0D_R8( TRLSC, INDEX_NONE,'AIM_LSC:  TRLSC =',
     &  '   /* relaxation time [h] for supersat. spec.hum. */')

C- namelist AIM_PAR_RAD:
       CALL WRITE_0D_R8( ABSSW, INDEX_NONE,'AIM_RAD:  ABSSW =',
     &  '   /* ShortW. absorptivity for dry air (/dp, 1e5 Pa)*/')
       CALL WRITE_0D_R8( ABSLW, INDEX_NONE,'AIM_RAD:  ABSLW =',
     &  '   /*  LongW. absorptivity for dry air (/dp, 1e5 Pa)*/')
       CALL WRITE_0D_R8( ABWSW, INDEX_NONE,'AIM_RAD:  ABWSW =',
     &  '   /* ShortW. absorptivity for WaterVap.(/dq, 1g/kg)*/')
       CALL WRITE_0D_R8( ABWLW, INDEX_NONE,'AIM_RAD:  ABWLW =',
     &  '   /*  LongW. absorptivity for WaterVap.(/dq, 1g/kg)*/')
       CALL WRITE_0D_R8( ABCSW, INDEX_NONE,'AIM_RAD:  ABCSW =',
     &  '   /* ShortW. absorptivity for cloud fraction */')
       CALL WRITE_0D_R8( ABCLW, INDEX_NONE,'AIM_RAD:  ABCLW =',
     &  '   /*  LongW. absorptivity for cloud fraction */')
       CALL WRITE_0D_R8( EPSSW, INDEX_NONE,'AIM_RAD:  EPSSW =',
     &  '   /*  fraction of inc.solar rad. absorbed by ozone */')   
       CALL WRITE_0D_R8( EPSLW, INDEX_NONE,'AIM_RAD:  EPSLW =',
     &  '   /*  fraction of sfc LW emitted directly to space */')   
       CALL WRITE_0D_R8( ALBCL, INDEX_NONE,'AIM_RAD:  ALBCL =',
     &  '   /*  cloud albedo (for cloud cover = 1) */')
       CALL WRITE_0D_R8( RHCL1, INDEX_NONE,'AIM_RAD:  RHCL1 =',
     &  '   /*  rel.hum. corresponding to cloud cover = 0 */')
       CALL WRITE_0D_R8( RHCL2, INDEX_NONE,'AIM_RAD:  RHCL2 =',
     &  '   /*  rel.hum. corresponding to cloud cover = 1 */')
       CALL WRITE_0D_R8( QACL,  INDEX_NONE,'AIM_RAD:   QACL =',
     &  '   /*  specific hum. threshold for cloud cover */')

C- namelist AIM_PAR_VDI:
       CALL WRITE_0D_R8( TRVDI, INDEX_NONE,'AIM_VDI:  TRVDI =',
     &  '   /* relaxation time [h] for moisture diffusion */')
       CALL WRITE_0D_R8( TRSHC, INDEX_NONE,'AIM_VDI:  TRSHC =',
     &  '   /* relaxation time [h] for shallow convection */')

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

      _END_MASTER(myThid)
 
C--   Everyone else must wait for the parameters to be loaded
      _BARRIER

#endif /* ALLOW_AIM */

      RETURN
      END