pl_biomass_gro.f90 Source File


This file depends on

sourcefile~~pl_biomass_gro.f90~~EfferentGraph sourcefile~pl_biomass_gro.f90 pl_biomass_gro.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~basin_module.f90 sourcefile~carbon_module.f90 carbon_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~carbon_module.f90 sourcefile~climate_module.f90 climate_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~climate_module.f90 sourcefile~constituent_mass_module.f90 constituent_mass_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~constituent_mass_module.f90 sourcefile~hru_module.f90 hru_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~hru_module.f90 sourcefile~hydrograph_module.f90 hydrograph_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~hydrograph_module.f90 sourcefile~organic_mineral_mass_module.f90 organic_mineral_mass_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~organic_mineral_mass_module.f90 sourcefile~plant_data_module.f90 plant_data_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~plant_data_module.f90 sourcefile~plant_module.f90 plant_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~plant_module.f90 sourcefile~salt_data_module.f90 salt_data_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~salt_data_module.f90 sourcefile~salt_module.f90 salt_module.f90 sourcefile~pl_biomass_gro.f90->sourcefile~salt_module.f90 sourcefile~hydrograph_module.f90->sourcefile~basin_module.f90 sourcefile~time_module.f90 time_module.f90 sourcefile~hydrograph_module.f90->sourcefile~time_module.f90

