libsim  Versione7.2.6
optional_values.f90
1 ! Copyright (C) 2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
2 ! authors:
3 ! Davide Cesari <dcesari@arpa.emr.it>
4 ! Paolo Patruno <ppatruno@arpa.emr.it>
5 
6 ! This program is free software; you can redistribute it and/or
7 ! modify it under the terms of the GNU General Public License as
8 ! published by the Free Software Foundation; either version 2 of
9 ! the License, or (at your option) any later version.
10 
11 ! This program is distributed in the hope that it will be useful,
12 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ! GNU General Public License for more details.
15 
16 ! You should have received a copy of the GNU General Public License
17 ! along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
30 IMPLICIT NONE
31 
36 INTERFACE optio
37  MODULE PROCEDURE soptio_b, soptio_s, soptio_l, soptio_r, soptio_d, &
38  soptio_c, soptio_log
39 END INTERFACE
40 
41 PRIVATE
42 PUBLIC optio, &
43  optio_b, optio_s, optio_i, optio_l, optio_r, optio_d, optio_c, optio_log, &
44  soptio_b, soptio_s, soptio_l, soptio_r, soptio_d, soptio_c, soptio_log
45 
46 CONTAINS
47 
48 ! Functions
49 
51 ELEMENTAL INTEGER(kind=int_b) FUNCTION optio_b(var)
52 INTEGER(kind=int_b),INTENT(in),OPTIONAL :: var
53 
54 if (present(var))then
55  optio_b=var
56 else
57  optio_b=ibmiss
58 end if
59 
60 END FUNCTION optio_b
61 
63 ELEMENTAL INTEGER(kind=int_s) FUNCTION optio_s(var)
64 INTEGER(kind=int_s),INTENT(in),OPTIONAL :: var
65 
66 if (present(var))then
67  optio_s=var
68 else
69  optio_s=ismiss
70 end if
71 
72 END FUNCTION optio_s
73 
75 ELEMENTAL INTEGER(kind=int_l) FUNCTION optio_i(var)
76 INTEGER(kind=int_l),INTENT(in),OPTIONAL :: var
77 
78 if (present(var))then
79  optio_i=var
80 else
81  optio_i=imiss
82 end if
83 
84 END FUNCTION optio_i
85 
87 ELEMENTAL INTEGER(kind=int_l) FUNCTION optio_l(var)
88 INTEGER(kind=int_l),INTENT(in),OPTIONAL :: var
89 
90 if (present(var))then
91  optio_l=var
92 else
93  optio_l=ilmiss
94 end if
95 
96 END FUNCTION optio_l
97 
99 ELEMENTAL REAL FUNCTION optio_r(var)
100 REAL,INTENT(in),OPTIONAL :: var
101 
102 if (present(var))then
103  optio_r=var
104 else
105  optio_r=rmiss
106 end if
107 
108 END FUNCTION optio_r
109 
111 ELEMENTAL DOUBLE PRECISION FUNCTION optio_d(var)
112 DOUBLE PRECISION,INTENT(in),OPTIONAL :: var
113 
114 if (present(var))then
115  optio_d=var
116 else
117  optio_d=rdmiss
118 end if
119 
120 END FUNCTION optio_d
121 
124 FUNCTION optio_c(var,len) RESULT(char)
125 CHARACTER (len=*),INTENT(in),OPTIONAL :: var
126 INTEGER,INTENT(in) :: len
127 
128 CHARACTER(len=len) :: char
129 
130 if (present(var))then
131  char=var
132 else
133  char=cmiss
134 end if
135 
136 END FUNCTION optio_c
137 
139 ELEMENTAL LOGICAL FUNCTION optio_log(var)
140 LOGICAL,INTENT(in),OPTIONAL :: var
141 
142 if (present(var))then
143  optio_log=var
144 else
145  optio_log=.false.
146 end if
147 
148 END FUNCTION optio_log
149 
150 
151 ! Subroutines
152 
155 ELEMENTAL SUBROUTINE soptio_b(var,optio_b)
156 INTEGER(kind=int_b),INTENT(in),OPTIONAL :: var
157 INTEGER(kind=int_b),INTENT(out) :: optio_b
158 
159 if (present(var))then
160  optio_b=var
161 else
162  optio_b=ibmiss
163 end if
164 
165 END SUBROUTINE soptio_b
166 
169 ELEMENTAL SUBROUTINE soptio_s(var,optio_s)
170 INTEGER(kind=int_s),INTENT(in),OPTIONAL :: var
171 INTEGER(kind=int_s),INTENT(out) :: optio_s
172 
173 if (present(var))then
174  optio_s=var
175 else
176  optio_s=ismiss
177 end if
178 
179 END SUBROUTINE soptio_s
180 
183 ELEMENTAL SUBROUTINE soptio_l(var,optio_l)
184 INTEGER(kind=int_l),INTENT(in),OPTIONAL :: var
185 INTEGER(kind=int_l),INTENT(out) :: optio_l
186 
187 if (present(var))then
188  optio_l=var
189 else
190  optio_l=ilmiss
191 end if
192 
193 END SUBROUTINE soptio_l
194 
197 ELEMENTAL SUBROUTINE soptio_r(var,optio_r)
198 REAL,INTENT(in),OPTIONAL :: var
199 REAL,INTENT(out) :: optio_r
200 
201 if (present(var))then
202  optio_r=var
203 else
204  optio_r=rmiss
205 end if
206 
207 END SUBROUTINE soptio_r
208 
211 ELEMENTAL SUBROUTINE soptio_d(var,optio_d)
212 DOUBLE PRECISION,INTENT(in),OPTIONAL :: var
213 DOUBLE PRECISION,INTENT(out) :: optio_d
214 
215 if (present(var))then
216  optio_d=var
217 else
218  optio_d=rdmiss
219 end if
220 
221 END SUBROUTINE soptio_d
222 
223 
226 ELEMENTAL SUBROUTINE soptio_c(var,optio_c)
227 CHARACTER (len=*),INTENT(in),OPTIONAL :: var
228 CHARACTER (len=*),INTENT(out) :: optio_c
229 
230 if (present(var))then
231  optio_c=var
232 else
233  optio_c=cmiss
234 end if
235 
236 END SUBROUTINE soptio_c
237 
240 ELEMENTAL SUBROUTINE soptio_log(var,optio_log)
241 LOGICAL,INTENT(in),OPTIONAL :: var
242 LOGICAL,INTENT(out) :: optio_log
243 
244 if (present(var))then
245  optio_log=var
246 else
247  optio_log=.false.
248 end if
249 
250 END SUBROUTINE soptio_log
251 
252 
253 END MODULE optional_values
254 
Module for quickly interpreting the OPTIONAL parameters passed to a subprogram.
Generic subroutine for checking OPTIONAL parameters.
Definitions of constants and functions for working with missing values.

Generated with Doxygen.