diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 index 9f3c5a755..8ac949d38 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 @@ -194,7 +194,7 @@ subroutine SetServices ( GC, RC ) integer :: RFRSHINT integer :: AVRGNINT integer :: IQVAINC - real :: DT + real :: HEARTBEAT character(len=ESMF_MAXSTR) :: FRIENDLIES_NCPL , FRIENDLIES_NCPI , & FRIENDLIES_NRAIN, FRIENDLIES_NSNOW, FRIENDLIES_NGRAUPEL @@ -252,10 +252,10 @@ subroutine SetServices ( GC, RC ) ! Set the state variable specs. ! ----------------------------- - call ESMF_ConfigGetAttribute ( CF, DT, Label="RUN_DT:", RC=STATUS) + call ESMF_ConfigGetAttribute ( CF, HEARTBEAT, Label="RUN_DT:", RC=STATUS) VERIFY_(STATUS) - call ESMF_ConfigGetAttribute( CF, RFRSHINT, Label="REFRESH_INTERVAL:", default=nint(DT), RC=STATUS) + call ESMF_ConfigGetAttribute( CF, RFRSHINT, Label="REFRESH_INTERVAL:", default=nint(HEARTBEAT), RC=STATUS) VERIFY_(STATUS) call ESMF_ConfigGetAttribute( CF, AVRGNINT, Label='AVERAGING_INTERVAL:',default=RFRSHINT, RC=STATUS) @@ -5191,13 +5191,16 @@ subroutine Initialize ( GC, IMPORT, EXPORT, CLOCK, RC ) real, pointer, dimension(:,:,:) :: Q, QLLS, QLCN, QILS, QICN, QRAIN, QSNOW, QGRAUPEL, QW real, dimension(:,:,:), pointer :: PTR3 - integer unit - - real DCS, QCVAR_, WBFFACTOR, NC_CST, NI_CST, NG_CST - logical :: nccons, nicons, ngcons, do_graupel - integer :: LM + integer :: unit + real :: HEARTBEAT, MOIST_DT + type (ESMF_Time) :: CurrentTime + type (ESMF_Alarm) :: MoistAlarm + type (ESMF_TimeInterval) :: MoistIntvl + real :: DCS, QCVAR_, WBFFACTOR, NC_CST, NI_CST, NG_CST + logical :: nccons, nicons, ngcons, do_graupel + integer :: LM - real(ESMF_KIND_R8) Dcsr8, qcvarr8, micro_mg_berg_eff_factor_in, ncnstr8, ninstr8, ngnstr8 + real(ESMF_KIND_R8) :: Dcsr8, qcvarr8, micro_mg_berg_eff_factor_in, ncnstr8, ninstr8, ngnstr8 !============================================================================= ! Begin... @@ -5215,6 +5218,26 @@ subroutine Initialize ( GC, IMPORT, EXPORT, CLOCK, RC ) call MAPL_GetObjectFromGC ( GC, MAPL, RC=STATUS ) VERIFY_(STATUS) + call ESMF_ConfigGetAttribute (CF, HEARTBEAT, Label="RUN_DT:", RC=STATUS) + VERIFY_(STATUS) + + call ESMF_ConfigGetAttribute (CF, MOIST_DT, Label="MOIST_DT:", default = HEARTBEAT, RC=STATUS) + VERIFY_(STATUS) + + call ESMF_ClockGet(CLOCK, currTime=CurrentTime, rc=STATUS) + _VERIFY(status) + + call ESMF_TimeIntervalSet(MoistIntvl, s=nint(MOIST_DT), rc=status) + _VERIFY(status) + + MoistAlarm = ESMF_AlarmCreate( & + CLOCK, & + name='MoistAlarm', & + ringTime=CurrentTime, & + ringInterval = MoistIntvl, & + ringTimeStepCount=1, & + sticky=.false., __RC__) + ! Call Generic Initialize for MOIST GC !---------------------------------------- @@ -5418,7 +5441,7 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) type (MAPL_MetaComp), pointer :: STATE type (ESMF_Config ) :: CF type (ESMF_State ) :: INTERNAL - type (ESMF_Alarm ) :: ALARM + type (ESMF_Alarm ) :: ALARM, MoistAlarm type (RASPARAM_TYPE) :: RASPARAMS type (CLDPARAM_TYPE) :: CLDPARAMS @@ -5448,13 +5471,14 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) call MAPL_GetObjectFromGC ( GC, STATE, RC=STATUS) VERIFY_(STATUS) + call MAPL_TimerOn (STATE,"TOTAL") ! Get parameters from generic state. !----------------------------------- call MAPL_Get( STATE, IM=IM, JM=JM, LM=LM, & - RUNALARM = ALARM, & + !RUNALARM = ALARM, & CF = CF, & LONS = LONS, & LATS = LATS, & @@ -5462,16 +5486,17 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) RC=STATUS ) VERIFY_(STATUS) - + call ESMF_ClockGetAlarm(CLOCK, 'MoistAlarm', MoistAlarm, rc=status) + _VERIFY(status) ! If its time, calculate convective tendencies ! -------------------------------------------- - if ( ESMF_AlarmIsRinging( ALARM, RC=status) ) then - VERIFY_(STATUS) - call ESMF_AlarmRingerOff(ALARM, RC=STATUS) + if ( ESMF_AlarmIsRinging( MoistAlarm, RC=status) ) then VERIFY_(STATUS) + !call ESMF_AlarmRingerOff(ALARM, RC=STATUS) + !VERIFY_(STATUS) call MAPL_TimerOn(STATE,"DRIVER") call MOIST_DRIVER(IM,JM,LM, RC=STATUS) VERIFY_(STATUS) @@ -5974,7 +5999,7 @@ subroutine MOIST_DRIVER(IM,JM,LM, RC) real :: CBL_TPERTi, CBL_TPERT, CBL_QPERT, RASAL1, RASAL2 real :: RHEXCESS,CBL_TPERT_MXOCN,CBL_TPERT_MXLND - real :: HEARTBEAT + real :: HEARTBEAT, Moist_DT integer :: L, K, I, J, KM, KK , Kii, NAER, N !DONIF @@ -6408,6 +6433,8 @@ subroutine MOIST_DRIVER(IM,JM,LM, RC) !---------------------------------- call ESMF_ConfigGetAttribute (CF, HEARTBEAT, Label="RUN_DT:", RC=STATUS) VERIFY_(STATUS) + call ESMF_ConfigGetAttribute ( CF, Moist_DT, Label="MOIST_DT:", default = HEARTBEAT, RC=STATUS) + VERIFY_(STATUS) call ESMF_ConfigGetAttribute( CF, RAS_NO_NEG, Label='RAS_NO_NEG:', default=.FALSE. , RC=STATUS) VERIFY_(STATUS) @@ -6460,7 +6487,7 @@ subroutine MOIST_DRIVER(IM,JM,LM, RC) call MAPL_GetResource(STATE, DUST_INFAC, 'DUST_INFAC:', DEFAULT= 0.5, RC=STATUS) !work on this call MAPL_GetResource(STATE, BC_INFAC, 'BC_INFAC:', DEFAULT= 0.1, RC=STATUS) call MAPL_GetResource(STATE, ORG_INFAC, 'ORG_INFAC:', DEFAULT= 1.0, RC=STATUS) - call MAPL_GetResource(STATE, SS_INFAC, 'SS_INFAC:', DEFAULT= 1.0, RC=STATUS) + call MAPL_GetResource(STATE, SS_INFAC, 'SS_INFAC:', DEFAULT= 1.0, RC=STATUS) call MAPL_GetResource(STATE, DT_MICRO, 'DT_MICRO:', DEFAULT= HEARTBEAT, RC=STATUS) ! time step of the microphysics substepping (s) (MG2) (5 min) call MAPL_GetResource(STATE, UR_SCALE, 'URSCALE:', DEFAULT= 1.0, RC=STATUS) !Scaling factor for sed vel of rain @@ -6584,7 +6611,7 @@ subroutine MOIST_DRIVER(IM,JM,LM, RC) ! Get the time step from the alarm !--------------------------------- - call ESMF_AlarmGet( ALARM, RingInterval=TINT, RC=STATUS) + call ESMF_AlarmGet( MoistAlarm, RingInterval=TINT, RC=STATUS) VERIFY_(STATUS) call ESMF_TimeIntervalGet(TINT, S_R8=DT_R8, RC=STATUS) VERIFY_(STATUS)