ESCOMP / CTSM

Community Terrestrial Systems Model (includes the Community Land Model of CESM)
http://www.cesm.ucar.edu/models/cesm2.0/land/
Other
310 stars 317 forks source link

FATES hydro mass-balance issues #1314

Open rgknox opened 3 years ago

rgknox commented 3 years ago

Brief summary of bug

FATES-hydro is a special mode where vegetation can uptake and store water via the transpiration stream. This requires an accounting of how much water is stored in FATES vegetation, which must be passed back to CLM for its water mass balance checking. The water mass balance check (BalanceCheckMod.F90 at line 760) is failing. Details below.

General bug information

CTSM version you are using: [output of git describe]

hash: 3ac4305
tag: ctsm5.1.dev029-3-g3ac43057

Does this bug cause significantly incorrect results in the model's science? [Yes / No]

Not sure, but I don't think so.

Configurations affected: [Fill this in if known.]

These namelist options must be set:

use_fates = .true. use_fates_planthydro = .true.

Details of bug

I generate this error using a specialized site setup for Barro Colorado Island Panama, where I also initialize a forest stand structure from inventory data. The simulation runs 26+ months and then fails with the following error:

 clm: calling FATES model        38449
FATES Dynamics: 1902-03-13
 dbh counter:           13  is woody:  T
 dbh counter:           13  is woody:  T
 dbh counter:           17  is woody:  T
 dbh counter:           17  is woody:  T
 clm: leaving fates model           1           1
 WARNING:  grid cell-level water balance error  nstep=        38449  local indexg=            1  errh2o_grc=   -2.2061354929889532E-003
 CTSM is stopping because errh2o >    1.0000000000000001E-005  mm
 nstep                     =        38449
 errh2o_grc                =   -2.2061354929889532E-003
 forc_rain                 =    0.0000000000000000     
 forc_snow                 =    0.0000000000000000     
 endwb_grc                 =    2989.3396629148806     
 begwb_grc                 =    2989.3595745851790     
 qflx_evap_tot             =    1.9854765757965773E-002
 qflx_sfc_irrig            =    0.0000000000000000     
 qflx_surf                 =    0.0000000000000000     
 qflx_qrgwl                =   -2.1492309525845731E-003
 qflx_drain                =    0.0000000000000000     
 qflx_ice_runoff           =    0.0000000000000000     
 qflx_snwcp_discarded_ice  =    0.0000000000000000     
 qflx_snwcp_discarded_liq  =    0.0000000000000000     
 deltawb                   =   -1.9911670298370154E-002
 deltawb/dtime             =   -1.1062039054650086E-005
 qflx_drain_perched        =    0.0000000000000000     
 forc_flood                =   -0.0000000000000000     
 qflx_glcice_dyn_water_flux =    0.0000000000000000     
 CTSM is stopping
 local  gridcell index =            1
 global gridcell index =            1
 gridcell longitude    =    280.15390000000002     
 gridcell latitude     =    9.1530000000000005     
 ENDRUN:
 ERROR: ERROR in /raid1/rgknox/SyncLRC/ctsm/src/biogeophys/BalanceCheckMod.F90 at line 760

From the log, I can see that the check is failing after a FATES dynamics call. I have to investigate further to see a call to FATES hydraulics follows. If only the dynamics call has transpired (pun intended) prior to the balance check fail, then we should expect that that the total water stored in vegetation should had remained unchanged during the process. During dynamics, we only shuffle water around internally in FATES, but should conserve it. We do have a check in place to verify this (but checks can be wrong too of course).

Key variables that FATES passes to CLM are:

The total water stored in vegetation, an example of the transfer found here: https://github.com/ESCOMP/CTSM/blob/master/src/utils/clmfates_interfaceMod.F90#L1011-L1012

The water uptake by roots: https://github.com/ESCOMP/CTSM/blob/master/src/utils/clmfates_interfaceMod.F90#L2632

Key variable that CLM passes to FATES: Transpiration rate of the patch: https://github.com/ESCOMP/CTSM/blob/master/src/utils/clmfates_interfaceMod.F90#L2752

Important details of your setup / configuration so we can reproduce the bug

I will need to reproduce this error on a supported resolution, this error was generated on a user-defined single cell grid.

Here is the compset and key namelist variables though: 2000_DATM%CRUv7_CLM50%FATES_SICE_SOCN_SROF_SGLC_SWAV use_fates = .true. use_fates_planthydro = .true.

rgknox commented 3 years ago

At this point, this post might be more for me to describe the problem out-loud to help think through it. There are still several moving parts to this.

Some notes: 1) For context on the fates side. I'm working on a new branch which fixes a few errors on the fates-side mass balance checking: https://github.com/rgknox/fates/tree/fix-recruit-fuse-mem-hydro 2) I'm running tests using fates_main_api to see if the errors are triggered there too. However, its possible that they passed on that branch because the error checking was not as stringent? or maybe not, will report what I find