erosion_module.f90 Source File


Files dependent on this one

sourcefile~~erosion_module.f90~~AfferentGraph sourcefile~erosion_module.f90 erosion_module.f90 sourcefile~ero_cfactor.f90 ero_cfactor.f90 sourcefile~ero_cfactor.f90->sourcefile~erosion_module.f90 sourcefile~ero_ysed.f90 ero_ysed.f90 sourcefile~ero_ysed.f90->sourcefile~erosion_module.f90 sourcefile~proc_hru.f90 proc_hru.f90 sourcefile~proc_hru.f90->sourcefile~erosion_module.f90

Source Code

      module erosion_module
    
      implicit none 

      type erosion_output_variables
        real :: sedyld = 0.         !t/ha       |sediment yield
        real :: precip = 0.         !mm         |precipitation
        real :: surfq = 0.          !mm         |surface runoff
        real :: peak = 0.           !m3/s       |peak rate
        real :: k = 0.              !           |usle k factor
        real :: s = 0.              !m/m        |slope
        real :: l = 0.              !m          |slope length
        real :: ls = 0.             !           |usle ls factor
        real :: p = 0.              !           |usle p factor
        real :: c = 0.              !           |usle c factor
        real :: rsd_m = 0.          !kg/ha      |surface residue mass
        real :: grcov_frac = 0.     !frac       |ground cover fraction
        real :: rsd_covfact = 0.    !           |residue cover factor
        real :: bio_covfact = 0.    !           |growing biomass factor
      end type erosion_output_variables

      type erosion_output
        integer :: n_events = 0.                        !number of erosion events
        type (erosion_output_variables) :: ero_d        !ersion variables at each erosion event
        type (erosion_output_variables) :: ero_ave      !erosion variables averaged by number of events
      end type erosion_output
      type (erosion_output), dimension(:), allocatable  :: ero_output   !dimensioned by hru
      
      type erosion_output_header
        character (len=6) :: hru          =  "   hru"
        character (len=6) :: neve         =  "events"
        character (len=6) :: sedyld       =  "sedyld"
        character (len=6) :: precip       =  "precip"
        character (len=9) :: peak         =  "peak_rate"
        character (len=8) :: k            =  "k_factor"
        character (len=16) :: s           =  "      slope"
        character (len=12) :: l           =  "     length"
        character (len=12)  :: ls         =  "  ls_factor"
        character (len=12)  :: p          =  "   p_factor"
        character (len=12)  :: c          =  "   c_factor"
        character (len=12)  :: rsd_m      =  "      rsd_m"
        character (len=12)  :: grcov_frac =  " grcov_frac"
        character (len=12)  :: rsd_covfact   =  " rsd_covfact"
        character (len=12)  :: bio_covfact   =  " bio_covfact"
      end type erosion_output_header      
      type (erosion_output_header) :: ero_hdr
      
       type erosion_header_units
        character (len=6) :: hru          =  "      "
        character (len=6) :: neve         =  "      "
        character (len=6) :: sedyld       =  "  t/ha"
        character (len=6) :: precip       =  "    mm"
        character (len=8) :: peak         =  "    m3/s"
        character (len=8) :: k            =  "        "
        character (len=16) :: s           =  "        m/m"
        character (len=12) :: l           =  "          m"
        character (len=12)  :: ls         =  "           "
        character (len=12)  :: p          =  "           "
        character (len=12)  :: c          =  "           "
        character (len=12)  :: rsd_m      =  "      kg/ha"
        character (len=12)  :: grcov_frac =  "       frac"
        character (len=12)  :: rsd_covfact   =  "           "
        character (len=12)  :: bio_covfact   =  "           "
      end type erosion_header_units      
      type (erosion_header_units) :: ero_hdr_units
   
      !objects needed for operators
      type (erosion_output_variables) :: ero_1, ero_2, ero_3

      
      interface operator (+)
        module procedure ero_add
      end interface
                         
      interface operator (/)
        module procedure ero_divide
      end interface 
                   

contains
      
      !! add erosion outputs for each event
      function ero_add (ero_1, ero_2) result (ero_3)
        type (erosion_output_variables), intent (in) :: ero_1
        type (erosion_output_variables), intent (in) :: ero_2
        type (erosion_output_variables) :: ero_3
        ero_3%sedyld = ero_1%sedyld + ero_2%sedyld
        ero_3%precip = ero_1%precip + ero_2%precip
        ero_3%surfq = ero_1%surfq + ero_2%surfq
        ero_3%peak = ero_1%peak + ero_2%peak
        ero_3%k = ero_1%k + ero_2%k
        ero_3%s = ero_1%s + ero_2%s
        ero_3%l = ero_1%l + ero_2%l
        ero_3%ls = ero_1%ls + ero_2%ls
        ero_3%p = ero_1%p + ero_2%p
        ero_3%rsd_m = ero_1%rsd_m + ero_2%rsd_m
        ero_3%grcov_frac = ero_1%grcov_frac + ero_2%grcov_frac
        ero_3%rsd_covfact = ero_1%rsd_covfact + ero_2%rsd_covfact
        ero_3%bio_covfact = ero_1%bio_covfact + ero_2%bio_covfact
        ero_3%c = ero_1%c + ero_2%c
      end function ero_add
                          
      !! divide erosion outputs by number of events
      function ero_divide (ero_1, const) result (ero_2)
        type (erosion_output_variables), intent (in) :: ero_1
        real, intent (in) :: const 
        type (erosion_output_variables) :: ero_2
        ero_2%sedyld = ero_1%sedyld / const
        ero_2%precip = ero_1%precip / const
        ero_2%surfq = ero_1%surfq / const
        ero_2%peak = ero_1%peak / const
        ero_2%k = ero_1%k / const
        ero_2%s = ero_1%s / const
        ero_2%l = ero_1%l / const
        ero_2%ls = ero_1%ls / const
        ero_2%p = ero_1%p / const
        ero_2%rsd_m = ero_1%rsd_m / const
        ero_2%grcov_frac = ero_1%grcov_frac / const
        ero_2%rsd_covfact = ero_1%rsd_covfact / const
        ero_2%bio_covfact = ero_1%bio_covfact / const
        ero_2%c = ero_1%c / const
      end function ero_divide
      
      end module erosion_module