Current Forcing File Structure

Author

Zhang, Hongyan (NOAA and University of Michigan)

dimensions:
t = UNLIMITED ; // (730 currently)
b = 11 ;
z = 6 ;
dest = 24 ;
variables:
double t(t) ;
t:units = “seconds since 1970-01-01 00:00:00 +10” ;
t:dt = 43200. ;
double exchange(t, b, z, dest) ;
exchange:_FillValue = 0. ;
int dest_b(t, b, z, dest) ;
dest_b:_FillValue = -1 ;
int dest_k(t, b, z, dest) ;
dest_k:_FillValue = -1 ;

Explanation:

These define the size of the matrices in the file
t = number of timesteps covered
b = number of boxes in the model
z = maximum number of water column layers in the model
dest = maximum number of boxes any one box can exchange water with

variables:
dest_b(t, b, z, dest) ;

This is this is a matrix that lists destination box of the flows from each layer of each box at each timestep.

dest_k(t, b, z, dest) ;

This is this is a matrix that lists destination layer of the flows from each layer of each box at each timestep.

exchange(t, b, z, dest) ;

This is this is a matrix that lists the actual exchanges

double t(t) ;

This is this is a vector that lists the timestamp associated with each flux timestep.

Example:

This is an example for the SETAS model which is used for training.

Have a look at the KML file for this model - it will make the explanation easier to understand if you have the model spatial structure in front of you.

exchange =
547.4925, , , 577.0694, 6371.974, 10286.57, -575.9459, -2366.046,
12983.17, 13157.44, 4922.386, , , , , , , , , , , , , ,
, , -78.09605, , , , , , , , , , , , , , , , , , , ,
, ,
, -60.5178, , , , , , , , , , , , , , , , , , , , , , ,
-142.4751,
, , , , , , , , , , , , , , , , , , , , ,
, ,

dest_b =
0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, , , , , , , , , , , , , ,
0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10,
, , , , , , , , , , , , ,
0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, , , , , , , , , , , , , ,
0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10,
, , , , , , , , , , , , ,
0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, , , , , , , , , , , , , ,
0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10,
, , , , , , , , , , , , ,
2, 2, 2, 2, 1, 1, 1, , , , , , , , , , , , , , , , , ,
2, 2, 2, 2, 1, 1, 1,
, , , , , , , , , , , , , , , , ,
2, 2, 2, 2, 1, 1, 1, , , , , , , , , , , , , , , , , ,
2, 2, 2, 2, 1, 1, 1,
, , , , , , , , , , , , , , , , ,
2, 2, 2, 2, 1, 1, 1, , , , , , , , , , , , , , , , , ,
2, 2, 2, 2, 1, 1, 1,
, , , , , , , , , , , , , , , , ,

dest_k =
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, , , , , , , , , , , , , ,
0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
, , , , , , , , , , , , ,
0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , , , , , , , , , ,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
, , , , , , , , , , , , ,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, , , , , , , , , , , , , ,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
, , , , , , , , , , , , ,
3, 0, 0, 1, 0, 0, 1, , , , , , , , , , , , , , , , , ,
0, 3, 0, 0, 0, 2, 0,
, , , , , , , , , , , , , , , , ,
0, 0, 2, 0, 3, 0, 0, , , , , , , , , , , , , , , , , ,
0, 0, 0, 0, 0, 0, 0,
, , , , , , , , , , , , , , , , ,
0, 0, 0, 0, 0, 0, 0, , , , , , , , , , , , , , , , , ,
0, 0, 0, 0, 0, 0, 0,
, , , , , , , , , , , , , , , , ,

So in the first time step we have the following transport:

Source Box Source Layer Dest Box Dest Layer Transport Comment
0 0 0 0 547.4925, Vertical mixing due to current under the model
0 0 0 0 577.0694 Vertical mixing
0 0 4 0 6371.974 Vertical mixing due to current under the model
0 0 5 0 10286.57 Vertical mixing due to current under the model
1 0 2 0 -60.5178 Horizontal mixing.
1 1 2 0 -142.4751 Horizontal mixing. Current flowing up slope.

The transport value is the change in volume in the box/layer during the timestep so the units are m^3.

Exchange value

Transport between two boxes should only be listed in the netcdf file once and it should be positive flowing right-to-left across a face. The left and right boxes between any face are indicated by the value in the face attribute ‘.lr’ bgm file.

For example, say we have three boxes in our model with a single layer in each box.

box 1 - box 0, 10 m^3
box 0 - box 2, 20 m^3
box 2 - box 1, 30 m^3

Face information in the bgm file indicates:

face 0
lr 0 1

face 1
lr 0 2

face 2
lr 2 1

So the exchange would be written up:

Flux between box 0 and box 1, -10 m^3
Flux between box 0 and box 2, 20 m^3
Flux between box 2 and box 1, 30 m^3 (note the order of the lr face value). You could put this flux from box 2 to box 1 and then the value would be positive. It doesn’t matter if its under box 1 or 2 as long as the sign of the flux is positive when flowing from left to right on the face. The value should only be included once.

The CDF version of the netCDF file would look something like the following:

netcdf SampleFile {
dimensions:
t = UNLIMITED ; // (1 currently)
b = 3 ;
z = 1 ;
dest = 2 ;
variables:
int dest_b(t, b, z, dest) ;
dest_b:_FillValue = -1 ;
int dest_k(t, b, z, dest) ;
dest_k:_FillValue = -1 ;
double exchange(t, b, z, dest) ;
exchange:_FillValue = 0. ;
double t(t) ;
t:units = “seconds since 2000-01-01 00:00:00 +10” ;
t:dt = 43200. ;

data:
t =
0;

dest_b =
1, 2, // Destinations for box 0
2, 0
0, 0

dest_k =
0, 0,
0, 0,
0, 0;

exchange =
-10, 20,
30, 0
0, 0