Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions drivers/erf/ConfigVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,26 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%nmlist%OptRunoffSurface = NoahmpIO%IOPT_RUNSRF
noahmp%config%nmlist%OptRunoffSubsurface = NoahmpIO%IOPT_RUNSUB
noahmp%config%nmlist%OptGlacierTreatment = NoahmpIO%IOPT_GLA
noahmp%config%nmlist%OptSnowCompaction = NoahmpIO%IOPT_COMPACT
noahmp%config%nmlist%OptWetlandModel = NoahmpIO%IOPT_WETLAND

if ( noahmp%config%nmlist%OptSnowAlbedo == 3 ) then ! SNICAR namelist
noahmp%config%nmlist%OptSnicarSnowShape = NoahmpIO%SNICAR_SNOWSHAPE_OPT
noahmp%config%nmlist%OptSnicarRTSolver = NoahmpIO%SNICAR_RTSOLVER_OPT
noahmp%config%nmlist%OptSnicarBandNum = NoahmpIO%SNICAR_BANDNUMBER_OPT
noahmp%config%nmlist%OptSnicarSolarSpec = NoahmpIO%SNICAR_SOLARSPEC_OPT
noahmp%config%nmlist%OptSnicarSnwOptic = NoahmpIO%SNICAR_SNOWOPTICS_OPT
noahmp%config%nmlist%OptSnicarDustOptic = NoahmpIO%SNICAR_DUSTOPTICS_OPT
noahmp%config%nmlist%FlagSnicarSnowBCIntmix = NoahmpIO%SNICAR_SNOWBC_INTMIX
noahmp%config%nmlist%FlagSnicarSnowDustIntmix = NoahmpIO%SNICAR_SNOWDUST_INTMIX
noahmp%config%nmlist%FlagSnicarUseAerosol = NoahmpIO%SNICAR_USE_AEROSOL
noahmp%config%nmlist%FlagSnicarUseOC = NoahmpIO%SNICAR_USE_OC
noahmp%config%nmlist%FlagSnicarAerosolReadTable = NoahmpIO%SNICAR_AEROSOL_READTABLE
endif

! config domain variable
noahmp%config%domain%SurfaceType = 1
noahmp%config%domain%NumSwRadBand = 2
noahmp%config%domain%NumSwRadBand = NoahmpIO%NUMRAD
noahmp%config%domain%SoilColor = 4
noahmp%config%domain%NumCropGrowStage = 8
noahmp%config%domain%FlagSoilProcess = NoahmpIO%calculate_soil
Expand All @@ -74,7 +90,7 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%domain%GridIndexJ = NoahmpIO%J
noahmp%config%domain%MainTimeStep = NoahmpIO%DTBL
noahmp%config%domain%SoilTimeStep = NoahmpIO%DTBL * NoahmpIO%soil_update_steps
noahmp%config%domain%GridSize = NoahmpIO%DX
noahmp%config%domain%GridSize = sqrt(NoahmpIO%DX * NoahmpIO%DY)
noahmp%config%domain%LandUseDataName = NoahmpIO%LLANDUSE
noahmp%config%domain%VegType = NoahmpIO%IVGTYP(I,J)
noahmp%config%domain%CropType = NoahmpIO%CROPCAT(I,J)
Expand All @@ -93,6 +109,14 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%domain%RunoffSlopeType = NoahmpIO%SLOPETYP
noahmp%config%domain%DepthSoilTempBottom = NoahmpIO%ZBOT_TABLE

if ( noahmp%config%nmlist%OptSnowAlbedo == 3 ) then ! SNICAR variables
noahmp%config%domain%NumTempSnwAgeSnicar = NoahmpIO%idx_T_max
noahmp%config%domain%NumTempGradSnwAgeSnicar = NoahmpIO%idx_Tgrd_max
noahmp%config%domain%NumDensitySnwAgeSnicar = NoahmpIO%idx_rhos_max
noahmp%config%domain%NumSnicarRadBand = NoahmpIO%snicar_numrad_snw
noahmp%config%domain%NumRadiusSnwMieSnicar = NoahmpIO%idx_Mie_snw_mx
endif

