Skip to content
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
58ff458
1st version of SNICR snow albedo scheme
tslin2 Jun 22, 2023
6690216
update snicar for glacier temperature
tslin2 Jun 22, 2023
a806140
revise SNICAR and add aerosol compoments
tslin2 Aug 8, 2023
d714d77
snicar updated for revision
tslin2 Aug 8, 2023
28ee3cd
updating snow aerosol processes
tslin2 Aug 14, 2023
9d6ced1
add surface albedo as output and add energy check for snicar
tslin2 Aug 23, 2023
7a49de1
use fresh snow age for zero snow layer
tslin2 Aug 30, 2023
3997e4c
move snicar aging to surface albedo
tslin2 Sep 1, 2023
f7ed60d
fix issues for snicar
tslin2 Sep 9, 2023
04fdcc8
bug fix for snowlayer, fveg and update vis/nir and direct/diffuse fra…
tslin2 Sep 29, 2023
1d094aa
change default shape to hexagonal
tslin2 Oct 27, 2023
6a586a0
update dust and parameters
tslin2 Nov 7, 2023
7a6dcd5
updated parameters
tslin2 Nov 10, 2023
126f8c0
remove path and add data for SNICAR
tslin2 Jan 3, 2024
44bef28
Merge pull request #116 from NCAR/develop
cenlinhe Mar 6, 2024
929fd87
Merge branch 'snicar_lin' into develop
cenlinhe Mar 11, 2024
c3a92ae
Merge pull request #13 from cenlinhe/develop
cenlinhe Mar 11, 2024
626363b
Merge pull request #12 from cenlinhe/snicar_lin
cenlinhe Mar 11, 2024
4399294
bug fix for doubled vegfrac
cenlinhe Mar 11, 2024
611e19d
bug fix
cenlinhe Mar 11, 2024
d118daf
bug fix for aerosol mass initialization
cenlinhe Mar 12, 2024
8e0ba67
bug fix for dust5 optics initialization
cenlinhe Mar 12, 2024
8cba61a
bug fix for glacier snow water for aerosol
cenlinhe Mar 14, 2024
fa2d209
Merge pull request #124 from NCAR/develop
cenlinhe Apr 18, 2024
cfb0ee4
Merge pull request #171 from NCAR/develop
cenlinhe Jan 6, 2025
5c1c0a3
Merge pull request #14 from cenlinhe/master
cenlinhe Feb 1, 2025
7fcd0c6
Merge branch 'snicar_impl' into develop
cenlinhe Apr 21, 2025
277f9f5
Merge pull request #17 from cenlinhe/develop
cenlinhe Apr 22, 2025
556ad5c
bug fix and re-format for SNICAR implementation
cenlinhe Apr 27, 2025
3f113b5
add SNICAR to LIS driver
cenlinhe Apr 27, 2025
c208c27
rename SNICAR optics variables
cenlinhe Apr 28, 2025
6646198
add swdown fraction forcing variable
cenlinhe Apr 28, 2025
4c677bd
bug fix for variable dimension
cenlinhe Apr 29, 2025
5e2e5ab
bug fix for soil albedo initialzation
cenlinhe Apr 29, 2025
54b4cec
loose SWEmin threshold for SNICAR
cenlinhe Apr 29, 2025
e4a7ec9
update solar band number initialization
cenlinhe Apr 29, 2025
738c77c
minor bug fix and reformating
cenlinhe May 3, 2025
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
17 changes: 17 additions & 0 deletions drivers/hrldas/ConfigVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,23 @@ subroutine ConfigVarInTransfer(noahmp, NoahmpIO)
noahmp%config%domain%RunoffSlopeType = NoahmpIO%SLOPETYP
noahmp%config%domain%DepthSoilTempBottom = NoahmpIO%ZBOT_TABLE

