CABLE-LSM / CABLE-Trac-archive

Archive CABLE Trac contents as issues
Other
0 stars 0 forks source link

Restart reproducibility #198

Open penguian opened 6 years ago

penguian commented 6 years ago

keyword_keepgit owner:jxs599@nci.org.au type_defect | by mrd599


The UM with JULES has restart reproducibility, i.e. a single 2 month run is identical to 2 successive one month runs. This is useful for rerunning parts of long climate simulations and for catching variables that aren't correctly initialised.

At the moment CABLE does not have this property.


Issue migrated from trac:198 at 2023-11-27 11:26:28 +1100

penguian commented 5 years ago

@mrd599@nci.org.au commented


Issues preventing restart reproducibility

  1. Use of CABLE albedo on first timestep

  2. Routine initialise_veg in cable_um_init_subrs.F90 has

      CALL clobber_height_lai( canht_ft, lai_ft )
    
      !--- veg params were read from initialize_soil() 
      IF(first_call)  THEN
         CALL init_veg_pars_fr_vegin( soil_zse ) 
         ! Fix in-canopy turbulence scheme globally:
         veg%meth = 1
      ENDIF
      first_call= .FALSE.

    so the first call has the values set by init_veg_pars_fr_vegin and all others by clobber_height_lai.

3.initialize_soilsnow sets

 canopy%fes_cor = 0.
 canopy%fhs_cor = 0.
 canopy%fwsoil = 1.
 ssnow%rtsoil = 50.
 WHERE( soil%isoilm == 9 ) ! permanent ice:
   ssnow%wb(:,J) = 0.95*soil%ssat
   ssnow%wbice(:,J) = 0.85*ssnow%wb(:,J)
 ENDWHERE

on first time step.

Also sets

! snow depth from prev timestep 
         ssnow%osnowd  = PACK(SNOW_TILE,um1%l_tile_pts)  

which effectively sets it to current step value.

  1. Routine soil_snow sets ssnow%gammzz on the first time step. Also set elsewhere so need to recheck what was inconsistent about this.

Branch jules/main/branches/test/martindix/r11023_restart_repro applied these first step initialisations every step and got restart reproducibility, showing that these are the only problems.

penguian commented 5 years ago

@jxs599@nci.org.au commented


Proposed edit to resolve: 2.) [above] init_veg_pars_fr_vegin( soil_zse ) !veg%hc(h) = vegin%hc(veg%iveg(h)) ! Ticket #198

LAI not set in this routine

penguian commented 5 years ago

@jxs599@nci.org.au changed milestone from ` to3. Implementation`

penguian commented 5 years ago

@inh599@nci.org.au commented


Other issues that will or are likely to cause restart reproducibility:

  1. use of ortsoil as a numerical smoother in cable_canopy.

  2. %pudsto is not a UM state variable so has to be initialised (at zero) each simulation. Needs to be in the restart file.

  3. ACCESS uses %fes_cor to conserve water across time steps. The implementation of the conservation either needs to be changed (see SSEB package) or %fes_cor put in the restart file.

  4. %ga is needed by the Penman-Monteith option for soil evaporation prior to its first evaluation.

  5. initialisation of and sequencing within the UM time step of ssnow%isflag - %isflag impacts CABLE's albedo and there is the potential for the UM radiation to be seeing (subtly) different albedos to that of the energy balance.

  6. [ESM simulations] All, and any, variables that track aspects of the simulation up to that point for later use and that aren't output/input through the restart.

  7. soil moisture initialisation in permanent ice regions, and more generally in regions with frozen soil.

  8. initialisation of %owetfac

On 2: This can be solved by moving the call to clobber_height_lai after the (first_call) block. However more general consideration of clobber_height_lai (e.g. in ESM simulations) is needed.

penguian commented 5 years ago

@mrd599@nci.org.au commented


Replying to CABLE-LSM/CABLE-Trac#198 (comment:1):

Issues preventing restart reproducibility

  1. Use of CABLE albedo on first timestep

Point 1 is actually use of JULES albedo on the first step.

penguian commented 5 years ago

@inh599@nci.org.au commented


More on 2. On further investigation clobber_height_lai also sets the CABLE variable veg%iveg from the corresponding UM construct kblum_veg%ivegt. init_veg_pars_fr_vegin needs veg%ivegt - so we have a circularity problem.

The solution would appear to be to call clobber_height_lai a second time after init_parms_fr_vegin in the first_call block (or split clobber_height_lai into two functions).

penguian commented 2 years ago

@jxs599@nci.org.au commented


Ongoing effort via JAC to adress this issue. The rad/albedo pathway is sorted in CABLE3

penguian commented 1 year ago

@ccc561@nci.org.au set keywords to keepgit