Opened 7 years ago

Closed 7 years ago

#714 closed upgrade (Fixed)

Important: Updated output DAI NetCDF file

Reported by: arango Owned by: arango
Priority: major Milestone: Release ROMS/TOMS 3.7
Component: Nonlinear Version: 3.7
Keywords: Cc:

Description

The DAINAME NetCDF file was updated to include vertical viscosity (AKv) coefficients and vertical diffusion coefficients (AKt) for potential temperature and salinity. The DAI is used in 4D-Var to save the posterior analysis that can be used as initial conditions for the next data assimilation cycle. It is also used to restart the next run of an Ensemble Kalman Filter (EnKF).

Recall that applications that use any of the vertical mixing parameterizations need the values of AKv and AKt during initialization to ensure stability. This is usually required in data assimilation (4D-Var and EnKF) when running the next assimilation window or cycle. It also facilitates smooth running when restarting the nonlinear model in regular applications.

During initialization, ROMS checks if the AKv and AKt are available in the initial NetCDF file. If so, it will read and initialize those values appropriately.

Many thanks to Andy Moore for bringing this to my attention.

I also moved the call to obs_initial in routines initial.F, tl_initial.F, rp_initial.F, and ad_initial.F to be located after the initial conditions are processed. This is done to guarantee that the correct initial time is used when determining the first ObsTime(ng) needed to extract the model solution at the observation locations. This is not a bug but a safeguard. In previous versions, ObsTime(ng) was controlled by input parameter DSTART. The problem was that if this parameter is not updated correctly during restart, the following statement conditional

#  ifdef OBSERVATIONS
!
!-----------------------------------------------------------------------
!  If appropriate, process and write model state at observation
!  locations. Compute misfit (model-observations) cost function.
!-----------------------------------------------------------------------
!
      IF (((time(ng)-0.5_r8*dt(ng)).le.ObsTime(ng)).and.                &
     &    (ObsTime(ng).lt.(time(ng)+0.5_r8*dt(ng)))) THEN
        ProcessObs=.TRUE.
        CALL obs_read (ng, iNLM, .FALSE.)
        CALL obs_write (ng, tile, iNLM)
#   if !(defined VERIFICATION || defined W4DVAR)
        CALL obs_cost (ng, iNLM)
#   endif
      ELSE
        ProcessObs=.FALSE.
      END IF
#  endif
# endif

will fail because of incorrect ObsTime(ng) and the model solution at the observation locations is not extracted! This hasn't been a problem for us because we have automatic scripts that update DSTART in each assimilation cycle.

Change History (1)

comment:1 by arango, 7 years ago

Resolution: Fixed
Status: newclosed
Note: See TracTickets for help on using tickets.