@@ -80,7 +80,7 @@ subroutine forcing_config_parse(self, fields, start_date, &
80
80
integer , intent (out ) :: min_dt, num_land_fields
81
81
character (len= 9 ), intent (out ) :: calendar
82
82
83
- type (json_value), pointer :: field_jv_ptr
83
+ type (json_value), pointer :: input_jv_ptr
84
84
integer :: i, dt
85
85
character (len= 9 ) :: calendar_str
86
86
character (kind= CK, len= :), allocatable :: product_name
@@ -102,9 +102,9 @@ subroutine forcing_config_parse(self, fields, start_date, &
102
102
calendar = ' '
103
103
num_land_fields = 0
104
104
do i= 1 , self% num_inputs
105
- call self% core% get_child(inputs, i, field_jv_ptr , found)
105
+ call self% core% get_child(inputs, i, input_jv_ptr , found)
106
106
call assert(found, " No inputs found in forcing config." )
107
- call self% parse_field(field_jv_ptr , fields(i), start_date, &
107
+ call self% parse_input(input_jv_ptr , fields(i), start_date, &
108
108
product_name, dt, calendar_str, is_land_field)
109
109
if (dt < min_dt) then
110
110
min_dt = dt
@@ -123,12 +123,12 @@ subroutine forcing_config_parse(self, fields, start_date, &
123
123
end subroutine forcing_config_parse
124
124
125
125
126
- subroutine forcing_config_parse_field (self , field_jv_ptr , field_ptr , &
126
+ subroutine forcing_config_parse_input (self , input_jv_ptr , field_ptr , &
127
127
start_date , product_name , dt , forcing_calendar , &
128
128
is_land_field )
129
129
130
130
class(forcing_config), intent (inout ) :: self
131
- type (json_value), pointer :: field_jv_ptr
131
+ type (json_value), pointer :: input_jv_ptr
132
132
type (forcing_field) :: field_ptr
133
133
type (datetime), intent (in ) :: start_date
134
134
character (len=* ), intent (in ) :: product_name
@@ -151,59 +151,60 @@ subroutine forcing_config_parse_field(self, field_jv_ptr, field_ptr, &
151
151
integer :: num_perturbations, num_fields
152
152
integer :: i, j
153
153
154
+ type (json_value), pointer :: input_field_jv_list,
154
155
type (json_value), pointer :: fieldname_jv_list, filename_jv_list
155
156
type (json_value), pointer :: fieldname_jv_ptr, filename_jv_ptr
156
157
type (json_value), pointer :: perturbation_jv_ptr
157
158
type (json_value), pointer :: dimension_jv_ptr, value_jv_ptr
158
159
type (json_value), pointer :: perturbation_list, dimension_list
159
160
type (json_value), pointer :: value_list
160
161
161
- ! Allow there to be multiple
162
- call self% core% get_child(field_jv_ptr, " fieldnames" , fieldname_jv_list, found)
163
- call assert(found, " Entry 'fieldnames' not found in forcing config." )
164
- num_fieldnames = self% core% count (fieldname_jv_list)
162
+ call self% core% get(input_jv_ptr, " coupling_field_name" , cname, found)
163
+ call assert(found, " Entry 'coupling_field_name' not found in forcing config." )
165
164
166
- call self% core% get_child(field_jv_ptr, " filenames" , filename_jv_list, found)
167
- call assert(found, " Entry 'filenames' not found in forcing config." )
168
- num_filenames = self% core% count (filename_jv_list)
165
+ call self% core% get(input_jv_ptr, " realm" , realm_str, realm_found)
166
+ if (realm_found) then
167
+ call assert(realm_str == " land" .or. realm_str == " atmosphere" , &
168
+ " forcing_parse_field: invalid domain value." )
169
+ else
170
+ realm_str = " atmosphere"
171
+ endif
172
+
173
+ is_land_field = .false.
174
+ if (realm_str == " land" ) then
175
+ is_land_field = .true.
176
+ endif
169
177
170
- call assert(num_fieldnames == num_filenames, &
171
- ' Number of fieldnames does not match number of filenames' )
172
- allocate (fieldname_list(num_fieldnames))
173
- allocate (filename_list(num_filenames))
178
+ ! Each coupling field can have multiple input fields associated with it.
179
+ call self% core% get_child(input_jv_ptr, " input_fields" , &
180
+ input_field_jv_list, found)
181
+ num_input_fields = self% core% count (input_field_jv_list)
182
+ do i= 1 , num_input_fields
183
+ call self% core% get_child(input_field_jv_list, i, &
184
+ input_field_jv_ptr, found)
174
185
175
- do i= 1 , num_filenames
176
- call self% core% get_child(fieldname_jv_list, i, &
177
- fieldname_jv_ptr, found)
186
+ call self% core% get(input_field_jv_ptr, " filename" , filename, found)
187
+ call assert(found, " Expected to find filename entry." )
188
+ filedame_list(i) = trim (filename)
189
+
190
+ call self% core% get(input_field_jv_ptr, " fieldname" , fieldname, found)
178
191
call assert(found, " Expected to find fieldname entry." )
179
- call self% core% get(fieldname_jv_ptr, value= fieldname)
180
192
fieldname_list(i) = trim (fieldname)
181
193
182
- call self% core% get_child(filename_jv_list, i, &
183
- filename_jv_ptr, found)
184
- call assert(found, " Expected to find filename entry." )
185
- call self% core% get(filename_jv_ptr, value= filename)
186
- filename_list(i) = trim (filename)
194
+ self% parse_permutations()
195
+
187
196
enddo
188
197
189
- call self % core % get(field_jv_ptr, " cname " , cname, found)
190
- call assert(found, " Entry 'cname' not found in forcing config. " )
198
+ call field_ptr % init(fieldname_list, filename_list , cname, realm_str, start_date, &
199
+ product_name, self % logger, dt, forcing_calendar )
191
200
192
- call self% core% get(field_jv_ptr, " domain" , domain_str, domain_found)
193
- if (domain_found) then
194
- call assert(domain_str == " land" .or. domain_str == " atmosphere" , &
195
- " forcing_parse_field: invalid domain value." )
196
- else
197
- domain_str = " atmosphere"
198
- endif
199
201
200
- is_land_field = .false.
201
- if (domain_str == " land" ) then
202
- is_land_field = .true.
203
- endif
204
202
205
- call field_ptr% init(fieldname_list, filename_list, cname, domain_str, start_date, &
206
- product_name, self% logger, dt, forcing_calendar)
203
+ end subroutine forcing_config_parse_field
204
+
205
+
206
+ subroutine forcing_config_parse_permutations (self )
207
+
207
208
208
209
call self% core% get_child(field_jv_ptr, " perturbations" , perturbation_list, found)
209
210
if (.not. found) then
@@ -370,7 +371,8 @@ subroutine forcing_config_parse_field(self, field_jv_ptr, field_ptr, &
370
371
endif
371
372
enddo
372
373
373
- end subroutine forcing_config_parse_field
374
+
375
+ end subroutine forcing_config_parse_permutations (self)
374
376
375
377
376
378
subroutine forcing_config_deinit (self )
0 commit comments