47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 use, INTRINSIC :: iso_c_binding, only: c_bool
73
74
75
76#include "implicit_f.inc"
77
78
79
80
81
82
83
84 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
85 INTEGER,INTENT(IN)::INDEX
86 CHARACTER*(*),INTENT(IN)::NAME
87 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
88
90 LOGICAL,INTENT(OUT) :: IS_AVAILABLE
91
92
93
94 INTEGER :: J,SUB_ID,IFLAGUNIT,UID
95 my_real :: fac_l,fac_m,fac_t,fac
96 real*8 :: dval,length_dim,mass_dim,time_dim
97 LOGICAL(KIND=C_BOOL) :: C_IS_AVAILABLE
98
99 c_is_available = .false.
100 length_dim = zero
101 mass_dim = zero
102 time_dim = zero
103 fac = one
104
105 CALL cpp_get_floatv_floatd_index(name(1:len_trim(name)),len_trim(name),dval,index,c_is_available,
106 . length_dim,mass_dim,time_dim,uid,sub_id)
107 is_available = c_is_available
108
109
110
111 IF(sub_id /= 0 .AND. uid == 0)THEN
112 IF(lsubmodel(sub_id)%UID /= 0)THEN
113 uid = lsubmodel(sub_id)%UID
114 ENDIF
115 ENDIF
116
117
118
119 iflagunit = 0
120 fac_m = zero
121 fac_l = zero
122 fac_t = zero
123 DO j=1,unitab%NUNITS
124 IF (unitab%UNIT_ID(j) == uid) THEN
125 fac_m = unitab%FAC_M(j)
126 fac_l = unitab%FAC_L(j)
127 fac_t = unitab%FAC_T(j)
128 iflagunit = 1
129 EXIT
130 ENDIF
131 ENDDO
132 IF (fac_m /= zero) fac = fac * (fac_m ** mass_dim )
133 IF (fac_l /= zero) fac = fac * (fac_l ** length_dim)
134 IF (fac_t /= zero) fac = fac * (fac_t ** time_dim )
135
136 dim_fac = fac
137
138 RETURN
139