Regression Tests

There are currently 27 tests which are run as part of every PR on a range of architectures: 20 accuracy tests that compare a plotfile against a stored reference, two that assert values against an external reference instead, and five that assert a misconfigured input fails for the stated reason. The CI tests use cmake and are based on the version of AMReX in the REMORA submodule. This suite can be run following the instructions in Testing, which also describes the different kinds of assertion and what each is for. All of them run under MPI on two ranks, and are checked to be rank-invariant.

In addition there is a suite of more extensive nightly tests that use GNUMake and use the current development branch of AMReX.

Results from the nightly CPU tests can be found here: CPU tests

Results from the nightly GPU tests can be found here: GPU tests

Continuous Integration (CI) Tests

The following problems are currently tested in the CI. More details about the problems underlying these tests are given in Verification.

Test

nx ny nz

xbc

ybc

Other

Advection

81 81 16

Periodic

Periodic

Advection_ML

80 80 16

Periodic

Periodic

multilevel

BoundaryLayer

39 4 30

Radiation

/ outflow

Periodic

Coriolis

GLS mixing scheme

non-flat bathymetry

Channel_Test

20 60 50

Periodic

SlipWall

Coriolis

GLS mixing scheme

non-flat bathymetry

quadratic bottom stress

bulk fluxes

cloud cover

evaporation/precipitation with

sea surface height correction

DogboneAnalytic

42 15 16

SlipWall

SlipWall

quadratic bottom stress

land-sea masking

DogboneAnalytic_MLquad

42 15 16

SlipWall

SlipWall

quadratic bottom stress

land-sea masking

static multilevel

DogboneAnalytic_MLvel

42 15 16

SlipWall

SlipWall

quadratic bottom stress

land-sea masking

dynamic multilevel

DoubleGyre

54 108 4

SlipWall

SlipWall

Coriolis

DoublyPeriodic

41 80 16

Periodic

Periodic

Coriolis

non-flat bathymetry

Seamount

49 48 13

Periodic

Periodic

Coriolis

Upwelling

41 80 16

Periodic

SlipWall

Coriolis

non-flat bathymetry

Upwelling_Fennel

41 80 16

Periodic

SlipWall

Coriolis

non-flat bathymetry

bulk fluxes

Fennel biology, analytic IC

carbon, oxygen, river DON

non-conservative alkalinity

dated atmospheric pCO2

Wanninkhof (2014) gas transfer

Upwelling_GLS

41 80 16

Periodic

SlipWall

Coriolis

non-flat bathymetry

GLS mixing scheme

Upwelling_NLEOS

41 80 16

Periodic

SlipWall

Coriolis

non-flat bathymetry

nonlinear equation of state

Upwelling_logdrag

41 80 16

Periodic

SlipWall

Coriolis

non-flat bathymetry

logarithmic bottom stress

Upwelling_qdrag

41 80 16

Periodic

SlipWall

Coriolis

non-flat bathymetry

quadratic bottom stress

High-resolution initialization tests

These cover remora.hires_grid_level: bathymetry evaluated on a refined level and averaged down to level 0 (see Inputs). They are analytic, so they need no NetCDF build and no external data. remora.hires_init_level is NetCDF-only and is covered by the developer lanes in Exec/GulfRefinementTest instead, described in that directory’s README.rst.

The lanes come in three flavours, because “the run completed” is not evidence that an average-down happened, let alone that it was right.

Transparency. ChannelTest sets h = 50 and DogboneAnalytic sets h = 10, both with setVal, covering every grow cell. The mean over any refined block is then the same constant, so the hires path must reproduce the corresponding non-hires baseline exactly. These lanes compare against the existing Channel_Test and DogboneAnalytic_MLvel reference files rather than storing new ones. They deliberately cannot detect a hires flag that is being ignored – that is the next flavour’s job.

Discrimination. Seamount’s bathymetry is a Gaussian in physical position, so the mean of the refined samples in a coarse cell is not the coarse midpoint sample. Seamount_hires must therefore both match its own reference and differ from the plain Seamount one; the difference is about 16 m at the summit, some 12 orders of magnitude above the comparison tolerance. Without that second clause a feature that silently stops taking effect still matches its own snapshot – which is exactly what a misspelled parameter name did in Exec/GulfRefinementTest before this was tested.

Misconfiguration. Five lanes assert that a bad combination fails with the message that names it, rather than segfaulting, writing out of bounds, or running on data it quietly ignored.

Test

nx ny nz

What it asserts

Channel_Test_hires

20 60 50

constant bathymetry averages down exactly (ratio 3),

compared against the Channel_Test reference

DogboneAnalytic_MLhires

42 15 16

the same, with a live refined level and regridding,

so it also covers the regrid paths and masking

Seamount_hires

49 48 13

