37
38
39
41 USE sensor_mod
43 use element_mod , only : nixr
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "scr17_c.inc"
52#include "param_c.inc"
53
54
55
56 INTEGER ,INTENT(IN) :: NUMELR,NSECT,NINTER,NINTSUB,NRWALL,NRBODY
57 INTEGER IPARI(NPARI,NINTER)
58 INTEGER NOM_OPT(LNOPT1,*),PTR_NOPT_RWALL,PTR_NOPT_SECT,PTR_NOPT_INTER
59 INTEGER ,DIMENSION(NUMELR) :: R_SKEW
60 INTEGER ,DIMENSION(NIXR,NUMELR) :: IXR
61 TYPE (SENSORS_) ,INTENT(INOUT) ,TARGET :: SENSORS
62
63
64
65 INTEGER I,J,K,IN,NSENSOR,IPARSENS,STABSEN,SFSAV,STAT,
66 . IS1,IS2,SENS_TYPE,SENS_ID,SPRING_ID
67 CHARACTER(LEN=NCHARTITLE)::TITR
68 TYPE (SENSOR_STR_) ,DIMENSION(:) ,POINTER :: SENSOR_TAB
69
70
71
72 nsensor = sensors%NSENSOR
73 sensor_tab => sensors%SENSOR_TAB(1:nsensor)
74
75 DO k=1,nsensor
76 is1 = 0
77 is2 = 0
78 in = 0
79 titr = 'SENSOR '
80 sens_id = sensor_tab(k)%SENS_ID
81 sens_type = sensor_tab(k)%TYPE
82
83 IF (sens_type == 3) THEN
84
85
86
87 DO i=1,nsensor
88 IF (sensor_tab(k)%IPARAM(1) == sensor_tab(i)%SENS_ID) is1=i
89 IF (sensor_tab(k)%IPARAM(2) == sensor_tab(i)%SENS_ID) is2=i
90 ENDDO
91 IF (is1 == 0) THEN
92 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
93 . i1=sens_id,
94 . c1=titr,
95 . i2=sensor_tab(k)%IPARAM(1),c2='SENSOR')
96 ENDIF
97 sensor_tab(k)%IPARAM(1) = is1
98 sensor_tab(k)%IPARAM(2) = is2
99
100 ELSEIF (sens_type == 4 .OR. sens_type == 5) THEN
101
102
103
104 DO i=1,nsensor
105 IF (sensor_tab(k)%IPARAM(1) == sensor_tab(i)%SENS_ID) is1=i
106 IF (sensor_tab(k)%IPARAM(2) == sensor_tab(i)%SENS_ID) is2=i
107 ENDDO
108 IF (is1 == 0) THEN
109 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
110 . i1=sens_id,
111 . c1=titr,
112 . i2=sensor_tab(k)%IPARAM(1),c2='SENSOR')
113 ENDIF
114 IF (is2 == 0) THEN
115 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
116 . i1=sens_id,
117 . c1=titr,
118 . i2=sensor_tab(k)%IPARAM(2),c2='SENSOR')
119 ENDIF
120 sensor_tab(k)%IPARAM(1) = is1
121 sensor_tab(k)%IPARAM(2) = is2
122
123 ELSEIF (sens_type == 6) THEN
124
125
126
127 DO i=1,ninter
128 IF (ipari(15,i) == sensor_tab(k)%IPARAM(1)) THEN
129 in=i
130 EXIT
131 ENDIF
132 ENDDO
133 DO i=1,nintsub
134 IF (nom_opt(1,ptr_nopt_inter+i) == sensor_tab(k)%IPARAM(1)) THEN
135 DO j=1,ninter
136 IF (ipari(15,j) == nom_opt(2,ptr_nopt_inter+i))THEN
137 in = i + ninter
138 sensor_tab(k)%IPARAM(2) = j
139 ENDIF
140 ENDDO
141 ENDIF
142 ENDDO
143 IF (in == 0)THEN
144
145 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
146 . i1=sens_id,
147 . c1=titr,
148 . i2=sensor_tab(k)%IPARAM(1),c2='INTERFACE')
149 ENDIF
150 sensor_tab(k)%IPARAM(1) = in
151
152 ELSEIF (sens_type == 7) THEN
153
154
155
156 DO i=1,nrwall
157 IF (nom_opt(1,ptr_nopt_rwall+i) == sensor_tab(k)%IPARAM(1)) in=i
158 ENDDO
159 IF (in == 0)THEN
160 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
161 . i1=sens_id,
162 . c1=titr,
163 . i2=sensor_tab(k)%IPARAM(1),c2='RIGID WALL')
164 ENDIF
165 sensor_tab(k)%IPARAM(1) = in
166
167 ELSEIF (sens_type == 8)THEN
168
169
170
171 DO i=1,nsensor
172 IF (sensor_tab(k)%IPARAM(1) == sensor_tab(i)%SENS_ID) is1=i
173 ENDDO
174 IF(is1 == 0)THEN
175 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
176 . i1=sens_id,
177 . c1=titr,
178 . i2=sensor_tab(k)%IPARAM(1),c2='SENSOR')
179 ENDIF
180 sensor_tab(k)%IPARAM(1) = is1
181
182 ELSEIF (sens_type == 11)THEN
183
184
185
186 DO i=1,nrbody
187 IF (nom_opt(1,i) == sensor_tab(k)%IPARAM(1)) in=i
188 ENDDO
189 IF (in == 0)THEN
190 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
191 . i1=sens_id,
192 . c1=titr,
193 . i2=sensor_tab(k)%IPARAM(1),c2='RIGID BODY')
194 ENDIF
195 sensor_tab(k)%IPARAM(1) = in
196
197 ELSEIF (sens_type == 12)THEN
198
199
200
201 DO i=1,nsect
202 IF (nom_opt(1,ptr_nopt_sect +i) == sensor_tab(k)%IPARAM(1)) in=i
203 ENDDO
204 IF (in == 0)THEN
205 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
206 . i1=sens_id,
207 .
208 . i2=sensor_tab(k)%IPARAM(1),c2='SECTION')
209 ENDIF
210 sensor_tab(k)%IPARAM(1) = in
211
212 ELSEIF (sens_type == 13) THEN
213
214
215
216
217 in = 0
218 DO i=1,nsect
219 IF (nom_opt(1,ptr_nopt_sect +i) == sensor_tab(k)%IPARAM(3)) in=i
220 ENDDO
221 sensor_tab(k)%IPARAM(3) = in
222
223
224 in = 0
225 DO i=1,ninter
226 IF (ipari(15,i) == sensor_tab(k)%IPARAM(4)) THEN
227 in=i
228 EXIT
229 ENDIF
230 ENDDO
231 DO i=1,nintsub
232 IF (nom_opt(1,ptr_nopt_inter+i) == sensor_tab(k)%IPARAM(5)THEN
233 DO j=1,ninter
234 IF (ipari(15,j) == nom_opt(2,ptr_nopt_inter+i))THEN
235 in = i + ninter
236 sensor_tab(k)%IPARAM(5) = j
237 ENDIF
238 ENDDO
239 ENDIF
240 ENDDO
241 sensor_tab(k)%IPARAM(4) = in
242
243
244 in = 0
245 DO i=1,nrwall
246 IF (nom_opt(1,ptr_nopt_rwall+i) == sensor_tab(k)%IPARAM(6)) in=i
247 ENDDO
248 sensor_tab(k)%IPARAM(6) = in
249
250
251 in = 0
252 DO i=1,nrbody
253 IF (nom_opt(1,i) == sensor_tab(k)%IPARAM(7)) in=i
254 ENDDO
255 sensor_tab(k)%IPARAM(7) = in
256
257 IF (sensor_tab(k)%IPARAM(3) == 0 .and. sensor_tab(k)%IPARAM(4) == 0 .and.
258 . sensor_tab(k)%IPARAM(5) == 0 .and. sensor_tab(k)%IPARAM(6) == 0 .and.
259 . sensor_tab(k)%IPARAM(7) == 0) THEN
260 CALL ancmsg(msgid=339,anmode=aninfo,msgtype=msgerror,
261 . i1=in,
262 . c1=titr,
263 . i2=sensor_tab(k)%SENS_ID,c2='ID in SENSOR WORK')
264 ENDIF
265
266 ELSEIF (sens_type == 19) THEN
267
268
269
270 spring_id = sensor_tab(k)%IPARAM(1)
271 DO i=1,numelr
272 IF (ixr(6,i) == spring_id) THEN
273 sensor_tab(k)%IPARAM(2) = i
274 sensor_tab(k)%IPARAM(4) = r_skew(i)
275 EXIT
276 END IF
277 ENDDO
278
279 ENDIF
280 ENDDO
281
282
283
284
285
287
288
289
290
291 iparsens = 0
292 sfsav = 0
293 stabsen = 0
294
295 IF (nsensor > 0) THEN
296 DO i=1,nsensor
297 sens_type = sensor_tab(i)%TYPE
298 IF (sens_type== 6 .OR. sens_type== 7 .OR. sens_type
299 . sens_type== 12 .OR. sens_type== 13) THEN
300 sfsav = sfsav + 1
301 iparsens = 1
302 ENDIF
303 ENDDO
304 IF (iparsens == 1) stabsen = nsect+ninter+nintsub+nrwall+nrbody+1
305 END IF
306
307 ALLOCATE(sensors%TABSENSOR(stabsen) , stat=stat)
308 ALLOCATE(sensors%FSAV(12,6,sfsav) , stat=stat)
309 sensors%STABSEN = stabsen
310 sensors%SFSAV = sfsav
311 sensors%TABSENSOR = 0
312 sensors%FSAV = zero
313
314 sensors%NSTOP = 0
315 sensors%NSTAT = 0
316 sensors%NOUTP = 0
317 sensors%NANIM = 0
318
319 IF (iparsens == 1) THEN
320 CALL iniparsen(sensors,nsect,ninter,nintsub,nrwall,nrbody)
321 END IF
322
323 RETURN
subroutine iniparsen(sensors, nsect, ninter, nintsub, nrwall, nrbody)
integer, parameter nchartitle
subroutine sort_logical_sensors(sensors)
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)