recall_nut.f90 Source File


This file depends on

sourcefile~~recall_nut.f90~~EfferentGraph sourcefile~recall_nut.f90 recall_nut.f90 sourcefile~basin_module.f90 basin_module.f90 sourcefile~recall_nut.f90->sourcefile~basin_module.f90 sourcefile~constituent_mass_module.f90 constituent_mass_module.f90 sourcefile~recall_nut.f90->sourcefile~constituent_mass_module.f90 sourcefile~hydrograph_module.f90 hydrograph_module.f90 sourcefile~recall_nut.f90->sourcefile~hydrograph_module.f90 sourcefile~time_module.f90 time_module.f90 sourcefile~recall_nut.f90->sourcefile~time_module.f90 sourcefile~hydrograph_module.f90->sourcefile~basin_module.f90 sourcefile~hydrograph_module.f90->sourcefile~time_module.f90

Source Code

      !remove nutrient mass from channels with a diversion
      subroutine recall_nut(irec)
      
      
      use basin_module
      use hydrograph_module
      use time_module
      use constituent_mass_module
      
      implicit none 

      !incoming variables
      integer :: irec
      
      !local variables
      integer :: ichan = 0    !            |id of source channel
      real :: sol_conc = 0.   !g/m3        |concentration of solute in diversion water
      real :: div_mass = 0.   !kg          |mass of constituent in diversion water
      integer :: dum = 0
      
      
      !channel from which water is diverted
      ichan = ob(icmd)%obtypno_out(1) 
      
      !determine concentration of channel (source) water and diverted mass
      sol_conc = 0.
      if(ch_stor(ichan)%flo > 10.) then !only proceed if channel has water
        
        !no3
        sol_conc = (ch_stor(ichan)%no3*1000.) / ch_stor(ichan)%flo !g/m3 in channel water
        div_mass = (sol_conc * recall(irec)%hd(time%day,time%yrs)%flo) / 1000. !kg/day  
        if((div_mass*(-1)) > ch_stor(ichan)%no3) then
          div_mass = ch_stor(ichan)%no3 * (-1) !only take what is there
        endif
        ch_stor(ichan)%no3 = ch_stor(ichan)%no3 + div_mass
        
        !solp
        sol_conc = (ch_stor(ichan)%solp*1000.) / ch_stor(ichan)%flo !g/m3 in channel water
        div_mass = (sol_conc * recall(irec)%hd(time%day,time%yrs)%flo) / 1000. !kg/day  
        if((div_mass*(-1)) > ch_stor(ichan)%solp) then
          div_mass = ch_stor(ichan)%solp * (-1) !only take what is there
        endif
        ch_stor(ichan)%solp = ch_stor(ichan)%solp + div_mass
        
        !nh3
        sol_conc = (ch_stor(ichan)%nh3*1000.) / ch_stor(ichan)%flo !g/m3 in channel water
        div_mass = (sol_conc * recall(irec)%hd(time%day,time%yrs)%flo) / 1000. !kg/day  
        if((div_mass*(-1)) > ch_stor(ichan)%nh3) then
          div_mass = ch_stor(ichan)%nh3 * (-1) !only take what is there
        endif
        ch_stor(ichan)%nh3 = ch_stor(ichan)%nh3 + div_mass
        
        !no2
        sol_conc = (ch_stor(ichan)%no2*1000.) / ch_stor(ichan)%flo !g/m3 in channel water
        div_mass = (sol_conc * recall(irec)%hd(time%day,time%yrs)%flo) / 1000. !kg/day  
        if((div_mass*(-1)) > ch_stor(ichan)%no2) then
          div_mass = ch_stor(ichan)%no2 * (-1) !only take what is there
        endif
        ch_stor(ichan)%no2 = ch_stor(ichan)%no2 + div_mass
        
        !dox
        sol_conc = (ch_stor(ichan)%dox*1000.) / ch_stor(ichan)%flo !g/m3 in channel water
        div_mass = (sol_conc * recall(irec)%hd(time%day,time%yrs)%flo) / 1000. !kg/day  
        if((div_mass*(-1)) > ch_stor(ichan)%dox) then
          div_mass = ch_stor(ichan)%dox * (-1) !only take what is there
        endif
        ch_stor(ichan)%dox = ch_stor(ichan)%dox + div_mass
        
        !orgn
        sol_conc = (ch_stor(ichan)%orgn*1000.) / ch_stor(ichan)%flo !g/m3 in channel water
        div_mass = (sol_conc * recall(irec)%hd(time%day,time%yrs)%flo) / 1000. !kg/day  
        if((div_mass*(-1)) > ch_stor(ichan)%orgn) then
          div_mass = ch_stor(ichan)%orgn * (-1) !only take what is there
        endif
        ch_stor(ichan)%orgn = ch_stor(ichan)%orgn + div_mass
        
      else
        ob(icmd)%hd(1)%no3 = 0.
        ob(icmd)%hd(1)%solp = 0.
        ob(icmd)%hd(1)%nh3 = 0.
        ob(icmd)%hd(1)%no2 = 0.
        ob(icmd)%hd(1)%dox = 0.
        ob(icmd)%hd(1)%orgn = 0.
      endif
 
      
100   format(i8,i8,100e16.8)      
      
      return
      end subroutine recall_nut