a Gaussian bathymetry averages down to something

different from the direct level-0 evaluation (ratio 3)

Seamount_hires_r4

49 48 13

the same at ratio 4, wider than the standard grow

ring, and differing from the ratio-3 result

Upwelling_Fennel_hires_init

41 80 16

biology coexists with an averaged-down bathymetry:

the six constant Fennel tracers and the zero dye are

asserted by value, catching a component-offset error

Seamount_hires_init_abort

49 48 13

high-resolution initialization with analytic initial

conditions is rejected (it is NetCDF-only)

Seamount_hires_grid_max_abort

49 48 13

a hires level above amr.max_level is rejected

Seamount_hires_init_max_abort

49 48 13

the same for the initialization level

Seamount_hires_grid_zero_abort

49 48 13

a hires level of 0 is rejected rather than

dereferencing an array only allocated above level 0

Upwelling_Fennel_hires_init runs to zero steps: it writes the initial plotfile and exits, which takes about a second and keeps the time stepper out of an assertion about initialization. The six Fennel constants come from the analytic profile in Source/Prob/REMORA_InitAnalyticBiology_BioToy.H, and a constant is unchanged by averaging, so the expected level-0 values are known outright rather than snapshotted. Asserting the dye is zero alongside them is what catches a regression in the Bio_comp = Tracer_comp + remora.nscalar offset, which would shift a biology tracer into the dye slot.

Boundary condition tests

These cover the two ways of specifying boundary conditions, per side and per variable (see Physical/Domain Boundary Conditions). Both reach the same per-face state, so the assertion is that they agree and neither needs a stored reference.

Test

nx ny nz

What it asserts

BC_per_variable

54 108 4

a per-variable West South East North list lands on

the same four faces the per-side keywords name, and

both routes read the same inflow values

BC_inflow_no_value

54 108 4

an inflow face with no inflow value for one of its

tracers is rejected, naming the input it wants

BC_per_variable runs both inputs in its test directory and compares the two plotfiles. All four sides carry a different condition – inflow, noslipwall, outflow, slipwall going West, South, East, North – so any other order changes the answer. A y-symmetric case cannot do this, which is why the existing lanes, all y-symmetric, missed the South/North transposition this test was added for.

The y pairing is discriminated by the velocity conditions specifically. For cell-centered tracers, and for zeta and tke, noslipwall and slipwall both translate to foextrap, leaving South and North indistinguishable in those fields; only u/v and ubar/vbar separate them, since no_slip_wall gives ext_dir on both components while slip_wall gives foextrap tangentially and ext_dir normally. Substituting conditions that look equally distinct but coincide for the velocities would blind this lane without changing its appearance.

The dye is a second readout: DoubleGyre initializes it to zero and the only dye enters through the western inflow value, so a nonzero tracer field means that value was read, and an agreeing one means both routes read it the same. Agreement alone cannot assert this – two runs that both ignored the value would agree at zero – so the lane also carries a check_extrema.sh assertion on the dye’s magnitude, with a tolerance loose enough to be a claim about order of magnitude rather than a blessed digit string.

The inflow is driven by horizontal diffusion rather than advection. ubar and vbar take no inflow value of their own, so the barotropic normal velocity at the face stays zero and the barotropic correction holds the net flux near zero regardless of the 3D velocity entry: raising it tenfold moves the dye by about 7%. Advective inflow is therefore not covered by either lane.

Nightly Regression Tests on CPU

And the following are currently tested nighly on CPU.

Based on Advection:

Test

nx ny nz

xbc

ybc

Other

Advection-1grid-xy

81 81 16

Periodic

Periodic

Advection-1grid-xy-ML

80 80 16

Periodic

Periodic

multilevel

Advection-OMP-xy

81 81 16

Periodic

Periodic

MPI + OpenMP

Advection-OMP-xy-ML

80 80 16

Periodic

Periodic

MPI + OpenMP

multilevel

Advection-xy

81 81 16

Periodic

Periodic

MPI

Advection-xy-restart

81 81 16

Periodic

Periodic

MPI

restart

Advection-xy-restart-ML

80 80 16

Periodic

Periodic

MPI

restart

multilevel

AdvectionU3-xy

81 81 16

Periodic

Periodic

MPI

advection: upstream 3rd order

Based on BioToy, a small doubly periodic box initialized and forced from NetCDF, which always includes PnetCDF, Coriolis, non-flat bathymetry, GLS mixing scheme, a nonlinear equation of state, quadratic bottom stress, bulk fluxes from NetCDF surface forcing, and the Fennel biology model with carbon, denitrification, and bottom-sediment fluxes:

Test

nx ny nz

xbc

ybc

Other

BioToy

4 4 30

Periodic

Periodic

MPI

BioToy-1grid

4 4 30

