AMM12 Configuration Boundary Definition Analysis

22-Oct-2013 Susan Allen and Doug Latornell Salish Sea MEOPAR Project EOAS-UBC

This is an investigation of the differences in results obtained from runs of the AMM12 configuration with the unstructured boundaries (BDY) set via the 2 available mechanisms in NEMO-3.4:

  • using a coordinates.bdy.nc file (stock configuration)

  • using a nambdy_index namelist

The runs were done on salish using a 4x4 cores decomposition with no land processors specified.

Initial analysis found larger than expected differences in the temperature, u, and v values, and what looked like boundary effects in the difference plots on the south and west boundaries. Susan postulated that the difference was due to the order in which the boundaries are calculated in bdyini.F90 in contrast to the boundary order in the tide forcing files. Another run was done with a modified bdyini.F90. The results from that run are modbdy.

[1]:
%matplotlib inline
import netCDF4 as nc
import matplotlib.pyplot as plt

T-grid data:

[121]:
stock = nc.Dataset('stock/AMM12_30mn_20070101_20070101_grid_T.nc', 'r')
namlst = nc.Dataset('nambdy_index/AMM12_30mn_20070101_20070101_grid_T.nc', 'r')
modbdy = nc.Dataset('mod_bdyini/AMM12_30mn_20070101_20070101_grid_T.nc', 'r')
[123]:
for dim in stock.dimensions.itervalues(): print dim
<type 'netCDF4.Dimension'>: name = 'x', size = 198

<type 'netCDF4.Dimension'>: name = 'y', size = 224

<type 'netCDF4.Dimension'>: name = 'deptht', size = 33

<type 'netCDF4.Dimension'> (unlimited): name = 'time_counter', size = 48

Dimension of the nambdy_index results are the same, with the odd exception of the time_counter dimension which has size=47.

Some handy contour plotting functions:

[144]:
def conplot(data, t, d, var='votemper'):
    """Contour plot of var from data-set at time-step d
    and depth-step d.
    """
    field = data.variables[var]
    plt.contourf(field[t, d])
    plt.colorbar()

def diffplot(ref, other, t, d, var='votemper'):
    """Contour plot of difference ref[var] - other[var]
    at time-step t and depth-step d.
    """
    diff = ref.variables[var][t, d] - other.variables[var][t, d]
    plt.contourf(diff)
    plt.colorbar()

Just to get a feel for the results, here is the temperature field at the 5th depth level (note that depth uses s-coordinates) and the 46th time-step.

[145]:
conplot(namlst, 46, 5, var='votemper')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_9_0.png

What we’re really interested in, though, is the differences. Here are diffs plots of temperature at the 24th time-step and 5th depth level. stock and modbdy show the least difference.

[146]:
diffplot(stock, namlst, 24, 5, var='votemper')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_11_0.png
[147]:
diffplot(stock, modbdy, 24, 5, var='votemper')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_12_0.png
[148]:
diffplot(modbdy, namlst, 24, 5, var='votemper')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_13_0.png

Now look at the differences in the velocity fields on the U and V grids.

[128]:
stock_u = nc.Dataset('stock/AMM12_30mn_20070101_20070101_grid_U.nc', 'r')
stock_v = nc.Dataset('stock/AMM12_30mn_20070101_20070101_grid_V.nc', 'r')
namlist_u = nc.Dataset('nambdy_index/AMM12_30mn_20070101_20070101_grid_U.nc', 'r')
namlist_v = nc.Dataset('nambdy_index/AMM12_30mn_20070101_20070101_grid_V.nc', 'r')
modbdy_u = nc.Dataset('mod_bdyini//AMM12_30mn_20070101_20070101_grid_U.nc', 'r')
modbdy_v = nc.Dataset('mod_bdyini/AMM12_30mn_20070101_20070101_grid_V.nc', 'r')
[129]:
diffplot(stock_u, namlist_u, 46, 5, var='vozocrtx')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_16_0.png
[149]:
diffplot(stock_u, modbdy_u, 46, 5, var='vozocrtx')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_17_0.png
[131]:
diffplot(modbdy_u, namlist_u, 46, 5, var='vozocrtx')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_18_0.png

Again, stock and modbdy show the least difference, both in u (above) and v (below)

[115]:
diffplot(stock_v, namlist_v, 46, 5, var='vomecrty')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_20_0.png
[150]:
diffplot(stock_v, modbdy_v, 46, 5, var='vomecrty')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_21_0.png
[152]:
diffplot(modbdy_v, namlist_v, 46, 5, var='vomecrty')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_22_0.png

Zooming the plots in to the upper left (near Iceland) corner:

[153]:
def z_conplot(data, t, d, var='votemper'):
    """Contour plot of var from data-set at time-step d
    and depth-step d.
    """
    field = data.variables[var]
    plt.contourf(field[t, d, 150:, :50])
    plt.colorbar()

def z_diffplot(ref, other, t, d, var='votemper'):
    """Contour plot of difference ref[var] - other[var]
    at time-step t and depth-step d.
    """
    diff = ref.variables[var][t, d] - other.variables[var][t, d]
    plt.contourf(diff[150:, :50])
    plt.colorbar()
[158]:
z_diffplot(stock_u, modbdy_u, 46, 5, var='vozocrtx')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_25_0.png
[157]:
z_diffplot(stock_v, modbdy_v, 46, 5, var='vomecrty')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_26_0.png

The v values (in contrast to the differences) appear to correspond to inconsistencies[1] noted in the AMM12 coordinates and tide forcing data files.

[1] nbit starts at 3, but the glamT value is for i=2

[154]:
z_conplot(modbdy_v, 46, 5, var='vomecrty')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_28_0.png
[155]:
z_conplot(stock_v, 46, 5, var='vomecrty')
../../_images/code-notes_dev-notes_AMM12-BDY-analysis_29_0.png

Our conclusion is that setting ln_coords_file to .false. in the namdby namelist so that the code in bdyini.F90 calculates the boundaries is a viable alternaive to constructing a coordinates.bdy.nc file for the Salish Sea case. Initially, the plan is to use:

nbdysege = 0
nbdysegw = -1
nbdysegn = -1
nbdysegs = 0

then evolve toward a partial boundary on the west and north sides of the domain.

Note that it is critical that the tide forcing boundary order be the same as that in bdyini.F90; i.e. east, west, north, south.