! the following initialization cannot be done in ConfigVarInitMod
! because the NumSoilLayer and NumSnowLayerMax are initialized with input values in this module
if ( .not. allocated(noahmp%config%domain%DepthSoilLayer) ) &
Expand Down Expand Up @@ -136,7 +160,7 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%domain%VegType = NoahmpIO%NATURAL_TABLE ! set rural vegetation type based on table natural
! urban is handled by explicit urban scheme outside Noah-MP
NoahmpIO%GVFMAX(I,J) = 0.96 * 100.0 ! unit: %
endif
endif
endif

! treatment for crop point
Expand Down
84 changes: 66 additions & 18 deletions drivers/erf/EnergyVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,19 @@ subroutine EnergyVarInTransfer(noahmp, NoahmpIO)
integer :: SoilLayerIndex

! -------------------------------------------------------------------------
associate( &
I => noahmp%config%domain%GridIndexI ,&
J => noahmp%config%domain%GridIndexJ ,&
VegType => noahmp%config%domain%VegType ,&
SoilType => noahmp%config%domain%SoilType ,&
CropType => noahmp%config%domain%CropType ,&
SoilColor => noahmp%config%domain%SoilColor ,&
FlagUrban => noahmp%config%domain%FlagUrban ,&
NumSnowLayerMax => noahmp%config%domain%NumSnowLayerMax ,&
NumSoilLayer => noahmp%config%domain%NumSoilLayer ,&
NumSwRadBand => noahmp%config%domain%NumSwRadBand &
associate( &
I => noahmp%config%domain%GridIndexI ,&
J => noahmp%config%domain%GridIndexJ ,&
VegType => noahmp%config%domain%VegType ,&
SoilType => noahmp%config%domain%SoilType ,&
CropType => noahmp%config%domain%CropType ,&
SoilColor => noahmp%config%domain%SoilColor ,&
FlagUrban => noahmp%config%domain%FlagUrban ,&
NumSnowLayerMax => noahmp%config%domain%NumSnowLayerMax ,&
NumSoilLayer => noahmp%config%domain%NumSoilLayer ,&
NumSwRadBand => noahmp%config%domain%NumSwRadBand ,&
NumSnicarRadBand => noahmp%config%domain%NumSnicarRadBand ,&
NumRadiusSnwMieSnicar => noahmp%config%domain%NumRadiusSnwMieSnicar &
)
! -------------------------------------------------------------------------

Expand All @@ -60,6 +62,8 @@ subroutine EnergyVarInTransfer(noahmp, NoahmpIO)
noahmp%energy%state%TemperatureSoilSnow(1:NumSoilLayer) = NoahmpIO%TSLB (I,1:NumSoilLayer,J)
noahmp%energy%state%PressureAtmosCO2 = NoahmpIO%CO2_TABLE * noahmp%forcing%PressureAirRefHeight
noahmp%energy%state%PressureAtmosO2 = NoahmpIO%O2_TABLE * noahmp%forcing%PressureAirRefHeight
noahmp%energy%state%AlbedoSoilDir(1:NumSwRadBand) = NoahmpIO%ALBSOILDIRXY(I,1:NumSwRadBand,J)
noahmp%energy%state%AlbedoSoilDif(1:NumSwRadBand) = NoahmpIO%ALBSOILDIFXY(I,1:NumSwRadBand,J)
! vegetation treatment for USGS land types (playa, lava, sand to bare)
if ( (VegType == 25) .or. (VegType == 26) .or. (VegType == 27) ) then
noahmp%energy%state%VegFrac = 0.0
Expand Down Expand Up @@ -129,23 +133,67 @@ subroutine EnergyVarInTransfer(noahmp, NoahmpIO)
noahmp%energy%param%AlbedoLakeFrz (1:NumSwRadBand) = NoahmpIO%ALBLAK_TABLE(1:NumSwRadBand)
noahmp%energy%param%ScatterCoeffSnow (1:NumSwRadBand) = NoahmpIO%OMEGAS_TABLE(1:NumSwRadBand)

if ( noahmp%config%nmlist%OptSnowAlbedo == 3 ) then ! SNICAR variables
noahmp%energy%param%RadSwWgtDif (1:NumSnicarRadBand) = NoahmpIO%flx_wgt_dif(1:NumSnicarRadBand)
noahmp%energy%param%RadSwWgtDir (1:NumSnicarRadBand) = NoahmpIO%flx_wgt_dir(1:NumSnicarRadBand)
noahmp%energy%param%SsAlbBCphi (1:NumSnicarRadBand) = NoahmpIO%ss_alb_bc1 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmBCphi (1:NumSnicarRadBand) = NoahmpIO%asm_prm_bc1 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassBCphi (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_bc1 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbBCpho (1:NumSnicarRadBand) = NoahmpIO%ss_alb_bc2 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmBCpho (1:NumSnicarRadBand) = NoahmpIO%asm_prm_bc2 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassBCpho (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_bc2 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbOCphi (1:NumSnicarRadBand) = NoahmpIO%ss_alb_oc1 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmOCphi (1:NumSnicarRadBand) = NoahmpIO%asm_prm_oc1 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassOCphi (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_oc1 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbOCpho (1:NumSnicarRadBand) = NoahmpIO%ss_alb_oc2 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmOCpho (1:NumSnicarRadBand) = NoahmpIO%asm_prm_oc2 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassOCpho (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_oc2 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbDustB1 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst1 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmDustB1 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst1 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassDustB1 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst1 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbDustB2 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst2 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmDustB2 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst2 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassDustB2 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst2 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbDustB3 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst3 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmDustB3 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst3 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassDustB3 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst3 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbDustB4 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst4 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmDustB4 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst4 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassDustB4 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst4 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbDustB5 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst5 (1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmDustB5 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst5 (1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassDustB5 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst5 (1:NumSnicarRadBand)
noahmp%energy%param%SsAlbSnwRadDir (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand) = &
NoahmpIO%ss_alb_snw_drc (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmSnwRadDir (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand) = &
NoahmpIO%asm_prm_snw_drc (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassSnwRadDir(1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand) = &
NoahmpIO%ext_cff_mss_snw_drc(1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand)
noahmp%energy%param%SsAlbSnwRadDif (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand) = &
NoahmpIO%ss_alb_snw_dfs (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand)
noahmp%energy%param%AsyPrmSnwRadDif (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand) = &
NoahmpIO%asm_prm_snw_dfs (1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand)
noahmp%energy%param%ExtCffMassSnwRadDif(1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand) = &
NoahmpIO%ext_cff_mss_snw_dfs(1:NumRadiusSnwMieSnicar,1:NumSnicarRadBand)
endif

do SoilLayerIndex = 1, size(SoilType)
noahmp%energy%param%SoilQuartzFrac(SoilLayerIndex) = NoahmpIO%QUARTZ_TABLE(SoilType(SoilLayerIndex))
noahmp%energy%param%SoilQuartzFrac(SoilLayerIndex) = NoahmpIO%QUARTZ_TABLE(SoilType(SoilLayerIndex))
enddo

! spatial varying soil input
if ( noahmp%config%nmlist%OptSoilProperty == 4 ) then
noahmp%energy%param%SoilQuartzFrac(1:NumSoilLayer) = NoahmpIO%QUARTZ_3D(I,1:NumSoilLayer,J)
noahmp%energy%param%SoilQuartzFrac(1:NumSoilLayer) = NoahmpIO%QUARTZ_3D(I,1:NumSoilLayer,J)
endif

if ( FlagUrban .eqv. .true. ) noahmp%energy%param%SoilHeatCapacity = 3.0e6

if ( CropType > 0 ) then
noahmp%energy%param%ConductanceLeafMin = NoahmpIO%BPI_TABLE (CropType)
noahmp%energy%param%Co2MmConst25C = NoahmpIO%KC25I_TABLE(CropType)
noahmp%energy%param%O2MmConst25C = NoahmpIO%KO25I_TABLE(CropType)
noahmp%energy%param%Co2MmConstQ10 = NoahmpIO%AKCI_TABLE (CropType)
noahmp%energy%param%O2MmConstQ10 = NoahmpIO%AKOI_TABLE (CropType)
noahmp%energy%param%ConductanceLeafMin = NoahmpIO%BPI_TABLE (CropType)
noahmp%energy%param%Co2MmConst25C = NoahmpIO%KC25I_TABLE(CropType)
noahmp%energy%param%O2MmConst25C = NoahmpIO%KO25I_TABLE(CropType)
noahmp%energy%param%Co2MmConstQ10 = NoahmpIO%AKCI_TABLE (CropType)
noahmp%energy%param%O2MmConstQ10 = NoahmpIO%AKOI_TABLE (CropType)
endif

end associate
Expand Down
8 changes: 8 additions & 0 deletions drivers/erf/EnergyVarOutTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ subroutine EnergyVarOutTransfer(noahmp, NoahmpIO)
NumSoilLayer => noahmp%config%domain%NumSoilLayer ,&
NumSnowLayerMax => noahmp%config%domain%NumSnowLayerMax ,&
NumSnowLayerNeg => noahmp%config%domain%NumSnowLayerNeg ,&
NumSwRadBand => noahmp%config%domain%NumSwRadBand ,&
IndicatorIceSfc => noahmp%config%domain%IndicatorIceSfc &
)
!-----------------------------------------------------------------------
Expand Down Expand Up @@ -142,6 +143,13 @@ subroutine EnergyVarOutTransfer(noahmp, NoahmpIO)
NoahmpIO%TSLB (I,1:NumSoilLayer,J) = noahmp%energy%state%TemperatureSoilSnow(1:NumSoilLayer)
NoahmpIO%TSNOXY (I,-NumSnowLayerMax+1:0,J) = noahmp%energy%state%TemperatureSoilSnow(-NumSnowLayerMax+1:0)

NoahmpIO%ALBSOILDIRXY(I,1:NumSwRadBand,J) = noahmp%energy%state%AlbedoSoilDir(1:NumSwRadBand)
NoahmpIO%ALBSOILDIFXY(I,1:NumSwRadBand,J) = noahmp%energy%state%AlbedoSoilDif(1:NumSwRadBand)
NoahmpIO%ALBSFCDIRXY (I,1:NumSwRadBand,J) = noahmp%energy%state%AlbedoSfcDir (1:NumSwRadBand)
NoahmpIO%ALBSFCDIFXY (I,1:NumSwRadBand,J) = noahmp%energy%state%AlbedoSfcDif (1:NumSwRadBand)
NoahmpIO%ALBSNOWDIRXY(I,1:NumSwRadBand,J) = noahmp%energy%state%AlbedoSnowDir(1:NumSwRadBand)
NoahmpIO%ALBSNOWDIFXY(I,1:NumSwRadBand,J) = noahmp%energy%state%AlbedoSnowDif(1:NumSwRadBand)

! New Calculation of total Canopy/Stomatal Conductance Based on Bonan et al. (2011), Inverse of Canopy Resistance (below)
LeafAreaIndSunlit = max(noahmp%energy%state%LeafAreaIndSunlit, 0.0)
LeafAreaIndShade = max(noahmp%energy%state%LeafAreaIndShade, 0.0)
Expand Down
29 changes: 29 additions & 0 deletions drivers/erf/ForcingVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,35 @@ subroutine ForcingVarInTransfer(noahmp, NoahmpIO)
noahmp%forcing%PrecipNonConvRefHeight = noahmp%forcing%PrecipNonConvRefHeight + PrecipOtherRefHeight
noahmp%forcing%PrecipSnowRefHeight = noahmp%forcing%PrecipSnowRefHeight + PrecipOtherRefHeight * NoahmpIO%SR(I,J)

! downward solar radiation direct/diffuse and visible/NIR partition
noahmp%forcing%RadSwDirFrac = NoahmpIO%RadSwDirFrac(I,J)
noahmp%forcing%RadSwVisFrac = NoahmpIO%RadSwVisFrac(I,J)

! SNICAR aerosol deposition flux forcing
if ( noahmp%config%nmlist%OptSnowAlbedo == 3 ) then
if ( noahmp%config%nmlist%FlagSnicarAerosolReadTable .eqv. .true. ) then
noahmp%forcing%DepBChydropho = NoahmpIO%DepBChydropho_TABLE
noahmp%forcing%DepBChydrophi = NoahmpIO%DepBChydrophi_TABLE
noahmp%forcing%DepOChydropho = NoahmpIO%DepOChydropho_TABLE
noahmp%forcing%DepOChydrophi = NoahmpIO%DepOChydrophi_TABLE
noahmp%forcing%DepDust1 = NoahmpIO%DepDust1_TABLE
noahmp%forcing%DepDust2 = NoahmpIO%DepDust2_TABLE
noahmp%forcing%DepDust3 = NoahmpIO%DepDust3_TABLE
noahmp%forcing%DepDust4 = NoahmpIO%DepDust4_TABLE
noahmp%forcing%DepDust5 = NoahmpIO%DepDust5_TABLE
else
noahmp%forcing%DepBChydropho = NoahmpIO%DepBChydrophoXY(I,J)
noahmp%forcing%DepBChydrophi = NoahmpIO%DepBChydrophiXY(I,J)
noahmp%forcing%DepOChydropho = NoahmpIO%DepOChydrophoXY(I,J)
noahmp%forcing%DepOChydrophi = NoahmpIO%DepOChydrophiXY(I,J)
noahmp%forcing%DepDust1 = NoahmpIO%DepDust1XY(I,J)
noahmp%forcing%DepDust2 = NoahmpIO%DepDust2XY(I,J)
noahmp%forcing%DepDust3 = NoahmpIO%DepDust3XY(I,J)
noahmp%forcing%DepDust4 = NoahmpIO%DepDust4XY(I,J)
noahmp%forcing%DepDust5 = NoahmpIO%DepDust5XY(I,J)
endif
endif

end associate

end subroutine ForcingVarInTransfer
Expand Down
8 changes: 5 additions & 3 deletions drivers/erf/ForcingVarOutTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ subroutine ForcingVarOutTransfer(noahmp, NoahmpIO)
type(NoahmpIO_type), intent(inout) :: NoahmpIO

! -------------------------------------------------------------------------
associate( &
I => noahmp%config%domain%GridIndexI ,&
J => noahmp%config%domain%GridIndexJ &
associate( &
I => noahmp%config%domain%GridIndexI ,&
J => noahmp%config%domain%GridIndexJ &
)
! -------------------------------------------------------------------------

Expand All @@ -36,6 +36,8 @@ subroutine ForcingVarOutTransfer(noahmp, NoahmpIO)
NoahmpIO%FORCPLSM (I,J) = noahmp%forcing%PressureAirRefHeight
NoahmpIO%FORCWLSM (I,J) = sqrt(noahmp%forcing%WindEastwardRefHeight**2 + &
noahmp%forcing%WindNorthwardRefHeight**2)
NoahmpIO%RadSwDirFrac(I,J) = noahmp%forcing%RadSwDirFrac
NoahmpIO%RadSwVisFrac(I,J) = noahmp%forcing%RadSwVisFrac

end associate

Expand Down
Loading