next up previous
Next: Model Variables Up: The Proudman Oceanographic Laboratory Previous: References and Bibliography


Model domains, grids and Setups

Each new implementation of the POLCOMS system requires a number of domain specific elements. These are:

Model grids: Horizontal

In the horizontal POLCOMS uses a B-grid discretisation, so both componenents of velocity $(u,v)$ are defined u-points, half a grid box to the southwest of points where elevations, $\zeta$ and other scalar variables are defined, b-points. The domain size is icg=1..l, jcg=1..m, with (1,1) being the southwest corner. All horizontal arrays have a halo of at least 1 point (i.e array size is at least (0..l+1,0..m+1)) to facilitate message passing and open boundary data. Figure 1 shows the arrangement of grid points.

IMPORTANT Because the model is coded for multiprocesses systems almost all the horizontal indices in the model code (apart from i/o) refere to the LOCAL arrays (i.e. those on a particular processor) and range from i=1,iesub and j=1,jesub. The relation between LOCAL (i,j) and GLOBAL (icg,jcg) indices is:


There are 7 basic masks used in this model.

ipexu =1 at u-point where calculations are conducted
ipexb =1 at b-point where calculations are conducted
ipexub =1 at a sea u-point (incuding coastal points)
ipexbb =1 at a sea b-point
iucoast =1 where u-point is coastal and velocities are evaluated by the lateral boundary condition (case-II boundaries only, see below)
incb =1 at an open boundary points (always on b-points).
incu =1 at sea u-points next to open boundaries

The distiction between ipexb and ipexbb arises because there can be points across boundaries that are sea points, but where model calculations are not conducted. Other more specialized masks (e.g. in the advection routines) are described in the subroutine documentation.

The bathymetry (hs) is read in at the b-points, but there are two configuarations available as to where the sea-land boundary lies on this grid.

