manure_allocation_module.f90 Source File


This file depends on

sourcefile~~manure_allocation_module.f90~~EfferentGraph sourcefile~manure_allocation_module.f90 manure_allocation_module.f90 sourcefile~fertilizer_data_module.f90 fertilizer_data_module.f90 sourcefile~manure_allocation_module.f90->sourcefile~fertilizer_data_module.f90

Files dependent on this one

sourcefile~~manure_allocation_module.f90~~AfferentGraph sourcefile~manure_allocation_module.f90 manure_allocation_module.f90 sourcefile~actions.f90 actions.f90 sourcefile~actions.f90->sourcefile~manure_allocation_module.f90 sourcefile~mallo_control.f90 mallo_control.f90 sourcefile~mallo_control.f90->sourcefile~manure_allocation_module.f90 sourcefile~manure_allocation_read.f90 manure_allocation_read.f90 sourcefile~manure_allocation_read.f90->sourcefile~manure_allocation_module.f90 sourcefile~manure_demand_output.f90 manure_demand_output.f90 sourcefile~manure_demand_output.f90->sourcefile~manure_allocation_module.f90 sourcefile~manure_source_output.f90 manure_source_output.f90 sourcefile~manure_source_output.f90->sourcefile~manure_allocation_module.f90

Source Code

      module manure_allocation_module
    
      use fertilizer_data_module
    
      implicit none
            
      !manure demand source and amount
      type manure_demand_amount
        integer :: mallo_obj = 0
        integer :: src_obj = 0
        real :: app_t_ha = 0.
        integer :: app_method = 0
      end type manure_demand_amount
      type (manure_demand_amount) :: manure_amtz
      
      !manure source balance - storage, produced, withdrawan of the allocation object
      type source_manure_output
        real :: stor = 0.               !current manure stored - tons
        real :: prod = 0.               !mannure produced - tons
        real :: withdr = 0.             !manure withdrawal from all demand objects - tons
      end type source_manure_output
      type (source_manure_output) :: malloz

      !manure source objects
      type manure_source_objects
        integer :: num = 0                      !source object number
        character (len=3) :: mois_typ = ""      !wet or dry
        character (len=25) :: manure_typ = ""   !points to fertilizer.frt
        real :: lat = 0.                        !latitude
        real :: long = 0.                       !longitude
        real :: stor_init = 0.                  !initial storage - tons
        real :: stor_max = 0.                   !maximum storage - tons
        real, dimension (12) :: prod_mon = 0.   !average monthly manure produced - tons/month
        integer :: fertdb = 0                   !fertilizer database number (fertilizer.frt)
        type (source_manure_output) :: bal_d    !daily amount - storage, produced, withdrawn from the source - tons
        type (source_manure_output) :: bal_m    !monthly amount - storage, produced, withdrawn from the source - tons
        type (source_manure_output) :: bal_y    !yearly amount - storage, produced, withdrawn from the source - tons
        type (source_manure_output) :: bal_a    !ave annual amount - storage, produced, withdrawn from the source - tons
      end type manure_source_objects

      !manure demand objects
      type manure_demand_objects
        integer :: num = 0                      !demand object number
        character (len=10) :: ob_typ = ""       !hru (for application) or muni (treatmentb) or divert (interbasin diversion)
        integer :: ob_num = 0                   !number of the object type
        character (len=25) :: dtbl = ""         !decision table name for manure/fert application
        character (len=2) :: right = ""         !manure right (sr -senior or jr - junior right
        integer :: dtbl_num = 0
        type (manure_demand_amount) :: manure_amt
        real, dimension(:), allocatable :: withdr       !daily amount withdrawn from each source
        real, dimension(:), allocatable :: withdr_m     !amount withdrawn from each source
        real, dimension(:), allocatable :: withdr_y     !amount withdrawn from each source
        real, dimension(:), allocatable :: withdr_a     !amount withdrawn from each source
      end type manure_demand_objects

      !manure allocation object
      type manure_allocation
        character (len=25) :: name = ""         !name of the water allocation object
        character (len=25) :: rule_typ = ""     !rule type to allocate water
        integer :: src_obs = 0                  !number of source objects
        integer :: dmd_obs = 0                  !number of demand objects
        type (source_manure_output) :: tot            !total demand, withdrawal and unmet for entire allocation object
        type (manure_source_objects), dimension(:), allocatable :: src        !dimension by source objects
        type (manure_demand_objects), dimension(:), allocatable :: dmd        !dimension by demand objects
      end type manure_allocation
      type (manure_allocation), dimension(:), allocatable :: mallo            !dimension by water allocation objects

      type mallo_header            
        character(len=6) :: day      =   "  jday"
        character(len=6) :: mo       =   "   mon"
        character(len=6) :: day_mo   =   " day "
        character(len=6) :: yrc      =   " yr  "
        character(len=8) :: idmd     =   " unit   "
        character(len=16) :: dmd_typ  =  "dmd_typ         "
        character(len=16) :: dmd_num =   "    dmd_num     "
        character(len=12) :: src1_obj =  "   src1_obj "
        character(len=12) :: src1_typ =  " src1_typ   "
        character(len=12)  :: src1_num = " src1_num   "
        character(len=15) :: dmd1  =     "    demand     "      !! ha-m     |demand - muni or irrigation       
        character(len=15) :: s1out  =   "src1_withdraw  "       !! ha-m     |withdrawal from source 1
        character(len=12) :: s1un =    "  src1_unmet"          !! ha-m     |unmet from source 1 
        character(len=12) :: src2_typ =  " src2_typ   "
        character(len=12)  :: src2_num = " src2_num   "
        character(len=15) :: dmd2  =     "    demand     "      !! ha-m     |demand - muni or irrigation       
        character(len=15) :: s2out  =   "src2_withdraw  "       !! ha-m     |withdrawal from source 2
        character(len=12) :: s2un =    "  src2_unmet"          !! ha-m     |unmet from source 2           
        character(len=12) :: src3_typ =  " src3_typ   "
        character(len=12)  :: src3_num = " src3_num   "
        character(len=15) :: dmd3  =     "    demand     "      !! ha-m     |demand - muni or irrigation       
        character(len=15) :: s3out  =   "src3_withdraw  "       !! ha-m     |withdrawal from source 3
        character(len=12) :: s3un =    "  src3_unmet"          !! ha-m     |unmet from source 3 
        end type mallo_header
      type (mallo_header) :: mallo_hdr

      type mallo_header_units         
        character (len=8) :: day      =  "        "
        character (len=8) :: mo       =  "        "
        character (len=8) :: day_mo   =  "        "
        character (len=8) :: yrc      =  "        "
        character (len=8) :: idmd     =  "        "
        character (len=16) :: dmd_typ  =  "                "
        character (len=16) :: dmd_num  =  "                "
        character (len=12) :: src1_obj =  "            "
        character (len=12) :: src1_typ =  "            "
        character (len=8) :: src1_num =  "        "
        character (len=15) :: dmd1 =      "m^3            "            !! ha-m    |demand - muni or irrigation
        character (len=15) :: s1out =     "m^3            "            !! ha-m    |withdrawal from source 1       
        character (len=9) :: s1un =      "m^3      "                   !! ha-m    |unmet from source 1 
        character (len=15) :: src2_typ =  "               "
        character (len=15) :: src2_num =  "               "
        character (len=15) :: dmd2 =      "m^3            "        !! ha-m    |demand - muni or irrigation
        character (len=15) :: s2out =     "m^3            "        !! ha-m    |withdrawal from source 2       
        character (len=15) :: s2un =      "m^3            "        !! ha-m    |unmet from source 2        
        character (len=15) :: src3_typ =  "               "
        character (len=15) :: src3_num =  "               "
        character (len=15) :: dmd3 =      "m^3            "        !! ha-m    |demand - muni or irrigation
        character (len=15) :: s3out =     "m^3            "        !! ha-m    |withdrawal from source 3       
        character (len=15) :: s3un =      "m^3            "        !! ha-m    |unmet from source 3   
        end type mallo_header_units
      type (mallo_header_units) :: mallo_hdr_units 
      
      interface operator (+)
        module procedure mallout_add
      end interface

      interface operator (/)
        module procedure mallo_div_const
      end interface   

      contains

      !! routines for hydrograph module
      function mallout_add (mallo1, mallo2) result (mallo3)
        type (source_manure_output), intent (in) :: mallo1
        type (source_manure_output), intent (in) :: mallo2
        type (source_manure_output) :: mallo3
        mallo3%stor = mallo1%stor
        mallo3%prod = mallo1%prod + mallo2%prod
        mallo3%withdr = mallo1%withdr + mallo2%withdr
      end function mallout_add

      function mallo_div_const (mallo1, const) result (mallo2)
        type (source_manure_output), intent (in) :: mallo1
        real, intent (in) :: const
        type (source_manure_output) :: mallo2
        mallo2%stor = mallo1%stor
        mallo2%prod = mallo1%prod / const
        mallo2%withdr = mallo1%withdr / const
      end function mallo_div_const

      end module manure_allocation_module