!============================================================================== ! This source code is part of the ! Australian Community Atmosphere Biosphere Land Exchange (CABLE) model. ! This work is licensed under the CABLE Academic User Licence Agreement ! (the "Licence"). ! You may not use this file except in compliance with the Licence. ! A copy of the Licence and registration form can be obtained from ! http://www.cawcr.gov.au/projects/access/cable ! You need to register and read the Licence agreement before use. ! Please contact cable_help@nf.nci.org.au for any questions on ! registration and the Licence. ! ! Unless required by applicable law or agreed to in writing, ! software distributed under the Licence is distributed on an "AS IS" BASIS, ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ! See the Licence for the specific language governing permissions and ! limitations under the Licence. ! ============================================================================== ! ! Purpose: bgcdriver - interface between casacnp and cable ! sumcflux - accumulating carbon fluxes (not required for UM) ! ! Called from: cable_serial for offline version ! Not currently called/available for ACCESS version ! ! Contact: Yingping.Wang@csiro.au ! ! History: Model development by Yingping Wang, coupling to Mk3L by Bernard Pak ! ssoil changed to ssnow ! ! ============================================================================== module sumcflux_mod contains SUBROUTINE sumcflux(ktau, kstart, kend, dels, bgc, canopy, & soil, ssnow, sum_flux, veg, met, casaflux, l_vcmaxFeedbk) USE cable_def_types_mod USE cable_carbon_module USE casadimension USE casaparm USE casavariable IMPLICIT NONE INTEGER, INTENT(IN) :: ktau ! integration step number INTEGER, INTENT(IN) :: kstart ! starting value of ktau INTEGER, INTENT(IN) :: kend ! total # timesteps in run REAL, INTENT(IN) :: dels ! time setp size (s) TYPE (bgc_pool_type), INTENT(INOUT) :: bgc TYPE (canopy_type), INTENT(INOUT) :: canopy TYPE (soil_parameter_type), INTENT(INOUT) :: soil TYPE (soil_snow_type), INTENT(INOUT) :: ssnow TYPE (sum_flux_type), INTENT(INOUT) :: sum_flux TYPE (met_type), INTENT(IN) :: met TYPE (veg_parameter_type), INTENT(INOUT) :: veg TYPE (casa_flux), INTENT(INOUT) :: casaflux LOGICAL, INTENT(IN) :: l_vcmaxFeedbk ! using prognostic Vcmax if(icycle>0) then canopy%frp(:) = (casaflux%crmplant(:,wood)+casaflux%crmplant(:,froot) & +casaflux%crgplant(:))/86400.0 canopy%frs(:) = casaflux%Crsoil(:)/86400.0 canopy%frpw(:)= casaflux%crmplant(:,wood)/86400.0 canopy%frpr(:)= casaflux%crmplant(:,froot)/86400.0 endif if(ktau == kstart) then sum_flux%sumpn = canopy%fpn*dels sum_flux%sumrd = canopy%frday*dels sum_flux%dsumpn = canopy%fpn*dels sum_flux%dsumrd = canopy%frday*dels sum_flux%sumrpw = canopy%frpw*dels sum_flux%sumrpr = canopy%frpr*dels sum_flux%sumrp = canopy%frp*dels sum_flux%dsumrp = canopy%frp*dels ! canopy%frs set in soilcarb sum_flux%sumrs = canopy%frs*dels else sum_flux%sumpn = sum_flux%sumpn + canopy%fpn*dels sum_flux%sumrd = sum_flux%sumrd + canopy%frday*dels sum_flux%dsumpn = sum_flux%dsumpn + canopy%fpn*dels sum_flux%dsumrd = sum_flux%dsumrd + canopy%frday*dels sum_flux%sumrpw = sum_flux%sumrpw + canopy%frpw*dels sum_flux%sumrpr = sum_flux%sumrpr + canopy%frpr*dels sum_flux%sumrp = sum_flux%sumrp + canopy%frp*dels sum_flux%dsumrp = sum_flux%dsumrp + canopy%frp*dels ! canopy%frs set in soilcarb sum_flux%sumrs = sum_flux%sumrs+canopy%frs*dels endif ! Set net ecosystem exchange after adjustments to frs: canopy%fnpp = -1.0* canopy%fpn - canopy%frp IF (icycle <= 1) THEN canopy%fnee = canopy%fpn + canopy%frs + canopy%frp ELSE IF (l_vcmaxFeedbk) THEN canopy%fnee = canopy%fpn + canopy%frs + canopy%frp & + casaflux%clabloss(:)/86400.0 ELSE canopy%fnee = (casaflux%Crsoil-casaflux%cnpp+casaflux%clabloss)/86400.0 ENDIF ENDIF END SUBROUTINE sumcflux End module sumcflux_mod