Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#565 closed upgrade (Done)

IMPORTANT: Corrected and introduced new Matlab scripts

Reported by: arango Owned by: arango
Priority: major Milestone: Matlab Processing Scripts
Component: Matlab Version: 3.6
Keywords: Cc:

Description

Changed the strategy to how to vertically interpolate in roms2roms.m and obc_roms2roms.m. It turns out that it is not a good idea to use the intrinsic function TriScatteredInterp for a full 3D interpolation in a terrain-following coordinates grid, like ROMS, because the triangulation may include shallower or deeper points in the interpolantion. Many thanks to John Wilkin for bringing this to my attention and helping to fix this problem.

The strategy now is to split the interpolation between horizontal and vertical. First, the horizontal interpolation is carried out at all the original levels of the Donor Grid data using TriScatteredInterp. Then, the vertical interpolation is carried out to the Receiver Grid using interp1. In order to facilitate a simple extrapolation when the Receiver Grid depths are outside the Donor Grid range, the shallowest and deepest levels of the Donor Grid data is duplicated to correspond to specified bogus depths: Zsur for shallowest and Zbot for deepest. To facilitate this type of interpolation in other scripts, two new generic functions are coded: interp_field.m and interp_boundary.m. Now, roms2roms.m and obs_roms2roms.m calls these generic interpolation functions.

Several new scripts are introduced:

  • boundary/interp_boundary.m: Interpolates lateral boundary conditions for a ROMS generic 2D or 3D state variable from a Donor to Receiver. If 3D (vertical) interpolation, the Donor Grid data is interpolated first to the Receiver Grid horizontal locations using TriScatteredInterp at each of the Donor Grid vertical levels. Then, interp1 is used to interpolate to Receiver Grid vertical locations.
  • boundary/plot_boundary.m: Plots requested ROMS variable from input lateral boundary NetCDF file. This function is very useful for browsing 3D lateral boundary conditions for ROMS in a vertical slab. The location of the minumum is marked with a filled magenta circle whereas the maximum is marked with a filled magenta square.
  • forcing/otps2roms.m: Generates a ROMS tidal forcing from the OTPS dataset. The base_date is related to ROMS input parameter the TIDE_START. It is used in ROMS to compute the correct phase lag with respect initialization time. I still not happy how this is done and will revisit this function in the future to get the data directly without the awkward Fortran interface.
  • initial/interp_field.m: interpolates a generic ROMS 2D or 3D field variable from a Donor to Receiver Grid. If 3D interpolation, the Donor Grid data is interpolated first to the Receiver Grid horizontal locations using TriScatteredInterp at each of the Donor Grid vertical levels. Then, interp1 is used to interpolate to Receiver Grid vertical locations.
  • initial/d_oa2roms.m: User modifiable script showing how to create ROMS climatology NetCDF file(s). The data source are objective analyzed (OA) Annual and Monthly temperature and salinity fields from the Levitus (1998) dataset. These fields are generated using ROMS OA package.
  • initial/oa_cat.m: Reads Annual and Monthly objective analysis (OA) files of the Levitus climatology and appends bottom Annual levels to Monthly OA fields. The Monthly Levitus Climatology is available from the surface to 1000m (1994 dataset) or 1500m (1998 dataset). The annual fields are used for the missing bottom levels.
  • initial/oa2roms.m: Vertically interpolates requested OA variable to ROMS terrain-following vertical grid. The OA package generates qfields on a constant depth: standard depth levels.
  • utility/roms_eos.m: Computes in situ density using ROMS nonlinear equation of state for seawater. It assumes no pressure variation along geopotential surfaces, that is, depth (meters; negative) and pressure (dbar; assumed negative here) are interchangeable.

Change History (2)

comment:1 Changed 5 years ago by arango

  • Resolution set to Done
  • Status changed from new to closed

comment:2 Changed 5 years ago by arango

  • Component changed from Nonlinear to Matlab
  • Milestone changed from Release ROMS/TOMS 3.6 to Matlab Processing Scripts
Note: See TracTickets for help on using tickets.