case-I boundaries
Land boundaries lie along b-points (Figure 1). Most calculations occur at the coastal points (ipexb(i,j)=1), but the point is surrounded by a fractional grid box (ar(i,j) = 0.5 or 0.25). The grid is defined by reading in ipexu, then setting ipexb = 1 at all b-points surrounding a point where ipexu = 1. There is a test that the depth hs is non-zero at points with non-zero ipexb. This allows small islands and peninsulars to be included. This configuaration gives a subgrid scale representation of the coastline, but wetting and drying is not available. Model grid setups should use a procedure such as

  1. Define mask at u points (ipexu) using the coastline (e.g. use GMT's command grdlandmask)
  2. Calculate mask at b-points (ipexb)
  3. Find bathymetry at sea b-points
Matlab (or similar) is useful for this and sometimes interation from 3 to 1 is needed if the available bathymtery is not completely consistent with the available coastline.

Figure 1:

case-II boundaries
Land boundaries lie along u-points (Figure 2). Calculations do not occur at the boundary points, but rather a lateral boundary condition is used, either non-slip or slip (zero horizontal gradient). In this case the bathymetry is used to set ipexb, then ipexu = 1 if no surrounding ipexb = 0. ipexub = 1 and ipexu = 0 at coastal grid points . All masks are derived from the bathymetry (no extra mask file is required) and this significantly simplifies model setup.

Figure 2:

Open boundaries always lie along b-points, but any point within the domain can be an open boundary point. The array ifaceob stores which faces of an open bounday point are open (i.e. receive fluxes from outside the model domain). By default any point with ipexb(i,j)=1 at icg=1, icg=l, jcg=1, jcg=m is an open boundary point (this means with case-I boundaries there can not be a coastlie along these rows/columns - the model domain must be extended to accomadate this). In addition a list can be read in of which faces around which points are open boundaries.

Model grids: Vertical

The model uses a staggered veritical grid (Figure 3) with state variables defined 1/2 a grid box above and below the sea surface and bed, and flux variables defined at at surface and sea bed. The model vertical coordinate is written in $\sigma $-coordinates, but there are two choices of how the model levels are discretized in $\sigma $-space. :
S-cooridnates The level spacing in $\sigma $-space can vary in the horizontal; vertical cooridnate variables ds dsu,sig,sigo have 3 indices, and seperate variables are defined at u-points.
$\sigma $-coordinates The level spacing in $\sigma $-space is fixed in the horizontal.

Figure 3: Vertical distriution of variables

Compiler options

There are a number of compiler options used, many of these set logic variables in parm_default.

METOFFICE Needed if using met. office heat fluxes and system
GULF A met. office domain
AMM A met. office domain
IRSH A met. office domain
ADV_BC - used advective boundary conditions (otherwise relaxation)
ANALYTIC_DEPTH - set bathymetry to idealised values defined in set_bathymetry.F
ANALYTIC_INIT - set an analytic buoyancy (temperature) field, defined in tmpfield.F
BALTIC - include the Baltic as an inflow
BIHARM - Biharmonic, rather than laplacian in sigma-coordinate horizontal diffusivity (NOT TESTED)
BIO_LAMDA - use transmissivity from the ERSEM model in the heatflux calculation
BULKMET - read from file met data (pressure, winds, temperature, relative humidity and cloud cover) as 2d fields
CLOUDPOINT - a single value of cloud data is read to represent the cloud over the whole domain at each time; use with BULKMET
COASTFRIC - increase z0 near coast - not stable
COLLECTIVE - use collective communication routines
COMPOUT - only output tide means at sea points
CONST_TS_BC - boundary temperature and salinity values are held constant (values read in from file)
CONST_HORIZ_DIF - constant diffusivity in sigma-coordinate horizontal diffusivity, overwise, Smagorinsky
CONVECTU - convective adjustment for u, v, temperature and salinity
CTDTRACK Output T, S and SPM profiles according to a list of time, long. and lats.
DEBUG - output a range of information and specific values of variables at a point. For use in debugging.
plus extra debugging information on
DEBUG_MODEL - physics model
DEBUG_ADV - advection
DEBUG_B3DRUN - main program control
DEBUG_BAROC - baroclinic integration
DEBUG_BAROT - barotropic integration
DEBUG_CONVECT - convection
DEBUG_DIFFUSEB - scalar diffusion
DEBUG_DIFFUSEU - velocity diffusion
DEBUG_HORIZUV - horizontal diffusion of currents
DEBUG_HORIZTS - horizontal diffusion of temperature and salinity
DEBUG_PGRAD - pressure gradient calculations
DEBUG_LAGRANGE - Lagrangian particle tracking model
DEBUG_EXCHANGE - halo exchange routines
DEBUG_COMMS - global communications and halo exchange routines
DEBUG_GLOBCOM - global communication routines
DEBUG_LAGRANGECOMMS - communications in Lagrangian particle tracking model
DEBUG_STRSET - meteorological data input and interpolation
DIA_T - output temperature diagnostics at specified points and in 3D
DOCUMENT - make the POLCOMS document
EXTRARIVS - use constant annual mean data for additional rivers
FLAT - daldi and dbedi in parameters.dat represent dx and dy in metres, assumes flat earth?
FLIPBATHY - bathymetry file is read in by row from north to south (default is south to north)
GOTM - use the General Ocean Turbulence Model to calculate vertical diffusivities
HARM_ANA - do harmonic analysis and output harmonic constants to file
HARMW - include the vertical velocity in the harmonic analysis calculations (requires HARM_ANA too)
HORIZDIF - add horizontal diffusion to currents - on Z -levels
HORIZTS - do horizontal diffusion of temperature and salinity (requires HORIZDIF too)
HORIZ_DIF_SIG - add horizontal diffusion to currents - on sigma -levels
HORIZ_DIF_SIG_TS - do horizontal diffusion of temperature and salinity (requires HORIZ_DIF_SIG too)
INVERSE_B - apply inverse barometer correction at the boundary - used when boundary data elevations do not include the effects of atmospheric pressure but either BULKMET or POINTMET is used
LONGBCFORM - use long format boundary conditions - south, north, west, east
MONITOR - output largest current speed from each processor
MY25CBF - set a spacially varying coefficient of bottom friction
New Heat - improvement(?) to bulk heat flux parameterization
NOCOMPRESS - omit the pressure term from the calculation of 'potential buoyancy'
NO_CONVADJ - do not do a convective adjustment
NODIFF - switch off vertical diffusion
NOHPG - switch off horizontal pressure gradient calculation
NOGUI - make b3drun.F the main program, needed for error trapping with Portand Compilers but disables runline arguments
NOMODEL - omit the physics model calculations
NOPHYSADV - turn off all physics advection
NORIVERSKIP - read in river data from start of file instead of skipping nday-1 records
NOROT - no rotation - Coriolis force is zero
NO_SAL - turn off salinity integration
NOSCAADV - turn off scalar advection
NO_SCOORD - use sigma- rather than s-coordinates
NOSPMADV - turn off advection and diffusion of SPM
NOSPMRIV - turn off spm input from rivers
NOSPMSOURCE - turn off sources of SPM
NOSTEEP - turn off steepening during calculation of horizontal advection
NOTEVENSIG - $\sigma $-levels are not evenly spaced (redundant)
NOTIDE - turn off tidal calculations
NO_TMP - turn off temperature integration
NO_V - turn off northwards advection
NOVELADV - no velocity advection
OUTSCOORD - outputs 3d array of s-coordinates; run will stop as soon as file is written
PARALLEL_STATS - output parallel statistics
PGRAD - calculate the horizontal pressure gradient by interpolating onto horizontal plane (default linear interpolation)
PGRAD_SPLINE - calculate the horizontal pressure by spline interpolation onto horizontal plane
POINTMET - use single point met data - pressure, winds, temperature, relative humidity and cloud cover
PROGDENS - set buoyancy = temperature
READ_INITIAL_TS - read from file initial temperature and salinity fields
READOPENBCPOINTS - read from file extra open boundary locations
READ_TIDECON - read from file tidal constituents
READ_ZETUB - read from file boundary elevations and currents at frequency set in parameters.dat
RILIMIT - option on limiting the mixing length in turbulence routines
RIMIX - use the Richardson number dependent boundary layer mixing scheme
RIVERFIX - elevation is modified by river inflow at a river grid box
RIVERS - include freshwater inflow from rivers
SALFLUX - include salinity flux calculations: read in E-P data
SALTFLUX - include salinity fluxes at the surface due to the difference between evaporation (calculated) and precipitation (read in)
SCOORD_EVEN - the s-levels are equally-spaced in the vertical (same as $\sigma $-levels), irrespective of the equilibrium depth
SCOORD - use horizontally varying vertical coordinate
SHELFMO - a particular implementation
SPM - call the SPM submodel
TIMING - calculate and output timing information for various stages of the model run
TIMING_ADV - include timing for advection routines
TIMING_BAROC - include timing for baroclinic integration
TIMING_BAROT - include timing for barotropic integration
TRACER - advection and diffusion of a tracer
UBC - use non-zero tangential velocities at coastal boundaries (for use with case II boundaries)
UCOAST - use case II boundaries - land boundaries lie along u-points (default is case I, unless wetting/drying is invoked)
UNFORMMET - use unformatted meteorological data files (specific implementation)
VARY_LAMBDA - use a horizontally varying transmissivity in the heat downwelling calculation (downwell.F)
VARY_REALAX - use a relaxation boundary condition for temperature and salinity
WETDRY - use wetting/drying code
WINDFLUC - add a fluctuation component (read in from file) to the wind field
ZBAR - include the equilibrium tide
ZERO_PG_BC - in pressure gradient calculation use zero pressure gradient boundary condition (default is zero density gradient)
ZVARYBC - use depth-varying boundary condition


Control files

parameters.dat The list of model parameters setting domain size, reslution and some other parameters - since the model uses dynamically allocated memory these can be changed without recompiling. Read by parm_read
filenames.dat A list of file names and unit numbers for the model to open. These are not passed awaywhere else so must corresponded to the correct units read/written in the various subputines. The format is:
$<$input files directory$>$
$<$numnames, number of input files$>$
$<$input file, 1$>$
$<$logical unit$>$ $<$type$>$ $<$filename$>$
$<$input file, numnames$>$
$<$numnames, number of output files$>$
$<$Idname run Identifier$>$
$<$output file, 1$>$
$<$logical unit$>$ $<$type$>$ $<$filename$>$
$<$output file, numnames$>$
Data Types are
  1. formatted
  2. unformatted
  3. unformatted, without input directory path

This file can used used to run a series of model legs, with a different filenames.dat for each leg.

scoord_params.dat Used to set the parameters (hc, cc, theta and bb )that defines the s-coordinates in the vertical. See scoordset. Not needed if directive NOSCOORDS is used.

Boundary condition data

There a 3 types of boundary condtition data used in the model, open boundary data, surface fluxes and riverine inputs:
Open boundary data This is data to replace model variables external to the model domain, but needed to calculate horizontal gradients at the boundary, and to allow of the propogation of information (i.e. waves) across the model boundary. For a full 3D simulation the following boundary data is usually required:
tmp and sal daily temperature and sality
ub, vb and zet hourly depth mean currents and elevations and/or
u1, u2, v1, v2 and zet1, zet1 $cos$ and $sin$ amplitudes for each of ncond tidal constituents.
Both hourly and tidal data can be used (e.g. if residual and tidal data have been separated).

There are three locations where open boundary data can be required and at the start of each run the model outputs 3 lists of points where boundary condition data is required:

openbclist_u.datexternal velocity points, e.g. hourly UB, VB
openbclist_b.datexternal scalar points, e.g. daily TMP SAL
openbclist_z.datboundary scalar points, e.g.hourly ZET
The first line of each file is the number of points (e.g. nbcb), then this number of positions (lon,lat). These then define the required format of the data to be read in. For 2D fields:
read(nrm,*) (z1(j),j=1,nzbc)
read(nrm,*) (u1(j),j=1,nubc)
read(nrm,*) (v1(j),j=1,nubc)

For 3D fields:
do j=1,nbbc
read(nrmt,*) Ii(j),Ji(j),(btmp1(k,j),k=1,n-2)
do j=1,nbbc
read(nrmt,*) Ii(j),Ji(j),(bsal1(k,j),k=1,n-2)
Both are ramped so require an extra value for each run period.

For tidal data the format is
do i=1,ncond
sigma(ncond) (frequency in degrees per hour)
do i=1,ncond
read(itide,'(8f10.6)') (z1(j,i),j=1,nzbc)
read(itide,'(8f10.6)') (z2(j,i),j=1,nzbc)
read(itide,'(8f10.6)') (u1(j,i),j=1,nubc)
read(itide,'(8f10.6)') (u2(j,i),j=1,nubc)
read(itide,'(8f10.6)') (v1(j,i),j=1,nubc)
read(itide,'(8f10.6)') (v2(j,i),j=1,nubc)

When using tidal constituents, a control file is also needed:

ncond Number of constuents
nfac positive to use a date factor
idate The date of t=0. hrs days month year
indx which of 15 standard constituents is each one (< 0 for none of them)
mcon which of these ncond are to be used (1) or not (0)

Surface fluxes For a full 3D simulation the following surface fluxes are usually required.
fs, gs surface wind stress in eastwards and northwards direction. Usually derived from wind speed via drag relationship.
hf_in, hs_out heating and cooling heatfluxes, either derived from bulk formulae and astronomical values (using heatin) or directly from NWP model fluxes.
Pr surface pressure
Various input routines are available for these, including ECMWF data, NCEP data and applying time series from a single point to the whole domain.
Riverine inputs River inputs change elevations salinity, temperature (and nutrients) at specified coastal grid points, equally throughout the water column. Routines for reading in daily and constant values for a number of rivers are available.

Model output

Run time option

Model setup check list and suggested utilities for a typical 3D run

  1. grid: bathymetry, masks and open boundary locations use e.g. makegrid.m
  2. make script with compiler options
  3. Run shelf to produce openbclist_?.dat
  4. produce T, S, ub, vb, zet open boundary conditions use e.g. makeTS_bc_list.F, makeUBVB_bc_list.F, harmonic_bc_list.F
  5. produce surface forcing files: wn ,we, pr + (at, rh, cc) or +(Hf_in, Hf_out, ta, tw)
  6. rivers discharges and river input points
  7. select output data and frequency
  8. selecte time series output points(tseries.dat)

next up previous
Next: Model Variables Up: The Proudman Oceanographic Laboratory Previous: References and Bibliography
The AMMP Project 2005-04-20