!SNICAR
if (noahmp%config%nmlist%OptSnowAlbedo == 3 )then
noahmp%config%nmlist%OptSnicarSnowShape = NoahmpIO%SNICAR_SNOWSHAPE_OPT
noahmp%config%nmlist%OptSnicarRTSolver = NoahmpIO%SNICAR_RTSOLVER_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

noahmp%config%domain%idx_T_max = NoahmpIO%idx_T_max
noahmp%config%domain%idx_Tgrd_max = NoahmpIO%idx_Tgrd_max
noahmp%config%domain%idx_rhos_max = NoahmpIO%idx_rhos_max
noahmp%config%domain%NumSnicarRadBand = NoahmpIO%snicar_numrad_snw
noahmp%config%domain%idx_Mie_snw_mx = 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
44 changes: 43 additions & 1 deletion drivers/hrldas/EnergyVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ subroutine EnergyVarInTransfer(noahmp, NoahmpIO)
FlagUrban => noahmp%config%domain%FlagUrban ,&
NumSnowLayerMax => noahmp%config%domain%NumSnowLayerMax ,&
NumSoilLayer => noahmp%config%domain%NumSoilLayer ,&
NumSwRadBand => noahmp%config%domain%NumSwRadBand &
NumSwRadBand => noahmp%config%domain%NumSwRadBand ,&
NumSnicarRadBand=> noahmp%config%domain%NumSnicarRadBand,&
idx_Mie_snw_mx => noahmp%config%domain%idx_Mie_snw_mx &
)
! -------------------------------------------------------------------------

