161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
185 use, INTRINSIC :: iso_c_binding, only: c_bool
186
187
188
189
190#include "implicit_f.inc"
191
192
193
194
195
196
197
198 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
199 CHARACTER*(*),INTENT(IN)::
200 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
201
203 . INTENT(OUT)::dim_fac
204 LOGICAL,INTENT(OUT)::IS_AVAILABLE
205
206
207
208 INTEGER :: J,SUB_ID,IFLAGUNIT,UID
209 my_real :: fac_l,fac_m,fac_t,fac
210 real*8 :: dval,length_dim,mass_dim,time_dim
211 LOGICAL(KIND=C_BOOL) :: C_IS_AVAILABLE
212
213
214 c_is_available = .false.
215 length_dim = zero
216 mass_dim = zero
217 time_dim = zero
218 fac = one
219
220 CALL cpp_get_floatv_floatd(name(1:len_trim(name)),len_trim(name),dval,c_is_available,
221 . length_dim,mass_dim,time_dim,uid,sub_id)
222 is_available = c_is_available
223
224
225
226 IF(sub_id /= 0 .AND. uid == 0)THEN
227 IF(lsubmodel(sub_id)%UID /= 0)THEN
228 uid = lsubmodel(sub_id)%UID
229 ENDIF
230 ENDIF
231
232
233
234 iflagunit = 0
235 fac_m = zero
236 fac_l = zero
237 fac_t = zero
238 DO j=1,unitab%NUNITS
239 IF (unitab%UNIT_ID(j) == uid) THEN
240 fac_m = unitab%FAC_M(j)
241 fac_l = unitab%FAC_L(j)
242 fac_t = unitab%FAC_T(j)
243 iflagunit = 1
244 EXIT
245 ENDIF
246 ENDDO
247 IF (fac_m /= zero) fac = fac * (fac_m ** mass_dim )
248 IF (fac_l /= zero) fac = fac * (fac_l ** length_dim)
249 IF (fac_t /= zero) fac = fac * (fac_t ** time_dim )
250
251 dim_fac = fac
252
253
254 RETURN
255