Opened 14 years ago
Last modified 14 years ago
#449 closed bug
Floating point exceptions related to GLS_MIXING and PERFECT_RESTART — at Initial Version
Reported by: | colucix | Owned by: | arango |
---|---|---|---|
Priority: | critical | Milestone: | Release ROMS/TOMS 3.4 |
Component: | Nonlinear | Version: | 3.4 |
Keywords: | Cc: |
Description
Following the discussion at https://www.myroms.org/forum/viewtopic.php?f=19&t=1718, I'd like to report a bug triggered by PERFECT_RESTART and related to vertical diffusion processes for the Generic Length Scale formulation.
The variables tke and gls, together with diffusion coefficients are initialized to their background values (see SUBROUTINE initialize_mixing), but subsequently they are read from the restart NetCDF and the values on land areas (matching _FillValue in NetCDF) are set to 0 (see: SUBROUTINE nf_fread4d).
The tke and gls values enter as denominators for calculations inside SUBROUTINE gls_corstep and the 0 values generate a floating point exception.
The resulting NaN are propagated in particular (but not only) to the vertical diffusion coefficient for tracers (Akt) and this causes a model blow-up in subsequent calculations.
I suggest to set the flag SetFillValue to .FALSE. (in: SUBROUTINE def_rst and SUBROUTINE wrt_rst) for variables tke and gls, in order to preserve the background values over land points. Maybe the same should be applied to the other variables added to the restart file when PERFECT RESTART is active (Akp, Akk and Lscale) but they don't seem to be involved in potential floating point exceptions.
Please see post https://www.myroms.org/forum/viewtopic.php?p=6933#p6933 in the ROMS Bugs forum for a bit more detailed description of the issue. Thank you, Alex