From 22e4abb1998133d5fb9d48c348f4eca277866fe4 Mon Sep 17 00:00:00 2001
From: Andrey Debolskiy <and.debol@gmail.com>
Date: Tue, 15 Oct 2024 14:41:46 +0300
Subject: [PATCH] added io_metadata.f90

---
 src/io_metadata.f90 | 205 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 205 insertions(+)
 create mode 100644 src/io_metadata.f90

diff --git a/src/io_metadata.f90 b/src/io_metadata.f90
new file mode 100644
index 0000000..61bb9ba
--- /dev/null
+++ b/src/io_metadata.f90
@@ -0,0 +1,205 @@
+module io_metadata
+  implicit none
+
+  type :: variable_metadata
+    character(len=32) :: name                       ! variable name
+    character(len=32), dimension(4) :: dim_names    ! dimension names
+    character(len=32) :: char_name(10) = ''    ! character metadata names
+    character(len=32) :: char_value(10) = ''   ! character metadata values
+    character(len=32) :: int_name(10) = ''     ! integer metadata names
+    integer :: int_value(10) = 0               ! integer metadata values
+    character(len=32) :: real_name(10) = ''    ! real metadata names
+    real :: real_value(10) = 0.0               ! real metadata values
+  end type variable_metadata
+
+  ! variable metadata collection
+
+  type(variable_metadata), public :: meta_temperature = variable_metadata( &
+    name = 'T2M', &
+    dim_names = [character(len=32) :: 'X', 'Y', 'Z', 'Time'], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'Air Temperature', &
+      'C', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_pressure = variable_metadata( &
+    name = 'SLP', &
+    dim_names = [character(len=32) :: 'X', 'Y', 'Time', ''], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'Air Pressure at Sea Level', &
+      'Pa', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_humidity = variable_metadata( &
+    name = 'HUM_2M', &
+    dim_names = [character(len=32) :: 'X', 'Y', 'Time', ''], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'Relative Humidity', &
+      '%', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_richnum = variable_metadata( &
+    name = 'RICHNUM', &
+    dim_names = [character(len=32) :: 'X', 'Y', 'Z', 'Time'], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'Richardson number', &
+      'Ri', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_anzt = variable_metadata( &
+    name = 'ANZT', &
+    dim_names = [character(len=32) :: 'X', 'Y', 'Z', 'Time'], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'ANZT Vertical mixing parameter', &
+      'ANZT', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_anzu = variable_metadata( &
+    name = 'ANZU', &
+    dim_names = [character(len=32) :: 'X', 'Y', 'Z', 'Time'], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'ANZU Vertical mixing parameter', &
+      'ANZU', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_test1d = variable_metadata( &
+    name = 'TEST1D', &
+    dim_names = [character(len=32) :: 'X', '', '', ''], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'Test 1D variable', &
+      '-', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_test2d = variable_metadata( &
+    name = 'TEST2D', &
+    dim_names = [character(len=32) :: 'X', 'Y', '', ''], &
+    char_name = [character(len=32) :: &
+      'long_name', &
+      'units', &
+      '', '', '', '', '', '', '', ''], &
+    char_value = [character(len=32) :: &
+      'Test 2D variable', &
+      '-', &
+      '', '', '', '', '', '', '', ''], &
+    real_name = [character(len=32) :: &
+      'missing_value', &
+      'scale_factor', &
+      '', '', '', '', '', '', '', ''], &
+    real_value = [&
+      -9999.9, &
+      1.0, &
+      0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_ri_grad_2d = variable_metadata( &
+    name = 'Ri_grad', &
+    dim_names = [character(len=32) :: 'Z', 'Time', '', ''])
+
+  type(variable_metadata), public :: meta_kh_2d = variable_metadata( &
+    name = 'kh', &
+    dim_names = [character(len=32) :: 'Z', 'Time', '', ''], &
+    real_name = [character(len=32) :: &
+    'missing_value', &
+    'scale_factor', &
+    '', '', '', '', '', '', '', ''], &
+  real_value = [&
+    -9999.9, &
+    -3.0, &
+    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+  type(variable_metadata), public :: meta_km_2d = variable_metadata( &
+    name = 'km', &
+    dim_names = [character(len=32) :: 'Z', 'Time', '', ''], &
+    real_name = [character(len=32) :: &
+    'missing_value', &
+    'scale_factor', &
+    '', '', '', '', '', '', '', ''], &
+  real_value = [&
+    -9999.9, &
+    -3.0, &
+    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
+
+end module io_metadata
\ No newline at end of file
-- 
GitLab