36
37
38
39
40
41
43
44
45
46
47
48
50 USE intbufdef_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58 INTEGER, INTENT(inout) :: NELEMINT
59 INTEGER, INTENT(in) :: INTERFACE_ID
60 INTEGER, INTENT(in) :: NSN
61 INTEGER, INTENT(in) :: NRTM
62 INTEGER, INTENT(inout) :: IFIEND
63 INTEGER, DIMENSION(4,NRTM) :: IRECT
64 INTEGER, DIMENSION(NSN) ::
65 INTEGER, INTENT(in) :: I_STOK
66 INTEGER, INTENT(in) :: NUMNOD
67 INTEGER, DIMENSION(I_STOK), INTENT(in) :: CAND_E
68 INTEGER, DIMENSION(I_STOK), INTENT(in) :: CAND_N
69 INTEGER, INTENT(in) :: INTER_KIND
70 INTEGER, INTENT(in) :: IEDGE
71 INTEGER, INTENT(in) :: NLEDGE
72! INTEGER, DIMENSION(NUMNOD), INTENT(in) :: ITAB
74 my_real,
DIMENSION(NSN) :: gap_s
75 my_real,
DIMENSION(NRTM) :: gap_m
76 my_real,
DIMENSION(3,NUMNOD),
INTENT(in) :: x
77 TYPE(INTER_CAND_), INTENT(inout) :: INTER_CAND
78 TYPE(INTBUF_STRUCT_), INTENT(in) :: INTBUF_TAB
79
80
81
82 INTEGER :: S_NODE_ID
83 INTEGER :: S_EDGE_ID,M_EDGE_ID
84 INTEGER :: SEGMENT_ID
85 INTEGER :: SEGMENT_ID_TYPE24
86 INTEGER :: NODE_ID_1,NODE_ID_2
87 INTEGER :: II,I
88 INTEGER :: IX1,IX2,IX3,IX4
90 . xmin,xmax,ymin,
ymax,zmin,zmax,threshold,
91 . xi,x1,x2,x3,x4,yi,y1,y2,y3,y4,zi,z1,z2,z3,z4
92
93 inter_cand%IXINT(1:inter_cand%S_IXINT_1,nelemint+1:nelemint+i_stok) =
94 inter_cand%ADDRESS(interface_id) = nelemint
95
96
97 ii = 0
98 DO i = 1, i_stok
99 s_node_id = nsv(cand_n(i))
100 segment_id = cand_e(i)
101
102
103
104
105 IF (s_node_id >numnod.AND.inter_kind==24) THEN
106 s_node_id = s_node_id - numnod
107 CALL i24fic_getn(s_node_id,intbuf_tab%IRTSE,intbuf_tab%IS2SE,segment_id_type24,node_id_1,node_id_2)
108 s_node_id = node_id_1
109 ENDIF
110
111 ii = ii +1
112
113
114 ix1=irect(1,segment_id)
115 ix2=irect(2,segment_id)
116 ix3=irect(3,segment_id)
117 ix4=irect(4,segment_id)
118
119 inter_cand%IXINT(1,nelemint+ii) = ix1
120 inter_cand%IXINT(2,nelemint+ii) = ix2
121 inter_cand%IXINT(3,nelemint+ii) = ix3
122 inter_cand%IXINT(4,nelemint+ii) = ix4
123 inter_cand%IXINT(5,nelemint+ii) = s_node_id
124 inter_cand%IXINT(6,nelemint+ii) = inter_kind
125 inter_cand%IXINT(7,nelemint+ii) = segment_id
126 inter_cand%IXINT(8,nelemint+ii) = interface_id
127
128 zi = x(3,s_node_id)
129 z1=x(3,ix1)
130 z2=x(3,ix2)
131 z3=x(3,ix3)
132 z4=x(3,ix4)
133 threshold=gap_s(cand_n(i))+gap_m(cand_e(i))+dgapload
134 zmin =
min(z1,z2,z3,z4)-threshold
135 zmax =
max(z1,z2,z3,z4)+threshold
136 IF (zmin<=zi.AND.zmax>=zi) THEN
137 yi = x(2,s_node_id)
138 y1 = x(2,ix1)
139 y2 = x(2,ix2)
140 y3 = x(2,ix3)
141 y4 = x(2,ix4)
142 ymin =
min(y1,y2,y3,y4)-threshold
143 ymax =
max(y1,y2,y3,y4)+threshold
144 IF (ymin<=yi.AND.
ymax>=yi)
THEN
145 xi = x(1,s_node_id)
146 x1 = x(1,ix1)
147 x2 = x(1,ix2)
148 x3 = x(1,ix3)
149 x4 = x(1,ix4)
150 xmin =
min(x1,x2,x3,x4)-threshold
151 xmax =
max(x1,x2,x3,x4)+threshold
152 IF (xmin<=xi.AND.xmax>=xi) THEN
153 inter_cand%IXINT(6,nelemint+ii)=-inter_kind
154 ENDIF
155 ENDIF
156 ENDIF
157 ENDDO
158
159
160
161 IF(inter_kind==25.AND.iedge>0) THEN
162
163
164 DO i = 1, intbuf_tab%I_STOK_E(1)
165
166 ii = ii +1
167
168 s_edge_id = intbuf_tab%CANDS_E2E(i)
169 m_edge_id = intbuf_tab%CANDM_E2E(i)
170 ! ------------
171
172 s_node_id = intbuf_tab%LEDGE((s_edge_id-1)*nledge+5)
173
174
175
176
177 ix1=intbuf_tab%LEDGE((m_edge_id-1)*nledge+5)
178 ix2=intbuf_tab%LEDGE((m_edge_id-1)*nledge+6)
179 ix3=ix1
180 ix4=ix2
181
182
183 inter_cand%IXINT(1,nelemint+ii) = ix1
184 inter_cand%IXINT(2,nelemint+ii) = ix2
185 inter_cand%IXINT(3,nelemint+ii) = ix3
186 inter_cand%IXINT(4,nelemint+ii) = ix4
187 inter_cand%IXINT(5,nelemint+ii) = s_node_id
188 inter_cand%IXINT(6,nelemint+ii) = inter_kind
189 inter_cand%IXINT(7,nelemint+ii) = m_edge_id
190 inter_cand%IXINT(8,nelemint+ii) = interface_id
191 ENDDO
192
193
194
195
196 DO i = 1, intbuf_tab%I_STOK_E(2)
197
198 ii = ii +1
199
200 s_edge_id = intbuf_tab%CANDS_E2S(i)
201 segment_id = intbuf_tab%CANDM_E2S(i)
202
203
204 s_node_id = intbuf_tab%LEDGE((s_edge_id-1)*nledge+5)
205
206
207
208
209 ix1=irect(1,segment_id)
210 ix2=irect(2,segment_id)
211 ix3=irect(3,segment_id)
212 ix4=irect(4,segment_id)
213
214
215 inter_cand%IXINT(1,nelemint+ii) = ix1
216 inter_cand%IXINT(2,nelemint+ii) = ix2
217 inter_cand%IXINT(3,nelemint+ii) = ix3
218 inter_cand%IXINT(4,nelemint+ii) = ix4
219 inter_cand%IXINT(5,nelemint+ii) = s_node_id
220 inter_cand%IXINT(6,nelemint+ii) = inter_kind
221 inter_cand%IXINT(7,nelemint+ii) = segment_id
222 inter_cand%IXINT(8,nelemint+ii) = interface_id
223 ENDDO
224
225 ENDIF
226
227 ifiend = ifiend + ii
228
229 nelemint = nelemint + ii
230 inter_cand%ADDRESS(interface_id+1) = nelemint
231
232
233 RETURN
subroutine i24fic_getn(ns, irtse, is2se, ie, ns1, ns2)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
int main(int argc, char *argv[])