Periodic

Periodic

BioToy-restart

4 4 30

Periodic

Periodic

MPI

restart

Based on Boundary Layer, which always includes Coriolis, GLS mixing scheme, non-flat bathymetry, quadratic bottom stress, bulk fluxes, cloud cover, and evaporation/precipitation with sea surface height correction:

Test

nx ny nz

xbc

ybc

Other

BoundaryLayer

39 4 30

Radiation

/ outflow

Periodic

MPI

BoundaryLayer-OMP

39 4 30

Radiation

/ outflow

Periodic

MPI + OpenMP

BoundaryLayer-OMP-1grid

39 4 30

Radiation

/ outflow

Periodic

OpenMP

BoundaryLayer-restart

39 4 30

Radiation

/ outflow

Periodic

MPI

restart

Based on Channel Test, which always includes Coriois, GLS mixing scheme, and non-flat bathymetry:

Test

nx ny nz

xbc

ybc

Other

ChannelTest

20 60 50

Periodic

SlipWall

MPI

ChannelTest-OMP

20 60 50

Periodic

SlipWall

MPI + OpenMP

ChannelTest-OMP-1grid-xy

20 60 50

Periodic

SlipWall

OpenMP

ChannelTest-xy-restart

20 60 50

Periodic

SlipWall

MPI + OpenMP

restart

Based on Dogbone, which always includes PnetCDF and land-sea masking:

Test

nx ny nz

xbc

ybc

Other

Dogbone

42 15 10

Slipwall

SlipWall

MPI

Dogbone-1grid

42 15 10

Slipwall

SlipWall

Dogbone-OMP

42 15 10

Slipwall

SlipWall

MPI + OpenMP

Dogbone-OMP-1grid

42 15 10

Slipwall

SlipWall

OpenMP

Dogbone-restart

42 15 10

Slipwall

Slipwall

MPI

restart

Based on DogboneAnalytic, the analytically initialized version of Dogbone, which always includes land-sea masking, non-flat bathymetry, quadratic bottom stress, and one refined level at ratio 3. MLquad refines a fixed lower-left quadrant of the domain, while MLvel regrids on the cells where the absolute x-velocity exceeds 0.05:

Test

nx ny nz

xbc

ybc

Other

DogboneAnalytic_MLquad

42 15 16

SlipWall

SlipWall

MPI

static multilevel

DogboneAnalytic_MLquad-1grid

42 15 16

SlipWall

SlipWall

static multilevel

DogboneAnalytic_MLquad-OMP

42 15 16

SlipWall

SlipWall

MPI + OpenMP

static multilevel

DogboneAnalytic_MLquad-OMP-1grid

42 15 16

SlipWall

SlipWall

OpenMP

static multilevel

DogboneAnalytic_MLquad-restart

42 15 16

SlipWall

SlipWall

MPI

static multilevel

restart

DogboneAnalytic_MLvel

42 15 16

SlipWall

SlipWall

MPI

dynamic multilevel

DogboneAnalytic_MLvel-1grid

42 15 16

SlipWall

SlipWall

dynamic multilevel

DogboneAnalytic_MLvel-OMP

42 15 16

SlipWall

SlipWall

MPI + OpenMP

dynamic multilevel

DogboneAnalytic_MLvel-OMP-1grid

42 15 16

SlipWall

SlipWall

OpenMP

dynamic multilevel

DogboneAnalytic_MLvel-restart

42 15 16

SlipWall

SlipWall

MPI

dynamic multilevel

restart

Based on Double Gyre, which always includes Coriolis:

Test

nx ny nz

xbc

ybc

Other

DoubleGyre

54 108 4

SlipWall

SlipWall

MPI

DoubleGyre-OMP

54 108 4

SlipWall

SlipWall

MPI + OpenMP

DoubleGyre-OMP-1grid-xy

54 108 4

SlipWall

SlipWall

OpenMP

DoubleGyre-xy-restart

54 108 4

SlipWall

SlipWall

MPI

restart

Based on Doubly Periodic, which always includes Coriolis:

Test

nx ny nz

xbc

ybc

Other

DoublyPeriodic-1grid-xy

41 80 16

Periodic

Periodic

DoublyPeriodic-1grid-xy-bathy

41 80 16

Periodic

Periodic

non-flat bathyemtry

DoublyPeriodic-NETCDF-build

41 80 16

N/A

N/A

Build w/PnetCDF

DoublyPeriodic-OMP-1grid-xy

41 80 16

Periodic

Periodic

OpenMP

DoublyPeriodic-OMP-xy

41 80 16

Periodic

Periodic

MPI + OpenMP

DoublyPeriodic-OMP-xy-bathy

41 80 16

Periodic

Periodic

MPI + OpenMP

non-flat bathymetry

