diff --git a/src/offline/cable_mpicommon.F90 b/src/offline/cable_mpicommon.F90 index 15e1c70d2..c4088c43b 100644 --- a/src/offline/cable_mpicommon.F90 +++ b/src/offline/cable_mpicommon.F90 @@ -99,7 +99,7 @@ MODULE cable_mpicommon ! MPI: number of final casa result matrices and vectors to receive ! by the master for casa_poolout and casa_fluxout INTEGER, PARAMETER :: ncasa_mat = 37 ! add three more wood product variables - INTEGER, PARAMETER :: ncasa_vec = 58 ! vh changed on 5-feb-2016 for adding sapwood area and frac_sapwood + INTEGER, PARAMETER :: ncasa_vec = 66 ! MPI: number of fields included in restart_t type for data ! that is returned only for creating a restart file at the end of the run ! MPI: gol124: canopy%rwater removed when Bernard ported to CABLE_r491 diff --git a/src/offline/cable_mpimaster.F90 b/src/offline/cable_mpimaster.F90 index 00be9085b..3d0683ab7 100644 --- a/src/offline/cable_mpimaster.F90 +++ b/src/offline/cable_mpimaster.F90 @@ -248,7 +248,9 @@ SUBROUTINE mpidrv_master (comm, trunk_sumbal, dels, koffset, kend, PLUME, CRU) ctime = 0, & ! day count for casacnp YYYY, & ! LOY, & ! Length of Year - maxdiff(2) ! location of maximum in convergence test + maxdiff(2), & ! location of maximum in convergence test + count_sum_casa ! number of time steps over which casa pools & + !and fluxes are aggregated (for output) CHARACTER :: dum*9, str1*9, str2*9, str3*9 ! dummy char for fileName generation @@ -602,8 +604,8 @@ SUBROUTINE mpidrv_master (comm, trunk_sumbal, dels, koffset, kend, PLUME, CRU) CALL master_restart_types (comm, canopy, air, bgc) END IF - ! CALL zero_sum_casa(sum_casapool, sum_casaflux) - ! count_sum_casa = 0 + CALL zero_sum_casa(sum_casapool, sum_casaflux) + count_sum_casa = 0 ! CALL master_sumcasa_types(comm, sum_casapool, sum_casaflux) IF( icycle>0 .AND. spincasa) THEN @@ -766,6 +768,13 @@ SUBROUTINE mpidrv_master (comm, trunk_sumbal, dels, koffset, kend, PLUME, CRU) ! receive casa update from worker CALL master_receive (ocomm, oktau, casa_ts) + IF(MOD((oktau-kstart+1),ktauday)==0) THEN + ! update time-aggregates of casa pools and fluxes + CALL update_sum_casa(sum_casapool, sum_casaflux, casapool, casaflux, & + & .TRUE. , .FALSE., 1) + count_sum_casa = count_sum_casa + 1 + END IF + CALL MPI_Waitall (wnp, recv_req, recv_stats, ierr) ! receive casa dump requirements from worker IF ( ((.NOT.spinup).OR.(spinup.AND.spinConv)) .AND. & @@ -835,11 +844,12 @@ SUBROUTINE mpidrv_master (comm, trunk_sumbal, dels, koffset, kend, PLUME, CRU) IF ( IS_CASA_TIME("write", yyyy, oktau, kstart, & koffset, kend, ktauday, logn) ) THEN ctime = ctime +1 - - - CALL WRITE_CASA_OUTPUT_NC (veg, casamet, casapool, casabal, casaflux, & - CASAONLY, ctime, & - ( ktau.EQ.kend .AND. YYYY .EQ.cable_user%YearEnd ) ) + CALL update_sum_casa(sum_casapool, sum_casaflux, casapool, casaflux, & + .FALSE. , .TRUE. , count_sum_casa) + CALL WRITE_CASA_OUTPUT_NC (veg, casamet, sum_casapool, casabal, sum_casaflux, & + CASAONLY, ctime, ( oktau == kend .AND. YYYY == cable_user%YearEnd ) ) + count_sum_casa = 0 + CALL zero_sum_casa(sum_casapool, sum_casaflux) ENDIF ENDIF @@ -952,6 +962,13 @@ SUBROUTINE mpidrv_master (comm, trunk_sumbal, dels, koffset, kend, PLUME, CRU) CALL master_receive (ocomm, oktau, casa_ts) + IF(MOD((oktau-kstart+1),ktauday)==0) THEN + ! update time-aggregates of casa pools and fluxes + CALL update_sum_casa(sum_casapool, sum_casaflux, casapool, casaflux, & + & .TRUE. , .FALSE., 1) + count_sum_casa = count_sum_casa + 1 + END IF + IF ( ((.NOT.spinup).OR.(spinup.AND.spinConv)) .AND. & ( IS_CASA_TIME("dwrit", yyyy, oktau, kstart, & koffset, kend, ktauday, logn) ) ) THEN @@ -1024,9 +1041,12 @@ SUBROUTINE mpidrv_master (comm, trunk_sumbal, dels, koffset, kend, PLUME, CRU) IF((.NOT.spinup).OR.(spinup.AND.spinConv)) THEN IF(icycle >0) THEN ctime = ctime +1 - CALL WRITE_CASA_OUTPUT_NC (veg, casamet, casapool, casabal, casaflux, & - CASAONLY, ctime, ( ktau.EQ.kend .AND. YYYY .EQ. & - cable_user%YearEnd ) ) + CALL update_sum_casa(sum_casapool, sum_casaflux, casapool, casaflux, & + .FALSE. , .TRUE. , count_sum_casa) + CALL WRITE_CASA_OUTPUT_NC (veg, casamet, sum_casapool, casabal, sum_casaflux, & + CASAONLY, ctime, ( oktau == kend .AND. YYYY == cable_user%YearEnd ) ) + count_sum_casa = 0 + CALL zero_sum_casa(sum_casapool, sum_casaflux) IF ( cable_user%CALL_POP ) THEN ! CALL master_receive_pop(POP, ocomm) @@ -6656,6 +6676,38 @@ SUBROUTINE master_casa_types (comm, casapool, casaflux, & CALL MPI_Get_address (casaflux%Cplant_turnover_resource_limitation(off), displs(bidx), ierr) blocks(bidx) = r2len + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Pupland(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Plittermin(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Psmin(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Psimm(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%kplab(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%kpsorb(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%kpocc(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%FluxCtoco2(off), displs(bidx), ierr) + blocks(bidx) = r2len + types(last2d+1:bidx) = MPI_BYTE ! MPI: sanity check diff --git a/src/offline/cable_mpiworker.F90 b/src/offline/cable_mpiworker.F90 index 030f62af1..15dc780c2 100644 --- a/src/offline/cable_mpiworker.F90 +++ b/src/offline/cable_mpiworker.F90 @@ -6055,6 +6055,38 @@ SUBROUTINE worker_casa_type (comm, casapool,casaflux, & CALL MPI_Get_address (casaflux%Cplant_turnover_resource_limitation(off), displs(bidx), ierr) blocks(bidx) = r2len + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Pupland(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Plittermin(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Psmin(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%Psimm(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%kplab(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%kpsorb(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%kpocc(off), displs(bidx), ierr) + blocks(bidx) = r2len + + bidx = bidx + 1 + CALL MPI_Get_address (casaflux%FluxCtoco2(off), displs(bidx), ierr) + blocks(bidx) = r2len + ! MPI: sanity check IF (bidx /= ntyp) THEN WRITE (*,*) 'worker: invalid number of casa fields, fix it!' diff --git a/src/science/casa-cnp/casa_phenology.F90 b/src/science/casa-cnp/casa_phenology.F90 index 492c87746..9db9cfef5 100644 --- a/src/science/casa-cnp/casa_phenology.F90 +++ b/src/science/casa-cnp/casa_phenology.F90 @@ -46,21 +46,24 @@ MODULE phenvariable CONTAINS SUBROUTINE alloc_phenvariable(phen,arraysize) + !* Allocate phen derived type instance. + ! Allocated arrays are initialised to zero. - IMPLICIT NONE TYPE(phen_variable), INTENT(INOUT) :: phen - INTEGER, INTENT(IN) :: arraysize + INTEGER, INTENT(IN ) :: arraysize - ALLOCATE(phen%Tkshed(mvtype)) - ALLOCATE(phen%phase(arraysize), & - phen%doyphase(arraysize,mphase)) - ALLOCATE(phen%phen(arraysize), & - phen%aphen(arraysize), & - phen%phasespin(arraysize,mdyear), & - phen%doyphasespin_1(arraysize,mdyear), & - phen%doyphasespin_2(arraysize,mdyear), & - phen%doyphasespin_3(arraysize,mdyear), & - phen%doyphasespin_4(arraysize,mdyear)) + ALLOCATE(phen%Tkshed(mvtype), source=0.0_r_2) + ALLOCATE(phen%phen(arraysize), phen%aphen(arraysize), source=0.0) + ALLOCATE( & + phen%phase(arraysize), & + phen%doyphase(arraysize,mphase), & + phen%phasespin(arraysize,mdyear), & + phen%doyphasespin_1(arraysize,mdyear), & + phen%doyphasespin_2(arraysize,mdyear), & + phen%doyphasespin_3(arraysize,mdyear), & + phen%doyphasespin_4(arraysize,mdyear), & + source=0 & + ) END SUBROUTINE alloc_phenvariable END MODULE phenvariable diff --git a/src/science/casa-cnp/casa_variable.F90 b/src/science/casa-cnp/casa_variable.F90 index c26c3afa9..7ea6d9558 100644 --- a/src/science/casa-cnp/casa_variable.F90 +++ b/src/science/casa-cnp/casa_variable.F90 @@ -295,281 +295,281 @@ MODULE casavariable CONTAINS - SUBROUTINE alloc_casavariable(casabiome,casapool,casaflux, & - casamet,casabal,arraysize) - - USE casaparm, ONLY : leaf - IMPLICIT NONE - TYPE (casa_biome) , INTENT(INOUT) :: casabiome - TYPE (casa_pool) , INTENT(INOUT) :: casapool - TYPE (casa_flux) , INTENT(INOUT) :: casaflux - TYPE (casa_met) , INTENT(INOUT) :: casamet + SUBROUTINE alloc_casavariable(casabiome,casapool,casaflux,casamet,casabal,arraysize) + !* Allocate casabiome, casapool, casaflux, casamet and casabal derived type instances. + ! Allocated arrays are initialised to zero. + + TYPE (casa_biome), INTENT(INOUT) :: casabiome + TYPE (casa_pool), INTENT(INOUT) :: casapool + TYPE (casa_flux), INTENT(INOUT) :: casaflux + TYPE (casa_met), INTENT(INOUT) :: casamet TYPE (casa_balance), INTENT(INOUT) :: casabal - INTEGER, INTENT(IN) :: arraysize - - ALLOCATE(casabiome%ivt2(mvtype), & - casabiome%xkleafcoldmax(mvtype), & - casabiome%xkleafcoldexp(mvtype), & - casabiome%xkleafdrymax(mvtype), & - casabiome%xkleafdryexp(mvtype), & - casabiome%glaimax(mvtype), & - casabiome%glaimin(mvtype), & - casabiome%sla(mvtype), & - casabiome%ratiofrootleaf(mvtype), & - casabiome%kroot(mvtype), & - casabiome%krootlen(mvtype), & - casabiome%rootdepth(mvtype), & - casabiome%kuptake(mvtype), & - casabiome%kminN(mvtype), & - casabiome%KuplabP(mvtype), & - casabiome%kclabrate(mvtype), & - casabiome%xnpmax(mvtype), & - casabiome%q10soil(mvtype), & - casabiome%xkoptlitter(mvtype), & - casabiome%xkoptsoil(mvtype), & - casabiome%xkplab(mso), & - casabiome%xkpsorb(mso), & - casabiome%xkpocc(mso), & - casabiome%prodptase(mvtype), & - casabiome%costnpup(mvtype), & - casabiome%maxfinelitter(mvtype), & - casabiome%maxcwd(mvtype), & - casabiome%nintercept(mvtype), & - casabiome%nslope(mvtype), & - casabiome%plantrate(mvtype,mplant), & - casabiome%rmplant(mvtype,mplant), & - casabiome%fracnpptoP(mvtype,mplant), & - casabiome%fraclignin(mvtype,mplant), & - casabiome%fraclabile(mvtype,mplant), & - casabiome%ratioNCplantmin(mvtype,mplant), & - casabiome%ratioNCplantmax(mvtype,mplant), & - casabiome%ratioNPplantmin(mvtype,mplant), & - casabiome%ratioNPplantmax(mvtype,mplant), & - casabiome%fracLigninplant(mvtype,mplant), & - casabiome%ftransNPtoL(mvtype,mplant), & - casabiome%ftransPPtoL(mvtype,mplant), & - casabiome%litterrate(mvtype,mlitter), & - casabiome%soilrate(mvtype,msoil), & - ! casabiome%ratioPcplantmax(mvtype,leaf), & - ! casabiome%ratioPcplantmin(mvtype,leaf) & - ! vh_js ! - casabiome%ratioPcplantmax(mvtype,mplant), & - casabiome%ratioPcplantmin(mvtype,mplant) & - ) - - ALLOCATE(casapool%Clabile(arraysize), & - casapool%dClabiledt(arraysize), & - casapool%Cplant(arraysize,mplant), & - casapool%Nplant(arraysize,mplant), & - casapool%Pplant(arraysize,mplant), & - casapool%dCplantdt(arraysize,mplant), & - casapool%dNplantdt(arraysize,mplant), & - casapool%dPplantdt(arraysize,mplant), & - casapool%ratioNCplant(arraysize,mplant), & - casapool%ratioNPplant(arraysize,mplant), & - casapool%Nsoilmin(arraysize), & - casapool%Psoillab(arraysize), & - casapool%Psoilsorb(arraysize), & - casapool%Psoilocc(arraysize), & - casapool%dNsoilmindt(arraysize), & - casapool%dPsoillabdt(arraysize), & - casapool%dPsoilsorbdt(arraysize), & - casapool%dPsoiloccdt(arraysize), & - casapool%Clitter(arraysize,mlitter), & - casapool%Nlitter(arraysize,mlitter), & - casapool%Plitter(arraysize,mlitter), & - casapool%dClitterdt(arraysize,mlitter), & - casapool%dNlitterdt(arraysize,mlitter), & - casapool%dPlitterdt(arraysize,mlitter), & - casapool%ratioNClitter(arraysize,mlitter), & - casapool%ratioNPlitter(arraysize,mlitter), & - casapool%Csoil(arraysize,msoil), & - casapool%Nsoil(arraysize,msoil), & - casapool%Psoil(arraysize,msoil), & - casapool%dCsoildt(arraysize,msoil), & - casapool%dNsoildt(arraysize,msoil), & - casapool%dPsoildt(arraysize,msoil), & - casapool%ratioNCsoil(arraysize,msoil), & - casapool%ratioNPsoil(arraysize,msoil), & - casapool%ratioNCsoilnew(arraysize,msoil), & - casapool%ratioNCsoilmin(arraysize,msoil), & - casapool%ratioNCsoilmax(arraysize,msoil), & - casapool%ratioPcsoil(arraysize,msoil), & - casapool%ratioPcplant(arraysize,mplant), & - casapool%ratioPclitter(arraysize,mlitter), & - casapool%Ctot_0(arraysize), & - casapool%Ctot(arraysize), & - casapool%cwoodprod(arraysize,mwood), & - casapool%nwoodprod(arraysize,mwood), & - casapool%pwoodprod(arraysize,mwood)) - - ALLOCATE(casaflux%Cgpp(arraysize), & - casaflux%Cnpp(arraysize), & - casaflux%Crp(arraysize), & - casaflux%Crgplant(arraysize), & - casaflux%Nminfix(arraysize), & - casaflux%Nminuptake(arraysize), & - casaflux%Plabuptake(arraysize), & - casaflux%Clabloss(arraysize), & - casaflux%fracClabile(arraysize), & - casaflux%fracCalloc(arraysize,mplant), & - casaflux%fracNalloc(arraysize,mplant), & - casaflux%fracPalloc(arraysize,mplant), & - casaflux%kplant(arraysize,mplant), & - casaflux%Crmplant(arraysize,mplant), & - casaflux%fromPtoL(arraysize,mlitter,mplant), & - casaflux%Cnep(arraysize), & - casaflux%Crsoil(arraysize), & - casaflux%Nmindep(arraysize), & - casaflux%Nminloss(arraysize), & - casaflux%Nminleach(arraysize), & - casaflux%Nupland(arraysize), & - casaflux%Nlittermin(arraysize), & - casaflux%Nsmin(arraysize), & - casaflux%Nsimm(arraysize), & - casaflux%Nsnet(arraysize), & - casaflux%fNminloss(arraysize), & - casaflux%fNminleach(arraysize), & - casaflux%Pdep(arraysize), & - casaflux%Pwea(arraysize), & - casaflux%Pleach(arraysize), & - casaflux%Ploss(arraysize), & - casaflux%Pupland(arraysize), & - casaflux%Plittermin(arraysize), & - casaflux%Psmin(arraysize), & - casaflux%Psimm(arraysize), & - casaflux%Psnet(arraysize), & - casaflux%fPleach(arraysize), & - casaflux%kplab(arraysize), & - casaflux%kpsorb(arraysize), & - casaflux%kpocc(arraysize), & - casaflux%kmlabP(arraysize), & - casaflux%Psorbmax(arraysize), & - casaflux%klitter(arraysize,mlitter), & - casaflux%ksoil(arraysize,msoil), & - casaflux%fromLtoS(arraysize,msoil,mlitter), & - casaflux%fromStoS(arraysize,msoil,msoil), & - casaflux%fromLtoCO2(arraysize,mlitter), & - casaflux%fromStoCO2(arraysize,msoil), & - casaflux%stemnpp(arraysize), & - casaflux%frac_sapwood(arraysize), & - casaflux%sapwood_area(arraysize), & - casaflux%Cplant_turnover(arraysize,mplant) , & - casaflux%Cplant_turnover_disturbance(arraysize) , & - casaflux%Cplant_turnover_crowding(arraysize) , & - casaflux%Cplant_turnover_resource_limitation(arraysize)) - - ALLOCATE(casaflux%FluxCtolitter(arraysize,mlitter), & - casaflux%FluxNtolitter(arraysize,mlitter), & - casaflux%FluxPtolitter(arraysize,mlitter)) - - ALLOCATE(casaflux%FluxCtosoil(arraysize,msoil), & - casaflux%FluxNtosoil(arraysize,msoil), & - casaflux%FluxPtosoil(arraysize,msoil)) - - ALLOCATE(casaflux%FluxCtohwp(arraysize), & - casaflux%FluxNtohwp(arraysize), & - casaflux%FluxPtohwp(arraysize)) - - ALLOCATE(casaflux%FluxCtoclear(arraysize), & - casaflux%FluxNtoclear(arraysize), & - casaflux%FluxPtoclear(arraysize)) - - ALLOCATE(casaflux%CtransferLUC(arraysize)) - - ALLOCATE(casaflux%FluxCtoco2(arraysize)) - - ALLOCATE(casaflux%meangpp(arraysize)) - ALLOCATE(casaflux%meanrleaf(arraysize)) + INTEGER, INTENT(IN ) :: arraysize + + ALLOCATE(casabiome%ivt2(mvtype), source=0) + ALLOCATE( & + casabiome%xkleafcoldmax(mvtype), & + casabiome%xkleafcoldexp(mvtype), & + casabiome%xkleafdrymax(mvtype), & + casabiome%xkleafdryexp(mvtype), & + casabiome%glaimax(mvtype), & + casabiome%glaimin(mvtype), & + casabiome%sla(mvtype), & + casabiome%ratiofrootleaf(mvtype), & + casabiome%kroot(mvtype), & + casabiome%krootlen(mvtype), & + casabiome%rootdepth(mvtype), & + casabiome%kuptake(mvtype), & + casabiome%kminN(mvtype), & + casabiome%KuplabP(mvtype), & + casabiome%kclabrate(mvtype), & + casabiome%xnpmax(mvtype), & + casabiome%q10soil(mvtype), & + casabiome%xkoptlitter(mvtype), & + casabiome%xkoptsoil(mvtype), & + casabiome%xkplab(mso), & + casabiome%xkpsorb(mso), & + casabiome%xkpocc(mso), & + casabiome%prodptase(mvtype), & + casabiome%costnpup(mvtype), & + casabiome%maxfinelitter(mvtype), & + casabiome%maxcwd(mvtype), & + casabiome%nintercept(mvtype), & + casabiome%nslope(mvtype), & + casabiome%plantrate(mvtype,mplant), & + casabiome%rmplant(mvtype,mplant), & + casabiome%fracnpptoP(mvtype,mplant), & + casabiome%fraclignin(mvtype,mplant), & + casabiome%fraclabile(mvtype,mplant), & + casabiome%ratioNCplantmin(mvtype,mplant), & + casabiome%ratioNCplantmax(mvtype,mplant), & + casabiome%ratioNPplantmin(mvtype,mplant), & + casabiome%ratioNPplantmax(mvtype,mplant), & + casabiome%fracLigninplant(mvtype,mplant), & + casabiome%ftransNPtoL(mvtype,mplant), & + casabiome%ftransPPtoL(mvtype,mplant), & + casabiome%litterrate(mvtype,mlitter), & + casabiome%soilrate(mvtype,msoil), & + casabiome%ratioPcplantmax(mvtype,mplant), & + casabiome%ratioPcplantmin(mvtype,mplant), & + source=0.0_r_2 & + ) + + ALLOCATE( & + casapool%Clabile(arraysize), & + casapool%dClabiledt(arraysize), & + casapool%Cplant(arraysize,mplant), & + casapool%Nplant(arraysize,mplant), & + casapool%Pplant(arraysize,mplant), & + casapool%dCplantdt(arraysize,mplant), & + casapool%dNplantdt(arraysize,mplant), & + casapool%dPplantdt(arraysize,mplant), & + casapool%ratioNCplant(arraysize,mplant), & + casapool%ratioNPplant(arraysize,mplant), & + casapool%Nsoilmin(arraysize), & + casapool%Psoillab(arraysize), & + casapool%Psoilsorb(arraysize), & + casapool%Psoilocc(arraysize), & + casapool%dNsoilmindt(arraysize), & + casapool%dPsoillabdt(arraysize), & + casapool%dPsoilsorbdt(arraysize), & + casapool%dPsoiloccdt(arraysize), & + casapool%Clitter(arraysize,mlitter), & + casapool%Nlitter(arraysize,mlitter), & + casapool%Plitter(arraysize,mlitter), & + casapool%dClitterdt(arraysize,mlitter), & + casapool%dNlitterdt(arraysize,mlitter), & + casapool%dPlitterdt(arraysize,mlitter), & + casapool%ratioNClitter(arraysize,mlitter), & + casapool%ratioNPlitter(arraysize,mlitter), & + casapool%Csoil(arraysize,msoil), & + casapool%Nsoil(arraysize,msoil), & + casapool%Psoil(arraysize,msoil), & + casapool%dCsoildt(arraysize,msoil), & + casapool%dNsoildt(arraysize,msoil), & + casapool%dPsoildt(arraysize,msoil), & + casapool%ratioNCsoil(arraysize,msoil), & + casapool%ratioNPsoil(arraysize,msoil), & + casapool%ratioNCsoilnew(arraysize,msoil), & + casapool%ratioNCsoilmin(arraysize,msoil), & + casapool%ratioNCsoilmax(arraysize,msoil), & + casapool%ratioPcsoil(arraysize,msoil), & + casapool%ratioPcplant(arraysize,mplant), & + casapool%ratioPclitter(arraysize,mlitter), & + casapool%Ctot_0(arraysize), & + casapool%Ctot(arraysize), & + casapool%cwoodprod(arraysize,mwood), & + casapool%nwoodprod(arraysize,mwood), & + casapool%pwoodprod(arraysize,mwood), & + source=0.0_r_2 & + ) + + ALLOCATE( & + casaflux%Cgpp(arraysize), & + casaflux%Cnpp(arraysize), & + casaflux%Crp(arraysize), & + casaflux%Crgplant(arraysize), & + casaflux%Nminfix(arraysize), & + casaflux%Nminuptake(arraysize), & + casaflux%Plabuptake(arraysize), & + casaflux%Clabloss(arraysize), & + casaflux%fracClabile(arraysize), & + casaflux%fracCalloc(arraysize,mplant), & + casaflux%fracNalloc(arraysize,mplant), & + casaflux%fracPalloc(arraysize,mplant), & + casaflux%kplant(arraysize,mplant), & + casaflux%Crmplant(arraysize,mplant), & + casaflux%fromPtoL(arraysize,mlitter,mplant), & + casaflux%Cnep(arraysize), & + casaflux%Crsoil(arraysize), & + casaflux%Nmindep(arraysize), & + casaflux%Nminloss(arraysize), & + casaflux%Nminleach(arraysize), & + casaflux%Nupland(arraysize), & + casaflux%Nlittermin(arraysize), & + casaflux%Nsmin(arraysize), & + casaflux%Nsimm(arraysize), & + casaflux%Nsnet(arraysize), & + casaflux%fNminloss(arraysize), & + casaflux%fNminleach(arraysize), & + casaflux%Pdep(arraysize), & + casaflux%Pwea(arraysize), & + casaflux%Pleach(arraysize), & + casaflux%Ploss(arraysize), & + casaflux%Pupland(arraysize), & + casaflux%Plittermin(arraysize), & + casaflux%Psmin(arraysize), & + casaflux%Psimm(arraysize), & + casaflux%Psnet(arraysize), & + casaflux%fPleach(arraysize), & + casaflux%kplab(arraysize), & + casaflux%kpsorb(arraysize), & + casaflux%kpocc(arraysize), & + casaflux%kmlabP(arraysize), & + casaflux%Psorbmax(arraysize), & + casaflux%klitter(arraysize,mlitter), & + casaflux%ksoil(arraysize,msoil), & + casaflux%fromLtoS(arraysize,msoil,mlitter), & + casaflux%fromStoS(arraysize,msoil,msoil), & + casaflux%fromLtoCO2(arraysize,mlitter), & + casaflux%fromStoCO2(arraysize,msoil), & + casaflux%stemnpp(arraysize), & + casaflux%frac_sapwood(arraysize), & + casaflux%sapwood_area(arraysize), & + casaflux%Cplant_turnover(arraysize,mplant), & + casaflux%Cplant_turnover_disturbance(arraysize), & + casaflux%Cplant_turnover_crowding(arraysize), & + casaflux%Cplant_turnover_resource_limitation(arraysize), & + casaflux%FluxCtolitter(arraysize,mlitter), & + casaflux%FluxNtolitter(arraysize,mlitter), & + casaflux%FluxPtolitter(arraysize,mlitter), & + casaflux%FluxCtosoil(arraysize,msoil), & + casaflux%FluxNtosoil(arraysize,msoil), & + casaflux%FluxPtosoil(arraysize,msoil), & + casaflux%FluxCtohwp(arraysize), & + casaflux%FluxNtohwp(arraysize), & + casaflux%FluxPtohwp(arraysize), & + casaflux%FluxCtoclear(arraysize), & + casaflux%FluxNtoclear(arraysize), & + casaflux%FluxPtoclear(arraysize), & + casaflux%CtransferLUC(arraysize), & + casaflux%FluxCtoco2(arraysize), & + casaflux%meangpp(arraysize), & + casaflux%meanrleaf(arraysize), & + source=0.0_r_2 & + ) - ALLOCATE(casamet%glai(arraysize), & - casamet%lnonwood(arraysize), & - casamet%Tairk(arraysize), & - casamet%precip(arraysize), & - casamet%tsoilavg(arraysize), & - casamet%moistavg(arraysize), & - casamet%btran(arraysize), & - casamet%Tsoil(arraysize,ms), & - casamet%moist(arraysize,ms), & - casamet%iveg2(arraysize), & - casamet%ijgcm(arraysize), & - casamet%isorder(arraysize), & - casamet%lat(arraysize), & - casamet%lon(arraysize), & - casamet%areacell(arraysize), & - - casamet%Tairkspin(arraysize,mdyear), & - casamet%cgppspin(arraysize,mdyear), & - casamet%crmplantspin_1(arraysize,mdyear),& - casamet%crmplantspin_2(arraysize,mdyear),& - casamet%crmplantspin_3(arraysize,mdyear),& - casamet%Tsoilspin_1(arraysize,mdyear), & - casamet%Tsoilspin_2(arraysize,mdyear), & - casamet%Tsoilspin_3(arraysize,mdyear), & - casamet%Tsoilspin_4(arraysize,mdyear), & - casamet%Tsoilspin_5(arraysize,mdyear), & - casamet%Tsoilspin_6(arraysize,mdyear), & - casamet%moistspin_1(arraysize,mdyear), & - casamet%moistspin_2(arraysize,mdyear), & - casamet%moistspin_3(arraysize,mdyear), & - casamet%moistspin_4(arraysize,mdyear), & - casamet%moistspin_5(arraysize,mdyear), & - casamet%moistspin_6(arraysize,mdyear), & - casamet%mtempspin(arraysize,mdyear)) - - ALLOCATE(casabal%FCgppyear(arraysize), & - casabal%FCnppyear(arraysize), & - casabal%FCrpyear(arraysize), & - casabal%FCrmleafyear(arraysize), & - casabal%FCrmwoodyear(arraysize), & - casabal%FCrmrootyear(arraysize), & - casabal%FCrgrowyear(arraysize), & - casabal%FCrsyear(arraysize), & - casabal%FCneeyear(arraysize), & - casabal%FNdepyear(arraysize), & - casabal%FNfixyear(arraysize), & - casabal%FNsnetyear(arraysize), & - casabal%FNupyear(arraysize), & - casabal%FNleachyear(arraysize), & - casabal%FNlossyear(arraysize), & - casabal%FPweayear(arraysize), & - casabal%FPdustyear(arraysize), & - casabal%FPsnetyear(arraysize), & - casabal%FPupyear(arraysize), & - casabal%FPleachyear(arraysize), & - casabal%FPlossyear(arraysize), & - casabal%dCdtyear(arraysize), & - casabal%LAImax(arraysize), & - casabal%Cleafmean(arraysize), & - casabal%Crootmean(arraysize) ) - - - ALLOCATE(casabal%glaimon(arraysize,12), & - casabal%glaimonx(arraysize,12)) - - ALLOCATE(casabal%cplantlast(arraysize,mplant), & - casabal%nplantlast(arraysize,mplant), & - casabal%pplantlast(arraysize,mplant)) - - ALLOCATE(casabal%clitterlast(arraysize,mlitter), & - casabal%nlitterlast(arraysize,mlitter), & - casabal%plitterlast(arraysize,mlitter)) - - ALLOCATE(casabal%csoillast(arraysize,msoil), & - casabal%nsoillast(arraysize,msoil), & - casabal%psoillast(arraysize,msoil)) - - ALLOCATE(casabal%nsoilminlast(arraysize), & - casabal%psoillablast(arraysize), & - casabal%psoilsorblast(arraysize), & - casabal%psoilocclast(arraysize), & - casabal%cbalance(arraysize), & - casabal%nbalance(arraysize), & - casabal%pbalance(arraysize), & - casabal%sumcbal(arraysize), & - casabal%sumnbal(arraysize), & - casabal%sumpbal(arraysize), & - casabal%clabilelast(arraysize)) + ALLOCATE( & + casamet%lnonwood(arraysize), & + casamet%iveg2(arraysize), & + casamet%ijgcm(arraysize), & + casamet%isorder(arraysize), & + source=0 & + ) + ALLOCATE( & + casamet%glai(arraysize), & + casamet%Tairk(arraysize), & + casamet%precip(arraysize), & + casamet%tsoilavg(arraysize), & + casamet%moistavg(arraysize), & + casamet%btran(arraysize), & + casamet%Tsoil(arraysize,ms), & + casamet%moist(arraysize,ms), & + casamet%lat(arraysize), & + casamet%lon(arraysize), & + casamet%areacell(arraysize), & + casamet%Tairkspin(arraysize,mdyear), & + casamet%cgppspin(arraysize,mdyear), & + casamet%crmplantspin_1(arraysize,mdyear), & + casamet%crmplantspin_2(arraysize,mdyear), & + casamet%crmplantspin_3(arraysize,mdyear), & + casamet%Tsoilspin_1(arraysize,mdyear), & + casamet%Tsoilspin_2(arraysize,mdyear), & + casamet%Tsoilspin_3(arraysize,mdyear), & + casamet%Tsoilspin_4(arraysize,mdyear), & + casamet%Tsoilspin_5(arraysize,mdyear), & + casamet%Tsoilspin_6(arraysize,mdyear), & + casamet%moistspin_1(arraysize,mdyear), & + casamet%moistspin_2(arraysize,mdyear), & + casamet%moistspin_3(arraysize,mdyear), & + casamet%moistspin_4(arraysize,mdyear), & + casamet%moistspin_5(arraysize,mdyear), & + casamet%moistspin_6(arraysize,mdyear), & + casamet%mtempspin(arraysize,mdyear), & + source=0.0_r_2 & + ) + + ALLOCATE( & + casabal%FCgppyear(arraysize), & + casabal%FCnppyear(arraysize), & + casabal%FCrpyear(arraysize), & + casabal%FCrmleafyear(arraysize), & + casabal%FCrmwoodyear(arraysize), & + casabal%FCrmrootyear(arraysize), & + casabal%FCrgrowyear(arraysize), & + casabal%FCrsyear(arraysize), & + casabal%FCneeyear(arraysize), & + casabal%FNdepyear(arraysize), & + casabal%FNfixyear(arraysize), & + casabal%FNsnetyear(arraysize), & + casabal%FNupyear(arraysize), & + casabal%FNleachyear(arraysize), & + casabal%FNlossyear(arraysize), & + casabal%FPweayear(arraysize), & + casabal%FPdustyear(arraysize), & + casabal%FPsnetyear(arraysize), & + casabal%FPupyear(arraysize), & + casabal%FPleachyear(arraysize), & + casabal%FPlossyear(arraysize), & + casabal%dCdtyear(arraysize), & + casabal%LAImax(arraysize), & + casabal%Cleafmean(arraysize), & + casabal%Crootmean(arraysize), & + casabal%glaimon(arraysize,12), & + casabal%glaimonx(arraysize,12), & + casabal%cplantlast(arraysize,mplant), & + casabal%nplantlast(arraysize,mplant), & + casabal%pplantlast(arraysize,mplant), & + casabal%clitterlast(arraysize,mlitter), & + casabal%nlitterlast(arraysize,mlitter), & + casabal%plitterlast(arraysize,mlitter), & + casabal%csoillast(arraysize,msoil), & + casabal%nsoillast(arraysize,msoil), & + casabal%psoillast(arraysize,msoil), & + casabal%nsoilminlast(arraysize), & + casabal%psoillablast(arraysize), & + casabal%psoilsorblast(arraysize), & + casabal%psoilocclast(arraysize), & + casabal%cbalance(arraysize), & + casabal%nbalance(arraysize), & + casabal%pbalance(arraysize), & + casabal%sumcbal(arraysize), & + casabal%sumnbal(arraysize), & + casabal%sumpbal(arraysize), & + casabal%clabilelast(arraysize), & + source=0.0_r_2 & + ) + END SUBROUTINE alloc_casavariable SUBROUTINE alloc_sum_casavariable( sum_casapool, sum_casaflux &