46 . X,FUNC_ID,NOM_OPT,ALEA,IPM)
61#include "implicit_f.inc"
69#include "random_c.inc"
70#include "tabsiz_c.inc"
74 INTEGER,
INTENT(IN) :: ITABM1(),IXR(NIXR,NUMELR),(NUMNOD),FUNC_ID(NFUNCT),IPM(NPROPMI,NUMMAT)
75 INTEGER,
INTENT(INOUT) :: (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
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
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
91 LOGICAL :: IS_AVAILABLE
96 INTEGER USR2SYS,NINTRI
98 DATA mess/
'RETRACTOR DEFINITION '/
104 IF(nretractor > 0 )
THEN
151 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,i),ltitr)
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)
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)
164 CALL HM_GET_FLOATV_DIM('yscale1
',YSCALE1_UNIT,IS_AVAILABLE,LSUBMODEL,UNITAB)
165 CALL HM_GET_FLOATV_DIM('xscale1
',XSCALE1_UNIT,IS_AVAILABLE,LSUBMODEL,UNITAB)
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)
174 CALL HM_GET_FLOATV_DIM('yscale2
',YSCALE2_UNIT,IS_AVAILABLE,LSUBMODEL,UNITAB)
175 CALL HM_GET_FLOATV_DIM('xscale2
',XSCALE2_UNIT,IS_AVAILABLE,LSUBMODEL,UNITAB)
179 IF (IFUNC(1) > 0) THEN
180 IF (XSCALE1== ZERO) XSCALE1 = ONE*XSCALE1_UNIT
181 IF (YSCALE1== ZERO) YSCALE1 = ONE*YSCALE1_UNIT
184 IF (IFUNC(2) == 0) IFUNC(2) = IFUNC(1)
186 IF (IFUNC(3) > 0) THEN
187 IF (XSCALE2== ZERO) XSCALE2 = ONE*XSCALE2_UNIT
188 IF (YSCALE2== ZERO) YSCALE2 = ONE*YSCALE2_UNIT
191 WRITE(IOUT,1100) ID,TRIM(TITR),EL_ID,NODE_ID,ELEM_SIZE,ISENS(1),PULL,IFUNC(1),IFUNC(2),
194 IF (ISENS(2) > 0) WRITE(IOUT,1200) ISENS(2),TENS_TYP,FORCE,IFUNC(3),XSCALE2,YSCALE2
196 IF (FORCE == ZERO) FORCE = EP30
198 NODE_ID = USR2SYS(NODE_ID,ITABM1,MESS,RETRACTOR(I)%ID)
199 EL_LOC=NINTRI(EL_ID,IXR,NIXR,NUMELR,NIXR)
202 CALL ANCMSG(MSGID=2008,
204 . ANMODE=ANINFO_BLIND_1,
209 IF (MID > 0) MTYP = IPM(2,MID)
210 IF (MTYP /= 114) CALL ANCMSG(MSGID=2033,
223 IF (IFUNC(J) > 0) THEN
225 IF (FUNC_ID(K) == IFUNC(J)) IFUNC_LOC(J) = K
227 IF(IFUNC_LOC(J) == 0) CALL ANCMSG(MSGID=2028,
229 . ANMODE=ANINFO_BLIND_1,
235.AND.
IF ((ISENS(1) > 0)(IFUNC(1)==0)) THEN
237 CALL ANCMSG(MSGID=2031,
239 . ANMODE=ANINFO_BLIND_1,
243.AND.
IF ((ISENS(2) > 0)(IFUNC(3)==0)) THEN
245 CALL ANCMSG(MSGID=2025,
247 . ANMODE=ANINFO_BLIND_1,I1=ID)
251 RETRACTOR(I)%ANCHOR_NODE = NODE_ID
252 RETRACTOR(I)%ELEMENT_SIZE = ELEM_SIZE
254 RETRACTOR(I)%ISENS(1) = ISENS(1)
255 RETRACTOR(I)%PULLOUT = PULL
256 RETRACTOR(I)%IFUNC(1) = IFUNC_LOC(1)
257 RETRACTOR(I)%IFUNC(2) = IFUNC_LOC(2)
258 RETRACTOR(I)%FAC(1) = YSCALE1
259 RETRACTOR(I)%FAC(2) = XSCALE1
261 RETRACTOR(I)%ISENS(2) = ISENS(2)
262 RETRACTOR(I)%TENS_TYP = TENS_TYP
263 RETRACTOR(I)%FORCE = FORCE
264 RETRACTOR(I)%IFUNC(3) = IFUNC_LOC(3)
265 RETRACTOR(I)%FAC(3) = YSCALE2
266 RETRACTOR(I)%FAC(4) = XSCALE2
268 IF (RETRACTOR(I)%IFUNC(1)==0) THEN
269 RETRACTOR(I)%UNLOCK_FORCE = RETRACTOR(I)%FAC(1)
273 RETRACTOR(I)%UNLOCK_FORCE = RETRACTOR(I)%FAC(1)*GET_U_FUNC(RETRACTOR(I)%IFUNC(1),XX,DXDY)
276 NODE1 = IXR(2,EL_LOC)
277 NODE2 = IXR(3,EL_LOC)
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
283 TOLE_2 = EM10*RETRACTOR(I)%ELEMENT_SIZE*RETRACTOR(I)%ELEMENT_SIZE
288 ALEA_MAX = MAX(ALEA_MAX,ALEA(J))
290 TOLE_2 = MAX(TOLE_2,TEN*ALEA_MAX*ALEA_MAX)
294.AND.
IF ((DIST1 < DIST2)(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)
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)
306 DIST3 = (X(1,NODE2)-X(1,NODE1))**2+(X(2,NODE2)-X(2,NODE1))**2+(X(3,NODE2)-X(3,NODE1))**2
308 IF (DIST1 < EM30) THEN
309 RETRACTOR(I)%NODE(1) = NODE2
310 RETRACTOR(I)%NODE(2) = NODE1
311 IF (RETRACTOR(I)%ELEMENT_SIZE == ZERO) RETRACTOR(I)%ELEMENT_SIZE = DIST2
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))
316 RETRACTOR(I)%STRAND_DIRECTION = -1
317 ELSEIF (DIST2 < EM30) THEN
318 RETRACTOR(I)%NODE(1) = NODE1
319 RETRACTOR(I)%NODE(2) = NODE2
320 IF (RETRACTOR(I)%ELEMENT_SIZE == ZERO) RETRACTOR(I)%ELEMENT_SIZE = DIST1
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))
325 RETRACTOR(I)%STRAND_DIRECTION = 1
327 CALL ANCMSG(MSGID=2009,
329 . ANMODE=ANINFO_BLIND_1,
333 IF (DIST3 < EM30) THEN
334 CALL ANCMSG(MSGID=2022,
336 . ANMODE=ANINFO_BLIND_1,
340 IF (RETRACTOR(I)%NODE(2) == RETRACTOR(I)%ANCHOR_NODE) THEN
341 CALL ANCMSG(MSGID=2030,
343 . ANMODE=ANINFO_BLIND_1,
344 . I1=ID,I2=ITAB(RETRACTOR(I)%ANCHOR_NODE))
352 WRITE(IOUT,*)' ** error in memory allocation
'
353 WRITE(ISTDO,*)' ** error in memory allocation
'
360 CALL UDOUBLE(RET_ID,1,NRETRACTOR,MESS,0,BID)
365 . ' ----------------------
')
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_read_retractor(lsubmodel, itabm1, ixr, itab, unitab, x, func_id, nom_opt, alea, ipm)