DoublyPeriodic-xy

41 80 16

Periodic

Periodic

MPI

DoublyPeriodic-xy-bathy

41 80 16

Periodic

Periodic

MPI

non-flat bathymetry

DoublyPeriodic-xy-restart

41 80 16

Periodic

Periodic

MPI

restart

DoublyPeriodic64-OMP-xy

328 320 64

Periodic

Periodic

MPI + OpenMP,

large problem

DoublyPeriodic64-OMP-xy-bathy

328 320 64

Periodic

Periodic

MPI + OpenMP

large problem

non-flat bathymetry

DoublyPeriodic64-xy

328 320 64

Periodic

Periodic

MPI, large problem

DoublyPeriodicC4-xy

41 80 16

Periodic

Periodic

MPI

adv.: centered 4th order

Based on Ideal Mini Grid, which always includes Coriolis and PnetCDF. Replace braces in test name with IdealMiniGrid. C-F stands for Chapman-Flather:

Test

nx ny nz

xbc

ybc

Other

{}

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

{}-1grid

10 16 20

Clamped

Clamped

Vary salt at boundary

{}-CF-Uvel-OMP

10 16 20

C-F

C-F

MPI + OpenMP

Vary velocity at boundary

{}-CFO-Salt-OMP

10 16 20

C-F

Radiation

C-F

Radiation

MPI + OpenMP

Vary salt at boundary

{}-CFO-Temp-OMP

10 16 20

C-F

Radiation

C-F

Radiation

MPI + OpenMP

Vary temperature at boundary

{}-CFO-Uvel-OMP

10 16 20

C-F

Radiation

C-F

Radiation

MPI + OpenMP

Vary velocity at boundary

{}-EWWall-OMP

10 16 20

SlipWall

Clamped

MPI + OpenMP

Vary salt at boundary

{}-EWWall-restart

10 16 20

SlipWall

Clamped

MPI

Vary salt at boundary

restart

{}-NSWall-OMP

10 16 20

Clamped

SlipWall

MPI + OpenMP

Vary salt at boundary

{}-NSWall-restart

10 16 20

Clamped

Slipwall

MPI

Vary salt at boundary

restart

{}-OMP

10 16 20

Clamped

Clamped

MPI + OpenMP

Vary salt at boundary

{}-OMP-1grid

10 16 20

Clamped

Clamped

OpenMP

Vary salt at boundary

{}-Temp

10 16 20

Clamped

Clamped

MPI

Vary temperature at boundary

{}-Uvel

10 16 20

Clamped

Clamped

MPI

Vary velocity at boundary

{}-Uvel-1grid

10 16 20

Clamped

Clamped

Vary velocity at boundary

{}-Uvel-EWWall-OMP

10 16 20

SlipWall

Clamped

MPI + OpenMP

Vary velocity at boundary

{}-Uvel-NSWall-OMP

10 16 20

Clamped

SlipWall

MPI + OpenMP

Vary velocity at boundary

{}-Uvel-OMP

10 16 20

Clamped

Clamped

MPI + OpenMP

Vary velocity at boundary

{}-Uvel-OMP-1grid

10 16 20

Clamped

Clamped

OpenMP

Vary velocity at boundary

{}-restart

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

restart

{}_synth_hires

10 10 4

Outflow

Outflow

MPI

multilevel (ratio 3)

high-resolution grid and IC

no Coriolis

{}_synth_hires-1grid

10 10 4

Outflow

Outflow

multilevel (ratio 3)

high-resolution grid and IC

no Coriolis

{}_synth_hires-restart

10 10 4

Outflow

Outflow

MPI

multilevel (ratio 3)

high-resolution grid and IC

no Coriolis

restart

{}Mask

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

land-sea masking

{}Mask-1grid

10 16 20

Clamped

Clamped

Coriolis

land-sea masking

{}Mask-CF-Uvel-OMP

10 16 20

C-F

C-F

MPI + OpenMP

Vary velocity at boundary

land-sea masking

{}Mask-CFO-Salt-OMP

10 16 20

C-F

Radiation

C-F

Radiaion

MPI + OpenMP

Vary salt at boundary

land-sea masking

{}Mask-CFO-Temp-OMP

10 16 20

C-F

Radiation

C-F

Radiaion

MPI + OpenMP

Vary temperature at boundary

land-sea masking

{}Mask-CFO-Uvel-OMP

10 16 20

C-F

Radiation

C-F

Radiaion

MPI + OpenMP

Vary velocity at boundary

land-sea masking

{}Mask-EWWall-OMP

10 16 20

SlipWall

Clamped

MPI + OpenMP

Vary salt at boundary

land-sea masking

{}Mask-NSWall-OMP

10 16 20

Clamped

SlipWall

MPI + OpenMP

Vary salt at boundary

