diff --git a/.github/workflows/buildnc.yml b/.github/workflows/buildnc.yml new file mode 100644 index 0000000..6b36ea5 --- /dev/null +++ b/.github/workflows/buildnc.yml @@ -0,0 +1,28 @@ +name: generate-nc + +on: pull_request + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6] + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + sudo apt install netcdf-bin + - name: Generate netcdf files, fail on errors and report + run: | + python3 -m scripts.makeNCfiles diff --git a/.github/workflows/commitSpecs.yml b/.github/workflows/commitSpecs.yml new file mode 100644 index 0000000..904a054 --- /dev/null +++ b/.github/workflows/commitSpecs.yml @@ -0,0 +1,30 @@ +name: commitSpecs + +on: + pull_request + +jobs: + build: + + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.sha }} + - name: Install dependencies + run: | + echo "dependencies" + - name: Generate content and commit PR branch + run: | + date > thisdate + git add thisdate + if [ -z "$(git status --porcelain)" ]; + then echo 'nothing to commit' + else + git config --global user.email "${{ github.actor }}@users.noreply.github.com" + git config --global user.name "${{ github.actor }}" + git commit -am 'Github Action Commit' + git push origin HEAD:${{ github.head_ref }} + fi diff --git a/README.md b/README.md index 7e972a7..76a2433 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # netCDF Community resources for netCDF use in the Met Office + +## Example Metadata + +The example-metadata folders contain sample metadata descriptions from netCDF files produced by Met Office Systems and Service Offerings in CDL format (providing human readable metadata which can be built into data-free netcdf files for exploratory interactions with software). diff --git a/example-metadata/LFRic/Diagnostics.cdl b/example-metadata/LFRic/Diagnostics.cdl new file mode 100644 index 0000000..68a8762 --- /dev/null +++ b/example-metadata/LFRic/Diagnostics.cdl @@ -0,0 +1,121 @@ +netcdf Diagnostics { +dimensions: + axis_nbounds = 2 ; + Two = 2 ; + nMesh2d_face_node = 56 ; + nMesh2d_face_edge = 108 ; + nMesh2d_face_face = 54 ; + nMesh2d_face_vertex = 4 ; + fixed_axis = 3 ; + time_counter = UNLIMITED ; // (5 currently) +variables: + int Mesh2d_face ; + Mesh2d_face:cf_role = "mesh_topology" ; + Mesh2d_face:long_name = "Topology data of 2D unstructured mesh" ; + Mesh2d_face:topology_dimension = 2 ; + Mesh2d_face:node_coordinates = "Mesh2d_face_node_x Mesh2d_face_node_y" ; + Mesh2d_face:edge_coordinates = "Mesh2d_face_edge_x Mesh2d_face_edge_y" ; + Mesh2d_face:edge_node_connectivity = "Mesh2d_face_edge_nodes" ; + Mesh2d_face:face_coordinates = "Mesh2d_face_face_x Mesh2d_face_face_y" ; + Mesh2d_face:face_node_connectivity = "Mesh2d_face_face_nodes" ; + float Mesh2d_face_node_x(nMesh2d_face_node) ; + Mesh2d_face_node_x:standard_name = "longitude" ; + Mesh2d_face_node_x:long_name = "Longitude of mesh nodes." ; + Mesh2d_face_node_x:units = "degrees_east" ; + float Mesh2d_face_node_y(nMesh2d_face_node) ; + Mesh2d_face_node_y:standard_name = "latitude" ; + Mesh2d_face_node_y:long_name = "Latitude of mesh nodes." ; + Mesh2d_face_node_y:units = "degrees_north" ; + float Mesh2d_face_edge_x(nMesh2d_face_edge) ; + Mesh2d_face_edge_x:standard_name = "longitude" ; + Mesh2d_face_edge_x:long_name = "Characteristic longitude of mesh edges." ; + Mesh2d_face_edge_x:units = "degrees_east" ; + float Mesh2d_face_edge_y(nMesh2d_face_edge) ; + Mesh2d_face_edge_y:standard_name = "latitude" ; + Mesh2d_face_edge_y:long_name = "Characteristic latitude of mesh edges." ; + Mesh2d_face_edge_y:units = "degrees_north" ; + int Mesh2d_face_edge_nodes(nMesh2d_face_edge, Two) ; + Mesh2d_face_edge_nodes:cf_role = "edge_node_connectivity" ; + Mesh2d_face_edge_nodes:long_name = "Maps every edge/link to two nodes that it connects." ; + Mesh2d_face_edge_nodes:start_index = 0 ; + float Mesh2d_face_face_x(nMesh2d_face_face) ; + Mesh2d_face_face_x:standard_name = "longitude" ; + Mesh2d_face_face_x:long_name = "Characteristic longitude of mesh faces." ; + Mesh2d_face_face_x:units = "degrees_east" ; + float Mesh2d_face_face_y(nMesh2d_face_face) ; + Mesh2d_face_face_y:standard_name = "latitude" ; + Mesh2d_face_face_y:long_name = "Characteristic latitude of mesh faces." ; + Mesh2d_face_face_y:units = "degrees_north" ; + int Mesh2d_face_face_nodes(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_nodes:cf_role = "face_node_connectivity" ; + Mesh2d_face_face_nodes:long_name = "Maps every face to its corner nodes." ; + Mesh2d_face_face_nodes:start_index = 0 ; + int Mesh2d_face_face_edges(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_edges:cf_role = "face_edge_connectivity" ; + Mesh2d_face_face_edges:long_name = "Maps every face to its edges." ; + Mesh2d_face_face_edges:start_index = 0 ; + Mesh2d_face_face_edges:_FillValue = 999999 ; + int Mesh2d_face_edge_face_links(nMesh2d_face_edge, Two) ; + Mesh2d_face_edge_face_links:cf_role = "edge_face connectivity" ; + Mesh2d_face_edge_face_links:long_name = "neighbor faces for edges" ; + Mesh2d_face_edge_face_links:start_index = 0 ; + Mesh2d_face_edge_face_links:_FillValue = -999 ; + Mesh2d_face_edge_face_links:comment = "missing neighbor faces are indicated using _FillValue" ; + int Mesh2d_face_face_links(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_links:cf_role = "face_face connectivity" ; + Mesh2d_face_face_links:long_name = "Indicates which other faces neighbor each face" ; + Mesh2d_face_face_links:start_index = 0 ; + Mesh2d_face_face_links:_FillValue = 999999 ; + Mesh2d_face_face_links:flag_values = -1 ; + Mesh2d_face_face_links:flag_meanings = "out_of_mesh" ; + float fixed_axis(fixed_axis) ; + fixed_axis:name = "fixed_axis" ; + fixed_axis:units = "m" ; + fixed_axis:positive = "up" ; + 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 0000-01-01 00:00:00" ; + time_instant:time_origin = "0000-01-01 00:00:00" ; + time_instant:bounds = "time_instant_bounds" ; + double time_instant_bounds(time_counter, axis_nbounds) ; + double colours__hex__instant_1ts(time_counter, fixed_axis, nMesh2d_face_face) ; + colours__hex__instant_1ts:standard_name = "hex" ; + colours__hex__instant_1ts:units = "arbitrary units" ; + colours__hex__instant_1ts:mesh = "Mesh2d_face" ; + colours__hex__instant_1ts:location = "face" ; + colours__hex__instant_1ts:online_operation = "instant" ; + colours__hex__instant_1ts:interval_operation = "1 s" ; + colours__hex__instant_1ts:interval_write = "1 s" ; + colours__hex__instant_1ts:cell_methods = "time: point" ; + colours__hex__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + +// global attributes: + :name = "Diagnostics" ; + :description = "Created by xios" ; + :title = "Created by xios" ; + :Conventions = "UGRID" ; + :timeStamp = "2021-Aug-20 10:44:46 GMT" ; + :uuid = "7dfdb381-2fa3-403c-bd76-76db0e63e40a" ; +data: + + Mesh2d_face_node_x = -45, -15, -15, -45, 15, 15, 45, 45, -45, -15, 15, 45, + -45, -15, 15, 45, 75, 75, 105, 105, 135, 135, 75, 105, 135, 75, 105, 135, + 165, 165, -165, -165, -135, -135, 165, -165, -135, 165, -165, -135, -105, + -105, -75, -75, -105, -75, -105, -75, -45, -135, 45, 135, 45, 135, -45, + -135 ; + + Mesh2d_face_node_y = 10.72858, 14.51082, 44.00703, 35.26439, 14.51082, + 44.00703, 10.72858, 35.26439, -10.72858, -14.51082, -14.51082, -10.72858, + -35.26439, -44.00703, -44.00703, -35.26439, 14.51082, 44.00703, 14.51082, + 44.00703, 10.72858, 35.26439, -14.51082, -14.51082, -10.72858, -44.00703, + -44.00703, -35.26439, 14.51082, 44.00703, 14.51082, 44.00703, 10.72858, + 35.26439, -14.51082, -14.51082, -10.72858, -44.00703, -44.00703, + -35.26439, 14.51082, 44.00703, 14.51082, 44.00703, -14.51082, -14.51082, + -44.00703, -44.00703, 69.24643, 69.24643, 69.24643, 69.24643, -69.24643, + -69.24643, -69.24643, -69.24643 ; + + time_instant = 63618879601, 63618879602, 63618879603, 63618879604, + 63618879605 ; +} diff --git a/example-metadata/LFRic/NonSpatialDimensions.cdl b/example-metadata/LFRic/NonSpatialDimensions.cdl new file mode 100644 index 0000000..45a78ca --- /dev/null +++ b/example-metadata/LFRic/NonSpatialDimensions.cdl @@ -0,0 +1,151 @@ +netcdf NonSpatialDimensions { +dimensions: + axis_nbounds = 2 ; + Two = 2 ; + nMesh2d_face_node = 56 ; + nMesh2d_face_edge = 108 ; + nMesh2d_face_face = 54 ; + nMesh2d_face_vertex = 4 ; + mutable_categories = 3 ; + str_len = 255 ; + mutable_numbers = 2 ; + immutable_categories = 3 ; + immutable_numbers = 3 ; + time_counter = UNLIMITED ; // (5 currently) +variables: + int Mesh2d_face ; + Mesh2d_face:cf_role = "mesh_topology" ; + Mesh2d_face:long_name = "Topology data of 2D unstructured mesh" ; + Mesh2d_face:topology_dimension = 2 ; + Mesh2d_face:node_coordinates = "Mesh2d_face_node_x Mesh2d_face_node_y" ; + Mesh2d_face:edge_coordinates = "Mesh2d_face_edge_x Mesh2d_face_edge_y" ; + Mesh2d_face:edge_node_connectivity = "Mesh2d_face_edge_nodes" ; + Mesh2d_face:face_coordinates = "Mesh2d_face_face_x Mesh2d_face_face_y" ; + Mesh2d_face:face_node_connectivity = "Mesh2d_face_face_nodes" ; + float Mesh2d_face_node_x(nMesh2d_face_node) ; + Mesh2d_face_node_x:standard_name = "longitude" ; + Mesh2d_face_node_x:long_name = "Longitude of mesh nodes." ; + Mesh2d_face_node_x:units = "degrees_east" ; + float Mesh2d_face_node_y(nMesh2d_face_node) ; + Mesh2d_face_node_y:standard_name = "latitude" ; + Mesh2d_face_node_y:long_name = "Latitude of mesh nodes." ; + Mesh2d_face_node_y:units = "degrees_north" ; + float Mesh2d_face_edge_x(nMesh2d_face_edge) ; + Mesh2d_face_edge_x:standard_name = "longitude" ; + Mesh2d_face_edge_x:long_name = "Characteristic longitude of mesh edges." ; + Mesh2d_face_edge_x:units = "degrees_east" ; + float Mesh2d_face_edge_y(nMesh2d_face_edge) ; + Mesh2d_face_edge_y:standard_name = "latitude" ; + Mesh2d_face_edge_y:long_name = "Characteristic latitude of mesh edges." ; + Mesh2d_face_edge_y:units = "degrees_north" ; + int Mesh2d_face_edge_nodes(nMesh2d_face_edge, Two) ; + Mesh2d_face_edge_nodes:cf_role = "edge_node_connectivity" ; + Mesh2d_face_edge_nodes:long_name = "Maps every edge/link to two nodes that it connects." ; + Mesh2d_face_edge_nodes:start_index = 0 ; + float Mesh2d_face_face_x(nMesh2d_face_face) ; + Mesh2d_face_face_x:standard_name = "longitude" ; + Mesh2d_face_face_x:long_name = "Characteristic longitude of mesh faces." ; + Mesh2d_face_face_x:units = "degrees_east" ; + float Mesh2d_face_face_y(nMesh2d_face_face) ; + Mesh2d_face_face_y:standard_name = "latitude" ; + Mesh2d_face_face_y:long_name = "Characteristic latitude of mesh faces." ; + Mesh2d_face_face_y:units = "degrees_north" ; + int Mesh2d_face_face_nodes(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_nodes:cf_role = "face_node_connectivity" ; + Mesh2d_face_face_nodes:long_name = "Maps every face to its corner nodes." ; + Mesh2d_face_face_nodes:start_index = 0 ; + int Mesh2d_face_face_edges(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_edges:cf_role = "face_edge_connectivity" ; + Mesh2d_face_face_edges:long_name = "Maps every face to its edges." ; + Mesh2d_face_face_edges:start_index = 0 ; + Mesh2d_face_face_edges:_FillValue = 999999 ; + int Mesh2d_face_edge_face_links(nMesh2d_face_edge, Two) ; + Mesh2d_face_edge_face_links:cf_role = "edge_face connectivity" ; + Mesh2d_face_edge_face_links:long_name = "neighbor faces for edges" ; + Mesh2d_face_edge_face_links:start_index = 0 ; + Mesh2d_face_edge_face_links:_FillValue = -999 ; + Mesh2d_face_edge_face_links:comment = "missing neighbor faces are indicated using _FillValue" ; + int Mesh2d_face_face_links(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_links:cf_role = "face_face connectivity" ; + Mesh2d_face_face_links:long_name = "Indicates which other faces neighbor each face" ; + Mesh2d_face_face_links:start_index = 0 ; + Mesh2d_face_face_links:_FillValue = 999999 ; + Mesh2d_face_face_links:flag_values = -1 ; + Mesh2d_face_face_links:flag_meanings = "out_of_mesh" ; + char mutable_categories(mutable_categories, str_len) ; + mutable_categories:name = "mutable_categories" ; + char mutable_numbers(mutable_numbers, str_len) ; + mutable_numbers:name = "mutable_numbers" ; + mutable_numbers:units = "other units" ; + char immutable_categories(immutable_categories, str_len) ; + immutable_categories:name = "immutable_categories" ; + char immutable_numbers(immutable_numbers, str_len) ; + immutable_numbers:name = "immutable_numbers" ; + immutable_numbers:units = "other units" ; + 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 0000-01-01 00:00:00" ; + time_instant:time_origin = "0000-01-01 00:00:00" ; + time_instant:bounds = "time_instant_bounds" ; + double time_instant_bounds(time_counter, axis_nbounds) ; + double colours__mutable_categories__instant_1ts(time_counter, mutable_categories, nMesh2d_face_face) ; + colours__mutable_categories__instant_1ts:standard_name = "mutable_categories" ; + colours__mutable_categories__instant_1ts:units = "arbitrary units" ; + colours__mutable_categories__instant_1ts:mesh = "Mesh2d_face" ; + colours__mutable_categories__instant_1ts:location = "face" ; + colours__mutable_categories__instant_1ts:online_operation = "instant" ; + colours__mutable_categories__instant_1ts:interval_operation = "1 s" ; + colours__mutable_categories__instant_1ts:interval_write = "1 s" ; + colours__mutable_categories__instant_1ts:cell_methods = "time: point" ; + colours__mutable_categories__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + double colours__mutable_numbers__instant_1ts(time_counter, mutable_numbers, nMesh2d_face_face) ; + colours__mutable_numbers__instant_1ts:standard_name = "mutable_numbers" ; + colours__mutable_numbers__instant_1ts:units = "arbitrary units" ; + colours__mutable_numbers__instant_1ts:mesh = "Mesh2d_face" ; + colours__mutable_numbers__instant_1ts:location = "face" ; + colours__mutable_numbers__instant_1ts:online_operation = "instant" ; + colours__mutable_numbers__instant_1ts:interval_operation = "1 s" ; + colours__mutable_numbers__instant_1ts:interval_write = "1 s" ; + colours__mutable_numbers__instant_1ts:cell_methods = "time: point" ; + colours__mutable_numbers__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + double colours__immutable_both__instant_1ts(time_counter, immutable_numbers, immutable_categories, nMesh2d_face_face) ; + colours__immutable_both__instant_1ts:standard_name = "immutable_both" ; + colours__immutable_both__instant_1ts:units = "arbitrary units" ; + colours__immutable_both__instant_1ts:mesh = "Mesh2d_face" ; + colours__immutable_both__instant_1ts:location = "face" ; + colours__immutable_both__instant_1ts:online_operation = "instant" ; + colours__immutable_both__instant_1ts:interval_operation = "1 s" ; + colours__immutable_both__instant_1ts:interval_write = "1 s" ; + colours__immutable_both__instant_1ts:cell_methods = "time: point" ; + colours__immutable_both__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + +// global attributes: + :name = "NonSpatialDimensions" ; + :description = "Created by xios" ; + :title = "Created by xios" ; + :Conventions = "UGRID" ; + :timeStamp = "2021-Aug-20 10:44:46 GMT" ; + :uuid = "f40b59c8-6f8e-4caa-972c-68bbdba36ba9" ; +data: + + Mesh2d_face_node_x = -45, -15, -15, -45, 15, 15, 45, 45, -45, -15, 15, 45, + -45, -15, 15, 45, 75, 75, 105, 105, 135, 135, 75, 105, 135, 75, 105, 135, + 165, 165, -165, -165, -135, -135, 165, -165, -135, 165, -165, -135, -105, + -105, -75, -75, -105, -75, -105, -75, -45, -135, 45, 135, 45, 135, -45, + -135 ; + + Mesh2d_face_node_y = 10.72858, 14.51082, 44.00703, 35.26439, 14.51082, + 44.00703, 10.72858, 35.26439, -10.72858, -14.51082, -14.51082, -10.72858, + -35.26439, -44.00703, -44.00703, -35.26439, 14.51082, 44.00703, 14.51082, + 44.00703, 10.72858, 35.26439, -14.51082, -14.51082, -10.72858, -44.00703, + -44.00703, -35.26439, 14.51082, 44.00703, 14.51082, 44.00703, 10.72858, + 35.26439, -14.51082, -14.51082, -10.72858, -44.00703, -44.00703, + -35.26439, 14.51082, 44.00703, 14.51082, 44.00703, -14.51082, -14.51082, + -44.00703, -44.00703, 69.24643, 69.24643, 69.24643, 69.24643, -69.24643, + -69.24643, -69.24643, -69.24643 ; + + time_instant = 63618879601, 63618879602, 63618879603, 63618879604, + 63618879605 ; +} diff --git a/example-metadata/LFRic/Prognostics.cdl b/example-metadata/LFRic/Prognostics.cdl new file mode 100644 index 0000000..5299a35 --- /dev/null +++ b/example-metadata/LFRic/Prognostics.cdl @@ -0,0 +1,146 @@ +netcdf Prognostics { +dimensions: + axis_nbounds = 2 ; + Two = 2 ; + nMesh2d_face_node = 56 ; + nMesh2d_face_edge = 108 ; + nMesh2d_face_face = 54 ; + nMesh2d_face_vertex = 4 ; + half_levels_copy = 3 ; + fixed_axis = 3 ; + time_counter = UNLIMITED ; // (5 currently) +variables: + int Mesh2d_face ; + Mesh2d_face:cf_role = "mesh_topology" ; + Mesh2d_face:long_name = "Topology data of 2D unstructured mesh" ; + Mesh2d_face:topology_dimension = 2 ; + Mesh2d_face:node_coordinates = "Mesh2d_face_node_x Mesh2d_face_node_y" ; + Mesh2d_face:edge_coordinates = "Mesh2d_face_edge_x Mesh2d_face_edge_y" ; + Mesh2d_face:edge_node_connectivity = "Mesh2d_face_edge_nodes" ; + Mesh2d_face:face_coordinates = "Mesh2d_face_face_x Mesh2d_face_face_y" ; + Mesh2d_face:face_node_connectivity = "Mesh2d_face_face_nodes" ; + float Mesh2d_face_node_x(nMesh2d_face_node) ; + Mesh2d_face_node_x:standard_name = "longitude" ; + Mesh2d_face_node_x:long_name = "Longitude of mesh nodes." ; + Mesh2d_face_node_x:units = "degrees_east" ; + float Mesh2d_face_node_y(nMesh2d_face_node) ; + Mesh2d_face_node_y:standard_name = "latitude" ; + Mesh2d_face_node_y:long_name = "Latitude of mesh nodes." ; + Mesh2d_face_node_y:units = "degrees_north" ; + float Mesh2d_face_edge_x(nMesh2d_face_edge) ; + Mesh2d_face_edge_x:standard_name = "longitude" ; + Mesh2d_face_edge_x:long_name = "Characteristic longitude of mesh edges." ; + Mesh2d_face_edge_x:units = "degrees_east" ; + float Mesh2d_face_edge_y(nMesh2d_face_edge) ; + Mesh2d_face_edge_y:standard_name = "latitude" ; + Mesh2d_face_edge_y:long_name = "Characteristic latitude of mesh edges." ; + Mesh2d_face_edge_y:units = "degrees_north" ; + int Mesh2d_face_edge_nodes(nMesh2d_face_edge, Two) ; + Mesh2d_face_edge_nodes:cf_role = "edge_node_connectivity" ; + Mesh2d_face_edge_nodes:long_name = "Maps every edge/link to two nodes that it connects." ; + Mesh2d_face_edge_nodes:start_index = 0 ; + float Mesh2d_face_face_x(nMesh2d_face_face) ; + Mesh2d_face_face_x:standard_name = "longitude" ; + Mesh2d_face_face_x:long_name = "Characteristic longitude of mesh faces." ; + Mesh2d_face_face_x:units = "degrees_east" ; + float Mesh2d_face_face_y(nMesh2d_face_face) ; + Mesh2d_face_face_y:standard_name = "latitude" ; + Mesh2d_face_face_y:long_name = "Characteristic latitude of mesh faces." ; + Mesh2d_face_face_y:units = "degrees_north" ; + int Mesh2d_face_face_nodes(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_nodes:cf_role = "face_node_connectivity" ; + Mesh2d_face_face_nodes:long_name = "Maps every face to its corner nodes." ; + Mesh2d_face_face_nodes:start_index = 0 ; + int Mesh2d_face_face_edges(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_edges:cf_role = "face_edge_connectivity" ; + Mesh2d_face_face_edges:long_name = "Maps every face to its edges." ; + Mesh2d_face_face_edges:start_index = 0 ; + Mesh2d_face_face_edges:_FillValue = 999999 ; + int Mesh2d_face_edge_face_links(nMesh2d_face_edge, Two) ; + Mesh2d_face_edge_face_links:cf_role = "edge_face connectivity" ; + Mesh2d_face_edge_face_links:long_name = "neighbor faces for edges" ; + Mesh2d_face_edge_face_links:start_index = 0 ; + Mesh2d_face_edge_face_links:_FillValue = -999 ; + Mesh2d_face_edge_face_links:comment = "missing neighbor faces are indicated using _FillValue" ; + int Mesh2d_face_face_links(nMesh2d_face_face, nMesh2d_face_vertex) ; + Mesh2d_face_face_links:cf_role = "face_face connectivity" ; + Mesh2d_face_face_links:long_name = "Indicates which other faces neighbor each face" ; + Mesh2d_face_face_links:start_index = 0 ; + Mesh2d_face_face_links:_FillValue = 999999 ; + Mesh2d_face_face_links:flag_values = -1 ; + Mesh2d_face_face_links:flag_meanings = "out_of_mesh" ; + float half_levels_copy(half_levels_copy) ; + half_levels_copy:name = "half_levels_copy" ; + half_levels_copy:units = "m" ; + half_levels_copy:positive = "up" ; + float fixed_axis(fixed_axis) ; + fixed_axis:name = "fixed_axis" ; + fixed_axis:units = "m" ; + fixed_axis:positive = "up" ; + 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 0000-01-01 00:00:00" ; + time_instant:time_origin = "0000-01-01 00:00:00" ; + time_instant:bounds = "time_instant_bounds" ; + double time_instant_bounds(time_counter, axis_nbounds) ; + double colours__red__instant_1ts(time_counter, half_levels_copy, nMesh2d_face_face) ; + colours__red__instant_1ts:standard_name = "red" ; + colours__red__instant_1ts:units = "1" ; + colours__red__instant_1ts:mesh = "Mesh2d_face" ; + colours__red__instant_1ts:location = "face" ; + colours__red__instant_1ts:online_operation = "instant" ; + colours__red__instant_1ts:interval_operation = "1 s" ; + colours__red__instant_1ts:interval_write = "1 s" ; + colours__red__instant_1ts:cell_methods = "time: point" ; + colours__red__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + double colours__green__instant_1ts(time_counter, fixed_axis, nMesh2d_face_face) ; + colours__green__instant_1ts:standard_name = "green" ; + colours__green__instant_1ts:units = "1" ; + colours__green__instant_1ts:mesh = "Mesh2d_face" ; + colours__green__instant_1ts:location = "face" ; + colours__green__instant_1ts:online_operation = "instant" ; + colours__green__instant_1ts:interval_operation = "1 s" ; + colours__green__instant_1ts:interval_write = "1 s" ; + colours__green__instant_1ts:cell_methods = "time: point" ; + colours__green__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + double colours__blue__instant_1ts(time_counter, fixed_axis, nMesh2d_face_face) ; + colours__blue__instant_1ts:standard_name = "blue" ; + colours__blue__instant_1ts:units = "1" ; + colours__blue__instant_1ts:mesh = "Mesh2d_face" ; + colours__blue__instant_1ts:location = "face" ; + colours__blue__instant_1ts:online_operation = "instant" ; + colours__blue__instant_1ts:interval_operation = "1 s" ; + colours__blue__instant_1ts:interval_write = "1 s" ; + colours__blue__instant_1ts:cell_methods = "time: point" ; + colours__blue__instant_1ts:coordinates = "time_instant Mesh2d_face_face_y Mesh2d_face_face_x" ; + +// global attributes: + :name = "Prognostics" ; + :description = "Created by xios" ; + :title = "Created by xios" ; + :Conventions = "UGRID" ; + :timeStamp = "2021-Aug-20 10:44:46 GMT" ; + :uuid = "19caeb42-2a54-4b6d-939a-183a1d857138" ; +data: + + Mesh2d_face_node_x = -45, -15, -15, -45, 15, 15, 45, 45, -45, -15, 15, 45, + -45, -15, 15, 45, 75, 75, 105, 105, 135, 135, 75, 105, 135, 75, 105, 135, + 165, 165, -165, -165, -135, -135, 165, -165, -135, 165, -165, -135, -105, + -105, -75, -75, -105, -75, -105, -75, -45, -135, 45, 135, 45, 135, -45, + -135 ; + + Mesh2d_face_node_y = 10.72858, 14.51082, 44.00703, 35.26439, 14.51082, + 44.00703, 10.72858, 35.26439, -10.72858, -14.51082, -14.51082, -10.72858, + -35.26439, -44.00703, -44.00703, -35.26439, 14.51082, 44.00703, 14.51082, + 44.00703, 10.72858, 35.26439, -14.51082, -14.51082, -10.72858, -44.00703, + -44.00703, -35.26439, 14.51082, 44.00703, 14.51082, 44.00703, 10.72858, + 35.26439, -14.51082, -14.51082, -10.72858, -44.00703, -44.00703, + -35.26439, 14.51082, 44.00703, 14.51082, 44.00703, -14.51082, -14.51082, + -44.00703, -44.00703, 69.24643, 69.24643, 69.24643, 69.24643, -69.24643, + -69.24643, -69.24643, -69.24643 ; + + time_instant = 63618879601, 63618879602, 63618879603, 63618879604, + 63618879605 ; +} diff --git a/example-metadata/improver/global-grid-perc/20210315T0700Z-PT0001H00M-feels_like_temperature.cdl b/example-metadata/improver/global-grid-perc/20210315T0700Z-PT0001H00M-feels_like_temperature.cdl new file mode 100644 index 0000000..b59b9a4 --- /dev/null +++ b/example-metadata/improver/global-grid-perc/20210315T0700Z-PT0001H00M-feels_like_temperature.cdl @@ -0,0 +1,65 @@ +netcdf \20210315T0700Z-PT0001H00M-feels_like_temperature { +dimensions: + percentile = 15 ; + latitude = 960 ; + longitude = 1280 ; + bnds = 2 ; +variables: + float feels_like_temperature(percentile, latitude, longitude) ; + feels_like_temperature:long_name = "feels_like_temperature" ; + feels_like_temperature:units = "K" ; + feels_like_temperature:grid_mapping = "latitude_longitude" ; + feels_like_temperature:coordinates = "blend_time forecast_period forecast_reference_time height time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float percentile(percentile) ; + percentile:units = "%" ; + percentile:long_name = "percentile" ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "gl_ens" ; + :source = "Met Office Unified Model" ; + :title = "Post-Processed MOGREPS-G Model Forecast on Global 20 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + percentile = 0, 5, 10, 20, 25, 30, 40, 50, 60, 70, 75, 80, 90, 95, 100 ; + + time = 1615791600 ; +} diff --git a/example-metadata/improver/global-grid-probs/20210315T0700Z-PT0001H00M-precip_rate.cdl b/example-metadata/improver/global-grid-probs/20210315T0700Z-PT0001H00M-precip_rate.cdl new file mode 100644 index 0000000..4a96b3b --- /dev/null +++ b/example-metadata/improver/global-grid-probs/20210315T0700Z-PT0001H00M-precip_rate.cdl @@ -0,0 +1,64 @@ +netcdf \20210315T0700Z-PT0001H00M-precip_rate { +dimensions: + threshold = 12 ; + latitude = 960 ; + longitude = 1280 ; + bnds = 2 ; +variables: + float probability_of_lwe_precipitation_rate_above_threshold(threshold, latitude, longitude) ; + probability_of_lwe_precipitation_rate_above_threshold:long_name = "probability_of_lwe_precipitation_rate_above_threshold" ; + probability_of_lwe_precipitation_rate_above_threshold:units = "1" ; + probability_of_lwe_precipitation_rate_above_threshold:grid_mapping = "latitude_longitude" ; + probability_of_lwe_precipitation_rate_above_threshold:coordinates = "blend_time forecast_period forecast_reference_time time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float threshold(threshold) ; + threshold:units = "m s-1" ; + threshold:standard_name = "lwe_precipitation_rate" ; + threshold:spp__relative_to_threshold = "greater_than" ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "gl_ens" ; + :source = "Met Office Unified Model" ; + :title = "Post-Processed MOGREPS-G Model Forecast on Global 20 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + threshold = 0, 8.333333e-09, 2.777778e-08, 6.944445e-08, 1.388889e-07, + 2.777778e-07, 5.555556e-07, 1.111111e-06, 2.222222e-06, 4.444445e-06, + 8.888889e-06, 1.777778e-05 ; + + time = 1615791600 ; +} diff --git a/example-metadata/improver/uk-grid-perc/20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H.cdl b/example-metadata/improver/uk-grid-perc/20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H.cdl new file mode 100644 index 0000000..b53844e --- /dev/null +++ b/example-metadata/improver/uk-grid-perc/20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H.cdl @@ -0,0 +1,72 @@ +netcdf \20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H { +dimensions: + percentile = 13 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float lwe_thickness_of_precipitation_amount(percentile, projection_y_coordinate, projection_x_coordinate) ; + lwe_thickness_of_precipitation_amount:least_significant_digit = 6LL ; + lwe_thickness_of_precipitation_amount:standard_name = "lwe_thickness_of_precipitation_amount" ; + lwe_thickness_of_precipitation_amount:units = "m" ; + lwe_thickness_of_precipitation_amount:cell_methods = "time: sum" ; + lwe_thickness_of_precipitation_amount:grid_mapping = "lambert_azimuthal_equal_area" ; + lwe_thickness_of_precipitation_amount:coordinates = "blend_time forecast_period forecast_reference_time time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float percentile(percentile) ; + percentile:units = "%" ; + percentile:long_name = "percentile" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:bounds = "forecast_period_bnds" ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int forecast_period_bnds(bnds) ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + int64 time ; + time:bounds = "time_bnds" ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + int64 time_bnds(bnds) ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "nc_det uk_det uk_ens" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + percentile = 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 85, 90, 95 ; + + time = 1614754800 ; +} diff --git a/example-metadata/improver/uk-grid-perc/20210305T1600Z-B20210303T0600Z-feels_like_temperature.cdl b/example-metadata/improver/uk-grid-perc/20210305T1600Z-B20210303T0600Z-feels_like_temperature.cdl new file mode 100644 index 0000000..4cab82f --- /dev/null +++ b/example-metadata/improver/uk-grid-perc/20210305T1600Z-B20210303T0600Z-feels_like_temperature.cdl @@ -0,0 +1,71 @@ +netcdf \20210305T1600Z-B20210303T0600Z-feels_like_temperature { +dimensions: + percentile = 13 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float feels_like_temperature(percentile, projection_y_coordinate, projection_x_coordinate) ; + feels_like_temperature:least_significant_digit = 2LL ; + feels_like_temperature:long_name = "feels_like_temperature" ; + feels_like_temperature:units = "K" ; + feels_like_temperature:grid_mapping = "lambert_azimuthal_equal_area" ; + feels_like_temperature:coordinates = "blend_time forecast_period forecast_reference_time height time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float percentile(percentile) ; + percentile:units = "%" ; + percentile:long_name = "percentile" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "gl_ens uk_ens" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + percentile = 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 85, 90, 95 ; + + time = 1614960000 ; +} diff --git a/example-metadata/improver/uk-grid-perc/20210305T2100Z-B20210303T0600Z-temperature_at_screen_level_max-daytime.cdl b/example-metadata/improver/uk-grid-perc/20210305T2100Z-B20210303T0600Z-temperature_at_screen_level_max-daytime.cdl new file mode 100644 index 0000000..1ad166c --- /dev/null +++ b/example-metadata/improver/uk-grid-perc/20210305T2100Z-B20210303T0600Z-temperature_at_screen_level_max-daytime.cdl @@ -0,0 +1,76 @@ +netcdf \20210305T2100Z-B20210303T0600Z-temperature_at_screen_level_max-daytime { +dimensions: + percentile = 13 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float temperature_at_screen_level_daytime_max(percentile, projection_y_coordinate, projection_x_coordinate) ; + temperature_at_screen_level_daytime_max:least_significant_digit = 2LL ; + temperature_at_screen_level_daytime_max:long_name = "temperature_at_screen_level_daytime_max" ; + temperature_at_screen_level_daytime_max:units = "K" ; + temperature_at_screen_level_daytime_max:cell_methods = "time: maximum" ; + temperature_at_screen_level_daytime_max:grid_mapping = "lambert_azimuthal_equal_area" ; + temperature_at_screen_level_daytime_max:coordinates = "blend_time forecast_period forecast_reference_time height time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float percentile(percentile) ; + percentile:units = "%" ; + percentile:long_name = "percentile" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:bounds = "forecast_period_bnds" ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int forecast_period_bnds(bnds) ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:bounds = "time_bnds" ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + int64 time_bnds(bnds) ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "gl_ens uk_ens" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + percentile = 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 85, 90, 95 ; + + time = 1614978000 ; +} diff --git a/example-metadata/improver/uk-grid-probs/20210303T0600Z-B20210303T0600Z-precip_rate_in_vicinity.cdl b/example-metadata/improver/uk-grid-probs/20210303T0600Z-B20210303T0600Z-precip_rate_in_vicinity.cdl new file mode 100644 index 0000000..af5718d --- /dev/null +++ b/example-metadata/improver/uk-grid-probs/20210303T0600Z-B20210303T0600Z-precip_rate_in_vicinity.cdl @@ -0,0 +1,70 @@ +netcdf \20210303T0600Z-B20210303T0600Z-precip_rate_in_vicinity { +dimensions: + threshold = 12 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float probability_of_lwe_precipitation_rate_in_vicinity_above_threshold(threshold, projection_y_coordinate, projection_x_coordinate) ; + probability_of_lwe_precipitation_rate_in_vicinity_above_threshold:least_significant_digit = 3LL ; + probability_of_lwe_precipitation_rate_in_vicinity_above_threshold:long_name = "probability_of_lwe_precipitation_rate_in_vicinity_above_threshold" ; + probability_of_lwe_precipitation_rate_in_vicinity_above_threshold:units = "1" ; + probability_of_lwe_precipitation_rate_in_vicinity_above_threshold:grid_mapping = "lambert_azimuthal_equal_area" ; + probability_of_lwe_precipitation_rate_in_vicinity_above_threshold:coordinates = "blend_time forecast_period forecast_reference_time time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float threshold(threshold) ; + threshold:units = "m s-1" ; + threshold:standard_name = "lwe_precipitation_rate" ; + threshold:spp__relative_to_threshold = "greater_than" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "nc_det uk_det" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + threshold = 0, 8.333333e-09, 2.777778e-08, 6.944445e-08, 1.388889e-07, + 2.777778e-07, 5.555556e-07, 1.111111e-06, 2.222222e-06, 4.444445e-06, + 8.888889e-06, 1.777778e-05 ; + + time = 1614751200 ; +} diff --git a/example-metadata/improver/uk-grid-probs/20210303T0600Z-B20210303T0600Z-weather_symbols.cdl b/example-metadata/improver/uk-grid-probs/20210303T0600Z-B20210303T0600Z-weather_symbols.cdl new file mode 100644 index 0000000..4fd2e63 --- /dev/null +++ b/example-metadata/improver/uk-grid-probs/20210303T0600Z-B20210303T0600Z-weather_symbols.cdl @@ -0,0 +1,61 @@ +netcdf \20210303T0600Z-B20210303T0600Z-weather_symbols { +dimensions: + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + int weather_code(projection_y_coordinate, projection_x_coordinate) ; + weather_code:long_name = "weather_code" ; + weather_code:units = "1" ; + weather_code:weather_code = 0LL, 1LL, 2LL, 3LL, 4LL, 5LL, 6LL, 7LL, 8LL, 9LL, 10LL, 11LL, 12LL, 13LL, 14LL, 15LL, 16LL, 17LL, 18LL, 19LL, 20LL, 21LL, 22LL, 23LL, 24LL, 25LL, 26LL, 27LL, 28LL, 29LL, 30LL ; + weather_code:weather_code_meaning = "Clear_Night Sunny_Day Partly_Cloudy_Night Partly_Cloudy_Day Dust Mist Fog Cloudy Overcast Light_Shower_Night Light_Shower_Day Drizzle Light_Rain Heavy_Shower_Night Heavy_Shower_Day Heavy_Rain Sleet_Shower_Night Sleet_Shower_Day Sleet Hail_Shower_Night Hail_Shower_Day Hail Light_Snow_Shower_Night Light_Snow_Shower_Day Light_Snow Heavy_Snow_Shower_Night Heavy_Snow_Shower_Day Heavy_Snow Thunder_Shower_Night Thunder_Shower_Day Thunder" ; + weather_code:grid_mapping = "lambert_azimuthal_equal_area" ; + weather_code:coordinates = "blend_time forecast_period forecast_reference_time time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :institution = "Met Office" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + time = 1614751200 ; +} diff --git a/example-metadata/improver/uk-grid-probs/20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H.cdl b/example-metadata/improver/uk-grid-probs/20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H.cdl new file mode 100644 index 0000000..a623d24 --- /dev/null +++ b/example-metadata/improver/uk-grid-probs/20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H.cdl @@ -0,0 +1,74 @@ +netcdf \20210303T0700Z-B20210303T0600Z-precipitation_accumulation-PT01H { +dimensions: + threshold = 19 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float probability_of_lwe_thickness_of_precipitation_amount_above_threshold(threshold, projection_y_coordinate, projection_x_coordinate) ; + probability_of_lwe_thickness_of_precipitation_amount_above_threshold:least_significant_digit = 3LL ; + probability_of_lwe_thickness_of_precipitation_amount_above_threshold:long_name = "probability_of_lwe_thickness_of_precipitation_amount_above_threshold" ; + probability_of_lwe_thickness_of_precipitation_amount_above_threshold:units = "1" ; + probability_of_lwe_thickness_of_precipitation_amount_above_threshold:cell_methods = "time: sum (comment: of lwe_thickness_of_precipitation_amount)" ; + probability_of_lwe_thickness_of_precipitation_amount_above_threshold:grid_mapping = "lambert_azimuthal_equal_area" ; + probability_of_lwe_thickness_of_precipitation_amount_above_threshold:coordinates = "blend_time forecast_period forecast_reference_time time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float threshold(threshold) ; + threshold:units = "m" ; + threshold:standard_name = "lwe_thickness_of_precipitation_amount" ; + threshold:spp__relative_to_threshold = "greater_than" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:bounds = "forecast_period_bnds" ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int forecast_period_bnds(bnds) ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + int64 time ; + time:bounds = "time_bnds" ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + int64 time_bnds(bnds) ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "nc_det uk_det uk_ens" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + threshold = 0, 0.0001, 0.00025, 0.0005, 0.001, 0.002, 0.004, 0.008, 0.012, + 0.016, 0.02, 0.025, 0.03, 0.04, 0.05, 0.075, 0.1, 0.15, 0.2 ; + + time = 1614754800 ; +} diff --git a/example-metadata/improver/uk-grid-probs/20210305T1600Z-B20210303T0600Z-temperature_at_screen_level.cdl b/example-metadata/improver/uk-grid-probs/20210305T1600Z-B20210303T0600Z-temperature_at_screen_level.cdl new file mode 100644 index 0000000..5b967b6 --- /dev/null +++ b/example-metadata/improver/uk-grid-probs/20210305T1600Z-B20210303T0600Z-temperature_at_screen_level.cdl @@ -0,0 +1,79 @@ +netcdf \20210305T1600Z-B20210303T0600Z-temperature_at_screen_level { +dimensions: + threshold = 63 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float probability_of_air_temperature_above_threshold(threshold, projection_y_coordinate, projection_x_coordinate) ; + probability_of_air_temperature_above_threshold:least_significant_digit = 3LL ; + probability_of_air_temperature_above_threshold:long_name = "probability_of_air_temperature_above_threshold" ; + probability_of_air_temperature_above_threshold:units = "1" ; + probability_of_air_temperature_above_threshold:grid_mapping = "lambert_azimuthal_equal_area" ; + probability_of_air_temperature_above_threshold:coordinates = "blend_time forecast_period forecast_reference_time height time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float threshold(threshold) ; + threshold:units = "K" ; + threshold:standard_name = "air_temperature" ; + threshold:spp__relative_to_threshold = "greater_than_or_equal_to" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "gl_ens uk_ens" ; + :source = "IMPROVER" ; + :title = "IMPROVER Post-Processed Multi-Model Blend on UK 2 km Standard Grid" ; + :Conventions = "CF-1.5" ; +data: + + threshold = 248.15, 253.15, 254.15, 255.15, 256.15, 257.15, 258.15, 259.15, + 260.15, 261.15, 262.15, 263.15, 264.15, 265.15, 266.15, 267.15, 268.15, + 269.15, 270.15, 271.15, 272.15, 273.15, 274.15, 275.15, 276.15, 277.15, + 278.15, 279.15, 280.15, 281.15, 282.15, 283.15, 284.15, 285.15, 286.15, + 287.15, 288.15, 289.15, 290.15, 291.15, 292.15, 293.15, 294.15, 295.15, + 296.15, 297.15, 298.15, 299.15, 300.15, 301.15, 302.15, 303.15, 304.15, + 305.15, 306.15, 307.15, 308.15, 309.15, 310.15, 311.15, 312.15, 313.15, + 318.15 ; + + time = 1614960000 ; +} diff --git a/example-metadata/improver/uk-spot-perc/20210305T1600Z-B20210303T0600Z-temperature_at_screen_level.cdl b/example-metadata/improver/uk-spot-perc/20210305T1600Z-B20210303T0600Z-temperature_at_screen_level.cdl new file mode 100644 index 0000000..488004f --- /dev/null +++ b/example-metadata/improver/uk-spot-perc/20210305T1600Z-B20210303T0600Z-temperature_at_screen_level.cdl @@ -0,0 +1,63 @@ +netcdf \20210305T1600Z-B20210303T0600Z-temperature_at_screen_level { +dimensions: + percentile = 13 ; + spot_index = 12973 ; + string5 = 5 ; +variables: + float air_temperature(percentile, spot_index) ; + air_temperature:least_significant_digit = 2LL ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:coordinates = "altitude blend_time forecast_period forecast_reference_time height latitude longitude time wmo_id" ; + float percentile(percentile) ; + percentile:units = "%" ; + percentile:long_name = "percentile" ; + int spot_index(spot_index) ; + spot_index:units = "1" ; + spot_index:long_name = "spot_index" ; + float altitude(spot_index) ; + altitude:units = "m" ; + altitude:standard_name = "altitude" ; + int64 blend_time ; + blend_time:units = "seconds since 1970-01-01 00:00:00" ; + blend_time:long_name = "blend_time" ; + blend_time:calendar = "gregorian" ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + forecast_period:deprecation_message = "forecast_period will be removed in future and should not be used" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + forecast_reference_time:deprecation_message = "forecast_reference_time will be removed in future and should not be used" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + float latitude(spot_index) ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float longitude(spot_index) ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + char wmo_id(spot_index, string5) ; + wmo_id:units = "no_unit" ; + wmo_id:long_name = "wmo_id" ; + +// global attributes: + :institution = "Met Office" ; + :mosg__model_configuration = "gl_ens uk_ens" ; + :source = "IMPROVER" ; + :title = "IMPROVER Multi-Model Blend UK Spot Values" ; + :Conventions = "CF-1.5" ; +data: + + percentile = 5, 10, 15, 20, 30, 40, 50, 60, 70, 80, 85, 90, 95 ; + + time = 1614960000 ; +} diff --git a/example-metadata/stage/global/20210326T0000Z-PT0000H00M-soil_temperature_on_soil_levels.cdl b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-soil_temperature_on_soil_levels.cdl new file mode 100644 index 0000000..c1df85c --- /dev/null +++ b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-soil_temperature_on_soil_levels.cdl @@ -0,0 +1,65 @@ +netcdf \20210326T0000Z-PT0000H00M-soil_temperature_on_soil_levels { +dimensions: + depth = 4 ; + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float soil_temperature(depth, latitude, longitude) ; + soil_temperature:_FillValue = NaNf ; + soil_temperature:least_significant_digit = 1LL ; + soil_temperature:standard_name = "soil_temperature" ; + soil_temperature:units = "K" ; + soil_temperature:grid_mapping = "latitude_longitude" ; + soil_temperature:coordinates = "forecast_period forecast_reference_time time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float depth(depth) ; + depth:axis = "Z" ; + depth:bounds = "depth_bnds" ; + depth:units = "m" ; + depth:standard_name = "depth" ; + depth:positive = "down" ; + float depth_bnds(depth, bnds) ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T04:09:12Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616716800 ; +} diff --git a/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_at_screen_level.cdl b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_at_screen_level.cdl new file mode 100644 index 0000000..02988d1 --- /dev/null +++ b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_at_screen_level.cdl @@ -0,0 +1,60 @@ +netcdf \20210326T0000Z-PT0000H00M-temperature_at_screen_level { +dimensions: + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float air_temperature(latitude, longitude) ; + air_temperature:least_significant_digit = 2LL ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:grid_mapping = "latitude_longitude" ; + air_temperature:coordinates = "forecast_period forecast_reference_time height time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T04:07:31Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616716800 ; +} diff --git a/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_on_height_levels.cdl b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_on_height_levels.cdl new file mode 100644 index 0000000..06dc3b4 --- /dev/null +++ b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_on_height_levels.cdl @@ -0,0 +1,62 @@ +netcdf \20210326T0000Z-PT0000H00M-temperature_on_height_levels { +dimensions: + height = 33 ; + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float air_temperature(height, latitude, longitude) ; + air_temperature:least_significant_digit = 1LL ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:grid_mapping = "latitude_longitude" ; + air_temperature:coordinates = "forecast_period forecast_reference_time time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float height(height) ; + height:axis = "Z" ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T04:09:49Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616716800 ; +} diff --git a/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_on_pressure_levels.cdl b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_on_pressure_levels.cdl new file mode 100644 index 0000000..58c494a --- /dev/null +++ b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-temperature_on_pressure_levels.cdl @@ -0,0 +1,67 @@ +netcdf \20210326T0000Z-PT0000H00M-temperature_on_pressure_levels { +dimensions: + pressure = 33 ; + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float air_temperature(pressure, latitude, longitude) ; + air_temperature:least_significant_digit = 1LL ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:ancillary_variables = "flag" ; + air_temperature:grid_mapping = "latitude_longitude" ; + air_temperature:coordinates = "flag forecast_period forecast_reference_time time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float pressure(pressure) ; + pressure:axis = "Z" ; + pressure:units = "Pa" ; + pressure:long_name = "pressure" ; + pressure:positive = "down" ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + byte flag(pressure, latitude, longitude) ; + flag:standard_name = "air_temperature status_flag" ; + flag:flag_meanings = "above_surface_pressure below_surface_pressure" ; + flag:flag_values = 0b, 1b ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T04:09:48Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616716800 ; +} diff --git a/example-metadata/stage/global/20210326T0000Z-PT0000H00M-wind_direction_at_10m.cdl b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-wind_direction_at_10m.cdl new file mode 100644 index 0000000..ab05553 --- /dev/null +++ b/example-metadata/stage/global/20210326T0000Z-PT0000H00M-wind_direction_at_10m.cdl @@ -0,0 +1,61 @@ +netcdf \20210326T0000Z-PT0000H00M-wind_direction_at_10m { +dimensions: + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float wind_from_direction(latitude, longitude) ; + wind_from_direction:least_significant_digit = 1LL ; + wind_from_direction:standard_name = "wind_from_direction" ; + wind_from_direction:long_name = "wind_direction_adjusted_by_model_surface_scheme" ; + wind_from_direction:units = "degrees" ; + wind_from_direction:grid_mapping = "latitude_longitude" ; + wind_from_direction:coordinates = "forecast_period forecast_reference_time height time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T04:07:39Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616716800 ; +} diff --git a/example-metadata/stage/global/20210326T1000Z-PT0010H00M-precipitation_accumulation-PT01H.cdl b/example-metadata/stage/global/20210326T1000Z-PT0010H00M-precipitation_accumulation-PT01H.cdl new file mode 100644 index 0000000..f2831ab --- /dev/null +++ b/example-metadata/stage/global/20210326T1000Z-PT0010H00M-precipitation_accumulation-PT01H.cdl @@ -0,0 +1,61 @@ +netcdf \20210326T1000Z-PT0010H00M-precipitation_accumulation-PT01H { +dimensions: + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float lwe_thickness_of_precipitation_amount(latitude, longitude) ; + lwe_thickness_of_precipitation_amount:least_significant_digit = 6LL ; + lwe_thickness_of_precipitation_amount:standard_name = "lwe_thickness_of_precipitation_amount" ; + lwe_thickness_of_precipitation_amount:units = "m" ; + lwe_thickness_of_precipitation_amount:cell_methods = "time: sum" ; + lwe_thickness_of_precipitation_amount:grid_mapping = "latitude_longitude" ; + lwe_thickness_of_precipitation_amount:coordinates = "forecast_period forecast_reference_time time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:bounds = "forecast_period_bnds" ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int forecast_period_bnds(bnds) ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + int64 time ; + time:bounds = "time_bnds" ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + int64 time_bnds(bnds) ; + +// global attributes: + :history = "2021-03-26T04:08:41Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616752800 ; +} diff --git a/example-metadata/stage/global/20210326T1000Z-PT0010H00M-temperature_at_screen_level_max-PT01H.cdl b/example-metadata/stage/global/20210326T1000Z-PT0010H00M-temperature_at_screen_level_max-PT01H.cdl new file mode 100644 index 0000000..d04d51b --- /dev/null +++ b/example-metadata/stage/global/20210326T1000Z-PT0010H00M-temperature_at_screen_level_max-PT01H.cdl @@ -0,0 +1,65 @@ +netcdf \20210326T1000Z-PT0010H00M-temperature_at_screen_level_max-PT01H { +dimensions: + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float air_temperature(latitude, longitude) ; + air_temperature:least_significant_digit = 2LL ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:cell_methods = "time: maximum" ; + air_temperature:grid_mapping = "latitude_longitude" ; + air_temperature:coordinates = "forecast_period forecast_reference_time height time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:bounds = "forecast_period_bnds" ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int forecast_period_bnds(bnds) ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:bounds = "time_bnds" ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + int64 time_bnds(bnds) ; + +// global attributes: + :history = "2021-03-26T04:10:03Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616752800 ; +} diff --git a/example-metadata/stage/global/20210401T0600Z-PT0150H00M-sensible_heat_flux_at_surface_mean-PT06H.cdl b/example-metadata/stage/global/20210401T0600Z-PT0150H00M-sensible_heat_flux_at_surface_mean-PT06H.cdl new file mode 100644 index 0000000..36aa717 --- /dev/null +++ b/example-metadata/stage/global/20210401T0600Z-PT0150H00M-sensible_heat_flux_at_surface_mean-PT06H.cdl @@ -0,0 +1,61 @@ +netcdf \20210401T0600Z-PT0150H00M-sensible_heat_flux_at_surface_mean-PT06H { +dimensions: + latitude = 1920 ; + longitude = 2560 ; + bnds = 2 ; +variables: + float surface_upward_sensible_heat_flux(latitude, longitude) ; + surface_upward_sensible_heat_flux:least_significant_digit = 1LL ; + surface_upward_sensible_heat_flux:standard_name = "surface_upward_sensible_heat_flux" ; + surface_upward_sensible_heat_flux:units = "W m-2" ; + surface_upward_sensible_heat_flux:cell_methods = "time: mean" ; + surface_upward_sensible_heat_flux:grid_mapping = "latitude_longitude" ; + surface_upward_sensible_heat_flux:coordinates = "forecast_period forecast_reference_time time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:bounds = "forecast_period_bnds" ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int forecast_period_bnds(bnds) ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + int64 time ; + time:bounds = "time_bnds" ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + int64 time_bnds(bnds) ; + +// global attributes: + :history = "2021-03-26T04:34:52Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT168H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_det" ; + :source = "Met Office Unified Model" ; + :title = "Global Model Forecast on Global 10 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1617256800 ; +} diff --git a/example-metadata/stage/mogreps-g/20210326T0000Z-PT0000H00M-temperature_at_screen_level.cdl b/example-metadata/stage/mogreps-g/20210326T0000Z-PT0000H00M-temperature_at_screen_level.cdl new file mode 100644 index 0000000..7e8d7db --- /dev/null +++ b/example-metadata/stage/mogreps-g/20210326T0000Z-PT0000H00M-temperature_at_screen_level.cdl @@ -0,0 +1,66 @@ +netcdf \20210326T0000Z-PT0000H00M-temperature_at_screen_level { +dimensions: + realization = 18 ; + latitude = 960 ; + longitude = 1280 ; + bnds = 2 ; +variables: + float air_temperature(realization, latitude, longitude) ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:grid_mapping = "latitude_longitude" ; + air_temperature:coordinates = "forecast_period forecast_reference_time height time" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + int realization(realization) ; + realization:units = "1" ; + realization:standard_name = "realization" ; + float latitude(latitude) ; + latitude:axis = "Y" ; + latitude:bounds = "latitude_bnds" ; + latitude:units = "degrees_north" ; + latitude:standard_name = "latitude" ; + float latitude_bnds(latitude, bnds) ; + float longitude(longitude) ; + longitude:axis = "X" ; + longitude:bounds = "longitude_bnds" ; + longitude:units = "degrees_east" ; + longitude:standard_name = "longitude" ; + float longitude_bnds(longitude, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T05:43:00Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :least_significant_digit = 2LL ; + :mosg__forecast_run_duration = "PT198H" ; + :mosg__grid_domain = "global" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "gl_ens" ; + :source = "Met Office Unified Model" ; + :title = "MOGREPS-G Model Forecast on Global 20 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + realization = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ; + + time = 1616716800 ; +} diff --git a/example-metadata/stage/mogreps-uk/20210326T0300Z-PT0000H00M-temperature_at_screen_level.cdl b/example-metadata/stage/mogreps-uk/20210326T0300Z-PT0000H00M-temperature_at_screen_level.cdl new file mode 100644 index 0000000..e4364c8 --- /dev/null +++ b/example-metadata/stage/mogreps-uk/20210326T0300Z-PT0000H00M-temperature_at_screen_level.cdl @@ -0,0 +1,71 @@ +netcdf \20210326T0300Z-PT0000H00M-temperature_at_screen_level { +dimensions: + realization = 3 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float air_temperature(realization, projection_y_coordinate, projection_x_coordinate) ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:grid_mapping = "lambert_azimuthal_equal_area" ; + air_temperature:coordinates = "forecast_period forecast_reference_time height time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + int realization(realization) ; + realization:units = "1" ; + realization:standard_name = "realization" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T06:36:51Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :least_significant_digit = 2LL ; + :mosg__forecast_run_duration = "PT126H" ; + :mosg__grid_domain = "uk_extended" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "2.3.0" ; + :mosg__model_configuration = "uk_ens" ; + :source = "Met Office Unified Model" ; + :title = "MOGREPS-UK Model Forecast on UK 2 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + realization = 29, 30, 31 ; + + time = 1616727600 ; +} diff --git a/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-CAPE_mixed_layer_lowest_500m.cdl b/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-CAPE_mixed_layer_lowest_500m.cdl new file mode 100644 index 0000000..78869ae --- /dev/null +++ b/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-CAPE_mixed_layer_lowest_500m.cdl @@ -0,0 +1,62 @@ +netcdf \20210326T0300Z-PT0000H00M-CAPE_mixed_layer_lowest_500m { +dimensions: + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float atmosphere_convective_available_potential_energy(projection_y_coordinate, projection_x_coordinate) ; + atmosphere_convective_available_potential_energy:least_significant_digit = 1LL ; + atmosphere_convective_available_potential_energy:standard_name = "atmosphere_convective_available_potential_energy" ; + atmosphere_convective_available_potential_energy:long_name = "atmosphere_convective_available_potential_energy_assuming_mixed_layer_parcel_for_lowest_500m" ; + atmosphere_convective_available_potential_energy:units = "J kg-1" ; + atmosphere_convective_available_potential_energy:grid_mapping = "lambert_azimuthal_equal_area" ; + atmosphere_convective_available_potential_energy:coordinates = "forecast_period forecast_reference_time time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T07:34:23Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT120H" ; + :mosg__grid_domain = "uk_extended" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "uk_det" ; + :source = "Met Office Unified Model" ; + :title = "UKV Model Forecast on UK 2 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616727600 ; +} diff --git a/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-leaf_area_index.cdl b/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-leaf_area_index.cdl new file mode 100644 index 0000000..06d29f3 --- /dev/null +++ b/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-leaf_area_index.cdl @@ -0,0 +1,69 @@ +netcdf \20210326T0300Z-PT0000H00M-leaf_area_index { +dimensions: + pseudo_level = 5 ; + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; + string44 = 44 ; +variables: + float leaf_area_index(pseudo_level, projection_y_coordinate, projection_x_coordinate) ; + leaf_area_index:_FillValue = NaNf ; + leaf_area_index:least_significant_digit = 1LL ; + leaf_area_index:standard_name = "leaf_area_index" ; + leaf_area_index:units = "1" ; + leaf_area_index:grid_mapping = "lambert_azimuthal_equal_area" ; + leaf_area_index:coordinates = "area_type forecast_period forecast_reference_time time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + int pseudo_level(pseudo_level) ; + pseudo_level:units = "1" ; + pseudo_level:long_name = "pseudo_level" ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + char area_type(pseudo_level, string44) ; + area_type:standard_name = "leaf_area_index area_type" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T07:37:26Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT120H" ; + :mosg__grid_domain = "uk_extended" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "uk_det" ; + :source = "Met Office Unified Model" ; + :title = "UKV Model Forecast on UK 2 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616727600 ; +} diff --git a/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-temperature_at_screen_level.cdl b/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-temperature_at_screen_level.cdl new file mode 100644 index 0000000..60a4875 --- /dev/null +++ b/example-metadata/stage/ukv/20210326T0300Z-PT0000H00M-temperature_at_screen_level.cdl @@ -0,0 +1,65 @@ +netcdf \20210326T0300Z-PT0000H00M-temperature_at_screen_level { +dimensions: + projection_y_coordinate = 970 ; + projection_x_coordinate = 1042 ; + bnds = 2 ; +variables: + float air_temperature(projection_y_coordinate, projection_x_coordinate) ; + air_temperature:least_significant_digit = 2LL ; + air_temperature:standard_name = "air_temperature" ; + air_temperature:units = "K" ; + air_temperature:grid_mapping = "lambert_azimuthal_equal_area" ; + air_temperature:coordinates = "forecast_period forecast_reference_time height time" ; + int lambert_azimuthal_equal_area ; + lambert_azimuthal_equal_area:grid_mapping_name = "lambert_azimuthal_equal_area" ; + lambert_azimuthal_equal_area:longitude_of_prime_meridian = 0. ; + lambert_azimuthal_equal_area:semi_major_axis = 6378137. ; + lambert_azimuthal_equal_area:semi_minor_axis = 6356752.31414036 ; + lambert_azimuthal_equal_area:longitude_of_projection_origin = -2.5 ; + lambert_azimuthal_equal_area:latitude_of_projection_origin = 54.9 ; + lambert_azimuthal_equal_area:false_easting = 0. ; + lambert_azimuthal_equal_area:false_northing = 0. ; + float projection_y_coordinate(projection_y_coordinate) ; + projection_y_coordinate:axis = "Y" ; + projection_y_coordinate:bounds = "projection_y_coordinate_bnds" ; + projection_y_coordinate:units = "m" ; + projection_y_coordinate:standard_name = "projection_y_coordinate" ; + float projection_y_coordinate_bnds(projection_y_coordinate, bnds) ; + float projection_x_coordinate(projection_x_coordinate) ; + projection_x_coordinate:axis = "X" ; + projection_x_coordinate:bounds = "projection_x_coordinate_bnds" ; + projection_x_coordinate:units = "m" ; + projection_x_coordinate:standard_name = "projection_x_coordinate" ; + float projection_x_coordinate_bnds(projection_x_coordinate, bnds) ; + int forecast_period ; + forecast_period:units = "seconds" ; + forecast_period:standard_name = "forecast_period" ; + int64 forecast_reference_time ; + forecast_reference_time:units = "seconds since 1970-01-01 00:00:00" ; + forecast_reference_time:standard_name = "forecast_reference_time" ; + forecast_reference_time:calendar = "gregorian" ; + float height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + int64 time ; + time:units = "seconds since 1970-01-01 00:00:00" ; + time:standard_name = "time" ; + time:calendar = "gregorian" ; + +// global attributes: + :history = "2021-03-26T07:37:31Z: StaGE Decoupler" ; + :institution = "Met Office" ; + :mosg__forecast_run_duration = "PT120H" ; + :mosg__grid_domain = "uk_extended" ; + :mosg__grid_type = "standard" ; + :mosg__grid_version = "1.6.0" ; + :mosg__model_configuration = "uk_det" ; + :source = "Met Office Unified Model" ; + :title = "UKV Model Forecast on UK 2 km Standard Grid" ; + :um_version = "11.5" ; + :Conventions = "CF-1.7, UKMO-1.0" ; +data: + + time = 1616727600 ; +} diff --git a/scripts/makeNCfiles.py b/scripts/makeNCfiles.py new file mode 100644 index 0000000..ac254ae --- /dev/null +++ b/scripts/makeNCfiles.py @@ -0,0 +1,44 @@ +import copy +import glob +import os +import subprocess +import unittest + +class TestNetCDFBuild(unittest.TestCase): + def __init__(self, *args, **kwargs): + super(TestNetCDFBuild, self).__init__(*args, **kwargs) + self.files = [] + + + def _build_file(self, infile): + outfile = infile.replace('.cdl', '.nc') + acall = ['ncgen', '-4', '-o', outfile, infile] + try: + subprocess.check_output(acall, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError as e: + raise ValueError(' '.join(acall) + '\n{}'.format(e.output)) + finally: + if os.path.exists(outfile): + self.files.append(outfile) + + def tearDown(self): + for outfile in self.files: + if os.path.exists(outfile): + os.remove(outfile) + + +for f in glob.glob('**/*.cdl', recursive=True): + def make_a_test(inf): + infile = copy.copy(inf) + outfile = f.replace('.cdl', '.nc') + def test_ncgen(self): + self._build_file(infile) + self.assertTrue(os.path.exists(outfile), + msg='{} does not exist, ncgen failed'.format(outfile)) + return test_ncgen + tname = 'test_{}'.format(f) + setattr(TestNetCDFBuild, tname, make_a_test(f)) + + +if __name__ == '__main__': + unittest.main()