45
46
47
51 USE sensor_mod
53 USE format_mod ,ONLY : fmt_f
54 USE reader_old_mod , ONLY : key0, kcur, kline, line
55 USE user_interface_mod,only : ksens_cur
56
57
58
59#include "implicit_f.inc"
60
61
62
63#include "scr17_c.inc"
64#include "units_c.inc"
65#include "scr15_c.inc"
66#include "userlib.inc"
67
68
69
70 INTEGER ,INTENT(IN) :: HM_NSENSOR,UNIT_ID ,SENS_ID,ISEN
71 CHARACTER(LEN=ncharkey) :: KEY
72 CHARACTER(LEN=nchartitle) :: TITLE
73 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
74 TYPE (SUBMODEL_DATA) ,DIMENSION(NSUBMOD) :: LSUBMODEL
75 TYPE (SENSOR_STR_) ,INTENT(OUT) :: SENSOR_PTR
76 TYPE(sensor_user_struct_), INTENT(INOUT) :: SENSOR_USER_STRUCT
77
78
79
80 INTEGER USR2SYS
81
82
83
84 INTEGER I,J,TYP
86 LOGICAL :: IS_AVAILABLE
87 LOGICAL :: ALREADY_DONE
88 INTEGER NLINES
89 CHARACTER(LEN=ncharline) :: RLINE
90 CHARACTER (LEN=4) :: CSENS
91 CHARACTER(LEN=4096) :: SCR_FILE_NAME
92 INTEGER SCR_FILE_NAME_LEN
93
94 CHARACTER(LEN=NCHARLINE) :: IUSER_KEY
95 CHARACTER OPTION*256
96 INTEGER SIZE
97
98
99
100 ksens_cur = isen
101
102 IF(key(1:5) == 'USER1')THEN
103 typ=29
104 ELSEIF(key(1:5) == 'USER2')THEN
105 typ=30
106 ELSEIF(key(1:5) == 'USER3')THEN
107 typ=31
108 ELSE
110 . anmode=aninfo,
111 . msgtype=msgerror,
112 . c2=key(1:len_trim(key)),
113 . i1=sens_id,
114 . c1=title)
115 ENDIF
116
117 is_available = .false.
118 already_done = .false.
119
120 iuser_key = key(1:len_trim(key))
121 IF (userl_avail == 0)THEN
122
123 option='/SENSOR/'//iuser_key
124 size=len_trim(option)
126 . msgtype=msgerror,c1=option(1:size),anmode=aninfo)
128 ENDIF
129
130
131
132 CALL hm_get_intv (
'Number_of_datalines' ,nlines ,is_available, lsubmodel)
133
134 IF (nlines > 1) THEN
135
136
137 IF ((typ>28.AND.typ<38).AND. .NOT.(already_done) )
CALL sensor_user_alloc(already_done,sensor_user_struct)
138
139
140 IF (typ>=29.AND.typ<=31) THEN
141
142
143
144
145
146
147 sensor_ptr%NPARI = 0
148 sensor_ptr%NPARR = 0
149 sensor_ptr%NVAR = 0
150 ALLOCATE(sensor_ptr%IPARAM(sensor_ptr%NPARI))
151 ALLOCATE(sensor_ptr%RPARAM(sensor_ptr%NPARR))
152 ALLOCATE(sensor_ptr%VAR(sensor_ptr%NVAR))
153
154 ALLOCATE(sensor_ptr%INTEGER_USERBUF(isenbuf))
155 ALLOCATE(sensor_ptr%FLOAT_USERBUF(lsenbuf))
156
157 ALLOCATE(sensor_ptr%INTEGER_USERPARAM(nsenpari))
158 ALLOCATE(sensor_ptr%FLOAT_USERPARAM(nsenparr))
159
160
161 sensor_ptr%INTEGER_USERBUF(1:isenbuf)=0
162 sensor_ptr%FLOAT_USERBUF(1:lsenbuf)=zero
163
164 sensor_ptr%INTEGER_USERPARAM(1:nsenpari)=0
165 sensor_ptr%FLOAT_USERPARAM(1:nsenparr)=zero
166
167
168 IF (userl_avail==1 .AND. (typ==29.OR.typ==30.OR.typ==31)) THEN
169
170 WRITE(csens,'(I4.4)')typ
171 scr_file_name='SI'//rootnam(1:rootlen)//'_''.scr'
172 scr_file_name_len=len_trim(scr_file_name
173 OPEN(unit=30,file=trim(scr_file_name),form=
'FORMATTED',recl=
ncharline)
174
175 j=1
177 READ(rline,err=999,fmt=fmt_f)tdel
178
179
180 sensor_ptr%TDELAY = tdel
181
182
183 DO j=2,nlines
185 WRITE(30,fmt='(A)')trim(rline)
186 ENDDO
187 CLOSE(unit=30)
188 ENDIF
189
190
191 WRITE (iout,'(A,I10)') ' SENSOR ID = ', sens_id
192
193
194 sensor_ptr%TYPE = typ
195
196 IF(typ == 29)THEN
197
198 WRITE (iout,'(A,/,A,I10)') ' TYPE 29 SENSOR : USER1'
199 WRITE (iout,'(A,1PG20.13)') ' TIME DELAY BEFORE ACTIVATION . . . . .'
200
201 sensor_ptr%TSTART = infinity
202
203 IF (userl_avail==1)THEN
204 CALL st_userlib_lecsen(typ,rootnam,rootlen)
206 ENDIF
207
208 ELSEIF(typ == 30)THEN
209
210 WRITE (iout,'(A,/,A,I10)') ' TYPE 30 SENSOR : USER2'
211 WRITE (iout,'(A,1PG20.13)') ' TIME DELAY BEFORE ACTIVATION . . . . .',tdel
212
213 sensor_ptr%TSTART = infinity
214
215 IF (userl_avail==1)THEN
216 CALL st_userlib_lecsen(typ,rootnam,rootlen)
218 ENDIF
219
220 ELSEIF(typ == 31)THEN
221
222 WRITE (iout,'(A,/,A,I10)') ' TYPE 31 SENSOR : USER3'
223 WRITE (iout,'(A,1PG20.13)') ' TIME DELAY BEFORE ACTIVATION . . . . .',tdel
224
225 sensor_ptr%TSTART = infinity
226
227 IF (userl_avail==1)THEN
228 CALL st_userlib_lecsen(typ,rootnam,rootlen)
230 ENDIF
231
232 ENDIF
233 ELSE
235 . anmode=aninfo,
236 . msgtype=msgerror,
237 . c2=key(1:len_trim(key)),
238 . i1=sens_id,
239 . c1=title)
240 ENDIF
241
242 sensor_ptr%TYPE = typ
243 sensor_ptr%SENS_ID = sens_id
244 sensor_ptr%STATUS = 0
245 sensor_ptr%TDELAY = tdel
246 sensor_ptr%TSTART = infinity
247 sensor_ptr%TCRIT = infinity
248 sensor_ptr%TMIN = zero
249
250 ELSE
251
252 ENDIF
253
254 RETURN
255 999
CALL ancmsg(msgid=55,anmode=aninfo,msgtype=msgerror,c1=key0(kcur),c2=kline,c3=line)
257
258 RETURN
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string_index(name, sval, index, size, is_available)
integer, parameter ncharkey
integer, parameter ncharline
subroutine sensor_user_alloc(already_done, sensor_user_struct)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine user_output(iout, ilaw, rootn, rootlen, inpf)