Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / hydro / Routing / Reservoirs / RFC_Forecasts / module_rfc_forecasts_tests.F90
blobccae41c913136a77eca63474e002257b80f6ea95
1 ! This module holds tests for initialization of
2 ! various attributes of an RFC forecasts reservoir.
3 module module_rfc_forecasts_tests
4     use module_rfc_forecasts
5     use module_reservoir_read_rfc_time_series_data
7 contains
9     ! Testing
10     function rfc_forecasts_data_info(rfc_forecasts_reservoir_data) result(data_info_result)
11         implicit none
12         type (rfc_forecasts) :: rfc_forecasts_reservoir_data
13         logical :: data_info_result
14         logical, dimension(8) :: ptr_state
15         logical, dimension(8) :: data_state
17         data_info_result = .false.
19         ! Check to see if the rfc_forecasts_state data structure exists
20         print *, "Checking pointer association on data%state for rfc forecasts reservoirs"
21         if ( associated(rfc_forecasts_reservoir_data%state) ) then
22             print *, "PASSED"
23             ptr_state(1) = .true.
24        else
25             print *, "FAILED"
26             ptr_state(1) = .false.
27         end if
28         print *, " "
30         ! Check to see if the rfc_forecasts_properties data structure exists
31         print *, "Checking pointer association on data%properties for rfc forecasts reservoirs"
32         if ( associated(rfc_forecasts_reservoir_data%properties) ) then
33             print *, "PASSED"
34             ptr_state(2) = .true.
35         else
36             print *, "FAILED"
37             ptr_state(2) = .false.
38         end if
39         print *, " "
41         ! Check to see if the rfc_forecasts_input data structure exists
42         print *, "Checking pointer association on data%input for rfc forecasts reservoirs"
43         if ( associated(rfc_forecasts_reservoir_data%input) ) then
44             print *, "PASSED"
45             ptr_state(3) = .true.
46         else
47             print *, "FAILED"
48             ptr_state(3) = .false.
49         end if
50         print *, " "
52         ! Check to see if the rfc_forecasts_output data structure exists
53         print *, "Checking pointer association on data%output for rfc forecasts reservoirs"
54         if ( associated(rfc_forecasts_reservoir_data%output) ) then
55             print *, "PASSED"
56             ptr_state(4) = .true.
57         else
58             print *, "FAILED"
59             ptr_state(4) = .false.
60         end if
61         print *, " "
63         ! Test levelpool structure
64         ! Check to see if the rfc_forecasts levelpool_state data structure exists
65         print *, "Checking pointer association on data%levelpool_state for rfc forecasts reservoirs"
66         if ( associated(rfc_forecasts_reservoir_data%state%levelpool_ptr%state) ) then
67             print *, "PASSED"
68             ptr_state(5) = .true.
69        else
70             print *, "FAILED"
71             ptr_state(5) = .false.
72         end if
73         print *, " "
75         ! Check to see if the rfc_forecasts levelpool_properties data structure exists
76         print *, "Checking pointer association on data%levelpool_properties for rfc forecasts reservoirs"
77         if ( associated(rfc_forecasts_reservoir_data%state%levelpool_ptr%properties) ) then
78             print *, "PASSED"
79             ptr_state(6) = .true.
80         else
81             print *, "FAILED"
82             ptr_state(6) = .false.
83         end if
84         print *, " "
86         ! Check to see if the rfc_forecasts levelpool_input data structure exists
87         print *, "Checking pointer association on data%levelpool_input for rfc forecasts reservoirs"
88         if ( associated(rfc_forecasts_reservoir_data%state%levelpool_ptr%input) ) then
89             print *, "PASSED"
90             ptr_state(7) = .true.
91         else
92             print *, "FAILED"
93             ptr_state(7) = .false.
94         end if
95         print *, " "
97         ! Check to see if the rfc_forecasts levelpool_output data structure exists
98         print *, "Checking pointer association on data%levelpool_output for rfc forecasts reservoirs"
99         if ( associated(rfc_forecasts_reservoir_data%state%levelpool_ptr%output) ) then
100             print *, "PASSED"
101             ptr_state(8) = .true.
102         else
103             print *, "FAILED"
104             ptr_state(8) = .false.
105         end if
106         print *, " "
109         ! Now check the data members of each substructure
110         if ( ptr_state(1) ) then
111             data_state(1) = test_rfc_forecasts_state(rfc_forecasts_reservoir_data%state)
112         end if
114         if ( ptr_state(2) ) then
115             data_state(2) = test_rfc_forecasts_properties(rfc_forecasts_reservoir_data%properties)
116         end if
118         if ( ptr_state(3) ) then
119             data_state(3) = test_input_rfc_forecasts(rfc_forecasts_reservoir_data%input)
120         end if
122         if ( ptr_state(4) ) then
123             data_state(4) = test_output_rfc_forecasts(rfc_forecasts_reservoir_data%output)
124         end if
126         ! Test Levelpool Substructures
127         if ( ptr_state(5) ) then
128             data_state(5) = test_rfc_forecasts_levelpool_state(rfc_forecasts_reservoir_data%state)
129         end if
131         if ( ptr_state(6) ) then
132             data_state(6) = test_rfc_forecasts_levelpool_properties(rfc_forecasts_reservoir_data%state)
133         end if
135         if ( ptr_state(7) ) then
136             data_state(7) = test_rfc_forecasts_levelpool_input(rfc_forecasts_reservoir_data%state%levelpool_ptr%input)
137         end if
139         if ( ptr_state(8) ) then
140             data_state(8) = test_rfc_forecasts_levelpool_output(rfc_forecasts_reservoir_data%state%levelpool_ptr%output)
141         end if
143         if ( all(ptr_state) .and. all(data_state) ) then
144             data_info_result = .true.
145             print *, "========================================================================"
146             print *, "All RFC Forecast Reservoir Object Tests Passed"
147             print *, "========================================================================"
149         else
150             data_info_result = .false.
151             print *, "========================================================================"
152             print *, "Not All RFC Forecast Reservoir Object Tests Passed"
153             print *, "========================================================================"
155         end if
157     end function rfc_forecasts_data_info
159     ! Test to see that each member of the input structure is correctly allocated and readable
160     function test_input_rfc_forecasts(o) result(rv)
161         type (reservoir_input), intent(in) :: o
162         logical rv
164         rv = .true.
166         print *, "========================================================================"
167         print *, "Checking the values of the input structure"
168         print *, " "
170         print *, "Checking read on inflow"
171         print *, o%inflow
172         if ( o%inflow .ne. 0.0) then
173             rv = .false.
174             print *, "FAILED"
175         end if
176         print *, " "
178         print *, "Checking read on lateral_inflow"
179         print *, o%lateral_inflow
180         if ( o%lateral_inflow .ne. 0.0) then
181             rv = .false.
182             print *, "FAILED"
183         end if
184         print *, " "
186         print *, "Checking read on previous_timestep_inflow"
187         print *, o%previous_timestep_inflow
188         if ( o%previous_timestep_inflow .ne. 0.0) then
189             rv = .false.
190             print *, "FAILED"
191         end if
192         print *, " "
194     end function test_input_rfc_forecasts
196     ! Test to see that each member of the output structure is correctly allocated and readable
197     function test_output_rfc_forecasts(o) result(rv)
198         type (reservoir_output), intent(in) :: o
199         logical rv
201         rv = .true.
203         print *, "========================================================================"
204         print *, "Checking the values of the output structure"
205         print *, " "
207         print *, "Checking read on outflow"
208         print *, o%outflow
209         if ( o%outflow .ne. 0.0) then
210             rv = .false.
211             print *, "FAILED"
212         end if
213         print *, " "
215     end function test_output_rfc_forecasts
217     ! Test to see that each member of the state structure is correctly allocated and readable
218     function test_rfc_forecasts_state(o) result(rv)
219         type (rfc_forecasts_state_interface), intent(in) :: o
220         logical rv
222         rv = .true.
224         print *, "========================================================================"
225         print *, "Checking the values of the rfc_forecasts state data structure"
226         print *, " "
228         print *, "Checking read on water_elevation"
229         print *, o%water_elevation
230         if ( o%water_elevation .ne. 17.3999996) then
231             rv = .false.
232             print *, "FAILED"
233         end if
234         print *, " "
236     end function test_rfc_forecasts_state
239     ! Test to see that each member of the properties structure is correctly allocated and readable
240     function test_rfc_forecasts_properties(o) result(rv)
241         type (rfc_forecasts_properties_interface), intent(in) :: o
242         logical rv
244         rv = .true.
246         print *, "========================================================================"
247         print *, "Checking the values of the rfc_forecasts properties data structure"
248         print *, " "
250         print *, "Checking read on lake_number"
251         print *, o%lake_number
252         if ( o%lake_number .ne. 3745478) then
253             rv = .false.
254             print *, "FAILED"
255         end if
256         print *, " "
258         print *, "Checking read on rfc_gage_id"
259         print *, o%rfc_gage_id
260         if ( o%rfc_gage_id .ne. "DIEA4") then
261             rv = .false.
262             print *, "FAILED"
263         end if
264         print *, " "
266     end function test_rfc_forecasts_properties
269     ! Levelpool data tests
270     ! Test to see that each member of the levelpool input structure is correctly allocated and readable
271     function test_rfc_forecasts_levelpool_input(o) result(rv)
272         type (reservoir_input), intent(in) :: o
273         logical rv
275         rv = .true.
277         print *, "========================================================================"
278         print *, "Checking the values of the rfc forecasts levelpool input structure"
279         print *, " "
281         print *, "Checking read on inflow"
282         print *, o%inflow
283         if ( o%inflow .ne. 0.0) then
284             rv = .false.
285             print *, "FAILED"
286         end if
287         print *, " "
289         print *, "Checking read on lateral_inflow"
290         print *, o%lateral_inflow
291         if ( o%lateral_inflow .ne. 0.0) then
292             rv = .false.
293             print *, "FAILED"
294         end if
295         print *, " "
297         print *, "Checking read on previous_timestep_inflow"
298         print *, o%previous_timestep_inflow
299         if ( o%previous_timestep_inflow .ne. 0.0) then
300             rv = .false.
301             print *, "FAILED"
302         end if
303         print *, " "
305     end function test_rfc_forecasts_levelpool_input
307     ! Test to see that each member of the levelpool output structure is correctly allocated and readable
308     function test_rfc_forecasts_levelpool_output(o) result(rv)
309         type (reservoir_output), intent(in) :: o
310         logical rv
312         rv = .true.
314         print *, "========================================================================"
315         print *, "Checking the values of the rfc forecasts levelpool output structure"
316         print *, " "
318         print *, "Checking read on outflow"
319         print *, o%outflow
320         if ( o%outflow .ne. 0.0) then
321             rv = .false.
322             print *, "FAILED"
323         end if
324         print *, " "
326     end function test_rfc_forecasts_levelpool_output
328     ! Test to see that each member of the levelpool state structure is correctly allocated and readable
329     function test_rfc_forecasts_levelpool_state(o) result(rv)
330         type (rfc_forecasts_state_interface), intent(in) :: o
331         logical rv
333         rv = .true.
335         print *, "========================================================================"
336         print *, "Checking the values of the rfc forecasts levelpool state data structure"
337         print *, " "
339         print *, "Checking read on water_elevation"
340         print *, o%levelpool_ptr%state%water_elevation
341         if ( o%levelpool_ptr%state%water_elevation .ne. 2.0) then
342             rv = .false.
343             print *, "FAILED"
344         end if
345         print *, " "
347     end function test_rfc_forecasts_levelpool_state
350     ! Test to see that each member of the levelpool properties structure is correctly allocated and readable
351     function test_rfc_forecasts_levelpool_properties(o) result(rv)
352         type (rfc_forecasts_state_interface), intent(in) :: o
353         logical rv
355         rv = .true.
357         print *, "========================================================================"
358         print *, "Checking the values of the rfc forecasts levelpool properties data structure"
359         print *, " "
361         print *, "Checking read on lake_area"
362         print *, o%levelpool_ptr%properties%lake_area
363         if ( o%levelpool_ptr%properties%lake_area .ne. 4.0) then
364             rv = .false.
365             print *, "FAILED"
366         end if
367         print *, " "
369         print *, "Checking read on weir_elevation"
370         print *, o%levelpool_ptr%properties%weir_elevation
371         if ( o%levelpool_ptr%properties%weir_elevation .ne. 6.0) then
372             rv = .false.
373             print *, "FAILED"
374         end if
375         print *, " "
377         print *, "Checking read on weir_coeffecient"
378         print *, o%levelpool_ptr%properties%weir_coeffecient
379         if ( o%levelpool_ptr%properties%weir_coeffecient .ne. 8.0) then
380             rv = .false.
381             print *, "FAILED"
382         end if
383         print *, " "
385         print *, "Checking read on weir_length"
386         print *, o%levelpool_ptr%properties%weir_length
387         if ( o%levelpool_ptr%properties%weir_length .ne. 10.0) then
388             rv = .false.
389             print *, "FAILED"
390         end if
391         print *, " "
393         print *, "Checking read on orifice_elevation"
394         print *, o%levelpool_ptr%properties%orifice_elevation
395         if ( o%levelpool_ptr%properties%orifice_elevation .ne. 12.0) then
396             rv = .false.
397             print *, "FAILED"
398         end if
399         print *, " "
401         print *, "Checking read on orifice_coefficient"
402         print *, o%levelpool_ptr%properties%orifice_coefficient
403         if ( o%levelpool_ptr%properties%orifice_coefficient .ne. 14.0) then
404             rv = .false.
405             print *, "FAILED"
406         end if
407         print *, " "
409         print *, "Checking read on orifice_area"
410         print *, o%levelpool_ptr%properties%orifice_area
411         if ( o%levelpool_ptr%properties%orifice_area .ne. 16.0) then
412             rv = .false.
413             print *, "FAILED"
414         end if
415         print *, " "
417         print *, "Checking read on max_depth"
418         print *, o%levelpool_ptr%properties%max_depth
419         if ( o%levelpool_ptr%properties%max_depth .ne. 18.0) then
420             rv = .false.
421             print *, "FAILED"
422         end if
423         print *, " "
425         print *, "Checking read on lake_number"
426         print *, o%levelpool_ptr%properties%lake_number
427         if ( o%levelpool_ptr%properties%lake_number .ne. 3745478) then
428             rv = .false.
429             print *, "FAILED"
430         end if
431         print *, " "
433     end function test_rfc_forecasts_levelpool_properties
435 end module