42
43
44
47 USE sensor_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59#include "com04_c.inc"
60#include "boltpr_c.inc"
61
62
63
64 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
65 INTEGER IXS(NIXS,*), IXS10(6,*), IPRELOAD(3,*), IFLAG_BPRELOAD(*)
66 INTEGER NSTRF(*),ITAB(*),ISOLNOD(*)
68 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
69 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
70
71
72
73
74 INTEGER ISEC, K, I1, I2, I, ISENS,NPR0,NN,ID,J,UID,IFLAGUNIT,JS,SENSNUM
75 INTEGER IUGRP(NPRELOAD),IDSENSOR(NPRELOAD)
76 INTEGER K0,K1,K2,K3,IS,IE,II,NS,NI,ITYPE,IN1,IN2,IN3
77 my_real lval(npreload),ts(npreload),te(npreload),nx(npreload),ny(npreload),nz(npreload)
78 my_real tdeb,tfin, loadval,x1,y1,z1,x2,y2,z2,x3,y3,z3,n3,
area(npreload)
79 CHARACTER MESS*40
80 CHARACTER(LEN=NCHARTITLE) :: TITR
81 CHARACTER(LEN=NCHARLINE) ::KEY
82
83 LOGICAL IS_AVAILABLE
84
85
86
87 DATA mess/'BOLT PRELOADING DEFINITION '/
88
89 is_available = .false.
90
92
93 npr0=npreload
94 k=0
96
97 DO i=1,npr0
98
99 titr = ''
102 . unit_id = uid,
103 . option_titr = titr,
104 . keyword2 = key)
105
106 iugrp(i) = 0
107 IF (key(1:len_trim(key))=='AXIAL') cycle
108
109 iflagunit = 0
110
111 DO j=1,unitab%NUNITS
112 IF (unitab%UNIT_ID(j) == uid) THEN
113 iflagunit = 1
114 EXIT
115 ENDIF
116 ENDDO
117 IF (uid/=0.AND.iflagunit==0) THEN
118 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
119 . i2=uid,i1=
id,c1=
'BOLT PRELOAD',
120 . c2='BOLT PRELOAD',
121 . c3=titr)
122 ENDIF
123
124
125
126 CALL hm_get_intv(
'sect_ID' ,isec ,is_available,lsubmodel)
127 CALL hm_get_intv(
'sens_ID' ,isens ,is_available,lsubmodel)
128 CALL hm_get_intv(
'Itype' ,itype ,is_available,lsubmodel)
129
130 CALL hm_get_floatv(
'Preload',loadval,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'Tstart' ,tdeb ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv(
'Tstop' ,tfin ,is_available, lsubmodel, unitab)
133
134
135 IF (itype == 0) itype = 1
136
137
138 IF(loadval <= zero) THEN
139 CALL ancmsg(msgid=1255,msgtype=msgwarning,
140 . anmode=aninfo_blind_1,
141 . c1='BOLT PRELOAD',
143 . c2=titr)
144 loadval = zero
145 ENDIF
146
147 IF (tfin == zero) tfin=ep30
148
149 sensnum = 0
150 IF (isens > 0) THEN
151 DO js=1,sensors%NSENSOR
152 IF (isens == sensors%SENSOR_TAB(js)%SENS_ID) THEN
153 sensnum = js
154 EXIT
155 ENDIF
156 ENDDO
157 IF (sensnum == 0) THEN
158 isens = 0
159 CALL ancmsg(msgid=1252,anmode=aninfo,msgtype=msgerror,
160 . c1='BOLT PRELOAD',
161 . c2='BOLT PRELOAD',
162 . i2=isens,i1=
id,c3=titr)
163 END IF
164 ENDIF
165
166 nn = 0
167 IF (isec > 0) THEN
168 k0=31
169 DO is=1,nsect
170 IF (isec==nstrf(k0+23)) THEN
171 iugrp(i) = isec
172 lval(i) = loadval
173 idsensor(i) = isens
174 ts(i) = tdeb
175 te(i) = tfin
176 nn = nstrf(k0+6)
177 ns = nstrf(k0+7)
178 ni = nstrf(k0+14)
179 k1 = k0+30
180 k2 = k1+ni
181 k3 = k2+nn
182 in1 = nstrf(k0+3)
183 in2 = nstrf(k0+4)
184 in3 = nstrf(k0+5)
185 x1=x(1,in2)-x(1,in1)
186 y1=x(2,in2)-x(2,in1)
187 z1=x(3,in2)-x(3,in1)
188 x2=x(1,in3)-x(1,in1)
189 y2=x(2,in3)-x(2,in1)
190 z2=x(3,in3)-x(3,in1)
191 x3=y1*z2-z1*y2
192 y3=z1*x2-z2*x1
193 z3=x1*y2-x2*y1
194 n3=x3*x3+y3*y3+z3*z3
195
196 IF(n3 < em20) THEN
197 CALL ancmsg(msgid=1244,anmode=aninfo,msgtype=msgerror,
198 . c1='BOLT PRELOAD',
199 . c2='BOLT PRELOAD',
200 . i2=isec,i1=
id,c3=titr)
201 ELSE
202 n3 = sqrt(n3)
203 x3 = x3/n3
204 y3 = y3/n3
205 z3 = z3/n3
206 nx(i) = x3
207 ny(i) = y3
208 nz(i) = z3
209 ENDIF
210 IF(ns == 0) THEN
211 CALL ancmsg(msgid=1251,anmode=aninfo,msgtype=msgerror,
212 . c1='BOLT PRELOAD',
213 . c2='BOLT PRELOAD',
214 . i2=isec,i1=
id,c3=titr)
215 ELSE
216
217 CALL sectarea(ixs,ixs10,x,nstrf(k3),ns,isolnod,
area(i),itab)
218 IF (itype == 1) THEN
219 IF (
area(i) > 1.e-30) loadval = loadval/
area(i)
220 ENDIF
221 DO ie=1,ns
222 k=k+1
223 ii=(k3-1)+2*ie-1
224 ipreload(1,k) = nstrf(ii)
225 ipreload(2,k) = isens
226 ipreload(3,k) = ixs(11,nstrf(ii))
227
228 iflag_bpreload(nstrf(ii)) = i
229
230
231 preload(1,k) = tdeb
232 preload(2,k) = tfin
233 preload(3,k) = loadval
234 preload(4,k) = x3
235 preload(5,k) = y3
236 preload(6,k) = z3
237 ENDDO
238 ENDIF
239 GOTO 100
240 ENDIF
241 k0=nstrf(k0+24)
242 ENDDO
243 ENDIF
244 CALL ancmsg(msgid=1243,anmode=aninfo,msgtype=msgerror,
245 . c1='BOLT PRELOAD',
246 . c2='BOLT PRELOAD',
247 . i2=isec,i1=
id,c3=titr)
248100 CONTINUE
249
250 ENDDO
251 i1=1
252 i2=min0(50,npreload)
253
254 90 WRITE (iout,2000)
255 DO i=i1,i2
256 IF (iugrp(i)==0) cycle
257 WRITE (iout,'(I10,1X,I10,1X,1PE10.3,1X,I10,6(1X,1PE10.3))') i,
258 . iugrp(i),
area(i), idsensor(i), nx(i), ny(i), nz(i), lval(i), ts(i), te(i)
259 ENDDO
260 IF(i2==npreload)GOTO 200
261 i1=i1+50
262 i2=min0(i2+50,npreload)
263 GOTO 90
264
265
266 200 RETURN
267
268 2000 FORMAT(//
269 .' BOLT PRELOADINGS '/
270 .' ---------------- '/
271 .' ID SECTION AREA SENSOR NX NY
272 . NZ PRELOAD START-T END-T')
273
274 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine area(d1, x, x2, y, y2, eint, stif0)
integer, parameter nchartitle
integer, parameter ncharline
subroutine sectarea(ixs, ixs10, x, ibuf, nele, isolnod, area, itab)
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)