Source Code

      subroutine pl_biomass_gro
      
      use plant_data_module
      use basin_module
      use hru_module, only : hru, uapd, uno3d, par, bioday,              &
         ihru, ipl, rto_no3, rto_solp, sum_no3, sum_solp, uapd_tot, uno3d_tot, vpd
      use plant_module
      use carbon_module
      use organic_mineral_mass_module
      use climate_module
      use hydrograph_module
      use constituent_mass_module !rtb salt
      use salt_module, only : salt_uptake_on
      use salt_data_module, only : salt_effect
      
      implicit none 
      
      integer :: j = 0          !none               |HRU number
      real :: ruedecl = 0.      !none               |decline in radiation use efficiency for the
                                !                   |plant
      real :: beadj = 0.        !(kg/ha)/(MJ/m**2)  |radiation-use efficiency for a given CO2
                                !                   |concentration
      real :: rto = 0.          !none               |ratio of current years of growth:years to maturity of perennial
      integer :: idp = 0        !                   |
      integer :: iob = 0        !                   |
      integer :: iwgn = 0
      !real :: ppet

      j = ihru
      idp = pcom(j)%plcur(ipl)%idplt
      iwst = ob(j)%wst
      iwgn = wst(iwst)%wco%wgn
      rto = 1.
 
        !! if plant hasn't reached maturity
        if (pcom(j)%plcur(ipl)%phuacc <= 1.) then

          !! calculate optimal biomass
          !! adjust radiation-use efficiency for CO2
          if (bsn_prm%co2 > 350.) then
            beadj = 100. * co2y(time%yrs) / (co2y(time%yrs) +        &
                Exp(plcp(idp)%ruc1 - co2y(time%yrs) * plcp(idp)%ruc2))
          else
            beadj = pldb(idp)%bio_e
          end if

          !! adjust radiation-use efficiency for vapor pressure deficit
          !!assumes vapor pressure threshold of 1.0 kPa
          if (vpd > 1.0) then
            ruedecl = vpd - 1.0
            beadj = beadj - pldb(idp)%wavp * ruedecl
            beadj = Max(beadj, 0.27 * pldb(idp)%bio_e)
          end if

          !beadj = pldb(idp)%bio_e
          
          !! adjust radiation-use efficiency for day length
          iob = hru(j)%obj_no
          iwst = ob(iob)%wst
          !beadj = beadj * wst(iwst)%weat%daylength / 16.    !Jimmy used 12,
          
          bioday = beadj * par(ipl)
          if (bioday < 0.) bioday = 0.
                    
          !! compute temperature stress    
          call pl_tstr

          !! compute n and p uptake and stresses
          if (uno3d_tot > sum_no3) then
            rto_no3 = uno3d(ipl) / uno3d_tot
          else 
            rto_no3 = 1.
          end if
          if (uapd_tot > sum_solp) then
            rto_solp = uapd(ipl) / uapd_tot
          else
            rto_solp = 1.
          end if
       
          uno3d(ipl) = Min(4. * pldb(idp)%pltnfr3 * bioday, uno3d(ipl))
          if (uapd(ipl) > 10.) then
            uapd(ipl) = Min(4. * pldb(idp)%pltpfr3 * bioday, uapd(ipl))
          end if
          ! uno3d(ipl) = uno3d(ipl) * rto_no3
          ! uapd(ipl) = uapd(ipl) * rto_solp
          call pl_nup
          call pl_pup
          if(cs_db%num_salts > 0 .and. salt_uptake_on == 1) then
            call salt_uptake !rtb salt
          endif
          if(cs_db%num_cs > 0) call cs_uptake !rtb cs
          
          !! try water stress as function of precip/pet
          !ppet = wgn_pms(iwgn)%precip_sum / wgn_pms(iwgn)%pet_sum
          !if (ppet < 0.5) then
          !  pcom(j)%plstr(ipl)%strsw = sin(1.507 * ppet)
          !else
          !  pcom(j)%plstr(ipl)%strsw = 1.
          !end if
          !pcom(j)%plstr(ipl)%strsw = max (0., pcom(j)%plstr(ipl)%strsw)
          !pcom(j)%plstr(ipl)%strsw = amin1 (1., pcom(j)%plstr(ipl)%strsw)
          
          !! code to turn off all plant stress
          if (bsn_cc%nostress == 1) then
            pcom(j)%plstr(ipl)%strsw = 1.
            pcom(j)%plstr(ipl)%strst = 1.
            pcom(j)%plstr(ipl)%strsn = 1.
            pcom(j)%plstr(ipl)%strsp = 1.
            pcom(j)%plstr(ipl)%strsa = 1.
            pcom(j)%plstr(ipl)%strss = 1. !rtb salt
          end if
   
          !! code to turn off nutrient plant stress only
          if (bsn_cc%nostress == 2) then
            pcom(j)%plstr(ipl)%strsn = 1.
            pcom(j)%plstr(ipl)%strsp = 1.
          end if
          
        !if (j==1689) then
        !  if (pcom(j)%plstr(1)%strsn < 0.5 .or. pcom(j)%plstr(2)%strsn < 0.5) then
        !    rto = 1.
        !  end if
        !end if
          !! reduce predicted biomass due to stress on plant
          if(salt_effect == 1) then !salinity stress applied after other stresses
            pcom(j)%plstr(ipl)%reg = Min(pcom(j)%plstr(ipl)%strsw, pcom(j)%plstr(ipl)%strst,      &
                                         pcom(j)%plstr(ipl)%strsn, pcom(j)%plstr(ipl)%strsp,      &
                                         pcom(j)%plstr(ipl)%strsa)
            !! reduce predicted biomass due to salt stress on plant (rtb salt)
            if(cs_db%num_salts > 0) then
              pcom(j)%plstr(ipl)%reg = pcom(j)%plstr(ipl)%reg * pcom(j)%plstr(ipl)%strss
            endif
          else
            pcom(j)%plstr(ipl)%reg = Min(pcom(j)%plstr(ipl)%strsw, pcom(j)%plstr(ipl)%strst,      &
                                         pcom(j)%plstr(ipl)%strsn, pcom(j)%plstr(ipl)%strsp,      & 
                                         pcom(j)%plstr(ipl)%strsa, pcom(j)%plstr(ipl)%strss)
          endif 
          if (pcom(j)%plstr(ipl)%reg < 0.) pcom(j)%plstr(ipl)%reg = 0.
          if (pcom(j)%plstr(ipl)%reg > 1.) pcom(j)%plstr(ipl)%reg = 1.

          pl_mass_up%m = bioday * pcom(j)%plstr(ipl)%reg
          pl_mass_up%c = 0.42 * bioday * pcom(j)%plstr(ipl)%reg
                
          !! increase in plant c
          if (bsn_cc%cswat == 2) then
            hpc_d(j)%npp_c = hpc_d(j)%npp_c + bioday * pcom(j)%plstr(ipl)%reg * 0.42
          end if

          !! sum plant stresses
          pcom(j)%plstr(ipl)%sum_w = pcom(j)%plstr(ipl)%sum_w + (1. - pcom(j)%plstr(ipl)%strsw)
          pcom(j)%plstr(ipl)%sum_tmp = pcom(j)%plstr(ipl)%sum_tmp + (1.-pcom(j)%plstr(ipl)%strst)
          pcom(j)%plstr(ipl)%sum_n = pcom(j)%plstr(ipl)%sum_n + (1. - pcom(j)%plstr(ipl)%strsn)
          pcom(j)%plstr(ipl)%sum_p = pcom(j)%plstr(ipl)%sum_p + (1. - pcom(j)%plstr(ipl)%strsp) 
          pcom(j)%plstr(ipl)%sum_a = pcom(j)%plstr(ipl)%sum_a + (1. - pcom(j)%plstr(ipl)%strsa)

        end if
        
      return
      end subroutine pl_biomass_gro