Opened 3 years ago

Closed 3 years ago

#894 closed upgrade (Done)

IMPORTANT: Updated 4D-Var observation operator

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

Description

  • This update enhances the observation operator to allow the input NetCDF variable obs_depth to have the data vertical location specified as a negative value (depths in meters), a positive value (fractional vertical coordinate ranging from 1:N), or a combination of both conventions.

Recall that during initialization, the ROMS 4D-Var algorithm always processes obs_depth from the input observations NetCDF file. Then, it will update the obs_Zgrid variable with all depths in fractional vertical coordinates. The obs_Zgrid variable is used after initialization in the inner loops to facilitate the vertical interpolation of the TLM and ADM state at the observation locations.

Many thanks to Brian Powell for bringing this issue to my attention. Before, it only worked if the user selected a single convention for all the observations in the file (negative depths or positive vertical fractional coordinate).

  • Updated extract_obs.F and ad_extract_obs.F to avoid rejecting observation depths above the center of the top vertical grid cell, k=N(g). Recall that ROMS vertical grid is staggered with 3D variables (u, v, T, S, ...) located at the center of the grid cell. Notice that W-type variable are located at the bottom and top of the grid cell.

https://www.myroms.org/trac/vertical_grid.png

Thus, now we have:

           ...
           Ztop=Adepth(i1,j1,N(ng))
           Zbot=Adepth(i1,j1,1    )
           IF (Zobs(iobs).ge.Ztop) THEN
             k1=N(ng)                         ! If shallower, assign to
             k2=N(ng)                         ! top grid cell. The
             r1=1.0_r8                        ! observation is located
             r2=0.0_r8                        ! on the upper cell half
             Zobs(iobs)=REAL(N(ng),r8)        ! above its middle depth.
           ELSE IF (Zbot.ge.Zobs(iobs)) THEN
             r1=0.0_r8                        ! If deeper, ignore.
             r2=0.0_r8
             ObsVetting(iobs)=0.0_r8
           ELSE
             ...

Many thanks to Brian Powell for bringing this issue to my attention. It is only relevant when processing vertical observations as negative depths in meters.

  • Updated read_asspar.F and read_phypar.F to avoid a hanging-up in MPI application when find_file triggers an exit during ROMS configuration due to the wrong specification of input NetCDF files by the User.

Change History (1)

comment:1 by arango, 3 years ago

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