land-sea masking

{}Mask-OMP

10 16 20

Clamped

Clamped

MPI + OpenMP

Vary salt at boundary

land-sea masking

{}Mask-OMP-1grid

10 16 20

Clamped

Clamped

OpenMP

Vary salt at boundary

land-sea masking

{}Mask-Temp

10 16 20

Clamped

Clamped

MPI

Vary temperature at boundary

land-sea masking

{}Mask-Uvel

10 16 20

Clamped

Clamped

MPI

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-1grid

10 16 20

Clamped

Clamped

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-EWWall-OMP

10 16 20

SlipWall

Clamped

MPI + OpenMP

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-NSWall-OMP

10 16 20

Clamped

SlipWall

MPI + OpenMP

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-OMP

10 16 20

Clamped

Clamped

MPI + OpenMP

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-OMP-1grid

10 16 20

Clamped

Clamped

OpenMP

Vary velocity at boundary

land-sea masking

{}Mask-restart

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

land-sea masking

restart

{}Wind

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

Surface wind and bulk fluxes

{}Wind-1grid

10 16 20

Clamped

Clamped

Vary salt at boundary

Surface wind and bulk fluxes

{}Wind-OMP

10 16 20

Clamped

Clamped

MPI + OpenMP

Vary salt at boundary

Surface wind and bulk fluxes

{}Wind-OMP-1grid

10 16 20

Clamped

Clamped

OpenMP

Vary salt at boundary

Surface wind and bulk fluxes

{}Wind-restart

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

restart

Surface wind and bulk fluxes

{}Clim

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary salt, temp, v at boundary

Climatology nudging

{}Clim-OMP

10 16 20

C-F

Radiation

C-F

Radiation

MPI + OpenMP

Vary salt, temp, v at boundary

Climatology nudging

{}Clim-OMP-1grid

10 16 20

C-F

Radiation

C-F

Radiation

OpenMP

Vary salt, temp, v at boundary

Climatology nudging

{}Clim-restart

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary salt, temp, v at boundary

restart

Climatology nudging

Based on Ideal River Grid, which always includes Coriolis, PnetCDF, and rivers:

Test

nx ny nz

xbc

ybc

Other

IdealRivGrid

10 16 20

Clamped

Clamped

MPI

IdealRivGrid-1grid

10 16 20

Clamped

Clamped

IdealRivGrid-OMP

10 16 20

Clamped

Clamped

MPI + OpenMP

IdealRivGrid-OMP-1grid

10 16 20

Clamped

Clamped

OpenMP

IdealRivGrid-restart

10 16 20

Clamped

Clamped

MPI

restart

Based on Particle Advection Flat, which always include MPI, Coriolis, and tracer particles:

Test

nx ny nz

xbc

ybc

Other

ParticleAdvectionFlat

41 80 16

Periodic

Periodic

ParticleAdvectionFlat-restart

41 80 16

Periodic

Periodic

restart

Based on Seamount, which always includes Coriolis and non-flat bathymetry:

Test

nx ny nz

xbc

ybc

Other

Seamount-1grid-xy

49 48 13

Periodic

Periodic

Seamount-OMP-xy

49 48 13

Periodic

Periodic

MPI + OpenMP

Seamount-xy

49 48 13

Periodic

Periodic

MPI

Seamount-xy-restart

49 48 13

Periodic

Periodic

MPI

restart

Seamount64-OMP-xy

320 320 64

Periodic

Periodic

MPI + OpenMP, large problem

Based on Upwelling, which always includes Coriolis and non-flat bathymetry:

Test

nx ny nz

xbc

ybc

Other

Upwelling

41 80 16

Periodic

SlipWall

MPI

Upwelling-1grid

41 80 16

Periodic

SlipWall

Coriolis

Upwelling-OMP

41 80 16

Periodic

SlipWall

MPI + OpenMP

Upwelling-logDrag-OMP

41 80 16

Periodic

SlipWall

MPI + OpenMP

logarithmic bottom stress

Upwelling-nonlinEOS-OMP

41 80 16

Periodic

SlipWall

MPI + OpenMP

nonlinear equation of state

Upwelling-quadDrag-OMP

41 80 16

Periodic

SlipWall

MPI + OpenMP

quadratic bottom stress

Upwelling-OMP-1grid

41 80 16

Periodic

SlipWall

OpenMP

Upwelling-restart

41 80 16

Periodic

SlipWall

MPI

restart

Upwelling-x

41 80 16

SlipWall

Periodic

MPI

Upwelling-x-1grid

41 80 16

SlipWall

Periodic

Upwelling-x-OMP

41 80 16

SlipWall

Periodic

MPI + OpenMP

Upwelling64-OMP

328 320 64

SlipWall

Periodic

MPI + OpenMP, large problem

