@@ -38,6 +38,7 @@ module GEOS_GF_InterfaceMod
3838 real :: SCLM_DEEP
3939 real :: GF_MIN_AREA
4040 logical :: FIX_CNV_CLOUD
41+ logical :: REPORT_GF_NEGATIVES
4142
4243 public :: GF_Setup, GF_Initialize, GF_Run
4344
@@ -117,16 +118,18 @@ subroutine GF_Initialize (MAPL, CLOCK, RC)
117118 else
118119 call MAPL_GetResource(MAPL, USE_GF2020 , ' USE_GF2020:' ,default= 1 , RC= STATUS );VERIFY_(STATUS)
119120 endif
121+ call MAPL_GetResource(MAPL, REPORT_GF_NEGATIVES, ' REPORT_GF_NEGATIVES:' , default= .FALSE. , RC= STATUS) ; VERIFY_(STATUS)
120122 IF (USE_GF2020== 1 ) THEN
121- call MAPL_GetResource(MAPL, ZERO_DIFF , ' ZERO_DIFF:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
123+ call MAPL_GetResource(MAPL, ZERO_DIFF_LAND , ' ZERO_DIFF_LAND:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
124+ call MAPL_GetResource(MAPL, ZERO_DIFF_VVEL , ' ZERO_DIFF_VVEL:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
125+ call MAPL_GetResource(MAPL, ZERO_DIFF_ENTR , ' ZERO_DIFF_ENTR:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
122126 call MAPL_GetResource(MAPL, ICUMULUS_GF(DEEP) , ' DEEP:' ,default= 1 , RC= STATUS );VERIFY_(STATUS)
123127 call MAPL_GetResource(MAPL, ICUMULUS_GF(SHAL) , ' SHALLOW:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
124128 call MAPL_GetResource(MAPL, ICUMULUS_GF(MID) , ' CONGESTUS:' ,default= 1 , RC= STATUS );VERIFY_(STATUS)
125129 call MAPL_GetResource(MAPL, CLOSURE_CHOICE(DEEP) , ' CLOSURE_DEEP:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
126130 call MAPL_GetResource(MAPL, CLOSURE_CHOICE(SHAL) , ' CLOSURE_SHALLOW:' ,default= 7 , RC= STATUS );VERIFY_(STATUS)
127131 call MAPL_GetResource(MAPL, CLOSURE_CHOICE(MID) , ' CLOSURE_CONGESTUS:' ,default= 3 , RC= STATUS );VERIFY_(STATUS)
128- call MAPL_GetResource(MAPL, ENTRVERSION , ' ENTRVERSION:' ,default= 1 , RC= STATUS );VERIFY_(STATUS)
129- if (INT (ZERO_DIFF) == 0 ) then
132+ if (INT (ZERO_DIFF_ENTR) == 0 ) then
130133 call MAPL_GetResource(MAPL, ENTRVERSION , ' ENTRVERSION:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
131134 call MAPL_GetResource(MAPL, MIN_ENTR_RATE , ' MIN_ENTR_RATE:' ,default= 0.3e-4 ,RC= STATUS );VERIFY_(STATUS)
132135 call MAPL_GetResource(MAPL, CUM_ENTR_RATE(DEEP) , ' ENTR_DP:' ,default= 2.0e-4 ,RC= STATUS );VERIFY_(STATUS)
@@ -166,16 +169,16 @@ subroutine GF_Initialize (MAPL, CLOCK, RC)
166169 call MAPL_GetResource(MAPL, BETA_SH , ' BETA_SH:' ,default= 2.2 , RC= STATUS );VERIFY_(STATUS)
167170 call MAPL_GetResource(MAPL, USE_LINEAR_SUBCL_MF , ' USE_LINEAR_SUBCL_MF:' ,default= 0 , RC= STATUS );VERIFY_(STATUS)
168171 call MAPL_GetResource(MAPL, CAP_MAXS , ' CAP_MAXS:' ,default= 50 ., RC= STATUS );VERIFY_(STATUS)
169- call MAPL_GetResource(MAPL, GF_ENV_SETTING , ' GF_ENV_SETTING:' ,default= ' CURRENT ' , RC= STATUS); VERIFY_(STATUS)
172+ call MAPL_GetResource(MAPL, GF_ENV_SETTING , ' GF_ENV_SETTING:' ,default= ' DYNAMICS ' , RC= STATUS); VERIFY_(STATUS)
170173 call MAPL_GetResource(MAPL, STOCH_TOP , ' STOCH_TOP:' ,default= 2.50 , RC= STATUS); VERIFY_(STATUS)
171174 call MAPL_GetResource(MAPL, STOCH_BOT , ' STOCH_BOT:' ,default= 0.75 , RC= STATUS); VERIFY_(STATUS)
172175 call MAPL_GetResource(MAPL, STOCHASTIC_CNV , ' STOCHASTIC_CNV:' ,default= .FALSE. ,RC= STATUS); VERIFY_(STATUS)
173- if (INT (ZERO_DIFF ) == 0 ) then
176+ if (INT (ZERO_DIFF_ENTR ) == 0 ) then
174177 call MAPL_GetResource(MAPL, GF_MIN_AREA , ' GF_MIN_AREA:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
175- SGS_W_TIMESCALE = 3 ! Hours
178+ SGS_W_TIMESCALE = 6 ! Hours
176179 call MAPL_GetResource(MAPL, SGS_W_TIMESCALE , ' SGS_W_TIMESCALE:' ,default= SGS_W_TIMESCALE, RC= STATUS );VERIFY_(STATUS)
177180 call MAPL_GetResource(MAPL, TAU_MID , ' TAU_MID:' ,default= 3600 ., RC= STATUS );VERIFY_(STATUS)
178- call MAPL_GetResource(MAPL, TAU_DEEP , ' TAU_DEEP:' ,default= 10800 ., RC= STATUS );VERIFY_(STATUS)
181+ call MAPL_GetResource(MAPL, TAU_DEEP , ' TAU_DEEP:' ,default= 21600 ., RC= STATUS );VERIFY_(STATUS)
179182 else
180183 call MAPL_GetResource(MAPL, GF_MIN_AREA , ' GF_MIN_AREA:' ,default= 1.e6 , RC= STATUS );VERIFY_(STATUS)
181184 call MAPL_GetResource(MAPL, TAU_MID , ' TAU_MID:' ,default= 3600 ., RC= STATUS );VERIFY_(STATUS)
@@ -206,7 +209,6 @@ subroutine GF_Initialize (MAPL, CLOCK, RC)
206209 call MAPL_GetResource(MAPL, QRC_CRIT_OCN , ' QRC_CRIT_OCN:' ,default= 2.0e-4 ,RC= STATUS );VERIFY_(STATUS)
207210 call MAPL_GetResource(MAPL, QRC_CRIT_LND , ' QRC_CRIT_LND:' ,default= 2.0e-4 ,RC= STATUS );VERIFY_(STATUS)
208211 call MAPL_GetResource(MAPL, C1 , ' C1:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
209- if (INT (ZERO_DIFF) == 0 ) then
210212 call MAPL_GetResource(MAPL, CUM_HEI_DOWN_LAND(DEEP) , ' HEI_DOWN_LAND_DP:' ,default= 0.3 , RC= STATUS );VERIFY_(STATUS)
211213 call MAPL_GetResource(MAPL, CUM_HEI_DOWN_LAND(SHAL) , ' HEI_DOWN_LAND_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
212214 call MAPL_GetResource(MAPL, CUM_HEI_DOWN_LAND(MID) , ' HEI_DOWN_LAND_MD:' ,default= 0.3 , RC= STATUS );VERIFY_(STATUS)
@@ -231,32 +233,6 @@ subroutine GF_Initialize (MAPL, CLOCK, RC)
231233 call MAPL_GetResource(MAPL, CUM_MAX_EDT_OCEAN(DEEP) , ' MAX_EDT_OCEAN_DP:' ,default= 0.3 , RC= STATUS );VERIFY_(STATUS)
232234 call MAPL_GetResource(MAPL, CUM_MAX_EDT_OCEAN(SHAL) , ' MAX_EDT_OCEAN_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
233235 call MAPL_GetResource(MAPL, CUM_MAX_EDT_OCEAN(MID) , ' MAX_EDT_OCEAN_MD:' ,default= 0.3 , RC= STATUS );VERIFY_(STATUS)
234- else
235- call MAPL_GetResource(MAPL, CUM_HEI_DOWN_LAND(DEEP) , ' HEI_DOWN_LAND_DP:' ,default= 0.5 , RC= STATUS );VERIFY_(STATUS)
236- call MAPL_GetResource(MAPL, CUM_HEI_DOWN_LAND(SHAL) , ' HEI_DOWN_LAND_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
237- call MAPL_GetResource(MAPL, CUM_HEI_DOWN_LAND(MID) , ' HEI_DOWN_LAND_MD:' ,default= 0.5 , RC= STATUS );VERIFY_(STATUS)
238- call MAPL_GetResource(MAPL, CUM_HEI_DOWN_OCEAN(DEEP) , ' HEI_DOWN_OCEAN_DP:' ,default= 0.5 , RC= STATUS );VERIFY_(STATUS)
239- call MAPL_GetResource(MAPL, CUM_HEI_DOWN_OCEAN(SHAL) , ' HEI_DOWN_OCEAN_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
240- call MAPL_GetResource(MAPL, CUM_HEI_DOWN_OCEAN(MID) , ' HEI_DOWN_OCEAN_MD:' ,default= 0.5 , RC= STATUS );VERIFY_(STATUS)
241- call MAPL_GetResource(MAPL, CUM_HEI_UPDF_LAND(DEEP) , ' HEI_UPDF_LAND_DP:' ,default= 0.65 , RC= STATUS );VERIFY_(STATUS)
242- call MAPL_GetResource(MAPL, CUM_HEI_UPDF_LAND(SHAL) , ' HEI_UPDF_LAND_SH:' ,default= 0.2 , RC= STATUS );VERIFY_(STATUS)
243- call MAPL_GetResource(MAPL, CUM_HEI_UPDF_LAND(MID) , ' HEI_UPDF_LAND_MD:' ,default= 0.65 , RC= STATUS );VERIFY_(STATUS)
244- call MAPL_GetResource(MAPL, CUM_HEI_UPDF_OCEAN(DEEP) , ' HEI_UPDF_OCEAN_DP:' ,default= 0.65 , RC= STATUS );VERIFY_(STATUS)
245- call MAPL_GetResource(MAPL, CUM_HEI_UPDF_OCEAN(SHAL) , ' HEI_UPDF_OCEAN_SH:' ,default= 0.2 , RC= STATUS );VERIFY_(STATUS)
246- call MAPL_GetResource(MAPL, CUM_HEI_UPDF_OCEAN(MID) , ' HEI_UPDF_OCEAN_MD:' ,default= 0.65 , RC= STATUS );VERIFY_(STATUS)
247- call MAPL_GetResource(MAPL, CUM_MIN_EDT_LAND(DEEP) , ' MIN_EDT_LAND_DP:' ,default= 0.1 , RC= STATUS );VERIFY_(STATUS)
248- call MAPL_GetResource(MAPL, CUM_MIN_EDT_LAND(SHAL) , ' MIN_EDT_LAND_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
249- call MAPL_GetResource(MAPL, CUM_MIN_EDT_LAND(MID) , ' MIN_EDT_LAND_MD:' ,default= 0.1 , RC= STATUS );VERIFY_(STATUS)
250- call MAPL_GetResource(MAPL, CUM_MIN_EDT_OCEAN(DEEP) , ' MIN_EDT_OCEAN_DP:' ,default= 0.1 , RC= STATUS );VERIFY_(STATUS)
251- call MAPL_GetResource(MAPL, CUM_MIN_EDT_OCEAN(SHAL) , ' MIN_EDT_OCEAN_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
252- call MAPL_GetResource(MAPL, CUM_MIN_EDT_OCEAN(MID) , ' MIN_EDT_OCEAN_MD:' ,default= 0.1 , RC= STATUS );VERIFY_(STATUS)
253- call MAPL_GetResource(MAPL, CUM_MAX_EDT_LAND(DEEP) , ' MAX_EDT_LAND_DP:' ,default= 0.9 , RC= STATUS );VERIFY_(STATUS)
254- call MAPL_GetResource(MAPL, CUM_MAX_EDT_LAND(SHAL) , ' MAX_EDT_LAND_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
255- call MAPL_GetResource(MAPL, CUM_MAX_EDT_LAND(MID) , ' MAX_EDT_LAND_MD:' ,default= 0.9 , RC= STATUS );VERIFY_(STATUS)
256- call MAPL_GetResource(MAPL, CUM_MAX_EDT_OCEAN(DEEP) , ' MAX_EDT_OCEAN_DP:' ,default= 0.9 , RC= STATUS );VERIFY_(STATUS)
257- call MAPL_GetResource(MAPL, CUM_MAX_EDT_OCEAN(SHAL) , ' MAX_EDT_OCEAN_SH:' ,default= 0.0 , RC= STATUS );VERIFY_(STATUS)
258- call MAPL_GetResource(MAPL, CUM_MAX_EDT_OCEAN(MID) , ' MAX_EDT_OCEAN_MD:' ,default= 0.9 , RC= STATUS );VERIFY_(STATUS)
259- endif
260236 call MAPL_GetResource(MAPL, SCLM_DEEP , ' SCLM_DEEP:' ,default= 1.0 , RC= STATUS); VERIFY_(STATUS)
261237 call MAPL_GetResource(MAPL, FIX_CNV_CLOUD , ' FIX_CNV_CLOUD:' ,default= .FALSE. , RC= STATUS); VERIFY_(STATUS)
262238 ELSE
@@ -585,12 +561,8 @@ subroutine GF_Run (GC, IMPORT, EXPORT, CLOCK, RC)
585561 endif
586562
587563 IF (USE_GF2020== 1 ) THEN
588- !- Determine which W is proper import
589- IF (all (W == 0.0 )) THEN
590- TMP3D = - 1 * OMEGA/ (MAPL_GRAV* PL/ (MAPL_RDRY* T* (1.0 + MAPL_VIREPS* Q)))
591- ELSE
592- TMP3D = W
593- ENDIF
564+ ! Convert OMEGA (Pa/s) to W (m/s)
565+ TMP3D = - 1 * OMEGA/ (MAPL_GRAV* PL/ (MAPL_RDRY* T* (1.0 + MAPL_VIREPS* Q)))
594566 !- call GF2020 interface routine
595567 ! PLE and PL are passed in Pa
596568 call GF2020_Interface( IM,JM,LM,LONS,LATS,GF_DT &
@@ -677,11 +649,19 @@ subroutine GF_Run (GC, IMPORT, EXPORT, CLOCK, RC)
677649 call MAPL_GetPointer(EXPORT, DQLCNDT_FILL, ' DQLCNDT_FILL_DC' , RC= STATUS); VERIFY_(STATUS)
678650 call MAPL_GetPointer(EXPORT, DQILSDT_FILL, ' DQILSDT_FILL_DC' , RC= STATUS); VERIFY_(STATUS)
679651 call MAPL_GetPointer(EXPORT, DQICNDT_FILL, ' DQICNDT_FILL_DC' , RC= STATUS); VERIFY_(STATUS)
680- call FILLQ2ZERO( Q , MASS, DT= MOIST_DT, DQDT= DQVDT_FILL, WARNING_LABEL= " QV After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
681- call FILLQ2ZERO( QLLS , MASS, DT= MOIST_DT, DQDT= DQLLSDT_FILL, WARNING_LABEL= " QLLS After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
682- call FILLQ2ZERO( QLCN , MASS, DT= MOIST_DT, DQDT= DQLCNDT_FILL, WARNING_LABEL= " QLCN After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
683- call FILLQ2ZERO( QILS , MASS, DT= MOIST_DT, DQDT= DQILSDT_FILL, WARNING_LABEL= " QILS After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
684- call FILLQ2ZERO( QICN , MASS, DT= MOIST_DT, DQDT= DQICNDT_FILL, WARNING_LABEL= " QICN After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
652+ if (REPORT_GF_NEGATIVES) then
653+ call FILLQ2ZERO( Q , MASS, DT= MOIST_DT, DQDT= DQVDT_FILL, WARNING_LABEL= " QV After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
654+ call FILLQ2ZERO( QLLS , MASS, DT= MOIST_DT, DQDT= DQLLSDT_FILL, WARNING_LABEL= " QLLS After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
655+ call FILLQ2ZERO( QLCN , MASS, DT= MOIST_DT, DQDT= DQLCNDT_FILL, WARNING_LABEL= " QLCN After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
656+ call FILLQ2ZERO( QILS , MASS, DT= MOIST_DT, DQDT= DQILSDT_FILL, WARNING_LABEL= " QILS After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
657+ call FILLQ2ZERO( QICN , MASS, DT= MOIST_DT, DQDT= DQICNDT_FILL, WARNING_LABEL= " QICN After GF DeepCu" , VM= VMG, RC= STATUS); VERIFY_(STATUS)
658+ else
659+ call FILLQ2ZERO( Q , MASS, DT= MOIST_DT, DQDT= DQVDT_FILL, VM= VMG, RC= STATUS); VERIFY_(STATUS)
660+ call FILLQ2ZERO( QLLS , MASS, DT= MOIST_DT, DQDT= DQLLSDT_FILL, VM= VMG, RC= STATUS); VERIFY_(STATUS)
661+ call FILLQ2ZERO( QLCN , MASS, DT= MOIST_DT, DQDT= DQLCNDT_FILL, VM= VMG, RC= STATUS); VERIFY_(STATUS)
662+ call FILLQ2ZERO( QILS , MASS, DT= MOIST_DT, DQDT= DQILSDT_FILL, VM= VMG, RC= STATUS); VERIFY_(STATUS)
663+ call FILLQ2ZERO( QICN , MASS, DT= MOIST_DT, DQDT= DQICNDT_FILL, VM= VMG, RC= STATUS); VERIFY_(STATUS)
664+ endif
685665
686666 if (DEBUG_TQ_ERRORS) then
687667 do L= 1 ,LM
0 commit comments