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