UpwellingC4

41 80 16

Periodic

SlipWall

MPI

advection: centered 4th order

Upwelling_GeopotentialMixing

41 80 16

Periodic

SlipWall

MPI

constant horizontal mixing

harmonic tracer diffusion

rotated along geopotential

Upwelling_GLS

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

Upwelling_GLS-restart

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

restart

Upwelling_GLS_Canuto_A

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

Canuto A stability

Upwelling_GLS_Canuto_B

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

Canuto B stability

Based on Upwelling with the Fennel biology model, which always includes Coriolis, non-flat bathymetry, bulk fluxes, and analytically initialized Fennel biology. The tests without hires additionally enable carbon, oxygen, river DON, non-conservative alkalinity, a dated atmospheric pCO2, and Wanninkhof (2014) gas transfer. The hires tests instead add one refined level at ratio 3, with the level-0 bathymetry averaged down from it:

Test

nx ny nz

xbc

ybc

Other

Upwelling-Fennel

41 80 16

Periodic

SlipWall

MPI

Upwelling-Fennel-1grid

41 80 16

Periodic

SlipWall

Upwelling-Fennel-hires

41 80 16

Periodic

SlipWall

MPI

Upwelling-Fennel-hires-1grid

41 80 16

Periodic

SlipWall

Upwelling-fennel-hires-restart

41 80 16

Periodic

SlipWall

MPI

restart

Upwelling-fennel-restart

41 80 16

Periodic

SlipWall

MPI

restart

Nightly Regression Tests on GPU

And the following are currently tested nighly on GPU. All are compiled and run with CUDA.

Based on Advection:

Test

nx ny nz

xbc

ybc

Other

Advection-1grid-xy

81 81 16

Periodic

Periodic

Advection-1grid-xy-ML

80 80 16

Periodic

Periodic

multilevel

Advection-xy

81 81 16

Periodic

Periodic

MPI

Advection-xy-ML

80 80 16

Periodic

Periodic

MPI

multilevel

Advection-xy-restart

81 81 16

Periodic

Periodic

MPI

restart

Advection64-xy

328 320 64

Periodic

Periodic

MPI, large problem

restart

AdvectionU3-xy

81 81 16

Periodic

Periodic

MPI

advection: upstream 3rd order

Based on BioToy, a small doubly periodic box initialized and forced from NetCDF, which always includes PnetCDF, Coriolis, non-flat bathymetry, GLS mixing scheme, a nonlinear equation of state, quadratic bottom stress, bulk fluxes from NetCDF surface forcing, and the Fennel biology model with carbon, denitrification, and bottom-sediment fluxes:

Test

nx ny nz

xbc

ybc

Other

BioToy

4 4 30

Periodic

Periodic

MPI

BioToy-1grid

4 4 30

Periodic

Periodic

BioToy-restart

4 4 30

Periodic

Periodic

MPI

restart

Based on Boundary Layer, which always includes Coriolis, GLS mixing scheme, non-flat bathymetry, quadratic bottom stress, bulk fluxes, cloud cover, and evaporation/precipitation with sea surface height correction. This problem is sensitive enough on GPU that its comparison tolerance is loosened to 2e-5:

Test

nx ny nz

xbc

ybc

Other

BoundaryLayer-1grid-xy

39 4 30

Radiation

/ outflow

Periodic

BoundaryLayer-xy

39 4 30

Radiation

/ outflow

Periodic

MPI

BoundaryLayer-xy-restart

39 4 30

Radiation

/ outflow

Periodic

restart

Based on Channel Test, which always includes Coriolis, GLS mixing scheme, and non-flat bathymetry:

Test

nx ny nz

xbc

ybc

Other

ChannelTest-1grid-xy

20 60 50

Periodic

SlipWall

ChannelTest-xy

20 60 50

Periodic

SlipWall

MPI

ChannelTest-xy-restart

20 60 50

Periodic

SlipWall

MPI

restart

Based on Dogbone, which always includes PnetCDF and land-sea masking:

Test

nx ny nz

xbc

ybc

Other

Dogbone

42 15 10

Slipwall

Slipwall

MPI

Dogbone-1grid

42 15 10

Slipwall

Slipwall

Dogbone-restart

42 15 10

Slipwall

Slipwall

MPI

restart

Based on DogboneAnalytic, the analytically initialized version of Dogbone, which always includes land-sea masking, non-flat bathymetry, quadratic bottom stress, and one refined level at ratio 3. MLquad refines a fixed lower-left quadrant of the domain, while MLvel regrids on the cells where the absolute x-velocity exceeds 0.05:

Test

nx ny nz

xbc

ybc

Other

DogboneAnalytic_MLquad

42 15 16

SlipWall

SlipWall

MPI

static multilevel

