#1360 closed Bug (fixed)
defects in asminc
Reported by: | avidard | Owned by: | pabouttier |
---|---|---|---|
Priority: | low | Milestone: | |
Component: | OCE | Version: | v3.4 |
Severity: | Keywords: | ||
Cc: |
Description
This ticket is valid for 3.4 onward
When the application of the assimilation increment is used in direct initialization mode (all the increment added to the state at once at the beginning of the time window) there is a few misconceptions/bugs (basically it does not work, at all).
- The first one is really minor, line 743-745 and line 753-755 reads something like
WHERE(t_bkginc(:,:,:) > 0.0_wp .OR. &
& tsn(:,:,:,jp_tem) + t_bkginc(:,:,:) > fzptnz(:,:,:) )
tsn(:,:,:,jp_tem) = t_bkg(:,:,:) + t_bkginc(:,:,:)
END WHERE
it should be t_bkg in the second condition rather than tsn. In general they are the same, so it does not matter much.
- More problematic neuler is forced to 0 by asminc_init but neuler = 1 can be used earlier in the code if ln_restart=true. So there is an inconsistancy in the initialization.
The fix I found was to add in istate.F90 (for 3.4 ; 3.6 is different)
IF ( lk_asminc .AND. ln_asmdin ) THEN
neuler = 0 ! restart with an euler from the corrected background
ELSE
neuler = 1 ! Set time-step indicator at nit000 (leap-frog)
END IF
The problem is by doing so you need to read the assimilation namelist before istate_init. So I split the asmin_init into the namelist reading (called before istate_init) and the rest of the initialisation (same place as before)
- for TKE (but I guess GLS would be the same) the mixing coefficients are not consistent with the other variables, this can lead to very localized strong differences. To sort this out I did a sort of tiny spin-up for tke at the begining of the first time step mimicking what is done if tke is missing in the restart, something like
IF( lk_zdftke .AND. lk_asminc .AND. ln_asmdin .AND. ( kstp == nit000 ) ) THEN
! reinitialize tke
CALL tke_avn ! recompute avt, avm, avmu, avmv and dissl (approximation)
DO jk = nit000, nit000 + 2 ; CALL zdf_tke( jk ) ; END DO
END IF
it does the trick, but I am not sure it is the right way to proceed.
All this was diagnosed by doing a simple experiment: From 2 restarts x1, x2, I created an increment dx=x1-x2 and compared the run starting from x1 with the one starting from x2 + application of increment dx. Maybe this kind of test could be added in SETTE for validation of this part of the code.
Commit History (2)
Changeset | Author | Time | ChangeLog |
---|---|---|---|
13428 | smueller | 2020-08-21T19:32:10+02:00 | Adjustments of modifications made in [5168] (see ticket #1360) and bugfix in module asminc |
5168 | pabouttier | 2015-03-25T10:01:32+01:00 | Fixed several bugs described in Ticket #1360 |
Change History (3)
comment:1 Changed 9 years ago by clevy
- Owner changed from NEMO team to pabouttier
comment:2 Changed 9 years ago by bouttier
- Resolution set to fixed
- Status changed from new to closed
comment:3 Changed 4 years ago by smueller
In 13428:
Fixed in revision 5168