415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436 use, INTRINSIC :: iso_c_binding, only: c_bool
440
441
442
443#include "implicit_f.inc"
444
445
446
447
448
449
450
451 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
452 CHARACTER*(*),INTENT(IN) :: NAME
453 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
454
456 LOGICAL,INTENT(OUT) :: IS_AVAILABLE
457
458
459
460 INTEGER :: J,SUB_ID,IFLAGUNIT,UID
461 my_real :: fac_l,fac_m,fac_t,fac
462 real*8 :: dval,length_dim,mass_dim,time_dim
463 LOGICAL(KIND=C_BOOL) :: C_IS_AVAILABLE
464
465 c_is_available = .false.
466 length_dim = zero
467 mass_dim = zero
468 time_dim = zero
469 fac = one
470
471 CALL cpp_get_floatv_floatd(name(1:len_trim(name)),len_trim(name),dval,c_is_available,
472 . length_dim,mass_dim,time_dim,uid,sub_id)
473 is_available = c_is_available
474
475
476
477 IF(sub_id /= 0 .AND. uid == 0)THEN
478 IF(lsubmodel(sub_id)%UID /= 0)THEN
479 uid = lsubmodel(sub_id)%UID
480 ENDIF
481 ENDIF
482
483
484
485 iflagunit = 0
486 fac_m = zero
487 fac_l = zero
488 fac_t = zero
489 DO j=1,unitab%NUNITS
490 IF (unitab%UNIT_ID(j) == uid) THEN
491 fac_m = unitab%FAC_M(j)
492 fac_l = unitab%FAC_L(j)
493 fac_t = unitab%FAC_T(j)
494 iflagunit = 1
495 EXIT
496 ENDIF
497 ENDDO
498 IF (fac_m /= zero) fac = fac * (fac_m ** mass_dim )
499 IF (fac_l /= zero) fac = fac * (fac_l ** length_dim)
500 IF (fac_t /= zero) fac = fac * (fac_t ** time_dim )
501
502 rval = dval * fac
503
504
505 RETURN
506