DogboneAnalytic_MLquad-1grid

42 15 16

SlipWall

SlipWall

static multilevel

DogboneAnalytic_MLquad-restart

42 15 16

SlipWall

SlipWall

MPI

static multilevel

restart

DogboneAnalytic_MLvel

42 15 16

SlipWall

SlipWall

MPI

dynamic multilevel

DogboneAnalytic_MLvel-1grid

42 15 16

SlipWall

SlipWall

dynamic multilevel

DogboneAnalytic_MLvel-restart

42 15 16

SlipWall

SlipWall

MPI

dynamic multilevel

restart

Based on Double Gyre, which always includes Coriolis:

Test

nx ny nz

xbc

ybc

Other

DoubleGyre-1grid-xy

54 108 4

SlipWall

SlipWall

DoubleGyre-xy

54 108 4

SlipWall

SlipWall

MPI

DoubleGyre-xy-restart

54 108 4

SlipWall

SlipWall

MPI

restart

Based on Doubly Periodic, which always includes Coriolis:

Test

nx ny nz

xbc

ybc

Other

DoublyPeriodic-1grid-xy

41 80 16

Periodic

Periodic

DoublyPeriodic-xy

41 80 16

Periodic

Periodic

MPI

DoublyPeriodic-xy-bathy

41 80 16

Periodic

Periodic

MPI

non-flat bathymetry

DoublyPeriodic-xy-restart

41 80 16

Periodic

Periodic

MPI

restart

DoublyPeriodic64-xy

328 320 64

Periodic

Periodic

MPI, large problem

DoublyPeriodic64-xy-bathy

328 320 64

Periodic

Periodic

MPI, large problem

non-flat bathymetry

DoublyPeriodicC4-xy

41 80 16

Periodic

Periodic

MPI

adv.: centered 4th order

Based on Ideal Mini Grid, which always includes Coriolis and PnetCDF. Replace braces in test name with IdealMiniGrid. C-F stands for Chapman-Flather:

Test

nx ny nz

xbc

ybc

Other

{}

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

{}-1grid

10 16 20

Clamped

Clamped

Vary salt at boundary

{}-CF-Uvel

10 16 20

C-F

C-F

MPI

Vary velocity at boundary

{}-CFO-Salt

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary salt at boundary

{}-CFO-Temp

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary temperature at boundary

{}-CFO-Uvel

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary velocity at boundary

{}-EWWall

10 16 20

SlipWall

Clamped

MPI

Vary salt at boundary

{}-NSWall

10 16 20

Clamped

SlipWall

MPI

Vary salt at boundary

{}-Temp

10 16 20

Clamped

Clamped

MPI

Vary temperature at boundary

{}-Uvel

10 16 20

Clamped

Clamped

MPI

Vary velocity at boundary

{}-Uvel-1grid

10 16 20

Clamped

Clamped

Vary velocity at boundary

{}-Uvel-EWWall

10 16 20

SlipWall

Clamped

Vary velocity at boundary

{}-Uvel-NSWall

10 16 20

Clamped

SlipWall

MPI

Vary velocity at boundary

{}-restart

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

restart

{}_synth_hires

10 10 4

Outflow

Outflow

MPI

multilevel (ratio 3)

high-resolution grid and IC

no Coriolis

{}_synth_hires-1grid

10 10 4

Outflow

Outflow

multilevel (ratio 3)

high-resolution grid and IC

no Coriolis

{}_synth_hires-restart

10 10 4

Outflow

Outflow

MPI

multilevel (ratio 3)

high-resolution grid and IC

no Coriolis

restart

{}Mask

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

land-sea masking

{}Mask-1grid

10 16 20

Clamped

Clamped

Vary salt at boundary

land-sea masking

{}Mask-CF-Uvel

10 16 20

C-F

C-F

MPI

Vary velocity at boundary

land-sea masking

{}Mask-CFO-Salt

10 16 20

C-F

Radiation

C-F

Radiaion

MPI

Vary salt at boundary

land-sea masking

{}Mask-CFO-Temp

10 16 20

C-F

Radiation

C-F

Radiaion

MPI

Vary temperature at boundary

land-sea masking

{}Mask-CFO-Uvel

10 16 20

C-F

Radiation

C-F

Radiaion

MPI

Vary velocity at boundary

land-sea masking

{}Mask-EWWall

10 16 20

SlipWall

Clamped

MPI

Vary salt at boundary

land-sea masking

{}Mask-EWWall-restart

10 16 20

SlipWall

Clamped

MPI

Vary salt at boundary

land-sea masking

restart

{}Mask-NSWall

10 16 20

Clamped

Slipwall

MPI

Vary salt at boundary

land-sea masking

{}Mask-NSWall-restart

10 16 20

Clamped

Slipwall

MPI

