@@ -45,6 +45,7 @@ module BeTRSimulationALM
4545 procedure , public :: SoilFluxStateRecv = > ALMBetrSoilFluxStateRecv
4646 procedure , public :: CalcSmpL = > ALMCalcSmpL
4747 procedure , public :: PlantSoilBGCSend = > ALMBetrPlantSoilBGCSend
48+ procedure , public :: RetriveBGCInput = > ALMBeTRRetriveBGCInput
4849 procedure , public :: PlantSoilBGCRecv = > ALMBetrPlantSoilBGCRecv
4950 procedure , public :: DiagnoseLnd2atm = > ALMDiagnoseLnd2atm
5051 procedure , public :: set_active = > ALMset_active
@@ -429,7 +430,65 @@ subroutine ALMset_active(this,bounds,col)
429430 this% active_col(c) = (this% active_col(c) .and. col% active(c))
430431 enddo
431432 end subroutine ALMset_active
433+ !- --------------------------------------------------------------------------------
434+ subroutine ALMBeTRRetriveBGCInput (this , num_soilc , filter_soilc , carbonflux_vars , nitrogenflux_vars , phosphorusflux_vars )
435+
436+ use CNCarbonFluxType , only : carbonflux_type
437+ use CNNitrogenFluxType , only : nitrogenflux_type
438+ use PhosphorusFluxType , only : phosphorusflux_type
439+
440+ implicit none
441+ class(betr_simulation_alm_type) , intent (inout ) :: this
442+ integer , intent (in ) :: num_soilc
443+ integer , intent (in ) :: filter_soilc(:)
444+ type (carbonflux_type), intent (inout ):: carbonflux_vars
445+ type (nitrogenflux_type), intent (inout ):: nitrogenflux_vars
446+ type (phosphorusflux_type), intent (inout ):: phosphorusflux_vars
447+
448+ integer :: j, c, fc, c_l
449+ type (betr_bounds_type) :: betr_bounds
450+
451+ call this% BeTRSetBounds(betr_bounds)
452+
453+ c_l= 1
454+ do j = betr_bounds% lbj, betr_bounds% ubj
455+ do fc = 1 , num_soilc
456+ c = filter_soilc(fc)
457+
458+ carbonflux_vars% cflx_input_litr_met_vr_col(c,j)= this% biophys_forc(c)% c12flx% cflx_input_litr_met_vr_col(c_l,j)
459+
460+ carbonflux_vars% cflx_input_litr_cel_vr_col(c,j)= this% biophys_forc(c)% c12flx% cflx_input_litr_cel_vr_col(c_l,j)
461+
462+ carbonflux_vars% cflx_input_litr_lig_vr_col(c,j)= this% biophys_forc(c)% c12flx% cflx_input_litr_lig_vr_col(c_l,j)
463+
464+ carbonflux_vars% cflx_input_litr_cwd_vr_col(c,j)= this% biophys_forc(c)% c12flx% cflx_input_litr_cwd_vr_col(c_l,j)
465+
466+ nitrogenflux_vars% nflx_input_litr_met_vr_col(c,j)= this% biophys_forc(c)% n14flx% nflx_input_litr_met_vr_col(c_l,j)
467+
468+ nitrogenflux_vars% nflx_input_litr_cel_vr_col(c,j)= this% biophys_forc(c)% n14flx% nflx_input_litr_cel_vr_col(c_l,j)
469+
470+ nitrogenflux_vars% nflx_input_litr_lig_vr_col(c,j)= this% biophys_forc(c)% n14flx% nflx_input_litr_lig_vr_col(c_l,j)
471+
472+ nitrogenflux_vars% nflx_input_litr_cwd_vr_col(c,j)= this% biophys_forc(c)% n14flx% nflx_input_litr_cwd_vr_col(c_l,j)
473+
474+ phosphorusflux_vars% pflx_input_litr_met_vr_col(c,j)= this% biophys_forc(c)% p31flx% pflx_input_litr_met_vr_col(c_l,j)
475+
476+ phosphorusflux_vars% pflx_input_litr_cel_vr_col(c,j)= this% biophys_forc(c)% p31flx% pflx_input_litr_cel_vr_col(c_l,j)
477+
478+ phosphorusflux_vars% pflx_input_litr_lig_vr_col(c,j)= this% biophys_forc(c)% p31flx% pflx_input_litr_lig_vr_col(c_l,j)
432479
480+ phosphorusflux_vars% pflx_input_litr_cwd_vr_col(c,j)= this% biophys_forc(c)% p31flx% pflx_input_litr_cwd_vr_col(c_l,j)
481+
482+ nitrogenflux_vars% nflx_minn_input_nh4_vr_col(c,j)= this% biophys_forc(c)% n14flx% nflx_minn_input_nh4_vr_col(c_l,j) + &
483+ this% biophys_forc(c)% n14flx% nflx_minn_nh4_fix_nomic_vr_col(c_l,j)
484+
485+ nitrogenflux_vars% nflx_minn_input_no3_vr_col(c,j)= this% biophys_forc(c)% n14flx% nflx_minn_input_no3_vr_col(c_l,j)
486+
487+ phosphorusflux_vars% pflx_minp_input_po4_vr_col(c,j)= this% biophys_forc(c)% p31flx% pflx_minp_input_po4_vr_col(c_l,j) + &
488+ this% biophys_forc(c)% p31flx% pflx_minp_weathering_po4_vr_col(c_l,j)
489+ enddo
490+ enddo
491+ end subroutine ALMBeTRRetriveBGCInput
433492 !- --------------------------------------------------------------------------------
434493 subroutine ALMStepWithDrainage (this , bounds , col )
435494 !
@@ -658,144 +717,106 @@ subroutine ALMBetrPlantSoilBGCSend(this, bounds, col, pft, num_soilc, filter_so
658717 ! !------------------------------------------------------------------------
659718 ! carbon input
660719 ! metabolic carbon
661- call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_met_vr_col(1 ,j), & !
720+ call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_met_vr_col(c_l ,j), & !
662721 (/ carbonflux_vars% phenology_c_to_litr_met_c_col(c,j) , & ! phenology
663722 carbonflux_vars% dwt_frootc_to_litr_met_c_col(c,j) , & ! dynamic land cover
664723 carbonflux_vars% gap_mortality_c_to_litr_met_c_col(c,j) , & ! gap mortality
665724 carbonflux_vars% harvest_c_to_litr_met_c_col(c,j) , & ! harvest
666725 carbonflux_vars% m_c_to_litr_met_fire_col(c,j)/ )) ! fire mortality
667726
668727 ! cellulose carbon
669- call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_cel_vr_col(1 ,j) , &
728+ call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_cel_vr_col(c_l ,j) , &
670729 (/ carbonflux_vars% phenology_c_to_litr_cel_c_col(c,j) , & ! phenology
671730 carbonflux_vars% dwt_frootc_to_litr_cel_c_col(c,j) , & ! dynamic land cover
672731 carbonflux_vars% gap_mortality_c_to_litr_cel_c_col(c,j) , & ! gap mortality
673732 carbonflux_vars% harvest_c_to_litr_cel_c_col(c,j) , & ! harvest
674733 carbonflux_vars% m_c_to_litr_cel_fire_col(c,j)/ )) ! fire mortality
675734
676735 ! lignin carbon
677- call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_lig_vr_col(1 ,j) , &
736+ call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_lig_vr_col(c_l ,j) , &
678737 (/ carbonflux_vars% phenology_c_to_litr_lig_c_col(c,j) , & ! phenology
679738 carbonflux_vars% dwt_frootc_to_litr_lig_c_col(c,j) , & ! dynamic land cover
680739 carbonflux_vars% gap_mortality_c_to_litr_lig_c_col(c,j) , & ! gap mortality
681740 carbonflux_vars% harvest_c_to_litr_lig_c_col(c,j) , & ! harvest
682741 carbonflux_vars% m_c_to_litr_lig_fire_col(c,j)/ )) ! fire mortality
683742
684743 ! cwd carbon
685- call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_cwd_vr_col(1 ,j) , &
744+ call apvb(this% biophys_forc(c)% c12flx% cflx_input_litr_cwd_vr_col(c_l ,j) , &
686745 (/ carbonflux_vars% dwt_livecrootc_to_cwdc_col(c,j) , &
687746 carbonflux_vars% dwt_deadcrootc_to_cwdc_col(c,j) , &
688747 carbonflux_vars% gap_mortality_c_to_cwdc_col(c,j) , &
689748 carbonflux_vars% harvest_c_to_cwdc_col(c,j) , &
690749 carbonflux_vars% fire_mortality_c_to_cwdc_col(c,j)/ ))
691750
692- ! fire carbon loss
693- call apvb(this% biophys_forc(c)% c12flx% cflx_output_litr_met_vr_col(1 ,j), &
694- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_met_lit))
695-
696- call apvb(this% biophys_forc(c)% c12flx% cflx_output_litr_cel_vr_col(1 ,j), &
697- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_cel_lit))
698-
699- call apvb(this% biophys_forc(c)% c12flx% cflx_output_litr_lig_vr_col(1 ,j), &
700- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_lig_lit))
701-
702- call apvb(this% biophys_forc(c)% c12flx% cflx_output_litr_cwd_vr_col(1 ,j), &
703- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_cwd))
704-
705751
706752 ! !------------------------------------------------------------------------
707753 if (use_c13_betr)then
708754 ! metabolic carbon
709- call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_met_vr_col(1 ,j), & !
755+ call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_met_vr_col(c_l ,j), & !
710756 (/ carbonflux_vars% phenology_c_to_litr_met_c_col(c,j) , & ! phenology
711757 carbonflux_vars% dwt_frootc_to_litr_met_c_col(c,j) , & ! dynamic land cover
712758 carbonflux_vars% gap_mortality_c_to_litr_met_c_col(c,j) , & ! gap mortality
713759 carbonflux_vars% harvest_c_to_litr_met_c_col(c,j) , & ! harvest
714760 carbonflux_vars% m_c_to_litr_met_fire_col(c,j)/ )) ! fire mortality
715761
716762 ! cellulose carbon
717- call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_cel_vr_col(1 ,j) , &
763+ call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_cel_vr_col(c_l ,j) , &
718764 (/ carbonflux_vars% phenology_c_to_litr_cel_c_col(c,j) , & ! phenology
719765 carbonflux_vars% dwt_frootc_to_litr_cel_c_col(c,j) , & ! dynamic land cover
720766 carbonflux_vars% gap_mortality_c_to_litr_cel_c_col(c,j) , & ! gap mortality
721767 carbonflux_vars% harvest_c_to_litr_cel_c_col(c,j) , & ! harvest
722768 carbonflux_vars% m_c_to_litr_cel_fire_col(c,j)/ )) ! fire mortality
723769
724770 ! lignin carbon
725- call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_lig_vr_col(1 ,j) , &
771+ call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_lig_vr_col(c_l ,j) , &
726772 (/ carbonflux_vars% phenology_c_to_litr_lig_c_col(c,j) , & ! phenology
727773 carbonflux_vars% dwt_frootc_to_litr_lig_c_col(c,j) , & ! dynamic land cover
728774 carbonflux_vars% gap_mortality_c_to_litr_lig_c_col(c,j) , & ! gap mortality
729775 carbonflux_vars% harvest_c_to_litr_lig_c_col(c,j) , & ! harvest
730776 carbonflux_vars% m_c_to_litr_lig_fire_col(c,j)/ )) ! fire mortality
731777
732778 ! cwd carbon
733- call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_cwd_vr_col(1 ,j) , &
779+ call apvb(this% biophys_forc(c)% c13flx% cflx_input_litr_cwd_vr_col(c_l ,j) , &
734780 (/ carbonflux_vars% dwt_livecrootc_to_cwdc_col(c,j) , &
735781 carbonflux_vars% dwt_deadcrootc_to_cwdc_col(c,j) , &
736782 carbonflux_vars% gap_mortality_c_to_cwdc_col(c,j) , &
737783 carbonflux_vars% harvest_c_to_cwdc_col(c,j) , &
738784 carbonflux_vars% fire_mortality_c_to_cwdc_col(c,j)/ ))
739785
740- ! fire carbon loss
741- call apvb(this% biophys_forc(c)% c13flx% cflx_output_litr_met_vr_col(1 ,j), &
742- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_met_lit))
743-
744- call apvb(this% biophys_forc(c)% c13flx% cflx_output_litr_cel_vr_col(1 ,j), &
745- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_cel_lit))
746-
747- call apvb(this% biophys_forc(c)% c13flx% cflx_output_litr_lig_vr_col(1 ,j), &
748- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_lig_lit))
749-
750- call apvb(this% biophys_forc(c)% c13flx% cflx_output_litr_cwd_vr_col(1 ,j), &
751- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_cwd))
752786 endif
753787 if (use_c14_betr)then
754788 ! metabolic carbon
755- call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_met_vr_col(1 ,j), & !
789+ call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_met_vr_col(c_l ,j), & !
756790 (/ carbonflux_vars% phenology_c_to_litr_met_c_col(c,j) , & ! phenology
757791 carbonflux_vars% dwt_frootc_to_litr_met_c_col(c,j) , & ! dynamic land cover
758792 carbonflux_vars% gap_mortality_c_to_litr_met_c_col(c,j) , & ! gap mortality
759793 carbonflux_vars% harvest_c_to_litr_met_c_col(c,j) , & ! harvest
760794 carbonflux_vars% m_c_to_litr_met_fire_col(c,j)/ )) ! fire mortality
761795
762796 ! cellulose carbon
763- call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_cel_vr_col(1 ,j) , &
797+ call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_cel_vr_col(c_l ,j) , &
764798 (/ carbonflux_vars% phenology_c_to_litr_cel_c_col(c,j) , & ! phenology
765799 carbonflux_vars% dwt_frootc_to_litr_cel_c_col(c,j) , & ! dynamic land cover
766800 carbonflux_vars% gap_mortality_c_to_litr_cel_c_col(c,j) , & ! gap mortality
767801 carbonflux_vars% harvest_c_to_litr_cel_c_col(c,j) , & ! harvest
768802 carbonflux_vars% m_c_to_litr_cel_fire_col(c,j)/ )) ! fire mortality
769803
770804 ! lignin carbon
771- call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_lig_vr_col(1 ,j) , &
805+ call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_lig_vr_col(c_l ,j) , &
772806 (/ carbonflux_vars% phenology_c_to_litr_lig_c_col(c,j) , & ! phenology
773807 carbonflux_vars% dwt_frootc_to_litr_lig_c_col(c,j) , & ! dynamic land cover
774808 carbonflux_vars% gap_mortality_c_to_litr_lig_c_col(c,j) , & ! gap mortality
775809 carbonflux_vars% harvest_c_to_litr_lig_c_col(c,j) , & ! harvest
776810 carbonflux_vars% m_c_to_litr_lig_fire_col(c,j)/ )) ! fire mortality
777811
778812 ! cwd carbon
779- call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_cwd_vr_col(1 ,j) , &
813+ call apvb(this% biophys_forc(c)% c14flx% cflx_input_litr_cwd_vr_col(c_l ,j) , &
780814 (/ carbonflux_vars% dwt_livecrootc_to_cwdc_col(c,j) , &
781815 carbonflux_vars% dwt_deadcrootc_to_cwdc_col(c,j) , &
782816 carbonflux_vars% gap_mortality_c_to_cwdc_col(c,j) , &
783817 carbonflux_vars% harvest_c_to_cwdc_col(c,j) , &
784818 carbonflux_vars% fire_mortality_c_to_cwdc_col(c,j)/ ))
785819
786- ! fire carbon loss
787- call apvb(this% biophys_forc(c)% c14flx% cflx_output_litr_met_vr_col(1 ,j), &
788- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_met_lit))
789-
790- call apvb(this% biophys_forc(c)% c14flx% cflx_output_litr_cel_vr_col(1 ,j), &
791- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_cel_lit))
792-
793- call apvb(this% biophys_forc(c)% c14flx% cflx_output_litr_lig_vr_col(1 ,j), &
794- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_lig_lit))
795-
796- call apvb(this% biophys_forc(c)% c14flx% cflx_output_litr_cwd_vr_col(1 ,j), &
797- carbonflux_vars% m_decomp_cpools_to_fire_vr_col(c,j,i_cwd))
798-
799820 endif
800821
801822 ! nitrogen input
@@ -831,18 +852,6 @@ subroutine ALMBetrPlantSoilBGCSend(this, bounds, col, pft, num_soilc, filter_so
831852 nitrogenflux_vars% harvest_n_to_cwdn_col(c,j) , &
832853 nitrogenflux_vars% fire_mortality_n_to_cwdn_col(c,j)/ ))
833854
834- ! fire nitrogen loss
835- call apvb(this% biophys_forc(c)% n14flx% nflx_output_litr_met_vr_col(c_l,j) , &
836- nitrogenflux_vars% m_decomp_npools_to_fire_vr_col(c,j,i_met_lit))
837-
838- call apvb(this% biophys_forc(c)% n14flx% nflx_output_litr_cel_vr_col(c_l,j) , &
839- nitrogenflux_vars% m_decomp_npools_to_fire_vr_col(c,j,i_cel_lit))
840-
841- call apvb(this% biophys_forc(c)% n14flx% nflx_output_litr_lig_vr_col(c_l,j) , &
842- nitrogenflux_vars% m_decomp_npools_to_fire_vr_col(c,j,i_lig_lit))
843-
844- call apvb(this% biophys_forc(c)% n14flx% nflx_output_litr_cwd_vr_col(c_l,j) , &
845- nitrogenflux_vars% m_decomp_npools_to_fire_vr_col(c,j,i_cwd))
846855
847856 ! phosphorus input
848857 ! metabolic phosphorus
@@ -877,19 +886,6 @@ subroutine ALMBetrPlantSoilBGCSend(this, bounds, col, pft, num_soilc, filter_so
877886 phosphorusflux_vars% harvest_p_to_cwdp_col(c,j) , &
878887 phosphorusflux_vars% fire_mortality_p_to_cwdp_col(c,j)/ ))
879888
880- ! fire phosphorus loss
881- call apvb(this% biophys_forc(c)% p31flx% pflx_output_litr_met_vr_col(c_l,j) , &
882- phosphorusflux_vars% m_decomp_ppools_to_fire_vr_col(c,j,i_met_lit))
883-
884- call apvb(this% biophys_forc(c)% p31flx% pflx_output_litr_cel_vr_col(c_l,j) , &
885- phosphorusflux_vars% m_decomp_ppools_to_fire_vr_col(c,j,i_cel_lit))
886-
887- call apvb(this% biophys_forc(c)% p31flx% pflx_output_litr_lig_vr_col(c_l,j) , &
888- phosphorusflux_vars% m_decomp_ppools_to_fire_vr_col(c,j,i_lig_lit))
889-
890- call apvb(this% biophys_forc(c)% p31flx% pflx_output_litr_cwd_vr_col(c_l,j) , &
891- phosphorusflux_vars% m_decomp_ppools_to_fire_vr_col(c,j,i_cwd))
892-
893889 ! mineral nitrogen
894890 call apvb(this% biophys_forc(c)% n14flx% nflx_minn_input_nh4_vr_col(c_l,j) , &
895891 (/ nitrogenflux_vars% ndep_to_smin_nh3_col(c) , &
@@ -911,17 +907,7 @@ subroutine ALMBetrPlantSoilBGCSend(this, bounds, col, pft, num_soilc, filter_so
911907 phosphorusflux_vars% primp_to_labilep_vr_col(c,j))
912908 enddo
913909 enddo
914- do fc = 1 , num_soilc
915- c = filter_soilc(fc)
916- if (col% debug_flag(c))then
917- write (* ,* )' ndep in=' ,nitrogenflux_vars% ndep_to_sminn_col(c)
918- fport = 0._r8
919- do j = 1 , betr_bounds% ubj
920- fport= fport + ndep_prof(c,j)* this% betr_col(c)% dz(c_l,j)
921- enddo
922- write (* ,* )' fport=' ,fport
923- endif
924- enddo
910+
925911 end associate
926912 ! pull in all state variables and update tracers
927913 end subroutine ALMBetrPlantSoilBGCSend
0 commit comments