46 . X,FUNC_ID,NOM_OPT,ALEA,IPM)
58 use element_mod ,
only : nixr
62#include "implicit_f.inc"
70#include "random_c.inc"
71#include "tabsiz_c.inc"
75 INTEGER,
INTENT(IN) :: ITABM1(NUMNOD),IXR(NIXR,NUMELR),ITAB(NUMNOD),FUNC_ID(NFUNCT),IPM(NPROPMI,NUMMAT)
76 INTEGER,
INTENT(INOUT) :: NOM_OPT(LNOPT1
77INTENT(IN) :: alea(nrand)
78 my_real,
INTENT(INOUT) :: x(3,numnod)
79 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
80 TYPE (),
INTENT(IN) ::UNITAB
84 INTEGER ,
DIMENSION(NRETRACTOR) :: RET_ID
85 INTEGER :: ,J,K,ID, , NODE_ID, EL_ID, IERR1
86 INTEGER :: NODE1,NODE2,EL_LOC,BID,ISENS(2),IFUNC(3),IFUNC_LOC(3),TENS_TYP,MID,MTYP
87 my_real :: force,elem_size,dist1
88 my_real :: yscale2,xscale2,xscale2_unit,yscale2_unit,xx,dxdy,get_u_func,alea_max,tole_2
89 CHARACTER(LEN=NCHARTITLE) :: TITR
90 CHARACTER(LEN=NCHARKEY) :: KEY2
92 LOGICAL :: IS_AVAILABLE
97 INTEGER USR2SYS,NINTRI
99 DATA mess/
'RETRACTOR DEFINITION '/
105 IF(nretractor > 0 )
THEN
152 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,i),ltitr)
154 CALL hm_get_intv(
'EL_ID', el_id, is_available, lsubmodel)
155 CALL hm_get_intv(
'Node_ID', node_id, is_available, lsubmodel)
156CALL hm_get_floatv(
'Elem_size', elem_size, is_available, lsubmodel,unitab)
158 CALL hm_get_intv(
'Sens_ID1', isens(1), is_available, lsubmodel)
159 CALL hm_get_floatv(
'Pullout', pull, is_available, lsubmodel,unitab)
160 CALL hm_get_intv(
'Fct_ID1', ifunc(1), is_available, lsubmodel)
161 CALL hm_get_intv(
'Fct_ID2', ifunc(2), is_available, lsubmodel)
162 CALL hm_get_floatv(
'Yscale1',yscale1,is_available,lsubmodel,unitab)
163 CALL hm_get_floatv(
'Xscale1',xscale1,is_available,lsubmodel,unitab)
168 CALL hm_get_intv(
'Sens_ID2', isens(2), is_available, lsubmodel)
169 CALL hm_get_intv(
'Tens_typ', tens_typ, is_available, lsubmodel)
170 CALL hm_get_floatv(
'Force', force, is_available, lsubmodel,unitab)
171 CALL hm_get_intv(
'Fct_ID3', ifunc(3), is_available, lsubmodel)
172 CALL hm_get_floatv(
'Yscale2',yscale2,is_available,lsubmodel,unitab)
173 CALL hm_get_floatv(
'Xscale2',xscale2,is_available,lsubmodel,unitab)
180 IF (ifunc(1) > 0)
THEN
181 IF (xscale1== zero) xscale1 = one*xscale1_unit
182 IF (yscale1== zero) yscale1 = one*yscale1_unit
185 IF (ifunc(2) == 0) ifunc(2) = ifunc(1)
187 IF (ifunc(3) > 0)
THEN
188 IF (xscale2== zero) xscale2 = one*xscale2_unit
189 IF (yscale2== zero) yscale2 = one*yscale2_unit
192 WRITE(iout,1100) id,trim(titr),el_id,node_id,elem_size,isens(1),pull,ifunc(1),ifunc(2),
195 IF (isens(2) > 0)
WRITE(iout,1200) isens(2),tens_typ,force,ifunc(3),xscale2,yscale2
197 IF (force == zero) force = ep30
199 node_id = usr2sys(node_id,itabm1,mess,
retractor(i)%ID)
200 el_loc=nintri(el_id,ixr,nixr,numelr,nixr)
205 . anmode=aninfo_blind_1,
210 IF (mid > 0) mtyp = ipm(2,mid)
211 IF (mtyp /= 114)
CALL ancmsg(msgid=2033,
224 IF (ifunc(j) > 0)
THEN
226 IF (func_id(k) == ifunc(j)) ifunc_loc(j) = k
228 IF(ifunc_loc(j) == 0)
CALL ancmsg(msgid=2028,
230 . anmode=aninfo_blind_1,
236 IF ((isens(1) > 0).AND.(ifunc(1)==0))
THEN
240 . anmode=aninfo_blind_1,
244 IF ((isens(2) > 0).AND.(ifunc(3)==0))
THEN
248 . anmode=aninfo_blind_1,i1=id)
277 node1 = ixr(2,el_loc)
278 node2 = ixr(3,el_loc)
280 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
281 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
289 alea_max =
max(alea_max,alea(j))
291 tole_2 =
max(tole_2,ten*alea_max*alea_max)
295 IF ((dist1 < dist2).AND.(dist1 <= tole_2))
THEN
296 x(1,node1) = x(1,node_id)
297 x(2,node1) = x(2,node_id)
298 x(3,node1) = x(3,node_id)
300 ELSEIF (dist2 <= tole_2)
THEN
301 x(1,node2) = x(1,node_id)
302 x(2,node2) = x(2,node_id)
303 x(3,node2) = x(3,node_id)
307 dist3 = (x(1,node2)-x(1,node1))**2+(x(2,node2)-x(2,node1))**2+(x(3,node2)-x(3,node1))**2
309 IF (dist1 < em30)
THEN
313 retractor(i)%VECTOR(1) = (x(1,node2)-x(1,node1))/sqrt(
max(em30,dist3))
314 retractor(i)%VECTOR(2) = (x(2,node2)-x(2,node1))/sqrt(
max(em30,dist3))
315 retractor(i)%VECTOR(3) = (x(3,node2)-x(3,node1))/sqrt(
max(em30,dist3))
318 ELSEIF (dist2 < em30)
THEN
322 retractor(i)%VECTOR(1) = (x(1,node1)-x(1,node2))/sqrt(
max(em30,dist3))
323 retractor(i)%VECTOR(2) = (x(2,node1)-x(2,node2))/sqrt(
max(em30,dist3))
324 retractor(i)%VECTOR(3) = (x(3,node1)-x(3,node2))/sqrt(
max(em30,dist3))
330 . anmode=aninfo_blind_1,
334 IF (dist3 < em30)
THEN
337 . anmode=aninfo_blind_1,
344 . anmode=aninfo_blind_1,
345 . i1=id,i2=itab(
retractor(i)%ANCHOR_NODE))
353 WRITE(iout,*)
' ** ERROR IN MEMORY ALLOCATION'
354 WRITE(istdo,*)
' ** ERROR IN MEMORY ALLOCATION'
361 CALL udouble(ret_id,1,nretractor,mess,0,bid)
365 .
' RETRACTOR/SPRING DEFINITIONS '/
366 .
' ---------------------- ')
3671100
FORMAT(/5x,
'RETRACTOR ID ',i10,1x,a
368 . /5x,
'CONNECTED SPRING ELEMENT . . . . . . . . .',i10
369 . /5x,
'ANCHORAGE NODE . . . . . . . . . . . . . .',i10
370 . /5x,
'ELEMENT SIZE . . . . . . . . . . . . . . .',1pg20.4
371 . /5x,
'SENSOR ID1 . . . . . . . . . . . . . . . .',i10
372 . /5x,
'PULLOUT BEFORE LOCKING . . . . . . . . . .',1pg20.4
373 . /5x,
'FUNC1 - LOADING - FORCE VS PULLOUT . . . .',i10
374 . /5x,
'FUNC2 - UNLOADING - FORCE VS PULLOUT . . .',i10
375 . /5x,
'FUNC1/2 ABCISSA SCALE FACTOR . . . . . . .',1pg20.4
376 . /5x,
'FUNC1/2 ORDINATE SCALE FACTOR. . . . . . .',1pg20.4)
3771200
FORMAT( 5x,
'PRETENSION :'
378 . /5x,
'SENSOR ID2 . . . . . . . . . . . . . . . .',i10
379 . /5x,
'PRETENSION TYPE. . . . . . . . . . . . . .',i10
380 . /5x,
'MAXIMUM FORCE. . . . . . . . . . . . . . .',1pg20.4
381 . /5x,
'FUNC3. . . . . . . . . . . . . . . . . . .',i10
382 . /5x,
'FUNC3 ABCISSA SCALE FACTOR . . . . . . . .',1pg20.4
383 . /5x,
'FUNC3 ORDINATE SCALE FACTOR . . . . . . .',1pg20.4)
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)