Vary salt at boundary

land-sea masking

restart

{}Mask-Temp

10 16 20

Clamped

Clamped

MPI

Vary temperature at boundary

land-sea masking

{}Mask-Uvel

10 16 20

Clamped

Clamped

MPI

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-1grid

10 16 20

Clamped

Clamped

Vary velocity at boundary

land-sea masking

{}Mask-Uvel-EWWall

10 16 20

SlipWall

Clamped

MPI

Vary salt at boundary

land-sea masking

{}Mask-Uvel-NSWall

10 16 20

Clamped

Periodic

MPI

Vary salt at boundary

land-sea masking

{}Mask-restart

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

land-sea masking

restart

{}Wind

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

Surface wind and bulk fluxes

{}Wind-1grid

10 16 20

Clamped

Clamped

Vary salt at boundary

Surface wind and bulk fluxes

{}Wind-restart

10 16 20

Clamped

Clamped

MPI

Vary salt at boundary

restart

Surface wind and bulk fluxes

{}Clim

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary salt, temp, v at boundary

Climatology nudging

{}Clim-1grid

10 16 20

C-F

Radiation

C-F

Radiation

Vary salt, temp, v at boundary

Climatology nudging

{}Clim-restart

10 16 20

C-F

Radiation

C-F

Radiation

MPI

Vary salt, temp, v at boundary

restart

Climatology nudging

Based on Ideal River Grid, which always includes Coriolis, PnetCDF, and rivers:

Test

nx ny nz

xbc

ybc

Other

IdealRivGrid

10 16 20

Clamped

Clamped

MPI

IdealRivGrid-1grid

10 16 20

Clamped

Clamped

IdealRivGrid-restart

10 16 20

Clamped

Clamped

MPI

restart

Based on Particle Advection Flat, which always includes MPI, Coriolis, and tracer particles:

Test

nx ny nz

xbc

ybc

Other

ParticleAdvectionFlat

41 80 16

Periodic

Periodic

ParticleAdvectionFlat-restart

41 80 16

Periodic

Periodic

restart

Based on Seamount, which always includes Coriolis and non-flat bathymetry:

Test

nx ny nz

xbc

ybc

Other

Seamount-1grid-xy

49 48 13

Periodic

Periodic

Seamount-xy

49 48 13

Periodic

Periodic

MPI

Seamount64-xy

320 320 64

Periodic

Periodic

MPI, large problem

Based on Upwelling, which always includes Coriolis and non-flat bathymetry:

Test

nx ny nz

xbc

ybc

Other

Upwelling

41 80 16

Periodic

SlipWall

MPI

Upwelling-1grid

41 80 16

Periodic

SlipWall

Upwelling-logDrag

41 80 16

Periodic

SlipWall

MPI

logarithmic bottom stress

Upwelling-nonlinEOS

41 80 16

Periodic

SlipWall

MPI

nonlinear equation of state

Upwelling-quadDrag

41 80 16

Periodic

SlipWall

MPI

quadratic bottom stress

Upwelling-x

41 80 16

SlipWall

Periodic

MPI

Upwelling-x-1grid

41 80 16

SlipWall

Periodic

Upwelling64

328 320 64

SlipWall

Periodic

MPI, large problem

UpwellingC4

41 80 16

Periodic

SlipWall

MPI

advection: centered 4th order

Upwelling-GeopotentialMixing

41 80 16

Periodic

SlipWall

MPI

constant horizontal mixing

harmonic tracer diffusion

rotated along geopotential

Upwelling_GLS

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

Upwelling_GLS-restart

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

restart

Upwelling_GLS_Canuto_A

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

Canuto A stability

Upwelling_GLS_Canuto_B

41 80 16

Periodic

SlipWall

MPI

GLS mixing scheme

Canuto B stability

Based on Upwelling with the Fennel biology model, which always includes Coriolis, non-flat bathymetry, bulk fluxes, and analytically initialized Fennel biology. The tests without hires additionally enable carbon, oxygen, river DON, non-conservative alkalinity, a dated atmospheric pCO2, and Wanninkhof (2014) gas transfer. The hires tests instead add one refined level at ratio 3, with the level-0 bathymetry averaged down from it:

Test

nx ny nz

xbc

ybc

Other

Upwelling-Fennel

41 80 16

Periodic

SlipWall

MPI

Upwelling-Fennel-1grid

41 80 16

Periodic

SlipWall

Upwelling-Fennel-hires

41 80 16

Periodic

SlipWall

MPI

Upwelling-Fennel-hires-1grid

41 80 16

Periodic

SlipWall

Upwelling-Fennel-hires-restart

41 80 16

Periodic

SlipWall

MPI

restart

Upwelling-Fennel-restart

41 80 16

Periodic

SlipWall

MPI

restart