Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Connect ozone from atmosphere to CTSM #1837

Merged
merged 17 commits into from
Sep 8, 2022
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
! since the o3 directory includes default, and we don't want that for this
! reducedOutput testmod
o3_veg_stress_method = 'stress_falk'
hist_fincl1 += 'O3UPTAKESUN', 'O3UPTAKESHA'
hist_fincl1 += 'O3UPTAKESUN', 'O3UPTAKESHA', 'ATM_O3'
hist_fincl2 += 'O3UPTAKESUN', 'O3UPTAKESHA'
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
o3_veg_stress_method = 'stress_lombardozzi2015'
hist_fincl2 += 'O3UPTAKESUN', 'O3UPTAKESHA'
hist_fincl2 += 'O3UPTAKESUN', 'O3UPTAKESHA', 'ATM_O3'
80 changes: 80 additions & 0 deletions doc/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,4 +1,84 @@
===============================================================
Tag name: ctsm5.1.dev108
Originator(s): adrifoster (Adrianna Foster)
Date: Thu Sep 8 08:22:38 MDT 2022
One-line Summary: Connect ozone from atmosphere

Purpose and description of changes
----------------------------------

Allow atmospheric input of ozone partial pressure (monthly, mol/mol) to CTSM and
use this ozone in the OzoneMod module.

Specific notes: Add ozone to atm2lndType and also add as an output history variable (ATM_O3).
Read in O3 in lnd_import_export. Connect to the OzoneMod module:
in CalcOzoneUptakeOnePoint we now use this input ozone, rather than a static parameter.

Significant changes to scientifically-supported configurations
--------------------------------------------------------------

Does this tag change answers significantly for any of the following physics configurations? No

[ ] clm5_1

[ ] clm5_0

[ ] ctsm5_0-nwp

[ ] clm4_5


Bugs fixed or introduced
------------------------

