From fb1d28fc59d9e38a6bff2cbf86e76ba120f460a7 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Fri, 28 Jan 2022 11:16:22 -0500 Subject: [PATCH 1/3] implement flexible moist grid comp DT --- .../GEOSmoist_GridComp/GEOS_MoistGridComp.F90 | 60 +++++++++++++++---- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 index 3e80fba9e..bf6cf56d5 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) @@ -5124,13 +5124,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... @@ -5148,6 +5151,29 @@ 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=MOIST_DT, rc=status) + _VERIFY(status) + + MoistAlarm = ESMF_AlarmCreate( & + CLOCK, & + name='MoistAlarm', & + ringTime=CurrentTime, & + ringInterval = MoistIntvl, & + ringTimeStepCount=1, & + sticky=.false., & + rc=status & + ) + _VERIFY(status) + ! Call Generic Initialize for MOIST GC !---------------------------------------- @@ -5351,7 +5377,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 @@ -5381,6 +5407,13 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) call MAPL_GetObjectFromGC ( GC, STATE, RC=STATUS) VERIFY_(STATUS) + call ESMF_ClockGetAlarm(CLOCK, 'MoistAlarm', MoistAlarm, rc=status) + _VERIFY(status) + + if ( .not. ESMF_AlarmIsRinging(MoistAlarm)) then + RETURN_(ESMF_SUCCESS) + endif + call MAPL_TimerOn (STATE,"TOTAL") ! Get parameters from generic state. @@ -5397,7 +5430,6 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) - ! If its time, calculate convective tendencies ! -------------------------------------------- @@ -5904,7 +5936,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 @@ -6337,6 +6369,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) @@ -6391,7 +6425,7 @@ subroutine MOIST_DRIVER(IM,JM,LM, RC) 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, DT_MICRO, 'DT_MICRO:', DEFAULT= HEARTBEAT, RC=STATUS) ! time step of the microphysics substepping (s) (MG2) (5 min) + call MAPL_GetResource(STATE, DT_MICRO, 'DT_MICRO:', DEFAULT= Moist_DT, 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 call MAPL_GetResource(STATE, USE_NATURE_WSUB, 'USE_NAT_WSUB:', DEFAULT= 1.0 ,RC=STATUS) !greater than zero reads wsub from nature run From 1a2591c652ccba0496a519aa3bea1209880183f0 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Fri, 28 Jan 2022 12:56:01 -0500 Subject: [PATCH 2/3] fix typo --- .../GEOSmoist_GridComp/GEOS_MoistGridComp.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 index bf6cf56d5..a1f3f6cc6 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 @@ -5160,7 +5160,7 @@ subroutine Initialize ( GC, IMPORT, EXPORT, CLOCK, RC ) call ESMF_ClockGet(CLOCK, currTime=CurrentTime, rc=STATUS) _VERIFY(status) - call ESMF_TimeIntervalSet(MoistIntvl, s=MOIST_DT, rc=status) + call ESMF_TimeIntervalSet(MoistIntvl, s=nint(MOIST_DT), rc=status) _VERIFY(status) MoistAlarm = ESMF_AlarmCreate( & @@ -6369,7 +6369,7 @@ 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) + 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) From e933dfb37045d113108ecf59204cfa3cf21a6eaf Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Wed, 2 Feb 2022 17:26:30 -0500 Subject: [PATCH 3/3] replace Alarm with new MoistAlarm --- .../GEOSmoist_GridComp/GEOS_MoistGridComp.F90 | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 index a1f3f6cc6..84f65dd69 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/GEOS_MoistGridComp.F90 @@ -5169,10 +5169,7 @@ subroutine Initialize ( GC, IMPORT, EXPORT, CLOCK, RC ) ringTime=CurrentTime, & ringInterval = MoistIntvl, & ringTimeStepCount=1, & - sticky=.false., & - rc=status & - ) - _VERIFY(status) + sticky=.false., __RC__) ! Call Generic Initialize for MOIST GC !---------------------------------------- @@ -5407,20 +5404,14 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) call MAPL_GetObjectFromGC ( GC, STATE, RC=STATUS) VERIFY_(STATUS) - call ESMF_ClockGetAlarm(CLOCK, 'MoistAlarm', MoistAlarm, rc=status) - _VERIFY(status) - if ( .not. ESMF_AlarmIsRinging(MoistAlarm)) then - RETURN_(ESMF_SUCCESS) - endif - 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, & @@ -5428,15 +5419,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) @@ -6423,9 +6416,9 @@ 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= Moist_DT, RC=STATUS) ! time step of the microphysics substepping (s) (MG2) (5 min) + 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 call MAPL_GetResource(STATE, USE_NATURE_WSUB, 'USE_NAT_WSUB:', DEFAULT= 1.0 ,RC=STATUS) !greater than zero reads wsub from nature run @@ -6547,7 +6540,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)