42#include "implicit_f.inc"
53 INTEGER I,K,J1,J2,SIZEMAX,NSEG,NSEG_EDGE_EXT,
54 . NSEG_EDGE_ALL,NSEG_SURF,LINE_NENTITY,
55 . NSEG_EXT,NSEG_ALL,ELTYP
56 INTEGER IWORK(70000),IPERM(4)
60 INTEGER ,
DIMENSION(:),
ALLOCATABLE
61INTEGER ,
DIMENSION(:,:),
ALLOCATABLE :: ITRI,LINE_ORD
62 INTEGER ,
DIMENSION(:,:),
ALLOCATABLE :: SURF_NODE_EXT
63INTEGER ,
DIMENSION(:),
ALLOCATABLE :: SURF_ELTYP_EXT,SURF_ELEM_EXT,
64 . SURF_ELTYP_ALL,SURF_ELEM_ALL
66 sizemax = clause%NB_LINE_SEG + 4*clause%NB_SURF_SEG
68 IF (sizemax == 0)
RETURN
72 ALLOCATE(line_ord(line_nentity,sizemax))
73 ALLOCATE(itri(3,sizemax))
74 ALLOCATE(index(2*sizemax))
76 ALLOCATE(iw1(4*sizemax))
77 ALLOCATE(iw2(4*sizemax))
78 ALLOCATE(iw5(4*sizemax))
79 ALLOCATE(iw6(4*sizemax))
81 ALLOCATE(surf_node_ext(line_nentity,clause%NB_SURF_SEG))
82 ALLOCATE(surf_eltyp_ext(clause%NB_SURF_SEG))
83 ALLOCATE(surf_elem_ext(clause%NB_SURF_SEG))
85 ALLOCATE(surf_node_all(line_nentity,clause%NB_SURF_SEG))
86 ALLOCATE(surf_eltyp_all(clause%NB_SURF_SEG))
87 ALLOCATE(surf_elem_all(clause%NB_SURF_SEG))
91 IF (go_in_array .EQV. .true.)
THEN
95 line_ord(1,i) = delbuf%LINE(i,1)
96 line_ord(2,i) = delbuf%LINE(i,2)
97 line_ord(3,i) = delbuf%LINE(i,3)
98 line_ord(4,i) = delbuf%LINE(i,4)
101 nseg = clause%NB_LINE_SEG
104 line_ord(1,i) = clause%LINE_NODES(i,1)
105 line_ord(2,i) = clause%LINE_NODES(i,2)
106 line_ord(3,i) = clause%LINE_ELTYP(i)
107 line_ord(4,i) = clause%LINE_ELEM(i)
113 nseg_surf = clause%NB_SURF_SEG
114 IF (nseg_surf > 0)
THEN
125 eltyp = clause%SURF_ELTYP(i)
127 IF (eltyp == 1. or. eltyp == 2 .OR. eltyp == 0)
THEN
131 nseg_all = nseg_all + 1
132 surf_node_all(1,nseg_all) = clause%SURF_NODES(i,1)
133 surf_node_all(2,nseg_all) = clause%SURF_NODES(i,2)
134 surf_node_all(3,nseg_all) = clause%SURF_NODES(i,3)
135 surf_node_all(4,nseg_all) = clause%SURF_NODES(i,4)
136 surf_eltyp_all(nseg_all) = clause%SURF_ELTYP(i)
137 surf_elem_all(nseg_all) = clause%SURF_ELEM(i)
139 ELSEIF (eltyp == 3 . or. eltyp == 7)
THEN
141 IF ( iext == 1 .AND. opt_e == 1 )
THEN
143 ! tag only free edges of surf segment
144 nseg_ext = nseg_ext + 1
145 surf_node_ext(1,nseg_ext) = clause%SURF_NODES(i,1)
146 surf_node_ext(2,nseg_ext) = clause%SURF_NODES(i,2)
147 surf_node_ext(3,nseg_ext) = clause%SURF_NODES(i,3)
148 surf_node_ext(4,nseg_ext) = clause%SURF_NODES(i,4)
149 surf_eltyp_ext(nseg_ext) = clause%SURF_ELTYP(i)
150 surf_elem_ext(nseg_ext) = clause%SURF_ELEM(i)
155 nseg_all = nseg_all + 1
156 surf_node_all(1,nseg_all) = clause%SURF_NODES(i,1)
157 surf_node_all(2,nseg_all) = clause%SURF_NODES(i,2)
158 surf_node_all(3,nseg_all) = clause%SURF_NODES(i,3)
159 surf_node_all(4,nseg_all) = clause%SURF_NODES(i,4)
160 surf_eltyp_all(nseg_all) = clause%SURF_ELTYP(i)
161 surf_elem_all(nseg_all) = clause%SURF_ELEM(i)
188 IF (surf_node_ext(j2,i) /= 0 .AND.
189 . surf_node_ext(j1,i) > surf_node_ext(j2,i))
THEN
191 iw1(k)=surf_node_ext(j2,i)
192 iw2(k)=surf_node_ext(j1,i)
193 iw5(k)=surf_eltyp_ext(i)
194 iw6(k)=surf_elem_ext(i)
195 ELSEIF (surf_node_ext(j1,i) /= 0 .AND.
196 . surf_node_ext(j1,i) < surf_node_ext(j2,i))
THEN
198 iw1(k)=surf_node_ext(j1,i)
199 iw2(k)=surf_node_ext(j2,i)
200 iw5(k)=surf_eltyp_ext(i)
201 iw6(k)=surf_elem_ext(i)
214 IF (nseg_edge_ext > 0)
THEN
218 IF (iw1(index(1)) /= iw1(index(2)).OR.
219 . iw2(index(1)) /= iw2(index(2)))
THEN
221 line_ord(1,nseg) = iw1(index(1))
222 line_ord(2,nseg) = iw2(index(1))
223 line_ord(3,nseg) = iw5(index(1))
224 line_ord(4,nseg) = iw6(index(1))
227 IF ((iw1(index(i-1)) /= iw1(index(i)).OR.
229 . (iw1(index(i+1)) /= iw1(index(i)).OR.
230 . iw2(index(i+1)) /= iw2(index(i))))
THEN
232 line_ord(1,nseg) = iw1(index(i))
233 line_ord(2,nseg) = iw2(index(i))
234 line_ord(3,nseg) = iw5(index(i))
235 line_ord(4,nseg) = iw6(index(i))
238 IF (iw1(index(k-1)) /= iw1(index(k)).OR.
239 . iw2(index(k-1)) /= iw2(index(k)))
THEN
241 line_ord(1,nseg) = iw1(index(k))
242 line_ord(2,nseg) = iw2(index(k))
243 line_ord(3,nseg) = iw5(index(k))
244 line_ord(4,nseg) = iw6(index(k))
265 IF (surf_node_all(j2,i) /= 0 .AND.
266 . surf_node_all(j1,i) > surf_node_all(j2,i))
THEN
268 iw1(k)=surf_node_all(j2,i)
269 iw2(k)=surf_node_all(j1,i)
270 iw5(k)=surf_eltyp_all(i)
271 iw6(k)=surf_elem_all(i)
272 ELSEIF (surf_node_all(j1,i) /= 0 .AND.
273 . surf_node_all(j1,i) < surf_node_all
THEN
275 iw1(k)=surf_node_all(j1,i)
276 iw2(k)=surf_node_all(j2,i)
277 iw5(k)=surf_eltyp_all(i)
278 iw6(k)=surf_elem_all(i)
291 IF (nseg_edge_all > 0)
THEN
296 line_ord(1,nseg) = iw1(index(1))
297 line_ord(2,nseg) = iw2(index(1))
298 line_ord(3,nseg) = iw5(index(1))
299 line_ord(4,nseg) = iw6(index(1))
301 IF (iw1(index(i-1)) /= iw1(index(i)).OR.
302 . iw2(index(i-1)) /= iw2(index(i)))
THEN
304 line_ord(1,nseg) = iw1(index(i))
305 line_ord(2,nseg) = iw2(index(i))
306 line_ord(3,nseg) = iw5(index(i))
307 line_ord(4,nseg) = iw6(index(i))
323 itri(1,i) = line_ord(1,i)
324 itri(2,i) = line_ord(2,i)
325 itri(3,i) = line_ord(4,i)
327 CALL my_orders(0,iwork,itri,index,nseg,3)
336 IF (go_in_array .EQV. .true.)
THEN
337 delbuf%SZ_LINE = nseg
338 IF(
ALLOCATED(delbuf%LINE))
DEALLOCATE(delbuf%LINE)
339 ALLOCATE(delbuf%LINE(nseg,4))
341 delbuf%LINE(i,1) = line_ord(1,index(i))
342 delbuf%LINE(i,2) = line_ord(2,index(i))
343 delbuf%LINE(i,3) = line_ord(3,index(i))
344 delbuf%LINE(i,4) = line_ord(4,index(i))
347 IF (
ALLOCATED(clause%LINE_NODES))
DEALLOCATE(clause%LINE_NODES)
348 IF (
ALLOCATED(clause%LINE_ELTYP))
DEALLOCATE(clause%LINE_ELTYP)
349 IF (
ALLOCATED(clause%LINE_ELEM))
DEALLOCATE(clause%LINE_ELEM)
351 clause%NB_LINE_SEG = nseg
352 CALL my_alloc(clause%LINE_NODES,nseg,2)
353 CALL my_alloc(clause%LINE_ELTYP,nseg)
354 CALL my_alloc(clause%LINE_ELEM,nseg)
357 clause%LINE_NODES(i,1) = line_ord(1,index(i))
358 clause%LINE_NODES(i,2) = line_ord(2,index(i))
359 clause%LINE_ELTYP(i) = line_ord(3,index(i))
360 clause%LINE_ELEM(i) = line_ord(4,index(i))
364 IF (
ALLOCATED(line_ord))
DEALLOCATE(line_ord)
365 IF (
ALLOCATED(itri))
DEALLOCATE(itri)
366 IF (
ALLOCATED(index))
DEALLOCATE(index)
367 IF (
ALLOCATED(iw1))
DEALLOCATE(iw1)
368 IF (
ALLOCATED(iw2))
DEALLOCATE(iw2)
369 IF (
ALLOCATED(iw5))
DEALLOCATE(iw5)
370 IF (
ALLOCATED(iw6))
DEALLOCATE(iw6)
372 IF (
ALLOCATED(surf_node_ext))
DEALLOCATE(surf_node_ext)
373 IF (
ALLOCATED(surf_eltyp_ext))
DEALLOCATE(surf_eltyp_ext)
374 IF (
ALLOCATED(surf_elem_ext))
DEALLOCATE(surf_elem_ext)
375 IF (
ALLOCATED(surf_node_all))
DEALLOCATE(surf_node_all)
376 IF (
ALLOCATED(surf_eltyp_all))
DEALLOCATE(surf_eltyp_all)
377 IF (
ALLOCATED(surf_elem_all))
DEALLOCATE(surf_elem_all)