CTSM issues fixed (include CTSM Issue #):
- Resolves ESCOMP/CTSM#270 (Receive ozone from atmosphere)


Notes of particular relevance for users
---------------------------------------

Caveats for users (e.g., need to interpolate initial conditions): Note that
currently ozone is used as an interpolated monthly variable, and is not yet
downscaled to the sub-daily scale. This will be done in a susequent PR.

Changes to the datasets (e.g., parameter, surface or initial files): New ozone
input files used in DATM mode to drive OzoneMod

Testing summary:
----------------

regular tests (aux_clm: https://github.com/ESCOMP/CTSM/wiki/System-Testing-Guide#pre-merge-system-testing):

All pass with only FIELDLIST diffs except for O3 tests, which have BASELINE DIFFs and NLCOMP fails.
This makes sense because we are using different ozone values to drive the OzoneMod:

ERP_D_Ld5_P48x1.f10_f10_mg37.I2000Clm50Sp.izumi_nag.clm-o3lombardozzi2015
ERP_P72x2_Ly3.f10_f10_mg37.I2000Clm50BgcCrop.cheyenne_intel.clm-irrig_o3falk_reduceOutput


cheyenne ---- OK
izumi ------- PASS


Answer changes
--------------

Changes answers relative to baseline: Yes

Summarize any changes to answers, i.e.,
- what code configurations: when o3_veg_stress_method = 'stress_falk' or 'stress_lombardozzi2015' in user_nl_clm
- what platforms/compilers: all
- nature of change: larger than roundoff

Other details
-------------

Pull Requests that document the changes (include PR ids):
https://github.com/ESCOMP/ctsm/pull/1837

===============================================================
===============================================================
Tag name: ctsm5.1.dev107
Originator(s): adrifoster (Adrianna Foster)
Date: Wed Sep 7 14:40:33 MDT 2022
Expand Down
1 change: 1 addition & 0 deletions doc/ChangeSum
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
Tag Who Date Summary
============================================================================================================================
ctsm5.1.dev108 afoster 09/08/2022 Connect ozone from atmosphere
ctsm5.1.dev107 afoster 09/07/2022 Update Externals
ctsm5.1.dev106 multiple 08/04/2022 Reuse some files generated in initialization when rerunning
ctsm5.1.dev105 slevis 07/26/2022 make interfaces more similar between fsurdat_modifier and subset_data tools
Expand Down
3 changes: 2 additions & 1 deletion src/biogeophys/CanopyFluxesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1598,7 +1598,8 @@ subroutine CanopyFluxes(bounds, num_exposedvegp, filter_exposedvegp,
rssha = photosyns_inst%rssha_patch(bounds%begp:bounds%endp), &
rb = frictionvel_inst%rb1_patch(bounds%begp:bounds%endp), &
ram = frictionvel_inst%ram1_patch(bounds%begp:bounds%endp), &
tlai = canopystate_inst%tlai_patch(bounds%begp:bounds%endp))
tlai = canopystate_inst%tlai_patch(bounds%begp:bounds%endp), &
forc_o3 = atm2lnd_inst%forc_o3_grc(bounds%begg:bounds%endg))

!---------------------------------------------------------
!update Vc,max and Jmax by LUNA model
Expand Down
17 changes: 9 additions & 8 deletions src/biogeophys/OzoneBaseMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ subroutine Init_interface(this, bounds, o3_veg_stress_method)
character(len=*), intent(in) :: o3_veg_stress_method

end subroutine Init_interface

subroutine Restart_interface(this, bounds, ncid, flag)
use decompMod , only : bounds_type
use ncdio_pio , only : file_desc_t
use ncdio_pio , only : file_desc_t
import :: ozone_base_type

class(ozone_base_type) :: this
Expand All @@ -64,7 +64,7 @@ subroutine Restart_interface(this, bounds, ncid, flag)
end subroutine Restart_interface

subroutine CalcOzoneUptake_interface(this, bounds, num_exposedvegp, filter_exposedvegp, &
forc_pbot, forc_th, rssun, rssha, rb, ram, tlai)
forc_pbot, forc_th, rssun, rssha, rb, ram, tlai, forc_o3)
use decompMod , only : bounds_type
use shr_kind_mod , only : r8 => shr_kind_r8
import :: ozone_base_type
Expand All @@ -80,6 +80,7 @@ subroutine CalcOzoneUptake_interface(this, bounds, num_exposedvegp, filter_expos
real(r8) , intent(in) :: rb( bounds%begp: ) ! boundary layer resistance (s/m)
real(r8) , intent(in) :: ram( bounds%begp: ) ! aerodynamical resistance (s/m)
real(r8) , intent(in) :: tlai( bounds%begp: ) ! one-sided leaf area index, no burying by snow
real(r8) , intent(in) :: forc_o3( bounds%begg: ) ! atmospheric ozone (mol/mol)
end subroutine CalcOzoneUptake_interface

subroutine CalcOzoneStress_interface(this, bounds, &
Expand All @@ -96,9 +97,9 @@ subroutine CalcOzoneStress_interface(this, bounds, &
integer , intent(in) :: filter_noexposedvegp(:) ! patch filter for veg where frac_veg_nosno is 0
end subroutine CalcOzoneStress_interface
end interface

contains

!-----------------------------------------------------------------------
subroutine InitAllocateBase(this, bounds)
!
Expand All @@ -114,7 +115,7 @@ subroutine InitAllocateBase(this, bounds)
!
! !LOCAL VARIABLES:
integer :: begp, endp

character(len=*), parameter :: subname = 'InitAllocateBase'
!-----------------------------------------------------------------------

Expand All @@ -127,7 +128,7 @@ subroutine InitAllocateBase(this, bounds)
allocate(this%o3coefgsun_patch(begp:endp)) ; this%o3coefgsun_patch(:) = nan
allocate(this%o3coefjmaxsha_patch(begp:endp)) ; this%o3coefjmaxsha_patch(:) = nan
allocate(this%o3coefjmaxsun_patch(begp:endp)) ; this%o3coefjmaxsun_patch(:) = nan


end subroutine InitAllocateBase

Expand All @@ -148,7 +149,7 @@ subroutine InitColdBase(this, bounds)
!
! !LOCAL VARIABLES:
integer :: begp, endp

character(len=*), parameter :: subname = 'InitColdBase'
!-----------------------------------------------------------------------

Expand Down
Loading