36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 use, INTRINSIC :: iso_c_binding, only: c_bool
63
64
65
66#include "implicit_f.inc"
67
68
69
70
71
72
73
74 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
75 INTEGER,INTENT(IN)::INDEX1,INDEX2
76 CHARACTER*(*),INTENT(IN)::NAME
77 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
78
80 . INTENT(OUT)::rval
81 LOGICAL,INTENT(OUT)::IS_AVAILABLE
82
83
84
85 INTEGER :: I,J,VALUE_TYPE,SUB_ID,IFLAGUNIT,UID
86 my_real :: fac_l,fac_m,fac_t,fac
87 real*8 dval,length_dim,mass_dim,time_dim
88 LOGICAL(KIND=C_BOOL) C_IS_AVAILABLE
89
90 c_is_available = .false.
91 length_dim = zero
92 mass_dim = zero
93 time_dim = zero
94 fac = one
95
96 CALL cpp_get_floatv_2index(name(1:len_trim(name)),len_trim(name),dval,index1,c_is_available,
97 . length_dim,mass_dim,time_dim,uid,sub_id,index2)
98 is_available = c_is_available
99
100
101
102 IF(sub_id /= 0 .AND. uid == 0)THEN
103 IF(lsubmodel(sub_id)%UID /= 0)THEN
104 uid = lsubmodel(sub_id)%UID
105 ENDIF
106 ENDIF
107
108
109
110 iflagunit = 0
111 fac_m = zero
112 fac_l = zero
113 fac_t = zero
114 DO j=1,unitab%NUNITS
115 IF (unitab%UNIT_ID(j) == uid) THEN
116 fac_m = unitab%FAC_M(j)
117 fac_l = unitab%FAC_L(j)
118 fac_t = unitab%FAC_T(j)
119 iflagunit = 1
120 EXIT
121 ENDIF
122 ENDDO
123 IF (fac_m /= zero) fac = fac * (fac_m ** mass_dim )
124 IF (fac_l /= zero) fac = fac * (fac_l ** length_dim)
125 IF (fac_t /= zero) fac = fac * (fac_t ** time_dim )
126
127 rval = dval * fac
128
129 RETURN
130