UoB : Dept. of Math. : BOM : Latest



Main page
Time to solution calculator
Time to solution calculator BOM2D
Sea map for Norway
User group
Useful links



download the code
download the code
download the code
download the code
download the code
BOM 4.1:
download the code
userguide: PDF ONLINE -->

Previous versions:

BOM 3.2:
get source code
userguide: PS

BOM 2.0:
get source code
userguide: PS

BOM 1.2:
get source code
userguide: PS

Older items

2016-10-28: BOM 5 alpha6

  • checkpoint and restart with particles now work on most cases
  • initial support for defining time dependent particle properties via the particle class keyword
  • a logging mechanism for particles wasadded, records whenever particles enter/leave predefined volumes in the model
  • output files are now organized and put into separate subdirectories
  • add routines and keywords for dumping time averaged fields/profiles
  • generally quite a lot of minor fixes and tweaks
Still todo
  • 1way nesting is in the pipeline
  • Documentation should be transferred to LaTeX and PDF

2014-12-16: BOM 5 alpha5

  • Regional drag; see the effect of obstacles by increasing drag coeff. in box regions
  • Rudimentary wall drag for W (the wall drag effect on sinking water, should be correct for flat terrain)
  • Internal pressure alternative - "optimal sigma", see paper by Jarle Berntsen.
  • Initial support for dumping averages of fields in sections or boxes
  • New module mod_cruise.f90, support for sampling model data along user defined cruise tracks
  • BOM now runs on its own MPI communicator
  • Automatic domain decomposition improvement; BOM will try to find a decomposition omitting blocks with only land points by default. On grids with large number of land points this leads to a huge reduction in block size and more efficient use of processors.
  • Improved river autolocation; river location is given with real coordinates, rivers will then snap to the nearest coast cell matching the provided outlet direction.
  • 1D Periodic BC using the parallelization to create a wrap around grid in the x direction
  • Ripped out TEOS-10 equation of state (easy to add back, its added size didn't seem worth it)
  • Recent change in the Portland compiler made it necessary to use pointer arrays instead of allocated arrays all over.
  • New PGPLOT timeseries gimmick; If pgplot_cache_results is > 0, trends from previous run will be cached on disk and displayed with the new run, handy for quick checks.
  • The particle tracking module is now compiled in by default
  • Many minor cleanups, bug fixes and improvements.
  • Unfortunately maybe some new bugs as the time for proper QA is limited...
Still todo
  • 1way nesting is in the pipeline
  • Documentation should be transferred to LaTeX and PDF

2011-07-15: BOM 5 alpha4

  • Initial, but functional, support for the new TEOS-10 equation of state.
  • Add ability to specify river concentrations, and support for rivers when advecting density
  • Use a global shapiro filter instead of TANH transitions to smooth edges of sponge regions
  • Add ability to override river inlet geometries on the grid level for full control.
  • Add support for dived river inlets
  • Add support for reading binary data in "binary stream" format, more compatible with the C world.
  • Some minor cleanups, bug fixes and improvements.
  • The automatic conversion between absolute salinity and PSU is not 100% complete.
  • 1way nesting is in the pipeline
  • Documentation should be transferred to LaTeX and PDF

2010-12-16: BOM 5 alpha3

  • More support for reading lateral and surface BC's from file
  • New keyword for permanently increasing viscosity in specific regions ("add_sponge")
  • Improved the info available via the command "./bomhelp.py"
  • Support for settling velocity in the particle model
  • Improved robustness of timeseries dumping technique, did not work well on > 256 processors.
  • A lot of minor cleanup, bug fixes and improvements.
  • More tuning of boundary conditions
  • Almost done; support for easily doing 1way nesting using the new BC code above.
  • If a river with code 3 or 4 is located at a processor boundary the ghost zones are not correctly updated. the trivial fix is not good for performance, so this will be fixed if it is really needed only.
  • Sync documentation with code. Mostly ok, except coordinate change and some new keywords.
  • Documentation should be transferred to LaTeX and PDF

2010-07-16: BOM 5 alpha2

  • A few major and minor bug fixes w.r. binreg averaging BC, plotting.
  • Overhauled the advection of tracers.
  • Added capability to plot array slices "as is" in pgplot, optionally each time "dump_state" is called. this means changes in most arrays can be visualized during a timestep, which is nice for debugging.
  • The switch from specification of horisontal ranges using grid indices into x,y coordinates in meters has begun and is close to complete.
  • More tuning of boundary conditions
  • More methods for forcing will come eventually, on a needed by project basis.
  • We have some known performance issues on more than 100processors with the binreg boundary conditions that can be fixed by using communicators instead of global collective calls. will be done if needed.
  • If a river with code 3 or 4 is located at a processor boundary the ghost zones are not correctly updated. the trivial fix is not good for performance, so this will be fixed if it is really needed only.
  • Sync documentation with code. Mostly ok, except coordinate change and some new keywords.
  • Documentation should be transferred to LaTeX and PDF

2010-06-04: BOM 5 alpha

After many years with no new code released, this is a preliminary version 5 that seems to work well. We decided to integrate all our best code into one single code base, and strip out all case specific code. Noteworthy changes
  • Non hydrostatic pressure solver
  • 2D vertical slice mode via setting JM=1 is integrated
  • MPI parallelisation
  • Checkpoint/restart facility
  • New configuration system, moving almost all case specific config into setup file. Idealized winds, rivers, point sources, plotting, initialization, some simple types of boundary conditions and more are working.
  • User configurable dumping of data to ascii files
  • Run time plotting via PGPLOT
Preliminary documentation on PDF in the "doc" subdirectory.

It is a goal to let all features be turned on or off via the setup file.

There will be more features added on a "needed by project" basis. There is a framework in place for offering user selectable boundary conditions. As of today FRS, Dirichlet, Neuman=0, and periodic is implemented. More will come for realistic forcing, nesting etc.

Scalability for certain choices of open boundary conditions need optimization for use on more than 30-40 processors depending on case size.

A particle tracking module is under development and testing.

One upcoming change is that we will switch from specifying coordinates in the plotting commands with indices and "grid coordinates" into using meters as the unit. this will make config files more generic, and enable very quick changes of experiment resolution.

The code is tested with Portland (pgf90) and the GNU Fortran compiler (gfortran) with MPICH2. Intel ifort does not yet work well with optimization on for all files.

2005-05-06: Internal pressure and rotated grids

A recent work on internal pressure gradient errors in the well known seamount case, has shown that it is possible to reduce the error significantly by computing the gradient as a linear combination of the standard stencil and a stencil rotated 45 degrees with respcect to the model grid.

This new algorithm can easily be implemented in the BOM 4.1 version by following the below steps:

In the file state.f90 add the following line


In the BOM source file Main.f90, glue in the below lines around each call to the INTERNAL subroutine:




Download the file at this link into your BOM source directory, call it e.g. internalrot.f90. Then, in the Makefile add internalrot.o to the OBJECTS variable and recompile.

2004-09-01: BOM 4.1 released

While experimenting with non hydrostatic extensions, a typo bug in the predictor part of the time stepping for momentum were found and corrected with this release.

It is very hard to see differences in the results after rerunning experiements and comparing with version 4.0, but this may be case dependant. The 2D solution seems to be non-affected, while e.g. the stratification seems somewhat improved. Generally the bug has lead to a damping of the solution, so it will generally be necessary to increase the viscosity up to levels corresponding to 3.x, likewise reduce the time step, in order to get stable results.

2003-11-18: BOM 4.0 released

New predictor corrector time stepping scheme with better stability properties and higher numerical order. The barotropic part of the equations is advanced in time with the leapfrog scheme for the predictor, and the Crank-Nicholson scheme for the corrector. The baroclinic part uses leapfrog for the predictor step and the Adams-Moulton scheme for the corrector step. In some experiments it is now possible to increase the 3d time step with a factor of three relative to version 3.X.

The alternative internal pressures scheme (due to McCalpin) with fourth order discretization along sigma layers has been made a runtime option. By applying the integration by parts rule to the internal pressure term it is possible to do the vertical integral in a more robust way. This scheme has been proven effective to reduce internal pressure error in the infamous Seamount case. It is not, however, clear how beneficial the effects are in more realistic cases.

The numerical kernel of BOM seems to stabilize, so it is not expected that there will be major changes to the core in the future. A non-hydrostatic version of the modesplit routine is under testing, and may be added soon, and depending on funding there may come a separate MPI version of 4.0 next year.

New animations of the contintental shelf on the examplespage

2003-03-03: BOM 3.2 released

This release contains a bugfix for the routine ADVECT.f90, which was by accident hardcoded for advecting density only. It can now advect a general field.

Also updated Makefile with flags for Intel Fortran and Pentium4.

2002-09-06: Small bug in 3.0 fixed

Two 3D arrays that should have been globally defined in state.f90, were only declared locally. This is fixed in version 3.0.1.

2002-08-20: BOM 3.0 released

Finally BOM 3.0 is released, seems to work robustly.

New features:

  • Predictor/corrector time-stepping scheme, with the theta-method on the corrector step. Hopefully this approach will be useful for studies with low viscosity, and prevent/reduce unphysical grovth of certain modes, e.g. from errors in internal pressure calculations.
  • Additional recent advection scheme due to Shchepetkin. Gives sharp fronts, but may have some overshoot.
The new time-stepping scheme is more expensive computationally, but should be more robust. In many(most?) cases BOM-2.0 will still do a good job faster.