Expand Down Expand Up @@ -128,6 +130,46 @@ subroutine EnergyVarInTransfer(noahmp, NoahmpIO)
noahmp%energy%param%AlbedoSoilDry (1:NumSwRadBand) = NoahmpIO%ALBDRY_TABLE(SoilColor,1:NumSwRadBand)
noahmp%energy%param%AlbedoLakeFrz (1:NumSwRadBand) = NoahmpIO%ALBLAK_TABLE(1:NumSwRadBand)
noahmp%energy%param%ScatterCoeffSnow (1:NumSwRadBand) = NoahmpIO%OMEGAS_TABLE(1:NumSwRadBand)
!SNICAR
if (noahmp%config%nmlist%OptSnowAlbedo == 3 )then
noahmp%energy%state%AlbedoSoilDir (1:NumSwRadBand) = NoahmpIO%ALBSOILDIRXY(I,1:NumSwRadBand,J)
noahmp%energy%state%AlbedoSoilDif (1:NumSwRadBand) = NoahmpIO%ALBSOILDIFXY(I,1:NumSwRadBand,J)
noahmp%energy%param%flx_wgt_dif (1:NumSnicarRadBand) = NoahmpIO%flx_wgt_dif(1:NumSnicarRadBand)
noahmp%energy%param%flx_wgt_dir (1:NumSnicarRadBand) = NoahmpIO%flx_wgt_dir(1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_snw_drc (1:idx_Mie_snw_mx,1:NumSnicarRadBand) = NoahmpIO%ss_alb_snw_drc (1:idx_Mie_snw_mx,1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_snw_drc (1:idx_Mie_snw_mx,1:NumSnicarRadBand) = NoahmpIO%asm_prm_snw_drc (1:idx_Mie_snw_mx,1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_snw_drc (1:idx_Mie_snw_mx,1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_snw_drc (1:idx_Mie_snw_mx,1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_snw_dfs (1:idx_Mie_snw_mx,1:NumSnicarRadBand) = NoahmpIO%ss_alb_snw_dfs (1:idx_Mie_snw_mx,1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_snw_dfs (1:idx_Mie_snw_mx,1:NumSnicarRadBand) = NoahmpIO%asm_prm_snw_dfs (1:idx_Mie_snw_mx,1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_snw_dfs (1:idx_Mie_snw_mx,1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_snw_dfs (1:idx_Mie_snw_mx,1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_bc1 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_bc1 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_bc1 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_bc1 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_bc1 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_bc1 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_bc2 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_bc2 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_bc2 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_bc2 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_bc2 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_bc2 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_oc1 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_oc1 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_oc1 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_oc1 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_oc1 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_oc1 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_oc2 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_oc2 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_oc2 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_oc2 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_oc2 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_oc2 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_dst1 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst1 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_dst1 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst1 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_dst1 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst1 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_dst2 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst2 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_dst2 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst2 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_dst2 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst2 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_dst3 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst3 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_dst3 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst3 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_dst3 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst3 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_dst4 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst4 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_dst4 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst4 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_dst4 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst4 (1:NumSnicarRadBand)
noahmp%energy%param%ss_alb_dst5 (1:NumSnicarRadBand) = NoahmpIO%ss_alb_dst5 (1:NumSnicarRadBand)
noahmp%energy%param%asm_prm_dst5 (1:NumSnicarRadBand) = NoahmpIO%asm_prm_dst5 (1:NumSnicarRadBand)
noahmp%energy%param%ext_cff_mss_dst5 (1:NumSnicarRadBand) = NoahmpIO%ext_cff_mss_dst5 (1:NumSnicarRadBand)
endif

do SoilLayerIndex = 1, size(SoilType)
noahmp%energy%param%SoilQuartzFrac(SoilLayerIndex) = NoahmpIO%QUARTZ_TABLE(SoilType(SoilLayerIndex))
Expand Down
12 changes: 12 additions & 0 deletions drivers/hrldas/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,17 @@ 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)

!SNICAR
if (noahmp%config%nmlist%OptSnowAlbedo == 3 )then
NoahmpIO%ALBSOILDIRXY(I,1:NumSwRadBand,J)=noahmp%energy%state%AlbedoSoilDir(1:NumSwRadBand)
NoahmpIO%ALBSOILDIFXY(I,1:NumSwRadBand,J)=noahmp%energy%state%AlbedoSoilDif(1:NumSwRadBand)
endif

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
28 changes: 28 additions & 0 deletions drivers/hrldas/ForcingVarInTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,34 @@ subroutine ForcingVarInTransfer(noahmp, NoahmpIO)
noahmp%forcing%PrecipNonConvRefHeight = noahmp%forcing%PrecipNonConvRefHeight + PrecipOtherRefHeight
noahmp%forcing%PrecipSnowRefHeight = noahmp%forcing%PrecipSnowRefHeight + PrecipOtherRefHeight * NoahmpIO%SR(I,J)

noahmp%forcing%DirFrac = NoahmpIO%DirFrac(I,J)
noahmp%forcing%VisFrac = NoahmpIO%VisFrac(I,J)

!SNICAR
if (noahmp%config%nmlist%OptSnowAlbedo == 3 )then
if (noahmp%config%nmlist%FlagSnicarAerosolReadTable == .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
4 changes: 4 additions & 0 deletions drivers/hrldas/ForcingVarOutTransferMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ subroutine ForcingVarOutTransfer(noahmp, NoahmpIO)
NoahmpIO%FORCWLSM (I,J) = sqrt(noahmp%forcing%WindEastwardRefHeight**2 + &
noahmp%forcing%WindNorthwardRefHeight**2)

NoahmpIO%DirFrac (I,J) = noahmp%forcing%DirFrac
NoahmpIO%VisFrac (I,J) = noahmp%forcing%VisFrac


end associate

end subroutine ForcingVarOutTransfer
Expand Down
1 change: 0 additions & 1 deletion drivers/hrldas/NoahmpDriverMainMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ subroutine NoahmpDriverMain(NoahmpIO)
noahmp%config%domain%IndicatorIceSfc = 0 ! land soil point.
call NoahmpMain(noahmp)
endif ! glacial split ends

!---------------------------------------------------------------------
! Transfer 1-D Noah-MP column variables to 2-D output variables
!---------------------------------------------------------------------
Expand Down
Loading