ETS-Core  version:0.0.4-46-ge2d8
Core actors for the ETS-6
 All Classes Files Functions Variables Pages
validation.f90
Go to the documentation of this file.
1 
6 module validation
7 
8  use ids_types, only: ids_real, ids_int, ids_int_invalid, ids_real_invalid, ids_is_valid, ids_string_length
9 
10  implicit none
11 
15  interface is_valid
16  module procedure &
17  valid_int_0d, &
18  valid_int_1d, &
19  valid_int_2d, &
20  valid_int_3d, &
21  valid_real_0d, &
22  valid_real_1d, &
23  valid_real_2d, &
24  valid_real_3d, &
25  valid_real_4d, &
27  end interface is_valid
28 
32  interface is_valid_pointer
33  module procedure &
44  end interface is_valid_pointer
45 
50  module procedure &
61  end interface is_valid_allocatable
62 
63  private
64 
65  public is_valid
66  public is_valid_pointer
68 
69  real(ids_real), parameter :: ids_int_huge = huge(1_ids_int)
70  real(ids_real), parameter :: ids_real_huge = huge(1.0_ids_real)
71 
72 contains
73 
74  !===============================================================
75  ! Scalars
76  !===============================================================
77 
78  function valid_int_0d(val) result(out)
79  logical :: out
80  integer(ids_int) :: val
81  out = ids_is_valid( val ) .and. (abs(val) < ids_real_huge) .and. (val==val)
82  end function valid_int_0d
83 
84  function valid_real_0d(val) result(out)
85  logical :: out
86  real(ids_real) :: val
87  out = ids_is_valid( val ) .and. (abs(val) < ids_real_huge) .and. (val==val)
88  end function valid_real_0d
89 
90  !===============================================================
91  ! Arrays, integer
92  !===============================================================
93 
94  function valid_int_1d(arr) result(out)
95  logical :: out
96  integer(ids_int), intent(in) :: arr(:)
97  integer(ids_int) :: val
98  val = minval(arr)
99  out = valid_int_0d( val )
100  end function valid_int_1d
101 
102  function valid_int_2d(arr) result(out)
103  logical :: out
104  integer(ids_int), intent(in) :: arr(:,:)
105  integer(ids_int) :: val
106  val = minval(arr)
107  out = valid_int_0d( val )
108  end function valid_int_2d
109 
110  function valid_int_3d(arr) result(out)
111  logical :: out
112  integer(ids_int), intent(in) :: arr(:,:,:)
113  integer(ids_int) :: val
114  val = minval(arr)
115  out = valid_int_0d( val )
116  end function valid_int_3d
117 
118  !===============================================================
119  ! Arrays, real
120  !===============================================================
121 
122  function valid_real_1d(arr) result(out)
123  logical :: out
124  real(ids_real), intent(in) :: arr(:)
125  real(ids_real) :: val
126  val = minval(arr)
127  out = valid_real_0d( val )
128  end function valid_real_1d
129 
130  function valid_real_2d(arr) result(out)
131  logical :: out
132  real(ids_real), intent(in) :: arr(:,:)
133  real(ids_real) :: val
134  val = minval(arr)
135  out = valid_real_0d( val )
136  end function valid_real_2d
137 
138  function valid_real_3d(arr) result(out)
139  logical :: out
140  real(ids_real), intent(in) :: arr(:,:,:)
141  real(ids_real) :: val
142  val = minval(arr)
143  out = valid_real_0d( val )
144  end function valid_real_3d
145 
146  function valid_real_4d(arr) result(out)
147  logical :: out
148  real(ids_real), intent(in) :: arr(:,:,:,:)
149  real(ids_real) :: val
150  val = minval(arr)
151  out = valid_real_0d( val )
152  end function valid_real_4d
153 
154  function valid_real_5d(arr) result(out)
155  logical :: out
156  real(ids_real), intent(in) :: arr(:,:,:,:,:)
157  real(ids_real) :: val
158  val = minval(arr)
159  out = valid_real_0d( val )
160  end function valid_real_5d
161 
162  !===============================================================
163  ! Pointers, integers
164  !===============================================================
165 
166  function valid_int_0d_pointer(arr) result(out)
167  integer(ids_int), pointer :: arr
168  logical :: out
169  if (.not. associated(arr)) then
170  out = .false.
171  return
172  end if
173  out = is_valid(arr)
174  end function valid_int_0d_pointer
175 
176  function valid_int_1d_pointer(arr) result(out)
177  integer(ids_int), pointer :: arr(:)
178  logical :: out
179  if (.not. associated(arr)) then
180  out = .false.
181  return
182  end if
183  out = is_valid(arr)
184  end function valid_int_1d_pointer
185 
186  function valid_int_2d_pointer(arr) result(out)
187  integer(ids_int), pointer :: arr(:,:)
188  logical :: out
189  if (.not. associated(arr)) then
190  out = .false.
191  return
192  end if
193  out = is_valid(arr)
194  end function valid_int_2d_pointer
195 
196  function valid_int_3d_pointer(arr) result(out)
197  integer(ids_int), pointer :: arr(:,:,:)
198  logical :: out
199  if (.not. associated(arr)) then
200  out = .false.
201  return
202  end if
203  out = is_valid(arr)
204  end function valid_int_3d_pointer
205 
206  !===============================================================
207  ! Pointers, real
208  !===============================================================
209 
210  function valid_real_0d_pointer(arr) result(out)
211  real(ids_real), pointer :: arr
212  logical :: out
213  if (.not. associated(arr)) then
214  out = .false.
215  return
216  end if
217  out = is_valid(arr)
218  end function valid_real_0d_pointer
219 
220  function valid_real_1d_pointer(arr) result(out)
221  real(ids_real), pointer :: arr(:)
222  logical :: out
223  if (.not. associated(arr)) then
224  out = .false.
225  return
226  end if
227  out = is_valid(arr)
228  end function valid_real_1d_pointer
229 
230  function valid_real_2d_pointer(arr) result(out)
231  real(ids_real), pointer :: arr(:,:)
232  logical :: out
233  if (.not. associated(arr)) then
234  out = .false.
235  return
236  end if
237  out = is_valid(arr)
238  end function valid_real_2d_pointer
239 
240  function valid_real_3d_pointer(arr) result(out)
241  real(ids_real), pointer :: arr(:,:,:)
242  logical :: out
243  if (.not. associated(arr)) then
244  out = .false.
245  return
246  end if
247  out = is_valid(arr)
248  end function valid_real_3d_pointer
249 
250  function valid_real_4d_pointer(arr) result(out)
251  real(ids_real), pointer :: arr(:,:,:,:)
252  logical :: out
253  if (.not. associated(arr)) then
254  out = .false.
255  return
256  end if
257  out = is_valid(arr)
258  end function valid_real_4d_pointer
259 
260  function valid_real_5d_pointer(arr) result(out)
261  real(ids_real), pointer :: arr(:,:,:,:,:)
262  logical :: out
263  if (.not. associated(arr)) then
264  out = .false.
265  return
266  end if
267  out = is_valid(arr)
268  end function valid_real_5d_pointer
269 
270 
271  !===============================================================
272  ! Allocatables, integers
273  !===============================================================
274 
275  function valid_int_0d_allocatable(arr) result(out)
276  integer(ids_int), allocatable :: arr
277  logical :: out
278  if (.not. allocated(arr)) then
279  out = .false.
280  return
281  end if
282  out = is_valid(arr)
283  end function valid_int_0d_allocatable
284 
285  function valid_int_1d_allocatable(arr) result(out)
286  integer(ids_int), allocatable :: arr(:)
287  logical :: out
288  if (.not. allocated(arr)) then
289  out = .false.
290  return
291  end if
292  out = is_valid(arr)
293  end function valid_int_1d_allocatable
294 
295  function valid_int_2d_allocatable(arr) result(out)
296  integer(ids_int), allocatable :: arr(:,:)
297  logical :: out
298  if (.not. allocated(arr)) then
299  out = .false.
300  return
301  end if
302  out = is_valid(arr)
303  end function valid_int_2d_allocatable
304 
305  function valid_int_3d_allocatable(arr) result(out)
306  integer(ids_int), allocatable :: arr(:,:,:)
307  logical :: out
308  if (.not. allocated(arr)) then
309  out = .false.
310  return
311  end if
312  out = is_valid(arr)
313  end function valid_int_3d_allocatable
314 
315  !===============================================================
316  ! Allocatables, real
317  !===============================================================
318 
319  function valid_real_0d_allocatable(arr) result(out)
320  real(ids_real), allocatable :: arr
321  logical :: out
322  if (.not. allocated(arr)) then
323  out = .false.
324  return
325  end if
326  out = is_valid(arr)
327  end function valid_real_0d_allocatable
328 
329  function valid_real_1d_allocatable(arr) result(out)
330  real(ids_real), allocatable :: arr(:)
331  logical :: out
332  if (.not. allocated(arr)) then
333  out = .false.
334  return
335  end if
336  out = is_valid(arr)
337  end function valid_real_1d_allocatable
338 
339  function valid_real_2d_allocatable(arr) result(out)
340  real(ids_real), allocatable :: arr(:,:)
341  logical :: out
342  if (.not. allocated(arr)) then
343  out = .false.
344  return
345  end if
346  out = is_valid(arr)
347  end function valid_real_2d_allocatable
348 
349  function valid_real_3d_allocatable(arr) result(out)
350  real(ids_real), allocatable :: arr(:,:,:)
351  logical :: out
352  if (.not. allocated(arr)) then
353  out = .false.
354  return
355  end if
356  out = is_valid(arr)
357  end function valid_real_3d_allocatable
358 
359  function valid_real_4d_allocatable(arr) result(out)
360  real(ids_real), allocatable :: arr(:,:,:,:)
361  logical :: out
362  if (.not. allocated(arr)) then
363  out = .false.
364  return
365  end if
366  out = is_valid(arr)
367  end function valid_real_4d_allocatable
368 
369  function valid_real_5d_allocatable(arr) result(out)
370  real(ids_real), allocatable :: arr(:,:,:,:,:)
371  logical :: out
372  if (.not. allocated(arr)) then
373  out = .false.
374  return
375  end if
376  out = is_valid(arr)
377  end function valid_real_5d_allocatable
378 
379 end module validation
logical function valid_real_4d(arr)
Definition: validation.f90:146
logical function valid_int_1d(arr)
Definition: validation.f90:94
logical function valid_real_5d_allocatable(arr)
Definition: validation.f90:369
logical function valid_real_2d_pointer(arr)
Definition: validation.f90:230
logical function valid_int_2d_allocatable(arr)
Definition: validation.f90:295
logical function valid_int_0d(val)
Definition: validation.f90:78
logical function valid_real_3d_pointer(arr)
Definition: validation.f90:240
logical function valid_int_0d_allocatable(arr)
Definition: validation.f90:275
Determines of the input argument is valid. Here an argument is valid if the value, or for arrays all values, are valid. The non-valid values are: NaN, Inf, -Inf, ids_int_invalid and ids_real_invalid.
Definition: validation.f90:15
logical function valid_int_1d_pointer(arr)
Definition: validation.f90:176
logical function valid_real_3d(arr)
Definition: validation.f90:138
logical function valid_real_2d_allocatable(arr)
Definition: validation.f90:339
logical function valid_int_1d_allocatable(arr)
Definition: validation.f90:285
logical function valid_real_5d(arr)
Definition: validation.f90:154
logical function valid_int_3d(arr)
Definition: validation.f90:110
logical function valid_int_2d_pointer(arr)
Definition: validation.f90:186
logical function valid_real_1d_pointer(arr)
Definition: validation.f90:220
logical function valid_real_0d_pointer(arr)
Definition: validation.f90:210
logical function valid_real_1d(arr)
Definition: validation.f90:122
logical function valid_int_3d_allocatable(arr)
Definition: validation.f90:305
logical function valid_int_0d_pointer(arr)
Definition: validation.f90:166
logical function valid_int_2d(arr)
Definition: validation.f90:102
Functions for validating scalars and arrays for integers and reals. Three functions are provided for ...
Definition: validation.f90:6
logical function valid_real_2d(arr)
Definition: validation.f90:130
logical function valid_int_3d_pointer(arr)
Definition: validation.f90:196
Determines of the allocatable input argument is valid. Here an argument is valid if it is allocated a...
Definition: validation.f90:49
logical function valid_real_5d_pointer(arr)
Definition: validation.f90:260
logical function valid_real_4d_allocatable(arr)
Definition: validation.f90:359
logical function valid_real_0d(val)
Definition: validation.f90:84
logical function valid_real_0d_allocatable(arr)
Definition: validation.f90:319
logical function valid_real_4d_pointer(arr)
Definition: validation.f90:250
Determines of the pointer input argument is valid. Here an argument is valid if it is associated and ...
Definition: validation.f90:32
logical function valid_real_3d_allocatable(arr)
Definition: validation.f90:349
logical function valid_real_1d_allocatable(arr)
Definition: validation.f90:329