From 6fb117edbe97c9fc2977231605cb1a96b6aacf28 Mon Sep 17 00:00:00 2001 From: Ian Harman Date: Wed, 12 Feb 2025 14:10:32 +1100 Subject: [PATCH 1/2] move snow aging call in offline_driver routine --- src/offline/cbl_model_driver_offline.F90 | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/offline/cbl_model_driver_offline.F90 b/src/offline/cbl_model_driver_offline.F90 index f9e97abc2..763e68075 100644 --- a/src/offline/cbl_model_driver_offline.F90 +++ b/src/offline/cbl_model_driver_offline.F90 @@ -149,8 +149,9 @@ SUBROUTINE cbm( ktau,dels, air, bgc, canopy, met, ) !reducedLAIdue2snow !Ticket 331 refactored albedo code for JAC -CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& - ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) +!# Issue 539 - moving to after soil_snow +!CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& +! ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) call Albedo( ssnow%AlbSoilsn, soil%AlbSoil, & !AlbSnow, AlbSoil, @@ -182,12 +183,18 @@ SUBROUTINE cbm( ktau,dels, air, bgc, canopy, met, ssnow%otss_0 = ssnow%otss ! vh should be before call to canopy? ssnow%otss = ssnow%tss +!Evaluate the energy balance - includes updating canopy water storage CALL define_canopy(bal,rad,rough,air,met,dels,ssnow,soil,veg, canopy,climate, sunlit_veg_mask, canopy%vlaiw) - + +!update the various biophysics state variables ssnow%owetfac = ssnow%wetfac CALL soil_snow(dels, soil, ssnow, canopy, met, bal,veg) +!#539 - move snow_aging now after soil_snow - uses this timestep snow amount +CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& + ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) + ssnow%deltss = ssnow%tss-ssnow%otss ! need to adjust fe after soilsnow From 5ab479ddba9e18bd3f4fac26898b5c8d362a8e56 Mon Sep 17 00:00:00 2001 From: Ian Harman Date: Wed, 12 Feb 2025 14:31:53 +1100 Subject: [PATCH 2/2] partner changes to coupled cbm routines addresses - not tested - #539 --- src/coupled/ACCESS-CM2/cable_cbm.F90 | 8 ++++++-- src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 | 11 ++++++++--- src/coupled/ESM1.5/CABLEfilesFromESM1.5/cable_cbm.F90 | 11 +++++++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/coupled/ACCESS-CM2/cable_cbm.F90 b/src/coupled/ACCESS-CM2/cable_cbm.F90 index 7ed55b7f2..d1766e9ec 100644 --- a/src/coupled/ACCESS-CM2/cable_cbm.F90 +++ b/src/coupled/ACCESS-CM2/cable_cbm.F90 @@ -146,8 +146,9 @@ SUBROUTINE cbm( ktau,dels, air, bgc, canopy, met, ) !reducedLAIdue2snow !Ticket 331 refactored albedo code for JAC -CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& - ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) +!#539 - move snow_aging +!CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& +! ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) IF( cable_runtime%um_explicit ) THEN @@ -202,6 +203,9 @@ SUBROUTINE cbm( ktau,dels, air, bgc, canopy, met, ELSE CALL soil_snow(dels, soil, ssnow, canopy, met, bal,veg) ENDIF + !#539 move call to snow aging + CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& + ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) ENDIF ssnow%deltss = ssnow%tss-ssnow%otss diff --git a/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 b/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 index 26de76a76..767dba2ca 100644 --- a/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 +++ b/src/coupled/AM3/control/cable/CM3/cbl_cbm_mod.F90 @@ -13,7 +13,7 @@ SUBROUTINE cbm_expl( mp, nrb, ktau,dels, air, bgc, canopy, met, & USE cbl_albedo_mod, ONLY: albedo USE cbl_init_radiation_module, ONLY: init_radiation USE cbl_masks_mod, ONLY: fveg_mask, fsunlit_mask, fsunlit_veg_mask -USE snow_aging_mod, ONLY: snow_aging +!USE snow_aging_mod, ONLY: snow_aging !539 no longer needed USE cable_roughness_module, ONLY: ruff_resist USE cable_air_module, ONLY: define_air USE cable_canopy_module, ONLY: define_canopy @@ -110,8 +110,9 @@ SUBROUTINE cbm_expl( mp, nrb, ktau,dels, air, bgc, canopy, met, & ) !reducedLAIdue2snow !Ticket 331 refactored albedo code for JAC -CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1), & - ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) +!#539 - move snow aging. +!CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1), & +! ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) !explicit ONLY CALL Albedo( ssnow%AlbSoilsn, soil%AlbSoil, & @@ -303,6 +304,10 @@ SUBROUTINE cbm_impl( cycleno, numcycles, mp, nrb, ktau, dels, & CALL soil_snow(dels, soil, ssnow, canopy, met, bal,veg) ssnow%deltss = ssnow%tss-ssnow%otss +!#539 - move snow aging. +CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1), & + ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) + ! reset tss & wetfac to value corresponding to beginning of timestep IF( cycleno .NE. numcycles ) THEN ssnow%tss = ssnow%otss diff --git a/src/coupled/ESM1.5/CABLEfilesFromESM1.5/cable_cbm.F90 b/src/coupled/ESM1.5/CABLEfilesFromESM1.5/cable_cbm.F90 index 11be03176..25b75befd 100644 --- a/src/coupled/ESM1.5/CABLEfilesFromESM1.5/cable_cbm.F90 +++ b/src/coupled/ESM1.5/CABLEfilesFromESM1.5/cable_cbm.F90 @@ -100,8 +100,9 @@ SUBROUTINE cbm( dels, air, bgc, canopy, met, & IF( cable_runtime%um_explicit ) THEN !Ticket 331 refactored albedo code for JAC - CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& - ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) + !#539 move of snow_Aging routine + !CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& + ! ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) call Albedo( ssnow%AlbSoilsn, soil%AlbSoil, & mp, nrb, ICE_SoilType, lakes_cable, jls_radiation, veg_mask, & @@ -142,10 +143,16 @@ SUBROUTINE cbm( dels, air, bgc, canopy, met, & IF( cable_runtime%um_implicit ) THEN CALL soil_snow(dels, soil, ssnow, canopy, met, bal,veg) + !#539 move of snow_Aging routine + CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& + ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) ENDIF ELSE call soil_snow(dels, soil, ssnow, canopy, met, bal,veg) + !#539 move of snow_Aging routine + CALL snow_aging(ssnow%snage,mp,dels,ssnow%snowd,ssnow%osnowd,ssnow%tggsn(:,1),& + ssnow%tgg(:,1),ssnow%isflag,veg%iveg,soil%isoilm) ENDIF ssnow%deltss = ssnow%tss-ssnow%otss