diff --git a/src/DomainType.f90 b/src/DomainType.f90 index b4223d86..4848c949 100644 --- a/src/DomainType.f90 +++ b/src/DomainType.f90 @@ -1,7 +1,7 @@ module DomainType - use NamelistRead, only: namelist_type - + use NamelistRead, only: namelist_type + use DomainGridType, only: domaingrid_type implicit none save private @@ -43,18 +43,21 @@ module DomainType procedure, public :: Init procedure, private :: InitAllocate procedure, private :: InitDefault + procedure, private :: InitTransfer end type domain_type contains - subroutine Init(this, namelist) + subroutine Init(this, namelist, domaingrid) - class(domain_type) :: this - type(namelist_type) :: namelist + class(domain_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(domaingrid_type), intent(in) :: domaingrid call this%InitAllocate(namelist) call this%InitDefault() + call this%InitTransfer(domaingrid) end subroutine Init @@ -108,6 +111,29 @@ subroutine InitDefault(this) end subroutine InitDefault + subroutine InitTransfer(this,domaingrid) + + class(domain_type), intent(inout) :: this + type(domaingrid_type), intent(in) :: domaingrid + + this%DT = domaingrid%DT + this%dx = domaingrid%dx + this%dy = domaingrid%dy + this%n_x = domaingrid%n_x + this%n_y = domaingrid%n_y + this%startdate = domaingrid%startdate + this%enddate = domaingrid%enddate + this%nowdate = domaingrid%nowdate + this%start_datetime = domaingrid%start_datetime + this%end_datetime = domaingrid%end_datetime + this%curr_datetime = domaingrid%sim_datetimes(domaingrid%itime) + this%itime = domaingrid%itime + this%ntime = domaingrid%ntime + this%time_dbl = domaingrid%time_dbl + this%ZREF = domaingrid%ZREF + + end subroutine InitTransfer + end module DomainType \ No newline at end of file diff --git a/src/DomainTypeTransfer.f90 b/src/DomainTypeTransfer.f90 index bac9d553..24962f23 100644 --- a/src/DomainTypeTransfer.f90 +++ b/src/DomainTypeTransfer.f90 @@ -16,25 +16,11 @@ subroutine DomainVarInTransfer(domain, domaingrid, ix, iy) integer, intent(in) :: ix integer, intent(in) :: iy - domain%DT = domaingrid%DT domain%ix = ix domain%iy = iy - domain%dx = domaingrid%dx - domain%dy = domaingrid%dy - domain%n_x = domaingrid%n_x - domain%n_y = domaingrid%n_y - domain%startdate = domaingrid%startdate - domain%enddate = domaingrid%enddate - domain%nowdate = domaingrid%nowdate - domain%start_datetime = domaingrid%start_datetime - domain%end_datetime = domaingrid%end_datetime domain%curr_datetime = domaingrid%sim_datetimes(domaingrid%itime) - domain%itime = domaingrid%itime - domain%ntime = domaingrid%ntime - domain%time_dbl = domaingrid%time_dbl domain%lat = domaingrid%lat(ix,iy) - domain%lon = domaingrid%lon(ix,iy) - domain%ZREF = domaingrid%ZREF + domain%lon = domaingrid%lon(ix,iy) domain%terrain_slope = domaingrid%terrain_slope(ix,iy) domain%azimuth = domaingrid%azimuth(ix,iy) domain%vegtyp = domaingrid%vegtyp(ix,iy) @@ -60,7 +46,6 @@ subroutine DomainVarOutTransfer(domain, domaingrid, ix, iy) domaingrid%zsoil(ix,iy,:) = domain%zsoil(:) domaingrid%dzsnso(ix,iy,:) = domain%dzsnso(:) domaingrid%zsnso(ix,iy,:) = domain%zsnso(:) - domaingrid%nowdate = domain%nowdate !this needs to be kept here until nowdate is updated in domaingriddedDriverModule end subroutine DomainVarOutTransfer diff --git a/src/EnergyType.f90 b/src/EnergyType.f90 index a28c8e20..bd76b803 100644 --- a/src/EnergyType.f90 +++ b/src/EnergyType.f90 @@ -1,7 +1,8 @@ module EnergyType - use NamelistRead, only: namelist_type - + use NamelistRead, only: namelist_type + use EnergyGridType, only: energygrid_type + implicit none save private @@ -161,26 +162,28 @@ module EnergyType procedure, public :: Init procedure, private :: InitAllocate procedure, private :: InitDefault - procedure, public :: InitTransfer + procedure, private :: InitTransfer end type energy_type contains - subroutine Init(this, namelist) + subroutine Init(this, namelist, energygrid) - class(energy_type) :: this - type(namelist_type) :: namelist + class(energy_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(energygrid_type), intent(in) :: energygrid call this%InitAllocate(namelist) call this%InitDefault() + call this%InitTransfer(energygrid) end subroutine Init subroutine InitAllocate(this, namelist) - class(energy_type) :: this - type(namelist_type) :: namelist + class(energy_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist associate(nsnow => namelist%nsnow, & nsoil => namelist%nsoil) @@ -361,11 +364,13 @@ subroutine InitDefault(this) end subroutine InitDefault - subroutine InitTransfer(this, namelist) + subroutine InitTransfer(this, energygrid) - class(energy_type) :: this - type(namelist_type) :: namelist + class(energy_type), intent(inout) :: this + type(energygrid_type), intent(in) :: energygrid + !Nothing to do + end subroutine InitTransfer end module EnergyType \ No newline at end of file diff --git a/src/ForcingType.f90 b/src/ForcingType.f90 index 1be174f3..67fcf98a 100644 --- a/src/ForcingType.f90 +++ b/src/ForcingType.f90 @@ -1,5 +1,7 @@ module ForcingType +use NamelistRead, only: namelist_type +use ForcingGridType, only: forcinggrid_type implicit none save private @@ -47,23 +49,27 @@ module ForcingType procedure, public :: Init procedure, private :: InitAllocate procedure, private :: InitDefault + procedure, private :: InitTransfer end type forcing_type contains - subroutine Init(this) + subroutine Init(this,namelist,forcinggrid) - class(forcing_type) :: this + class(forcing_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(forcinggrid_type), intent(in) :: forcinggrid call this%InitAllocate() call this%InitDefault() + call this%InitTransfer(forcinggrid) end subroutine Init subroutine InitAllocate(this) - class(forcing_type) :: this + class(forcing_type), intent(inout) :: this if(.NOT.allocated(this%SOLAD)) allocate(this%SOLAD (2)) if(.NOT.allocated(this%SOLAI)) allocate(this%SOLAI (2)) @@ -72,7 +78,7 @@ end subroutine InitAllocate subroutine InitDefault(this) - class(forcing_type) :: this + class(forcing_type), intent(inout) :: this this%SFCPRS = huge(1.0) this%SFCPRS = huge(1.0) @@ -119,4 +125,14 @@ subroutine InitDefault(this) end subroutine InitDefault + subroutine InitTransfer(this,forcinggrid) + + class(forcing_type), intent(inout) :: this + type(forcinggrid_type), intent(in) :: forcinggrid + + this%JULIAN = forcinggrid%JULIAN + this%YEARLEN = forcinggrid%YEARLEN + + end subroutine InitTransfer + end module ForcingType diff --git a/src/ForcingTypeTransfer.f90 b/src/ForcingTypeTransfer.f90 index e932c988..f47b8413 100644 --- a/src/ForcingTypeTransfer.f90 +++ b/src/ForcingTypeTransfer.f90 @@ -41,8 +41,6 @@ subroutine ForcingVarInTransfer(forcing, forcinggrid, ix, iy) forcing%RHOAIR = forcinggrid%RHOAIR(ix,iy) forcing%FPICE = forcinggrid%FPICE(ix,iy) forcing%SWDOWN = forcinggrid%SWDOWN(ix,iy) - forcing%JULIAN = forcinggrid%JULIAN - forcing%YEARLEN = forcinggrid%YEARLEN forcing%SOLAD(:) = forcinggrid%SOLAD(ix,iy,:) forcing%SOLAI(:) = forcinggrid%SOLAI(ix,iy,:) diff --git a/src/LevelsType.f90 b/src/LevelsType.f90 index 450e09b2..e2bbf046 100644 --- a/src/LevelsType.f90 +++ b/src/LevelsType.f90 @@ -1,5 +1,7 @@ module LevelsType +use NamelistRead, only: namelist_type +use LevelsGridType, only: levelsgrid_type implicit none save private @@ -13,23 +15,27 @@ module LevelsType contains procedure, public :: Init - procedure, private :: InitDefault + procedure, private :: InitDefault + procedure, private :: InitTransfer end type levels_type contains - subroutine Init(this) + subroutine Init(this,namelist,levelsgrid) - class(levels_type) :: this + class(levels_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(levelsgrid_type), intent(in) :: levelsgrid call this%InitDefault() + call this%InitTransfer(levelsgrid) end subroutine Init subroutine InitDefault(this) - class(levels_type) :: this + class(levels_type), intent(inout) :: this this%nsoil = huge(1) this%nsnow = huge(1) @@ -37,4 +43,15 @@ subroutine InitDefault(this) end subroutine InitDefault + subroutine InitTransfer(this,levelsgrid) + + class(levels_type), intent(inout) :: this + type(levelsgrid_type), intent(in) :: levelsgrid + + this%nsoil = levelsgrid%nsoil + this%nsnow = levelsgrid%nsnow + this%nveg = levelsgrid%nveg + + end subroutine InitTransfer + end module LevelsType diff --git a/src/LevelsTypeTransfer.f90 b/src/LevelsTypeTransfer.f90 index e7390809..ac38dd68 100644 --- a/src/LevelsTypeTransfer.f90 +++ b/src/LevelsTypeTransfer.f90 @@ -16,9 +16,7 @@ subroutine LevelsVarInTransfer(levels, levelsgrid, ix, iy) integer, intent(in) :: ix integer, intent(in) :: iy - levels%nsoil = levelsgrid%nsoil - levels%nsnow = levelsgrid%nsnow - levels%nveg = levelsgrid%nveg + ! Nothing to do end subroutine LevelsVarInTransfer diff --git a/src/OptionsType.f90 b/src/OptionsType.f90 index 69d8b85d..a9640b15 100644 --- a/src/OptionsType.f90 +++ b/src/OptionsType.f90 @@ -1,5 +1,7 @@ module OptionsType +use NamelistRead, only: namelist_type +use OptionsGridType, only: optionsgrid_type implicit none save private @@ -107,23 +109,27 @@ module OptionsType contains procedure, public :: Init - procedure, private :: InitDefault + procedure, private :: InitDefault + procedure, private :: InitTransfer end type options_type contains - subroutine Init(this) + subroutine Init(this,namelist,optionsgrid) - class(options_type), intent(out) :: this + class(options_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(optionsgrid_type), intent(in) :: optionsgrid call this%InitDefault() + call this%InitTransfer(optionsgrid) end subroutine Init subroutine InitDefault(this) - class(options_type), intent(out) :: this + class(options_type), intent(inout) :: this this%opt_snf = huge(1) this%opt_run = huge(1) @@ -145,4 +151,29 @@ subroutine InitDefault(this) end subroutine InitDefault + subroutine InitTransfer(this,optionsgrid) + + class(options_type), intent(inout) :: this + type(optionsgrid_type), intent(in) :: optionsgrid + + this%opt_snf = optionsgrid%opt_snf + this%opt_run = optionsgrid%opt_run + this%opt_drn = optionsgrid%opt_drn + this%opt_inf = optionsgrid%opt_inf + this%opt_infdv = optionsgrid%opt_infdv + this%dveg = optionsgrid%dveg + this%opt_alb = optionsgrid%opt_alb + this%opt_rad = optionsgrid%opt_rad + this%opt_sfc = optionsgrid%opt_sfc + this%opt_crs = optionsgrid%opt_crs + this%opt_crop = optionsgrid%opt_crop + this%opt_stc = optionsgrid%opt_stc + this%opt_tbot = optionsgrid%opt_tbot + this%opt_frz = optionsgrid%opt_frz + this%opt_btr = optionsgrid%opt_btr + this%opt_rsf = optionsgrid%opt_rsf + this%opt_sub = optionsgrid%opt_sub + + end subroutine InitTransfer + end module OptionsType diff --git a/src/OptionsTypeTransfer.f90 b/src/OptionsTypeTransfer.f90 index d992ffe9..067ceb5e 100644 --- a/src/OptionsTypeTransfer.f90 +++ b/src/OptionsTypeTransfer.f90 @@ -7,39 +7,27 @@ module OptionsTypeTransfer contains - subroutine OptionsVarInTransfer(options, optionsgrid) + subroutine OptionsVarInTransfer(options, optionsgrid, ix, iy) implicit none type(options_type), intent(inout) :: options type(optionsgrid_type), intent(in) :: optionsgrid + integer, intent(in) :: ix + integer, intent(in) :: iy - options%opt_snf = optionsgrid%opt_snf - options%opt_run = optionsgrid%opt_run - options%opt_drn = optionsgrid%opt_drn - options%opt_inf = optionsgrid%opt_inf - options%opt_infdv = optionsgrid%opt_infdv - options%dveg = optionsgrid%dveg - options%opt_alb = optionsgrid%opt_alb - options%opt_rad = optionsgrid%opt_rad - options%opt_sfc = optionsgrid%opt_sfc - options%opt_crs = optionsgrid%opt_crs - options%opt_crop = optionsgrid%opt_crop - options%opt_stc = optionsgrid%opt_stc - options%opt_tbot = optionsgrid%opt_tbot - options%opt_frz = optionsgrid%opt_frz - options%opt_btr = optionsgrid%opt_btr - options%opt_rsf = optionsgrid%opt_rsf - options%opt_sub = optionsgrid%opt_sub + ! Nothing to do end subroutine OptionsVarInTransfer - subroutine OptionsVarOutTransfer(options, optionsgrid) + subroutine OptionsVarOutTransfer(options, optionsgrid, ix, iy) implicit none type(options_type), intent(in) :: options type(optionsgrid_type), intent(inout) :: optionsgrid + integer, intent(in) :: ix + integer, intent(in) :: iy ! Nothing to do diff --git a/src/ParametersType.f90 b/src/ParametersType.f90 index 8d2c932b..b983bb8b 100644 --- a/src/ParametersType.f90 +++ b/src/ParametersType.f90 @@ -1,6 +1,7 @@ module ParametersType - use NamelistRead, only: namelist_type + use NamelistRead, only: namelist_type + use ParametersGridType, only: parametersgrid_type implicit none save @@ -147,27 +148,30 @@ module ParametersType procedure, public :: Init procedure, private :: InitAllocate procedure, private :: InitDefault + procedure, private :: InitTransfer end type parameters_type contains - subroutine Init(this, namelist) + subroutine Init(this, namelist, parametersgrid) implicit none - class(parameters_type) :: this - class(namelist_type), intent(in) :: namelist + class(parameters_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(parametersgrid_type), intent(in) :: parametersgrid call this%InitAllocate(namelist) call this%InitDefault() + call this%InitTransfer(parametersgrid) end subroutine Init subroutine InitAllocate(this, namelist) implicit none - class(parameters_type) :: this - class(namelist_type), intent(in) :: namelist + class(parameters_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist associate(nsoil => namelist%nsoil) @@ -205,5 +209,62 @@ subroutine InitDefault(this) end subroutine InitDefault + subroutine InitTransfer(this,parametersgrid) + + implicit none + class(parameters_type), intent(inout) :: this + type(parametersgrid_type), intent(in) :: parametersgrid + + this%ISURBAN = parametersgrid%ISURBAN + this%ISWATER = parametersgrid%ISWATER + this%ISBARREN = parametersgrid%ISBARREN + this%ISICE = parametersgrid%ISICE + this%ISCROP = parametersgrid%ISCROP + this%EBLFOREST = parametersgrid%EBLFOREST + this%NATURAL = parametersgrid%NATURAL + this%LOW_DENSITY_RESIDENTIAL = parametersgrid%LOW_DENSITY_RESIDENTIAL + this%HIGH_DENSITY_RESIDENTIAL = parametersgrid%HIGH_DENSITY_RESIDENTIAL + this%HIGH_INTENSITY_INDUSTRIAL = parametersgrid%HIGH_INTENSITY_INDUSTRIAL + this%SB = parametersgrid%SB + this%VKC = parametersgrid%VKC + this%TFRZ = parametersgrid%TFRZ + this%HSUB = parametersgrid%HSUB + this%HVAP = parametersgrid%HVAP + this%HFUS = parametersgrid%HFUS + this%CWAT = parametersgrid%CWAT + this%CICE = parametersgrid%CICE + this%CPAIR = parametersgrid%CPAIR + this%TKWAT = parametersgrid%TKWAT + this%TKICE = parametersgrid%TKICE + this%TKAIR = parametersgrid%TKAIR + this%RAIR = parametersgrid%RAIR + this%RW = parametersgrid%RW + this%DENH2O = parametersgrid%DENH2O + this%DENICE = parametersgrid%DENICE + this%THKW = parametersgrid%THKW + this%THKO = parametersgrid%THKO + this%THKQTZ = parametersgrid%THKQTZ + this%SWEMX = parametersgrid%SWEMX + this%TAU0 = parametersgrid%TAU0 + this%GRAIN_GROWTH = parametersgrid%GRAIN_GROWTH + this%EXTRA_GROWTH = parametersgrid%EXTRA_GROWTH + this%DIRT_SOOT = parametersgrid%DIRT_SOOT + this%BATS_COSZ = parametersgrid%BATS_COSZ + this%BATS_VIS_NEW = parametersgrid%BATS_VIS_NEW + this%BATS_NIR_NEW = parametersgrid%BATS_NIR_NEW + this%BATS_VIS_AGE = parametersgrid%BATS_VIS_AGE + this%BATS_NIR_AGE = parametersgrid%BATS_NIR_AGE + this%BATS_VIS_DIR = parametersgrid%BATS_VIS_DIR + this%BATS_NIR_DIR = parametersgrid%BATS_NIR_DIR + this%BETADS = parametersgrid%BETADS + this%BETAIS = parametersgrid%BETAIS + this%NBAND = parametersgrid%NBAND + this%MPE = parametersgrid%MPE + this%O2 = parametersgrid%O2 + this%CO2 = parametersgrid%CO2 + this%GRAV = parametersgrid%GRAV + + end subroutine InitTransfer + end module ParametersType \ No newline at end of file diff --git a/src/ParametersTypeTransfer.f90 b/src/ParametersTypeTransfer.f90 index 4c97a5a6..d673065c 100644 --- a/src/ParametersTypeTransfer.f90 +++ b/src/ParametersTypeTransfer.f90 @@ -83,50 +83,9 @@ subroutine ParametersVarInTransfer(parameters, parametersgrid, ix, iy) parameters%RHOS(:) = parametersgrid%RHOS(ix,iy,:) parameters%TAUL(:) = parametersgrid%TAUL(ix,iy,:) parameters%TAUS(:) = parametersgrid%TAUS(ix,iy,:) - parameters%ISURBAN = parametersgrid%ISURBAN - parameters%ISWATER = parametersgrid%ISWATER - parameters%ISBARREN = parametersgrid%ISBARREN - parameters%ISICE = parametersgrid%ISICE - parameters%ISCROP = parametersgrid%ISCROP - parameters%EBLFOREST = parametersgrid%EBLFOREST - parameters%NATURAL = parametersgrid%NATURAL - parameters%LOW_DENSITY_RESIDENTIAL = parametersgrid%LOW_DENSITY_RESIDENTIAL - parameters%HIGH_DENSITY_RESIDENTIAL = parametersgrid%HIGH_DENSITY_RESIDENTIAL - parameters%HIGH_INTENSITY_INDUSTRIAL = parametersgrid%HIGH_INTENSITY_INDUSTRIAL - parameters%SB = parametersgrid%SB - parameters%VKC = parametersgrid%VKC - parameters%TFRZ = parametersgrid%TFRZ - parameters%HSUB = parametersgrid%HSUB - parameters%HVAP = parametersgrid%HVAP - parameters%HFUS = parametersgrid%HFUS - parameters%CWAT = parametersgrid%CWAT - parameters%CICE = parametersgrid%CICE - parameters%CPAIR = parametersgrid%CPAIR - parameters%TKWAT = parametersgrid%TKWAT - parameters%TKICE = parametersgrid%TKICE - parameters%TKAIR = parametersgrid%TKAIR - parameters%RAIR = parametersgrid%RAIR - parameters%RW = parametersgrid%RW - parameters%DENH2O = parametersgrid%DENH2O - parameters%DENICE = parametersgrid%DENICE - parameters%THKW = parametersgrid%THKW - parameters%THKO = parametersgrid%THKO - parameters%THKQTZ = parametersgrid%THKQTZ parameters%SSI = parametersgrid%SSI(ix,iy) parameters%MFSNO = parametersgrid%MFSNO(ix,iy) parameters%Z0SNO = parametersgrid%Z0SNO(ix,iy) - parameters%SWEMX = parametersgrid%SWEMX - parameters%TAU0 = parametersgrid%TAU0 - parameters%GRAIN_GROWTH = parametersgrid%GRAIN_GROWTH - parameters%EXTRA_GROWTH = parametersgrid%EXTRA_GROWTH - parameters%DIRT_SOOT = parametersgrid%DIRT_SOOT - parameters%BATS_COSZ = parametersgrid%BATS_COSZ - parameters%BATS_VIS_NEW = parametersgrid%BATS_VIS_NEW - parameters%BATS_NIR_NEW = parametersgrid%BATS_NIR_NEW - parameters%BATS_VIS_AGE = parametersgrid%BATS_VIS_AGE - parameters%BATS_NIR_AGE = parametersgrid%BATS_NIR_AGE - parameters%BATS_VIS_DIR = parametersgrid%BATS_VIS_DIR - parameters%BATS_NIR_DIR = parametersgrid%BATS_NIR_DIR parameters%RSURF_SNOW = parametersgrid%RSURF_SNOW(ix,iy) parameters%RSURF_EXP = parametersgrid%RSURF_EXP(ix,iy) parameters%ALBSAT(:) = parametersgrid%ALBSAT(ix,iy,:) @@ -134,20 +93,13 @@ subroutine ParametersVarInTransfer(parameters, parametersgrid, ix, iy) parameters%ALBICE(:) = parametersgrid%ALBICE(:) parameters%ALBLAK(:) = parametersgrid%ALBLAK(:) parameters%OMEGAS(:) = parametersgrid%OMEGAS(:) - parameters%BETADS = parametersgrid%BETADS - parameters%BETAIS = parametersgrid%BETAIS parameters%EG(:) = parametersgrid%EG(ix,iy,:) parameters%WSLMAX = parametersgrid%WSLMAX(ix,iy) parameters%max_liq_mass_fraction = parametersgrid%max_liq_mass_fraction(ix,iy) parameters%SNOW_RET_FAC = parametersgrid%SNOW_RET_FAC(ix,iy) - parameters%NBAND = parametersgrid%NBAND - parameters%MPE = parametersgrid%MPE parameters%TOPT = parametersgrid%TOPT(ix,iy) - parameters%O2 = parametersgrid%O2 - parameters%CO2 = parametersgrid%CO2 parameters%PSIWLT = parametersgrid%PSIWLT(ix,iy) parameters%TBOT = parametersgrid%TBOT(ix,iy) - parameters%GRAV = parametersgrid%GRAV parameters%rain_snow_thresh = parametersgrid%rain_snow_thresh(ix,iy) end subroutine @@ -161,138 +113,13 @@ subroutine ParametersVarOutTransfer(parameters, parametersgrid, ix, iy) integer, intent(in) :: ix integer, intent(in) :: iy - parametersgrid%bexp(ix,iy,:) = parameters%bexp(:) - parametersgrid%smcmax(ix,iy,:) = parameters%smcmax(:) - parametersgrid%smcwlt(ix,iy,:) = parameters%smcwlt(:) - parametersgrid%smcref(ix,iy,:) = parameters%smcref(:) - parametersgrid%dksat(ix,iy,:) = parameters%dksat(:) - parametersgrid%dwsat(ix,iy,:) = parameters%dwsat(:) - parametersgrid%psisat(ix,iy,:) = parameters%psisat(:) - parametersgrid%bvic(ix,iy) = parameters%bvic - parametersgrid%AXAJ(ix,iy) = parameters%AXAJ - parametersgrid%BXAJ(ix,iy) = parameters%BXAJ - parametersgrid%XXAJ(ix,iy) = parameters%XXAJ - parametersgrid%BBVIC(ix,iy) = parameters%BBVIC - parametersgrid%G(ix,iy) = parameters%G - parametersgrid%QUARTZ(ix,iy) = parameters%QUARTZ - parametersgrid%kdt(ix,iy) = parameters%kdt - parametersgrid%refkdt(ix,iy) = parameters%refkdt - parametersgrid%refdk(ix,iy) = parameters%refdk - parametersgrid%csoil(ix,iy) = parameters%csoil - parametersgrid%Z0(ix,iy) = parameters%Z0 - parametersgrid%CZIL(ix,iy) = parameters%CZIL - parametersgrid%ZBOT(ix,iy) = parameters%ZBOT - parametersgrid%frzx(ix,iy) = parameters%frzx - parametersgrid%slope(ix,iy) = parameters%slope - parametersgrid%timean(ix,iy) = parameters%timean - parametersgrid%fsatmx(ix,iy) = parameters%fsatmx - parametersgrid%ZWT_INIT(ix,iy) = parameters%ZWT_INIT - parametersgrid%urban_flag(ix,iy) = parameters%urban_flag - parametersgrid%LAIM(ix,iy,:) = parameters%LAIM(:) - parametersgrid%SAIM(ix,iy,:) = parameters%SAIM(:) parametersgrid%LAI(ix,iy) = parameters%LAI parametersgrid%SAI(ix,iy) = parameters%SAI - parametersgrid%CH2OP(ix,iy) = parameters%CH2OP - parametersgrid%NROOT(ix,iy) = parameters%NROOT - parametersgrid%HVT(ix,iy) = parameters%HVT - parametersgrid%HVB(ix,iy) = parameters%HVB - parametersgrid%TMIN(ix,iy) = parameters%TMIN - parametersgrid%SHDFAC(ix,iy) = parameters%SHDFAC - parametersgrid%SHDMAX(ix,iy) = parameters%SHDMAX - parametersgrid%Z0MVT(ix,iy) = parameters%Z0MVT - parametersgrid%RC(ix,iy) = parameters%RC - parametersgrid%XL(ix,iy) = parameters%XL - parametersgrid%BP(ix,iy) = parameters%BP - parametersgrid%FOLNMX(ix,iy) = parameters%FOLNMX - parametersgrid%QE25(ix,iy) = parameters%QE25 - parametersgrid%VCMX25(ix,iy) = parameters%VCMX25 - parametersgrid%MP(ix,iy) = parameters%MP - parametersgrid%RGL(ix,iy) = parameters%RGL - parametersgrid%RSMIN(ix,iy) = parameters%RSMIN - parametersgrid%HS(ix,iy) = parameters%HS - parametersgrid%AKC(ix,iy) = parameters%AKC - parametersgrid%AKO(ix,iy) = parameters%AKO - parametersgrid%AVCMX(ix,iy) = parameters%AVCMX - parametersgrid%RSMAX(ix,iy) = parameters%RSMAX - parametersgrid%CWP(ix,iy) = parameters%CWP - parametersgrid%C3PSN(ix,iy) = parameters%C3PSN - parametersgrid%DLEAF(ix,iy) = parameters%DLEAF - parametersgrid%KC25(ix,iy) = parameters%KC25 - parametersgrid%KO25(ix,iy) = parameters%KO25 parametersgrid%ELAI(ix,iy) = parameters%ELAI parametersgrid%ESAI(ix,iy) = parameters%ESAI parametersgrid%VAI(ix,iy) = parameters%VAI parametersgrid%VEG(ix,iy) = parameters%VEG parametersgrid%FVEG(ix,iy) = parameters%FVEG - parametersgrid%RHOL(ix,iy,:) = parameters%RHOL(:) - parametersgrid%RHOS(ix,iy,:) = parameters%RHOS(:) - parametersgrid%TAUL(ix,iy,:) = parameters%TAUL(:) - parametersgrid%TAUS(ix,iy,:) = parameters%TAUS(:) - parametersgrid%ISURBAN = parameters%ISURBAN - parametersgrid%ISWATER = parameters%ISWATER - parametersgrid%ISBARREN = parameters%ISBARREN - parametersgrid%ISICE = parameters%ISICE - parametersgrid%ISCROP = parameters%ISCROP - parametersgrid%EBLFOREST = parameters%EBLFOREST - parametersgrid%NATURAL = parameters%NATURAL - parametersgrid%LOW_DENSITY_RESIDENTIAL = parameters%LOW_DENSITY_RESIDENTIAL - parametersgrid%HIGH_DENSITY_RESIDENTIAL = parameters%HIGH_DENSITY_RESIDENTIAL - parametersgrid%HIGH_INTENSITY_INDUSTRIAL = parameters%HIGH_INTENSITY_INDUSTRIAL - parametersgrid%SB = parameters%SB - parametersgrid%VKC = parameters%VKC - parametersgrid%TFRZ = parameters%TFRZ - parametersgrid%HSUB = parameters%HSUB - parametersgrid%HVAP = parameters%HVAP - parametersgrid%HFUS = parameters%HFUS - parametersgrid%CWAT = parameters%CWAT - parametersgrid%CICE = parameters%CICE - parametersgrid%CPAIR = parameters%CPAIR - parametersgrid%TKWAT = parameters%TKWAT - parametersgrid%TKICE = parameters%TKICE - parametersgrid%TKAIR = parameters%TKAIR - parametersgrid%RAIR = parameters%RAIR - parametersgrid%RW = parameters%RW - parametersgrid%DENH2O = parameters%DENH2O - parametersgrid%DENICE = parameters%DENICE - parametersgrid%THKW = parameters%THKW - parametersgrid%THKO = parameters%THKO - parametersgrid%THKQTZ = parameters%THKQTZ - parametersgrid%SSI(ix,iy) = parameters%SSI - parametersgrid%MFSNO(ix,iy) = parameters%MFSNO - parametersgrid%Z0SNO(ix,iy) = parameters%Z0SNO - parametersgrid%SWEMX = parameters%SWEMX - parametersgrid%TAU0 = parameters%TAU0 - parametersgrid%GRAIN_GROWTH = parameters%GRAIN_GROWTH - parametersgrid%EXTRA_GROWTH = parameters%EXTRA_GROWTH - parametersgrid%DIRT_SOOT = parameters%DIRT_SOOT - parametersgrid%BATS_COSZ = parameters%BATS_COSZ - parametersgrid%BATS_VIS_NEW = parameters%BATS_VIS_NEW - parametersgrid%BATS_NIR_NEW = parameters%BATS_NIR_NEW - parametersgrid%BATS_VIS_AGE = parameters%BATS_VIS_AGE - parametersgrid%BATS_NIR_AGE = parameters%BATS_NIR_AGE - parametersgrid%BATS_VIS_DIR = parameters%BATS_VIS_DIR - parametersgrid%BATS_NIR_DIR = parameters%BATS_NIR_DIR - parametersgrid%RSURF_SNOW(ix,iy) = parameters%RSURF_SNOW - parametersgrid%RSURF_EXP(ix,iy) = parameters%RSURF_EXP - parametersgrid%ALBSAT(ix,iy,:) = parameters%ALBSAT(:) - parametersgrid%ALBDRY(ix,iy,:) = parameters%ALBDRY(:) - parametersgrid%ALBICE(:) = parameters%ALBICE(:) - parametersgrid%ALBLAK(:) = parameters%ALBLAK(:) - parametersgrid%OMEGAS(:) = parameters%OMEGAS(:) - parametersgrid%BETADS = parameters%BETADS - parametersgrid%BETAIS = parameters%BETAIS - parametersgrid%EG(ix,iy,:) = parameters%EG(:) - parametersgrid%WSLMAX(ix,iy) = parameters%WSLMAX - parametersgrid%max_liq_mass_fraction(ix,iy) = parameters%max_liq_mass_fraction - parametersgrid%SNOW_RET_FAC(ix,iy) = parameters%SNOW_RET_FAC - parametersgrid%NBAND = parameters%NBAND - parametersgrid%MPE = parameters%MPE - parametersgrid%TOPT(ix,iy) = parameters%TOPT - parametersgrid%O2 = parameters%O2 - parametersgrid%CO2 = parameters%CO2 - parametersgrid%PSIWLT(ix,iy) = parameters%PSIWLT - parametersgrid%GRAV = parameters%GRAV - parametersgrid%rain_snow_thresh(ix,iy) = parameters%rain_snow_thresh end subroutine ParametersVarOutTransfer diff --git a/src/RunModule.f90 b/src/RunModule.f90 index 4ea30e07..e708fce3 100644 --- a/src/RunModule.f90 +++ b/src/RunModule.f90 @@ -312,7 +312,6 @@ SUBROUTINE solve_noahowp_grid(noahowpgrid) integer :: iunit = 10 real :: read_UU, read_VV, read_SFCTMP, read_Q2, read_SFCPRS !to read in forcing real :: read_SOLDN, read_LWDN, read_PRCP !to read in forcing - integer :: idt !to iterate nowdate associate(namelist => noahowpgrid%namelist, & domain => noahowp%domain, & @@ -350,15 +349,15 @@ SUBROUTINE solve_noahowp_grid(noahowpgrid) #endif !--------------------------------------------------------------------- - ! Initialize noahowp_type variables + ! Initialize noahowp_type subtypes !--------------------------------------------------------------------- - call levels%Init() - call domain%Init(namelist) - call options%Init() - call parameters%Init(namelist) - call forcing%Init() - call energy%Init(namelist) - call water%Init(namelist) + call levels%Init (namelist, levelsgrid ) + call domain%Init (namelist, domaingrid ) + call options%Init (namelist, optionsgrid ) + call parameters%Init (namelist, parametersgrid) + call forcing%Init (namelist, forcinggrid ) + call energy%Init (namelist, energygrid ) + call water%Init (namelist, watergrid ) !--------------------------------------------------------------------- ! Iterate over x and y dimensions @@ -367,13 +366,13 @@ SUBROUTINE solve_noahowp_grid(noahowpgrid) do iy = 1, noahowpgrid%domaingrid%n_y !--------------------------------------------------------------------- - ! Transfer variable values from noahowpgrid_type to noahowp_type + ! Transfer all other variable values from noahowpgrid_type to noahowp_type !--------------------------------------------------------------------- call DomainVarInTransfer (domain, domaingrid, ix, iy) call LevelsVarInTransfer (levels, levelsgrid, ix, iy) call EnergyVarInTransfer (energy, energygrid, ix, iy) call ForcingVarInTransfer (forcing, forcinggrid, ix, iy) - call OptionsVarInTransfer (options, optionsgrid ) + call OptionsVarInTransfer (options, optionsgrid, ix, iy) call ParametersVarInTransfer (parameters, parametersgrid, ix, iy) call WaterVarInTransfer (water, watergrid, ix, iy) @@ -389,7 +388,7 @@ SUBROUTINE solve_noahowp_grid(noahowpgrid) call LevelsVarOutTransfer (levels, levelsgrid, ix, iy) call EnergyVarOutTransfer (energy, energygrid, ix, iy) call ForcingVarOutTransfer (forcing, forcinggrid, ix, iy) - call OptionsVarOutTransfer (options, optionsgrid ) + call OptionsVarOutTransfer (options, optionsgrid, ix, iy) call ParametersVarOutTransfer (parameters, parametersgrid, ix, iy) call WaterVarOutTransfer (water, watergrid, ix, iy) @@ -403,10 +402,6 @@ END SUBROUTINE solve_noahowp_grid SUBROUTINE solve_noahowp(noahowp) type (noahowp_type), intent (inout) :: noahowp - integer, parameter :: iunit = 10 ! Fortran unit number to attach to the opened file - integer :: forcing_timestep ! integer time step (set to dt) for some subroutine calls - integer :: ierr ! error code for reading forcing data - integer :: curr_yr, curr_mo, curr_dy, curr_hr, curr_min, curr_sec ! current UNIX timestep details associate(levels => noahowp%levels, & domain => noahowp%domain, & diff --git a/src/WaterType.f90 b/src/WaterType.f90 index fac81e0e..36df7585 100644 --- a/src/WaterType.f90 +++ b/src/WaterType.f90 @@ -1,6 +1,7 @@ module WaterType -use NamelistRead, only: namelist_type +use NamelistRead, only: namelist_type +use WaterGridType, only: watergrid_type implicit none save @@ -83,26 +84,29 @@ module WaterType procedure, public :: Init procedure, private :: InitAllocate - procedure, private :: InitDefault + procedure, private :: InitDefault + procedure, private :: InitTransfer end type water_type contains - subroutine Init(this, namelist) + subroutine Init(this, namelist, watergrid) - class(water_type) :: this - type(namelist_type) :: namelist + class(water_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist + type(watergrid_type), intent(in) :: watergrid call this%InitAllocate(namelist) call this%InitDefault() + call this%InitTransfer(watergrid) end subroutine Init subroutine InitAllocate(this, namelist) - class(water_type) :: this - type(namelist_type) :: namelist + class(water_type), intent(inout) :: this + type(namelist_type), intent(in) :: namelist associate(nsoil => namelist%nsoil, & nsnow => namelist%nsnow) @@ -129,7 +133,7 @@ end subroutine InitAllocate subroutine InitDefault(this) - class(water_type) :: this + class(water_type), intent(inout) :: this this%qinsur = huge(1.0) this%qseva = huge(1.0) @@ -202,4 +206,14 @@ subroutine InitDefault(this) end subroutine InitDefault + subroutine InitTransfer(this,watergrid) + + class(water_type), intent(inout) :: this + type(watergrid_type), intent(in) :: watergrid + + ! Nothing to do + + end subroutine InitTransfer + + end module WaterType