From a989c27eb6331ab29881b0da62085ca09fecb59f Mon Sep 17 00:00:00 2001 From: ayhwong Date: Tue, 25 Jun 2019 16:28:52 -0400 Subject: [PATCH] CO2 effect on stomatal conductance according to Franks et a. (2013) equation --- GeosCore/drydep_mod.F | 8 +++++++ GeosCore/input_mod.F | 49 ++++++++++++++++++++++++++++++++++++++- Headers/input_opt_mod.F90 | 11 ++++++++- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/GeosCore/drydep_mod.F b/GeosCore/drydep_mod.F index ac532ae13..c3b9886e7 100644 --- a/GeosCore/drydep_mod.F +++ b/GeosCore/drydep_mod.F @@ -194,6 +194,7 @@ MODULE DRYDEP_MOD ! 16 Mar 2017 - R. Yantosca - Remove references to obsolete vars in Input_Opt ! 24 Aug 2017 - M. Sulprizio- Remove support for GCAP, GEOS-4, GEOS-5 and MERRA ! 01 Dec 2018 - H.P. Lin - Move DEPSAV to State_Chm%DryDepSav +! 25 Jun 2019 - A. Wong - Add CO2 effect on stomatal resistance (RIX) !EOP !------------------------------------------------------------------------------ !BOC @@ -1424,6 +1425,13 @@ SUBROUTINE DEPVEL( am_I_Root, Input_Opt, State_Met, State_Chm, ENDIF RIX = RIX*GFACT*GFACI + + ! Apply scaling factor to RIX when CO2 effect is turned on + ! (ayhwong, 6/25/19) + IF (Input_Opt%CO2_EFFECT) THEN + RIX = RIX*Input_Opt%RS_SCALE + ENDIF + 150 CONTINUE !* !* Compute aerodynamic resistance to lower elements in lower part diff --git a/GeosCore/input_mod.F b/GeosCore/input_mod.F index 2b57207ac..67af5fd43 100644 --- a/GeosCore/input_mod.F +++ b/GeosCore/input_mod.F @@ -3378,6 +3378,8 @@ SUBROUTINE READ_DEPOSITION_MENU( am_I_Root, Input_Opt, RC ) ! 13 Sep 2017 - M. Sulprizio- Remove Input_Opt%USE_OLSON_2001. Olson 2001 is ! now the default. ! 08 Nov 2017 - R. Yantosca - Return error condition to calling program +! 25 Jun 2017 - A. Wong - Add the option of inclduing CO2 effect on drydep + !EOP !------------------------------------------------------------------------------ !BOC @@ -3427,6 +3429,30 @@ SUBROUTINE READ_DEPOSITION_MENU( am_I_Root, Input_Opt, RC ) ENDIF READ( SUBSTRS(1:N), * ) Input_OPt%LWETD + ! Turn on CO2 effect on drydep? + CALL SPLIT_ONE_LINE( SUBSTRS, N, 1, 'CO2_EFFECT', RC ) + IF ( RC /= GC_SUCCESS ) THEN + CALL GC_Error( ErrMsg, RC, ThisLoc ) + RETURN + ENDIF + READ( SUBSTRS(1:N), * ) Input_Opt%CO2_EFFECT + + ! CO2 level at simulation + CALL SPLIT_ONE_LINE( SUBSTRS, N, 1, 'CO2_LEVEL', RC ) + IF ( RC /= GC_SUCCESS ) THEN + CALL GC_Error( ErrMsg, RC, ThisLoc ) + RETURN + ENDIF + READ( SUBSTRS(1:N), * ) Input_Opt%CO2_LEVEL + + ! Reference CO2 level + CALL SPLIT_ONE_LINE( SUBSTRS, N, 1, 'CO2_REF', RC ) + IF ( RC /= GC_SUCCESS ) THEN + CALL GC_Error( ErrMsg, RC, ThisLoc ) + RETURN + ENDIF + READ( SUBSTRS(1:N), * ) Input_Opt%CO2_REF + ! Separator line CALL SPLIT_ONE_LINE( SUBSTRS, N, 1, 'separator', RC ) IF ( RC /= GC_SUCCESS ) THEN @@ -3460,7 +3486,18 @@ SUBROUTINE READ_DEPOSITION_MENU( am_I_Root, Input_Opt, RC ) ELSE Input_Opt%PBL_DRYDEP = .TRUE. ENDIF - + + ! If CO2 effect on RS in turned on, calculate the scaling factor + ! on Rs based on Franks et al. (2013) (ayhwong, 6/25/2019) + + If (Input_Opt%CO2_EFFECT) THEN + Input_Opt%RS_SCALE = Input_Opt%CO2_LEVEL / Input_Opt%CO2_REF * + & (Input_Opt%CO2_LEVEL + 80.0_fp) * + & (Input_Opt%CO2_REF - 40.0_fp) / + & (Input_Opt%CO2_LEVEL - 40.0_fp) / + & (Input_Opt%CO2_REF + 80.0_fp) + ENDIF + !================================================================= ! Print to screen !================================================================= @@ -3473,10 +3510,20 @@ SUBROUTINE READ_DEPOSITION_MENU( am_I_Root, Input_Opt, RC ) & Input_Opt%PBL_DRYDEP WRITE( 6, 100 ) 'Turn on wet deposition? : ', & Input_Opt%LWETD + WRITE( 6, 100 ) 'Turn on CO2 effect? : ', + & Input_Opt%CO2_EFFECT + WRITE( 6, 110 ) 'CO2 level : ', + & Input_Opt%CO2_LEVEL + WRITE( 6, 110 ) 'CO2 reference level : ', + & Input_Opt%CO2_REF + WRITE( 6, 110 ) 'RIX scaling factor : ', + & Input_Opt%RS_SCALE + ENDIF ! FORMAT statements 100 FORMAT( A, L5 ) + 110 FORMAT( A, f6.2 ) END SUBROUTINE READ_DEPOSITION_MENU !EOC diff --git a/Headers/input_opt_mod.F90 b/Headers/input_opt_mod.F90 index 24be9d435..3a7eb9898 100644 --- a/Headers/input_opt_mod.F90 +++ b/Headers/input_opt_mod.F90 @@ -233,7 +233,11 @@ MODULE Input_Opt_Mod LOGICAL :: LDRYD LOGICAL :: LWETD REAL(fp) :: WETD_CONV_SCAL - LOGICAL :: PBL_DRYDEP + LOGICAL :: PBL_DRYDEP + LOGICAL :: CO2_EFFECT + REAL(fp) :: CO2_LEVEL, CO2_REF + REAL(fp) :: RS_SCALE + !---------------------------------------- ! GAMAP MENU fields @@ -704,6 +708,7 @@ SUBROUTINE Set_Input_Opt( am_I_Root, Input_Opt, RC ) ! 07 Nov 2017 - R. Yantosca - Remove LVARTROP; it's not needed ! 08 Mar 2018 - R. Yantosca - Bug fix, remove reference to TINDEX here ! 06 Nov 2018 - R. Yantosca - Add error trapping for allocation statements +! 25 Jun 2019 - A. Wong - Add CO2_LEVEL, CO2_REF, CO2_EFFECT !EOP !------------------------------------------------------------------------------ !BOC @@ -994,6 +999,10 @@ SUBROUTINE Set_Input_Opt( am_I_Root, Input_Opt, RC ) Input_Opt%LWETD = .FALSE. Input_Opt%WETD_CONV_SCAL = 1.0_fp Input_Opt%PBL_DRYDEP = .FALSE. + Input_Opt%CO2_LEVEL = 390.0_fp + Input_Opt%CO2_REF = 390.0_fp + Input_Opt%CO2_EFFECT = .FALSE. + Input_Opt%RS_SCALE = 1.0_fp !---------------------------------------- ! GAMAP_MENU fields