- Model grids: Horizontal
- Model grids: Vertical
- Compiler options
- Control files
- Boundary condition data
- Model output
- Run time option
- Model setup check list and suggested utilities for a typical 3D run

Model domains, grids and Setups

- A grid defined by masks and bathymetry
- A set of compiler options to define the physics and numerics to be used
- A number of control files
- Boundary condition data
- A specification of model output
- A set of runtime options

**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:

**icg=i+ielb-1****jcg=j+jelb-1**

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

- Define mask at u points (
**ipexu**) using the coastline (e.g. use GMT's command grdlandmask) - Calculate mask at b-points (
**ipexb**) - Find bathymetry at sea b-points

*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.

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.

- S-cooridnates The level spacing in -space can vary in the
horizontal; vertical cooridnate variables
**ds dsu,sig,sigo**have 3 indices, and seperate variables are defined at u-points. - -coordinates The level spacing in -space is fixed in the horizontal.

**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**- -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 -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

*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
*input files directory***numnames**, number of input files*input file, 1*- .
- .
*logical unit type filename*- .
- .
*input file,***numnames**- OUTPUT
**numnames**, number of output files**Idname**run Identifier*output file, 1*- .
- .
*logical unit type filename*- .
- .
*output file, numnames*

- formatted
- unformatted
- 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.

- 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**and amplitudes for each of**ncond**tidal constituents.

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**

**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)

enddo

do j=1,nbbc

read(nrmt,*) Ii(j),Ji(j),(bsal1(k,j),k=1,n-2)

enddoFor tidal data the format is

do i=1,ncond

sigma(ncond) (*frequency in degrees per hour*)

enddo

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)

enddo

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

- 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.

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