C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/aim_initialise.F,v 1.16 2014/01/06 14:53:34 mlosch Exp $ C $Name: $ #include "AIM_OPTIONS.h" CBOP C !ROUTINE: AIM_INITIALISE C !INTERFACE: SUBROUTINE AIM_INITIALISE( myThid ) C !DESCRIPTION: \bv C *==================================================================* C | S/R AIM_INITIALISE C *==================================================================* C | Initialisation of AIM atmospheric physics package : C | 1) call iniphys (=> set parameters to default value) C | 2) read AIM parameters C *==================================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "SURFACE.h" #include "AIM_PARAMS.h" #include "AIM_FFIELDS.h" c #include "AIM_GRID.h" c #include "AIM_DIAGS.h" C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C myThid :: my Thread Id. number INTEGER myThid #ifdef ALLOW_AIM C !LOCAL VARIABLES: C == Local variables == C HSG :: Cell face in vertical C pGround :: Lower boundary pressure C bi,bj :: Tile indices C i, j, k :: Loop counters _RL HSG(0:Nr) _RL pGround, tmpPgrnd, tmpVar INTEGER bi, bj INTEGER i, j, k INTEGER Katm CEOP C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| _BEGIN_MASTER(myThid ) C-- Set default value for atmos. physics parameters: pGround = atm_Po DO k=1,Nr Katm = _KD2KA( k ) HSG(Katm) = rF(k)/pGround ENDDO k=Nr+1 Katm = _KD2KA( k ) HSG(Katm) = rF(k)/pGround _END_MASTER( myThid ) C-- set default value for all atmos. physics parameter: CALL INPHYS( HSG, myThid ) C-- Read AIM parameters (from file data.aimphys): CALL AIM_READPARMS( myThid ) C-- set energy fractions in LW bands as a function of temperature: C initialize common block RADFIX (originally called from FORDATE in SPEEDY) _BEGIN_MASTER(myThid ) CALL RADSET( myThid ) _END_MASTER( myThid ) C-- Set truncSurfP : used to correct for truncation (because of hFacMin) C of surface reference pressure Ro_surf that affects Surf.Temp. CALL INI_P_GROUND(1, topoZ, truncSurfP, myThid ) DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) DO j=1,sNy DO i=1,sNx tmpPgrnd = truncSurfP(i,j,bi,bj) tmpVar = Ro_surf(i,j,bi,bj) tmpPgrnd = MIN( tmpPgrnd, atm_Po ) truncSurfP(i,j,bi,bj) = ( tmpVar/tmpPgrnd )**atm_kappa ENDDO ENDDO IF (aim_useMMsurfFc .AND. aim_surfPotTemp) THEN DO j=1,sNy DO i=1,sNx tmpVar = Ro_surf(i,j,bi,bj) truncSurfP(i,j,bi,bj) = ( tmpVar/atm_Po )**atm_kappa ENDDO ENDDO ENDIF ENDDO ENDDO C-- Initialise Land Fraction (in AIM_FFIELDS.h): DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) DO j=1-Oly,sNy+Oly DO i=1-Olx,sNx+Olx aim_landFr (i,j,bi,bj) = 0. ENDDO ENDDO ENDDO ENDDO IF ( aim_LandFile .NE. ' ' ) THEN _BARRIER CALL READ_REC_XY_RS(aim_LandFile,aim_landFr,1,nIter0,myThid) C- better to fill land fraction overlap (likely to be needed for sea-ice) CALL EXCH_XY_RS( aim_landFr, myThid ) ENDIF #ifdef ALLOW_MNC IF (useMNC) THEN CALL AIM_MNC_INIT( myThid ) ENDIF #endif /* ALLOW_MNC */ #ifdef ALLOW_DIAGNOSTICS IF ( useDiagnostics ) THEN CALL AIM_DIAGNOSTICS_INIT( myThid ) ENDIF #endif C-- Everyone else must wait for the parameters to be set _BARRIER #endif /* ALLOW_AIM */ RETURN END