@@ -3,11 +3,7 @@ module verify_variables_mod
3
3
use types_mod, only : r8 , MISSING_R8
4
4
use utilities_mod, only : error_handler, E_ERR, E_MSG, do_output, to_upper
5
5
use netcdf_utilities_mod, only : NF90_MAX_NAME
6
- use obs_kind_mod, only : QTY_TEMPERATURE, QTY_SALINITY, QTY_DRY_LAND, &
7
- QTY_U_CURRENT_COMPONENT,QTY_V_CURRENT_COMPONENT, &
8
- QTY_SEA_SURFACE_HEIGHT, QTY_SEA_SURFACE_PRESSURE, &
9
- QTY_POTENTIAL_TEMPERATURE, QTY_SEA_SURFACE_ANOMALY, &
10
- get_index_for_quantity, get_name_for_quantity
6
+ use obs_kind_mod, only : QTY_SALINITY, QTY_POTENTIAL_TEMPERATURE, get_index_for_quantity
11
7
12
8
implicit none
13
9
@@ -26,122 +22,98 @@ module verify_variables_mod
26
22
! Subroutine for verifying state variables.
27
23
! - state_variables: list of state variables from namelist
28
24
! - ngood: amount of state variable rows validated
29
- ! - table: 2D string array of state variables
30
25
! - var_names: array of NetCDF variable names
31
- ! - var_qtys: array of DART QUANTITY
32
- ! - var_update: array of UPDATE flags (optional)
26
+ ! - var_qtys (kind_list) : array of DART QUANTITY
27
+ ! - var_update (update_var) : array of UPDATE flags (optional, )
33
28
! - var_ranges: 2D array of ranges (optional)
34
- ! - default_vars: flag to check DART QUANTITY (optional, default = true)
35
29
!- ----------------------------------------------------------------------
36
- subroutine verify_variables (state_variables , ngood , table , var_names , &
37
- var_qtys , var_update , var_ranges , default_vars )
30
+ subroutine verify_variables (state_variables , ngood , var_names , &
31
+ var_qtys , var_update , var_ranges )
38
32
39
- character (len=* ), intent (inout ) :: state_variables(:)
33
+ character (len=* ), intent (inout ) :: state_variables(:,: )
40
34
integer , intent (out ) :: ngood
41
- character (len=* ), intent (out ) :: table(:,:)
42
35
character (len=* ), intent (out ) :: var_names(:)
43
- integer , intent (out ) :: var_qtys(:) ! - kind_list
44
- logical , optional , intent (out ) :: var_update(:) ! - update_var, optional
45
- real (r8 ), optional , intent (out ) :: var_ranges(:,:) ! - optional
46
- logical , optional , intent (in ) :: default_vars ! - optional
47
-
36
+ integer , intent (out ) :: var_qtys(:)
37
+ logical , optional , intent (out ) :: var_update(:)
38
+ real (r8 ), optional , intent (out ) :: var_ranges(:,:)
39
+
48
40
character (len=* ), parameter :: routine = ' verify_variables'
49
41
50
42
integer :: io, i, nrows, ncols
51
43
real (r8 ) :: minvalue, maxvalue
52
- logical :: check_obs
53
44
character (len= NF90_MAX_NAME) :: varname, dartstr, minvalstring, maxvalstring, update
54
45
55
- nrows = size (table,1 )
56
- ncols = size (table) / size (table,1 )
57
- check_obs = .true.
46
+ nrows = size (state_variables,1 )
47
+ ncols = size (state_variables) / size (state_variables,1 )
58
48
59
49
ngood = 0
60
50
61
- MyLoop : do i = 1 , nrows
51
+ MyLoop : do i = 1 , ncols
62
52
63
- varname = trim (state_variables(ncols * i - (ncols - 1 ) ))
64
- dartstr = trim (state_variables(ncols * i - (ncols - 2 ) ))
53
+ varname = trim (state_variables(1 , i ))
54
+ dartstr = trim (state_variables(2 , i ))
65
55
66
- if ( table(i, 1 ) == ' ' .and. table(i, 2 ) == ' ' ) exit MyLoop ! Found end of list.
56
+ if ( state_variables( 1 , i ) == ' ' .and. state_variables( 2 , i ) == ' ' ) exit MyLoop ! Found end of list.
67
57
68
- if ( table(i, 1 ) == ' ' .or. table(i, 2 ) == ' ' ) then
69
- string1 = ' model_nml:state_variables not fully specified'
70
- call error_handler(E_ERR,routine,string1,source,revision,revdate)
58
+ if ( state_variables( 1 , i ) == ' ' .or. state_variables( 2 , i ) == ' ' ) then
59
+ string1 = ' model_nml:state_variables not fully specified'
60
+ call error_handler(E_ERR,routine,string1,source,revision,revdate)
71
61
endif
72
62
63
+ ! All good to here - fill the output variables
64
+ ngood = ngood + 1
73
65
74
- if ( present (default_vars)) check_obs = default_vars
66
+ var_names(ngood) = varname
75
67
76
68
! The internal DART routines check if the variable name is valid.
77
69
78
- if (check_obs) then
79
- var_qtys(i) = get_index_for_quantity(dartstr)
80
- if ( var_qtys(i) < 0 ) then
81
- write (string1,' ('' there is no obs_kind <'' ,a,'' > in obs_kind_mod.f90'' )' ) trim (dartstr)
82
- write (string2,' (A)' ) ' Hint: set default_vars as false if using non default state_variables'
83
- call error_handler(E_ERR,routine,string1,source,revision,revdate, text2= string2)
84
- endif
70
+ var_qtys(ngood) = get_index_for_quantity(dartstr)
71
+ if ( var_qtys(i) < 0 ) then
72
+ write (string1,' ('' there is no obs_kind <'' ,a,'' > in obs_kind_mod.f90'' )' ) trim (dartstr)
73
+ call error_handler(E_ERR,routine,string1,source,revision,revdate)
85
74
endif
86
75
87
- ! All good to here - fill the output variables
88
- ngood = ngood + 1
76
+ ! Records false in var_update if string is anything but "UPDATE"
89
77
90
- var_names(ngood) = varname
78
+ if ( present (var_update) .and. nrows <= 3 )then
79
+ update = trim (state_variables(3 , i))
80
+ call to_upper(update)
91
81
92
- table(i,1 ) = trim (varname)
93
- table(i,2 ) = trim (dartstr)
82
+ var_update(ngood) = .false.
83
+ if (update == ' UPDATE' ) var_update(ngood) = .true.
84
+ endif
94
85
95
- ! Check to see if other columns variables are present from default
86
+ ! Records the min and max value range in var_ranges
96
87
97
- if (ncols == 5 ) then
88
+ if ( present (var_ranges) .and. nrows == 5 ) then
98
89
var_ranges(ngood,:) = (/ MISSING_R8 , MISSING_R8 / )
99
90
100
- minvalstring = trim (state_variables(ncols * i - (ncols - 3 )))
101
- maxvalstring = trim (state_variables(ncols * i - (ncols - 4 )))
102
- update = trim (state_variables(ncols * i - (ncols - 5 )))
91
+ minvalstring = trim (state_variables(4 , i))
92
+ maxvalstring = trim (state_variables(5 , i))
103
93
104
94
! Convert the [min,max] valstrings to numeric values if possible
105
95
106
96
read (minvalstring,* ,iostat= io) minvalue
107
97
if (io == 0 ) var_ranges(ngood,1 ) = minvalue
108
- table(i,3 ) = trim (minvalstring)
109
98
110
99
read (maxvalstring,* ,iostat= io) maxvalue
111
100
if (io == 0 ) var_ranges(ngood,2 ) = maxvalue
112
- table(i,4 ) = trim (maxvalstring)
113
-
114
- call to_upper(update)
115
- table(i,5 ) = trim (update)
116
-
117
- else if (ncols == 3 ) then
118
- update = trim (state_variables(ncols * i - (ncols - 3 )))
119
-
120
- call to_upper(update)
121
- table(i,3 ) = trim (update)
122
101
end if
123
102
124
- ! Records false in var_update if string is anything but "UPDATE"
125
-
126
- if ( present (var_update) )then
127
- var_update(ngood) = .false.
128
- if (update == ' UPDATE' ) var_update(ngood) = .true.
129
- endif
130
-
131
103
! Record the contents of the DART state vector
132
104
133
105
if (do_output()) then
134
- SELECT CASE (ncols )
106
+ SELECT CASE (nrows )
135
107
CASE (5 )
136
- write (string1,' (A,I2,10A)' ) ' variable ' ,i,' is ' ,trim (varname), ' , ' , trim (dartstr), &
108
+ write (string1,' (A,I2,10A)' ) ' variable' ,i,' is ' ,trim (varname), ' , ' , trim (dartstr), &
137
109
' , ' , trim (minvalstring), ' , ' , trim (maxvalstring), ' , ' , trim (update)
138
110
call error_handler(E_MSG,routine,string1,source,revision,revdate)
139
111
CASE (3 )
140
- write (string1,' (A,I2,6A)' ) ' variable ' ,i,' is ' ,trim (varname), ' , ' , trim (dartstr), &
112
+ write (string1,' (A,I2,6A)' ) ' variable' ,i,' is ' ,trim (varname), ' , ' , trim (dartstr), &
141
113
' , ' , trim (update)
142
114
call error_handler(E_MSG,routine,string1,source,revision,revdate)
143
115
CASE DEFAULT
144
- write (string1,' (A,I2,4A)' ) ' variable ' ,i,' is ' ,trim (varname), ' , ' , trim (dartstr)
116
+ write (string1,' (A,I2,4A)' ) ' variable' ,i,' is ' ,trim (varname), ' , ' , trim (dartstr)
145
117
call error_handler(E_MSG,routine,string1,source,revision,revdate)
146
118
END SELECT
147
119
endif
0 commit comments