36
37
38
39
40
41
42
43
44
45
46
48
49
50
51#include "implicit_f.inc"
52
53
54
55 INTEGER, INTENT(inout) :: NELEMINT
56 INTEGER, INTENT(in) :: INTERFACE_ID
57 INTEGER, INTENT(in) :: NSN
58 INTEGER, INTENT(in) :: NRTM
59 INTEGER, INTENT(inout) :: IFIEND
60 INTEGER, DIMENSION(4,NRTM) :: IRECT
61 INTEGER, DIMENSION(NSN) :: NSV
62 INTEGER, INTENT(in) :: I_STOK
63 INTEGER, INTENT(in) :: NUMNOD
64 INTEGER, DIMENSION(I_STOK), INTENT(in) :: CAND_E
65 INTEGER, DIMENSION(I_STOK), INTENT(in) :: CAND_N
66 INTEGER, INTENT(in) :: IGAP
67 my_real,
INTENT(in) :: gap,gapmax,gapmin
68 my_real,
INTENT(IN) :: dgapload ,drad
69 my_real,
DIMENSION(NSN) :: gap_s,gap_s_l
70 my_real,
DIMENSION(NRTM) :: gap_m,gap_m_l
71 my_real,
DIMENSION(3,NUMNOD),
INTENT(in) :: x
72 TYPE(INTER_CAND_), INTENT(inout) :: INTER_CAND
73
74
75
76 INTEGER :: S_NODE_ID
77 INTEGER :: SEGMENT_ID
78
79 INTEGER :: N,I
80 INTEGER :: IX1,IX2,IX3,IX4
82 . xmin,xmax,ymin,
ymax,zmin,zmax,threshold,
83 . xi,x1,x2,x3,x4,yi,y1,y2,y3,y4,zi,z1,z2,z3,z4
84
85 ifiend = ifiend + i_stok
86 inter_cand%IXINT(1:inter_cand%S_IXINT_1,nelemint+1:nelemint+i_stok) = 0
87 inter_cand%ADDRESS(interface_id) = nelemint
88 threshold =
max(gap+dgapload,drad)
89
90
91 DO i = 1, i_stok
92 s_node_id = nsv(cand_n(i)) ! s node
id
93 segment_id = cand_e(i)
94
95 ix1=irect(1,segment_id)
96 ix2=irect(2,segment_id)
97 ix3=irect(3,segment_id)
98 ix4=irect(4,segment_id)
99
100 inter_cand%IXINT(1,nelemint+i) = ix1
101 inter_cand%IXINT(2,nelemint+i) = ix2
102 inter_cand%IXINT(3,nelemint+i) = ix3
103 inter_cand%IXINT(4,nelemint+i) = ix4
104 inter_cand%IXINT(5,nelemint+i) = s_node_id
105 inter_cand%IXINT(6,nelemint+i) = 7
106 inter_cand%IXINT(7,nelemint+i) = segment_id
107 inter_cand%IXINT(8,nelemint+i) = interface_id
108
109 zi = x(3,s_node_id)
110 z1=x(3,ix1)
111 z2=x(3,ix2)
112 z3=x(3,ix3)
113 z4=x(3,ix4)
114 IF(igap==0)THEN
115 threshold = gap
116 ELSE
117 threshold=gap_s(cand_n(i))+gap_m(cand_e(i))
118 IF(igap==3)
119 . threshold=
min(threshold,
120 . gap_s_l(cand_n(i))+gap_m_l(cand_e(i)))
121 threshold=
min(threshold,gapmax)
122 threshold=
max(threshold,gapmin)
123 ENDIF
124 threshold =
max(threshold+dgapload,drad)
125
126
127
128
129 zmin =
min(z1,z2,z3,z4)-threshold
130 zmax =
max(z1,z2,z3,z4)+threshold
131 IF (zmin<=zi.AND.zmax>=zi) THEN
132 yi = x(2,s_node_id)
133 y1 = x(2,ix1)
134 y2 = x(2,ix2)
135 y3 = x(2,ix3)
136 y4 = x(2,ix4)
137 ymin =
min(y1,y2,y3,y4)-threshold
138 ymax =
max(y1,y2,y3,y4)+threshold
139 IF (ymin<=yi.AND.
ymax>=yi)
THEN
140 xi = x(1,s_node_id)
141 x1 = x(1,ix1)
142 x2 = x(1,ix2)
143 x3 = x(1,ix3)
144 x4 = x(1,ix4)
145 xmin =
min(x1,x2,x3,x4)-threshold
146 xmax =
max(x1,x2,x3,x4)+threshold
147 IF (xmin<=xi.AND.xmax>=xi) THEN
148 inter_cand%IXINT(6,nelemint+i)=-7
149 ENDIF
150 ENDIF
151 ENDIF
152
153 ENDDO
154
155 nelemint=nelemint+i_stok
156 inter_cand%ADDRESS(interface_id+1) = nelemint
157
158
159 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)