37
38
39
44 USE sensor_mod
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "scr17_c.inc"
55#include "com04_c.inc"
56#include "units_c.inc"
57
58
59
60 INTEGER ,INTENT(IN) :: SENS_ID
61 INTEGER ,DIMENSION(LIPART1,*),INTENT(IN) :: IPART
62 CHARACTER(LEN=NCHARTITLE)::TITR
63 TYPE (SENSOR_STR_) :: SENSOR_PTR
64 TYPE (SUBMODEL_DATA) ,DIMENSION(NSUBMOD) :: LSUBMODEL
65 TYPE (SUBSET_) ,DIMENSION(NSUBS) :: SUBSET
66 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
67
68
69
70 INTEGER :: J,ICONST,SENS_TYPE,PART_ID,SUB_ID,PARTN,SUBN,ISELECT,
71 . NPARIS,NPARRS,NVAR
72 my_real :: tdel,tmin,iemin,iemax,kemin,kemax,ietol,ietime,ketol,ketime
73 LOGICAL :: IS_AVAILABLE
74
75
76
77 is_available = .false.
78 sens_type = 14
79 iconst = 0
80
81
82 CALL hm_get_floatv(
'Tdelay' ,tdel ,is_available,lsubmodel,unitab)
83
84 CALL hm_get_intv (
'Part_Id' ,part_id ,is_available,lsubmodel)
85 CALL hm_get_intv (
'Subset_ID' ,sub_id ,is_available,lsubmodel)
86 CALL hm_get_intv (
'Iselect' ,iselect ,is_available,lsubmodel)
87
88 CALL hm_get_floatv(
'IEmin' ,iemin ,is_available,lsubmodel,unitab)
89 CALL hm_get_floatv(
'IEmax' ,iemax ,is_available,lsubmodel,unitab)
90 CALL hm_get_floatv(
'KEmin' ,kemin ,is_available,lsubmodel,unitab)
91 CALL hm_get_floatv(
'KEmax' ,kemax ,is_available,lsubmodel,unitab)
92 CALL hm_get_floatv(
'Tmin' ,tmin ,is_available,lsubmodel,unitab)
93
94 CALL hm_get_floatv(
'IEtol' ,ietol ,is_available,lsubmodel,unitab)
95 CALL hm_get_floatv(
'IEtime' ,ietime ,is_available,lsubmodel,unitab)
96 CALL hm_get_floatv(
'KEtol' ,ketol ,is_available,lsubmodel,unitab)
97 CALL hm_get_floatv(
'KEtime' ,ketime ,is_available,lsubmodel,unitab)
98
99
100
101 IF (ietol > zero .and. ietime > zero .or. ketol > zero .and. ketime > zero) THEN
102 iconst = 1
103 END IF
104 IF (iemax == zero) iemax = infinity
105 IF (kemax == zero) kemax = infinity
106 IF (iemin == zero) iemin =-infinity
107 IF (kemin == zero) kemin =-infinity
108 IF (ietime == zero) ietime = infinity
109 IF (ketime == zero) ketime = infinity
110 IF (iselect == 0) iselect= 1 ! sum of part energy by default
111
112
113
114 partn = 0
115 subn = 0
116 is_available = .false.
117 DO j=1,npart
118 IF (ipart(4,j) == part_id) THEN
119 is_available = .true.
120 partn = j
121 EXIT
122 ENDIF
123 ENDDO
124 IF (.NOT. is_available) THEN
125 part_id = 0
126 ELSE
127 sub_id = 0
128 ENDIF
129
130 IF (.NOT. is_available) THEN
131 DO j=1,nsubs-1
132 IF (subset(j)%ID == sub_id) THEN
133 is_available = .true.
134 subn = j
135 EXIT
136 ENDIF
137 ENDDO
138 IF (.NOT. is_available) sub_id = 0
139 ENDIF
140
141 IF (.NOT. is_available .and. iselect == 1) THEN
142
143 sub_id = subset(nsubs)%ID
144 subn = nsubs
145 ELSE IF (is_available) THEN
146 iselect = 1
147 ENDIF
148
149 WRITE (iout, 1000) sens_id,tdel
150 IF (iselect == 2) THEN
151 WRITE (iout, 2400)
152 ELSE IF (part_id > 0) THEN
153 WRITE (iout, 2100) part_id
154 ELSE IF (sub_id > 0) THEN
155 WRITE (iout, 2200) sub_id
156 ELSE
157 WRITE (iout, 2300)
158 END IF
159 WRITE (iout ,3000) iemin,iemax,kemin,kemax,
160 . ietol,ketol,tmin,ietime,ketime
161
162 IF (ietime == infinity) THEN
163 ietime = zero
164 ietol = zero
165 END IF
166 IF (ketime == infinity) THEN
167 ketime = zero
168 ketol = zero
169 END IF
170
171
172
173 nparis = 4
174 nparrs = 8
175 IF (iselect == 2) THEN
177 ELSE
179 END IF
180
181 ALLOCATE (sensor_ptr%IPARAM(nparis))
182 ALLOCATE (sensor_ptr%RPARAM(nparrs))
183 ALLOCATE (sensor_ptr%VAR(
nvar))
184 sensor_ptr%VAR(:) = zero
185
186 sensor_ptr%NVAR =
nvar
187 sensor_ptr%NPARI = nparis
188 sensor_ptr%NPARR = nparrs
189 sensor_ptr%TYPE = sens_type
190 sensor_ptr%SENS_ID = sens_id
191 sensor_ptr%STATUS = 0
192 sensor_ptr%TSTART = infinity
193 sensor_ptr%TCRIT = infinity
194 sensor_ptr%TMIN = tmin
195 sensor_ptr%TDELAY = tdel
196 sensor_ptr%VALUE = zero
197
198 sensor_ptr%IPARAM(1) = partn
199 sensor_ptr%IPARAM(2) = subn
200 sensor_ptr%IPARAM(3) = iconst
201 sensor_ptr%IPARAM(4) = iselect
202
203 sensor_ptr%RPARAM(1) = iemin
204 sensor_ptr%RPARAM(2) = iemax
205 sensor_ptr%RPARAM(3) = kemin
206 sensor_ptr%RPARAM(4) = kemax
207 sensor_ptr%RPARAM(5) = ietol
208 sensor_ptr%RPARAM(6) = ketol
209 sensor_ptr%RPARAM(7) = ietime
210 sensor_ptr%RPARAM(8) = ketime
211
212 1000 FORMAT(
213 . 5x,' SENSOR TYPE 14: PART ENERGY '/,
214 . 5x,' --------------------------- '/,
215 . 5x,'SENSOR ID. . . . . . . . . . . . . . . . . =',i10/
216 . 5x,'TIME DELAY BEFORE ACTIVATION . . . . . . . =',e12.4)
217 2100 FORMAT(
218 . 5x,' PART ID. . . . . . . . . . . . . . . . . =',i10)
219 2200 FORMAT(
220 . 5x,' SUBSET ID. . . . . . . . . . . . . . . . =',i10)
221 2300 FORMAT(
222 . 5x,' GLOBAL SUBSET ENERGY (ALL PARTS) . . . . .')
223 2400 FORMAT(
224 . 5x,' TOTAL SYSTEM ENERGY (ENTIRE MODEL) . . . .')
225 3000 FORMAT(
226 . 5x,' MINIMUM INTERNAL ENERGY. . . . . . . . . =',e12.4/
227 . 5x,' MAXIMUM INTERNAL ENERGY. . . . . . . . . =',e12.4/
228 . 5x,' MINIMUM KINETIC ENERGY . . . . . . . . . =',e12.4/
229 . 5x,' MAXIMUM KINETIC ENERGY . . . . . . . . . =',e12.4/
230 . 5x,' TOLERANCE OF CONSTANT INTERNAL ENERGY. . =',e12.4/
231 . 5x,' TOLERANCE OF CONSTANT KINETIC ENERGY . . =',e12.4/
232 . 5x,' DURATION LIMIT OF MAX/MIN ENERGY . . . . =',e12.4/
233 . 5x,' DURATION LIMIT OF CONSTANT INT ENERGY. . =',e12.4/
234 . 5x,' DURATION LIMIT OF CONSTANT KIN ENERGY. . =',e12.4//)
235
236 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
integer, parameter nchartitle
integer function nvar(text)