47
48
49
50 USE my_alloc_mod
58
59
60
61#include "implicit_f.inc"
62
63
64
65#include "param_c.inc"
66#include "units_c.inc"
67#include "scr17_c.inc"
68#include "com04_c.inc"
69#include "random_c.inc"
70#include "tabsiz_c.inc"
71
72
73
74 INTEGER, INTENT(IN) :: ITABM1(NUMNOD),IXR(NIXR,NUMELR),ITAB(NUMNOD),FUNC_ID(NFUNCT),IPM(NPROPMI,NUMMAT)
75 INTEGER, INTENT(INOUT) :: NOM_OPT(LNOPT1,SNOM_OPT1)
76 my_real,
INTENT(IN) :: alea(nrand)
77 my_real,
INTENT(INOUT) :: x(3,numnod)
78 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
79 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
80
81
82
83 INTEGER ,DIMENSION(NRETRACTOR) :: RET_ID
84 INTEGER :: I,J,K,ID, UID, NODE_ID, EL_ID, IERR1
85 INTEGER :: NODE1,NODE2,EL_LOC,BID,ISENS(2),IFUNC(3),IFUNC_LOC(3),TENS_TYP,MID,MTYP
86 my_real :: force,elem_size,dist1,dist2,dist3,pull,yscale1,xscale1,xscale1_unit,yscale1_unit
87 my_real :: yscale2,xscale2,xscale2_unit,yscale2_unit,xx,dxdy,get_u_func,alea_max,tole_2
88 CHARACTER(LEN=NCHARTITLE) :: TITR
89 CHARACTER(LEN=NCHARKEY) :: KEY2
90 CHARACTER :: MESS*40
91 LOGICAL :: IS_AVAILABLE
92 EXTERNAL get_u_func
93
94
95
96 INTEGER USR2SYS,NINTRI
97
98 DATA mess/'RETRACTOR DEFINITION '/
99
100
101
102 ierr1 = 0
103
104 IF(nretractor > 0 ) THEN
105
106 WRITE(iout,1000)
107
109 DO i=1,nretractor
143 ENDDO
144
146
147 DO i = 1,nretractor
149
151 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,i),ltitr)
152
153 CALL hm_get_intv(
'EL_ID', el_id, is_available, lsubmodel)
154 CALL hm_get_intv(
'Node_ID', node_id, is_available, lsubmodel)
155 CALL hm_get_floatv(
'Elem_size', elem_size, is_available, lsubmodel,unitab)
156
157 CALL hm_get_intv(
'Sens_ID1', isens(1), is_available, lsubmodel)
158 CALL hm_get_floatv(
'Pullout', pull, is_available, lsubmodel,unitab)
159 CALL hm_get_intv(
'Fct_ID1', ifunc(1), is_available, lsubmodel)
160 CALL hm_get_intv(
'Fct_ID2', ifunc(2), is_available, lsubmodel)
161 CALL hm_get_floatv(
'Yscale1',yscale1,is_available,lsubmodel,unitab)
162 CALL hm_get_floatv(
'Xscale1',xscale1,is_available,lsubmodel,unitab)
163
166
167 CALL hm_get_intv(
'Sens_ID2', isens(2), is_available, lsubmodel)
168 CALL hm_get_intv(
'Tens_typ', tens_typ, is_available, lsubmodel)
169 CALL hm_get_floatv(
'Force', force, is_available, lsubmodel,unitab)
170 CALL hm_get_intv(
'Fct_ID3', ifunc(3), is_available, lsubmodel)
171 CALL hm_get_floatv(
'Yscale2',yscale2,is_available,lsubmodel,unitab)
172 CALL hm_get_floatv(
'Xscale2',xscale2,is_available,lsubmodel,unitab)
173
176
178
179 IF (ifunc(1) > 0) THEN
180 IF (xscale1== zero) xscale1 = one*xscale1_unit
181 IF (yscale1== zero) yscale1 = one*yscale1_unit
182 ENDIF
183
184 IF (ifunc(2) == 0) ifunc(2) = ifunc(1)
185
186 IF (ifunc(3) > 0) THEN
187 IF (xscale2== zero) xscale2 = one*xscale2_unit
188 IF (yscale2== zero) yscale2 = one*yscale2_unit
189 ENDIF
190
191 WRITE(iout,1100)
id,trim(titr),el_id,node_id,elem_size,isens(1),pull,ifunc(1),ifunc(2),
192 . xscale1,yscale1
193
194 IF (isens(2) > 0) WRITE(iout,1200) isens(2),tens_typ,force,ifunc(3),xscale2,yscale2
195
196 IF (force == zero) force = ep30
197
199 el_loc=
nintri(el_id,ixr,nixr,numelr,nixr)
200
201 IF(el_loc == 0) THEN
203 . msgtype=msgerror,
204 . anmode=aninfo_blind_1,
206 ELSE
207 mtyp = 0
208 mid = ixr(5,el_loc)
209 IF (mid > 0) mtyp = ipm(2,mid)
210 IF (mtyp /= 114)
CALL ancmsg(msgid=2033,
211 . msgtype=msgerror,
212 . anmode=aninfo,
214 ENDIF
215
216
217
218
219
220 ifunc_loc(1:3) = 0
221
222 DO j=1,3
223 IF (ifunc(j) > 0) THEN
224 DO k=1,nfunct
225 IF (func_id(k) == ifunc(j)) ifunc_loc(j) = k
226 ENDDO
227 IF(ifunc_loc(j) == 0)
CALL ancmsg(msgid=2028,
228 . msgtype=msgerror,
229 . anmode=aninfo_blind_1,
230 . c1='FUNCTION',
232 ENDIF
233 ENDDO
234
235 IF ((isens(1) > 0).AND.(ifunc(1)==0)) THEN
236
238 . msgtype=msgerror,
239 . anmode=aninfo_blind_1,
241 ENDIF
242
243 IF ((isens(2) > 0).AND.(ifunc(3)==0)) THEN
244
246 . msgtype=msgerror,
247 . anmode=aninfo_blind_1,i1=
id)
248 ENDIF
249
253
260
267
270 ELSE
271
272 xx = zero
274 ENDIF
275
276 node1 = ixr(2,el_loc)
277 node2 = ixr(3,el_loc)
278
279 dist1 = (x(1,node1)-x(1,node_id))**2+(x(2,node1)-x(2,node_id))**2+(x(3,node1)-x(3,node_id))**2
280 dist2 = (x(1,node2)-x(1,node_id))**2+(x(2,node2)-x(2,node_id))**2+(x(3,node2)-x(3,node_id))**2
281
282
284
285 IF (nrand > 0) THEN
286 alea_max = zero
287 DO j=1,nrand
288 alea_max =
max(alea_max,alea(j))
289 ENDDO
290 tole_2 =
max(tole_2,ten*alea_max*alea_max)
291 ENDIF
292
293
294 IF ((dist1 < dist2).AND.(dist1 <= tole_2)) THEN
295 x(1,node1) = x(1,node_id)
296 x(2,node1) = x(2,node_id)
297 x(3,node1) = x(3,node_id)
298 dist1 = zero
299 ELSEIF (dist2 <= tole_2) THEN
300 x(1,node2) = x(1,node_id)
301 x(2,node2) = x(2,node_id)
302 x(3,node2) = x(3,node_id)
303 dist2 = zero
304 ENDIF
305
306 dist3 = (x(1,node2)-x(1,node1))**2+(x(2,node2)-x(2,node1))**2+(x(3,node2)-x(3,node1))**2
307
308 IF (dist1 < em30) THEN
312 retractor(i)%VECTOR(1) = (x(1,node2)-x(1,node1))/sqrt(
max(em30,dist3))
313 retractor(i)%VECTOR(2) = (x(2,node2)-x(2,node1))/sqrt(
max(em30,dist3))
314 retractor(i)%VECTOR(3) = (x(3,node2)-x(3,node1))/sqrt(
max(em30,dist3))
315
317 ELSEIF (dist2 < em30) THEN
321 retractor(i)%VECTOR(1) = (x(1,node1)-x(1,node2))/sqrt(
max(em30,dist3))
322 retractor(i)%VECTOR(2) = (x(2,node1)-x(2,node2))/sqrt(
max(em30,dist3))
323 retractor(i)%VECTOR(3) = (x(3,node1)-x(3,node2))/sqrt(
max(em30,dist3))
324
326 ELSE
328 . msgtype=msgerror,
329 . anmode=aninfo_blind_1,
331 ENDIF
332
333 IF (dist3 < em30) THEN
335 . msgtype=msgerror,
336 . anmode=aninfo_blind_1,
338 ENDIF
339
342 . msgtype=msgerror,
343 . anmode=aninfo_blind_1,
345 ENDIF
346
347 ENDDO
348
349 ENDIF
350
351 IF (ierr1 /= 0) THEN
352 WRITE(iout,*)' ** ERROR IN MEMORY ALLOCATION'
353 WRITE(istdo,*)' ** ERROR IN MEMORY ALLOCATION'
355 ENDIF
356
357
358
359
360 CALL udouble(ret_id,1,nretractor,mess,0,bid)
361 RETURN
362
3631000 FORMAT(/
364 . ' RETRACTOR/SPRING DEFINITIONS '/
365 . ' ---------------------- ')
3661100 FORMAT(/5x,'RETRACTOR ID ',i10,1x,a
367 . /5x,'CONNECTED SPRING ELEMENT . . . . . . . . .',i10
368 . /5x,'ANCHORAGE NODE . . . . . . . . . . . . . .',i10
369 . /5x,'ELEMENT SIZE . . . . . . . . . . . . . . .',1pg20.4
370 . /5x,'SENSOR ID1 . . . . . . . . . . . . . . . .',i10
371 . /5x,'PULLOUT BEFORE LOCKING . . . . . . . . . .',1pg20.4
372 . /5x,'FUNC1 - LOADING - FORCE VS PULLOUT . . . .',i10
373 . /5x,'FUNC2 - UNLOADING - FORCE VS PULLOUT . . .',i10
374 . /5x,'FUNC1/2 ABCISSA SCALE FACTOR . . . . . . .',1pg20.4
375 . /5x,'FUNC1/2 ORDINATE SCALE FACTOR. . . . . . .',1pg20.4)
3761200 FORMAT( 5x,'PRETENSION :'
377 . /5x,'SENSOR ID2 . . . . . . . . . . . . . . . .',i10
378 . /5x,'PRETENSION TYPE. . . . . . . . . . . . . .',i10
379 . /5x,'MAXIMUM FORCE. . . . . . . . . . . . . . .',1pg20.4
380 . /5x,'FUNC3. . . . . . . . . . . . . . . . . . .',i10
381 . /5x,'FUNC3 ABCISSA SCALE FACTOR . . . . . . . .',1pg20.4
382 . /5x,'FUNC3 ORDINATE SCALE FACTOR . . . . . . .',1pg20.4)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
type(retractor_struct), dimension(:), allocatable retractor
integer function nintri(iext, antn, m, n, m1)
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)
integer function usr2sys(iu, itabm1, mess, id)
subroutine udouble(list, ilist, nlist, mess, ir, rlist)