Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ include CHANGES COPYING COPYING.LESSER
recursive-include lib/iris/tests/results *.cml *.cdl *.txt *.xml *.json
recursive-include lib/iris/etc *
include lib/iris/fileformats/_pyke_rules/*.k?b
include lib/iris/tests/stock*.npz
include lib/iris/tests/stock/file_headers/*

include requirements/*.txt

Expand Down
2 changes: 1 addition & 1 deletion lib/iris/tests/stock/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# See COPYING and COPYING.LESSER in the root of the repository for full
# licensing details.
"""
A collection of routines which create standard Cubes for test purposes.
A collection of routines which create standard Cubes/files for test purposes.

"""

Expand Down
6 changes: 6 additions & 0 deletions lib/iris/tests/stock/file_headers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
A directory of text files containing file header strings that include
placeholders - designed to be interpreted by
[Python's string.Template](https://docs.python.org/3/library/string.html#string.Template).

* `.cdl` files: used by [`tests.stock.netcdf`](../netcdf.py) to create
synthetic NetCDF files of the required dimensions.
58 changes: 58 additions & 0 deletions lib/iris/tests/stock/file_headers/xios_2D_face_half_levels.cdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// For now: have omitted all optional information (on edges + connectivity),
// *except* for face locations.
netcdf ${DATASET_NAME} {
dimensions:
axis_nbounds = 2 ;
Two = 2 ;
nMesh2d_half_levels_node = ${NUM_NODES} ;
nMesh2d_half_levels_face = ${NUM_FACES} ;
nMesh2d_half_levels_vertex = 4 ;
time_counter = UNLIMITED ; // (1 currently)
variables:
int Mesh2d_half_levels ;
Mesh2d_half_levels:cf_role = "mesh_topology" ;
Mesh2d_half_levels:long_name = "Topology data of 2D unstructured mesh" ;
Mesh2d_half_levels:topology_dimension = 2 ;
Mesh2d_half_levels:node_coordinates = "Mesh2d_half_levels_node_x Mesh2d_half_levels_node_y" ;
Mesh2d_half_levels:face_coordinates = "Mesh2d_half_levels_face_x Mesh2d_half_levels_face_y" ;
Mesh2d_half_levels:face_node_connectivity = "Mesh2d_half_levels_face_nodes" ;
float Mesh2d_half_levels_node_x(nMesh2d_half_levels_node) ;
Mesh2d_half_levels_node_x:standard_name = "longitude" ;
Mesh2d_half_levels_node_x:long_name = "Longitude of mesh nodes." ;
Mesh2d_half_levels_node_x:units = "degrees_east" ;
float Mesh2d_half_levels_node_y(nMesh2d_half_levels_node) ;
Mesh2d_half_levels_node_y:standard_name = "latitude" ;
Mesh2d_half_levels_node_y:long_name = "Latitude of mesh nodes." ;
Mesh2d_half_levels_node_y:units = "degrees_north" ;
float Mesh2d_half_levels_face_x(nMesh2d_half_levels_face) ;
Mesh2d_half_levels_face_x:standard_name = "longitude" ;
Mesh2d_half_levels_face_x:long_name = "Characteristic longitude of mesh faces." ;
Mesh2d_half_levels_face_x:units = "degrees_east" ;
float Mesh2d_half_levels_face_y(nMesh2d_half_levels_face) ;
Mesh2d_half_levels_face_y:standard_name = "latitude" ;
Mesh2d_half_levels_face_y:long_name = "Characteristic latitude of mesh faces." ;
Mesh2d_half_levels_face_y:units = "degrees_north" ;
int Mesh2d_half_levels_face_nodes(nMesh2d_half_levels_face, nMesh2d_half_levels_vertex) ;
Mesh2d_half_levels_face_nodes:cf_role = "face_node_connectivity" ;
Mesh2d_half_levels_face_nodes:long_name = "Maps every face to its corner nodes." ;
Mesh2d_half_levels_face_nodes:start_index = 0 ;
double time_instant(time_counter) ;
time_instant:standard_name = "time" ;
time_instant:long_name = "Time axis" ;
time_instant:calendar = "gregorian" ;
time_instant:units = "seconds since 2016-01-01 15:00:00" ;
time_instant:time_origin = "2016-01-01 15:00:00" ;
time_instant:bounds = "time_instant_bounds" ;
double time_instant_bounds(time_counter, axis_nbounds) ;
double thing(time_counter, nMesh2d_half_levels_face) ;
// Fictional phenomenon to simplify and avoid un-realistic data/units in the required file.
thing:long_name = "thingness" ;
thing:mesh = "Mesh2d_half_levels" ;
thing:location = "face" ;
thing:coordinates = "time_instant Mesh2d_half_levels_face_y Mesh2d_half_levels_face_x" ;

// global attributes:
:name = "${DATASET_NAME}" ;
// original name = "lfric_ngvat_2D_1t_face_half_levels_main_conv_rain"
:Conventions = "UGRID" ;
}
61 changes: 61 additions & 0 deletions lib/iris/tests/stock/file_headers/xios_3D_face_full_levels.cdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// For now: have omitted all optional information (on edges + connectivity),
// *except* for face locations.
netcdf ${DATASET_NAME} {
dimensions:
axis_nbounds = 2 ;
Two = 2 ;
nMesh2d_full_levels_node = ${NUM_NODES} ;
nMesh2d_full_levels_face = ${NUM_FACES} ;
nMesh2d_full_levels_vertex = 4 ;
full_levels = ${NUM_LEVELS} ;
time_counter = UNLIMITED ; // (1 currently)
variables:
int Mesh2d_full_levels ;
Mesh2d_full_levels:cf_role = "mesh_topology" ;
Mesh2d_full_levels:long_name = "Topology data of 2D unstructured mesh" ;
Mesh2d_full_levels:topology_dimension = 2 ;
Mesh2d_full_levels:node_coordinates = "Mesh2d_full_levels_node_x Mesh2d_full_levels_node_y" ;
Mesh2d_full_levels:face_coordinates = "Mesh2d_full_levels_face_x Mesh2d_full_levels_face_y" ;
Mesh2d_full_levels:face_node_connectivity = "Mesh2d_full_levels_face_nodes" ;
float Mesh2d_full_levels_node_x(nMesh2d_full_levels_node) ;
Mesh2d_full_levels_node_x:standard_name = "longitude" ;
Mesh2d_full_levels_node_x:long_name = "Longitude of mesh nodes." ;
Mesh2d_full_levels_node_x:units = "degrees_east" ;
float Mesh2d_full_levels_node_y(nMesh2d_full_levels_node) ;
Mesh2d_full_levels_node_y:standard_name = "latitude" ;
Mesh2d_full_levels_node_y:long_name = "Latitude of mesh nodes." ;
Mesh2d_full_levels_node_y:units = "degrees_north" ;
float Mesh2d_full_levels_face_x(nMesh2d_full_levels_face) ;
Mesh2d_full_levels_face_x:standard_name = "longitude" ;
Mesh2d_full_levels_face_x:long_name = "Characteristic longitude of mesh faces." ;
Mesh2d_full_levels_face_x:units = "degrees_east" ;
float Mesh2d_full_levels_face_y(nMesh2d_full_levels_face) ;
Mesh2d_full_levels_face_y:standard_name = "latitude" ;
Mesh2d_full_levels_face_y:long_name = "Characteristic latitude of mesh faces." ;
Mesh2d_full_levels_face_y:units = "degrees_north" ;
int Mesh2d_full_levels_face_nodes(nMesh2d_full_levels_face, nMesh2d_full_levels_vertex) ;
Mesh2d_full_levels_face_nodes:cf_role = "face_node_connectivity" ;
Mesh2d_full_levels_face_nodes:long_name = "Maps every face to its corner nodes." ;
Mesh2d_full_levels_face_nodes:start_index = 0 ;
float full_levels(full_levels) ;
full_levels:name = "full_levels" ;
double time_instant(time_counter) ;
time_instant:standard_name = "time" ;
time_instant:long_name = "Time axis" ;
time_instant:calendar = "gregorian" ;
time_instant:units = "seconds since 2016-01-01 15:00:00" ;
time_instant:time_origin = "2016-01-01 15:00:00" ;
time_instant:bounds = "time_instant_bounds" ;
double time_instant_bounds(time_counter, axis_nbounds) ;
double thing(time_counter, full_levels, nMesh2d_full_levels_face) ;
// Fictional phenomenon to simplify and avoid un-realistic data/units in the required file.
thing:long_name = "thingness" ;
thing:mesh = "Mesh2d_full_levels" ;
thing:location = "face" ;
thing:coordinates = "time_instant Mesh2d_full_levels_face_y Mesh2d_full_levels_face_x" ;

// global attributes:
:name = "${DATASET_NAME}" ;
// original name = "lfric_ngvat_3D_1t_full_level_face_grid_main_u3"
:Conventions = "UGRID" ;
}
61 changes: 61 additions & 0 deletions lib/iris/tests/stock/file_headers/xios_3D_face_half_levels.cdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// For now: have omitted all optional information (on edges + connectivity),
// *except* for face locations.
netcdf ${DATASET_NAME} {
dimensions:
axis_nbounds = 2 ;
Two = 2 ;
nMesh2d_half_levels_node = ${NUM_NODES} ;
nMesh2d_half_levels_face = ${NUM_FACES} ;
nMesh2d_half_levels_vertex = 4 ;
half_levels = ${NUM_LEVELS} ;
time_counter = UNLIMITED ; // (1 currently)
variables:
int Mesh2d_half_levels ;
Mesh2d_half_levels:cf_role = "mesh_topology" ;
Mesh2d_half_levels:long_name = "Topology data of 2D unstructured mesh" ;
Mesh2d_half_levels:topology_dimension = 2 ;
Mesh2d_half_levels:node_coordinates = "Mesh2d_half_levels_node_x Mesh2d_half_levels_node_y" ;
Mesh2d_half_levels:face_coordinates = "Mesh2d_half_levels_face_x Mesh2d_half_levels_face_y" ;
Mesh2d_half_levels:face_node_connectivity = "Mesh2d_half_levels_face_nodes" ;
float Mesh2d_half_levels_node_x(nMesh2d_half_levels_node) ;
Mesh2d_half_levels_node_x:standard_name = "longitude" ;
Mesh2d_half_levels_node_x:long_name = "Longitude of mesh nodes." ;
Mesh2d_half_levels_node_x:units = "degrees_east" ;
float Mesh2d_half_levels_node_y(nMesh2d_half_levels_node) ;
Mesh2d_half_levels_node_y:standard_name = "latitude" ;
Mesh2d_half_levels_node_y:long_name = "Latitude of mesh nodes." ;
Mesh2d_half_levels_node_y:units = "degrees_north" ;
float Mesh2d_half_levels_face_x(nMesh2d_half_levels_face) ;
Mesh2d_half_levels_face_x:standard_name = "longitude" ;
Mesh2d_half_levels_face_x:long_name = "Characteristic longitude of mesh faces." ;
Mesh2d_half_levels_face_x:units = "degrees_east" ;
float Mesh2d_half_levels_face_y(nMesh2d_half_levels_face) ;
Mesh2d_half_levels_face_y:standard_name = "latitude" ;
Mesh2d_half_levels_face_y:long_name = "Characteristic latitude of mesh faces." ;
Mesh2d_half_levels_face_y:units = "degrees_north" ;
int Mesh2d_half_levels_face_nodes(nMesh2d_half_levels_face, nMesh2d_half_levels_vertex) ;
Mesh2d_half_levels_face_nodes:cf_role = "face_node_connectivity" ;
Mesh2d_half_levels_face_nodes:long_name = "Maps every face to its corner nodes." ;
Mesh2d_half_levels_face_nodes:start_index = 0 ;
float half_levels(half_levels) ;
half_levels:name = "half_levels" ;
double time_instant(time_counter) ;
time_instant:standard_name = "time" ;
time_instant:long_name = "Time axis" ;
time_instant:calendar = "gregorian" ;
time_instant:units = "seconds since 2016-01-01 15:00:00" ;
time_instant:time_origin = "2016-01-01 15:00:00" ;
time_instant:bounds = "time_instant_bounds" ;
double time_instant_bounds(time_counter, axis_nbounds) ;
double thing(time_counter, half_levels, nMesh2d_half_levels_face) ;
// Fictional phenomenon to simplify and avoid un-realistic data/units in the required file.
thing:long_name = "thingness" ;
thing:mesh = "Mesh2d_half_levels" ;
thing:location = "face" ;
thing:coordinates = "time_instant Mesh2d_half_levels_face_y Mesh2d_half_levels_face_x" ;

// global attributes:
:name = "${DATASET_NAME}" ;
// original name = "lfric_ngvat_3D_1t_half_level_face_grid_derived_theta_in_w3"
:Conventions = "UGRID" ;
}
Loading