39#include "implicit_f.inc"
47 INTEGER I,K,J1,J2,SIZEMAX,NSEG,IEXT,NSEG_EDGE_EXT,
48 . NSEG_EDGE_ALL,NSEG_SURF,LINE_NENTITY
49 INTEGER IWORK(70000),IPERM(4)
53 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: INDEX,IW1,IW2,IW5,IW6
54 INTEGER ,
DIMENSION(:,:),
ALLOCATABLE :: ITRI,LINE_ORD
56 sizemax = clause%NB_LINE_SEG + 4*clause%NB_SURF_SEG
58 IF (sizemax == 0)
RETURN
62 ALLOCATE(line_ord(line_nentity,sizemax))
63 ALLOCATE(itri(3,sizemax))
64 ALLOCATE(index(2*sizemax))
66 ALLOCATE(iw1(4*sizemax))
67 ALLOCATE(iw2(4*sizemax))
68 ALLOCATE(iw5(4*sizemax))
69 ALLOCATE(iw6(4*sizemax))
72 nseg = clause%NB_LINE_SEG
75 line_ord(1,i) = clause%LINE_NODES(i,1)
76 line_ord(2,i) = clause%LINE_NODES(i,2)
77 line_ord(3,i) = clause%LINE_ELTYP(i)
78 line_ord(4,i) = clause%LINE_ELEM(i)
83 nseg_surf = clause%NB_SURF_SEG
84 IF (nseg_surf > 0)
THEN
100 IF (clause%SURF_NODES(i,j2) /= 0 .AND.
101 . clause%SURF_NODES(i,j1) > clause%SURF_NODES(i,j2))
THEN
103 iw1(k)=clause%SURF_NODES(i,j2)
104 iw2(k)=clause%SURF_NODES(i,j1)
105 iw5(k)=clause%SURF_ELTYP(i)
106 iw6(k)=clause%SURF_ELEM(i)
107 ELSEIF (clause%SURF_NODES(i,j1) /= 0 .AND.
108 . clause%SURF_NODES(i,j1) < clause%SURF_NODES(i,j2))
THEN
110 iw1(k)=clause%SURF_NODES(i,j1)
111 iw2(k)=clause%SURF_NODES(i,j2)
112 iw5(k)=clause%SURF_ELTYP(i)
113 iw6(k)=clause%SURF_ELEM(i)
126 IF (nseg_edge_ext > 0)
THEN
130 IF (iw1(index(1)) /= iw1(index(2)).OR.
131 . iw2(index(1)) /= iw2(index(2)))
THEN
133 line_ord(1,nseg) = iw1(index(1))
134 line_ord(2,nseg) = iw2(index(1))
135 line_ord(3,nseg) = iw5(index(1))
136 line_ord(4,nseg) = iw6(index(1))
139 IF ((iw1(index(i-1)) /= iw1(index(i)).OR.
140 . iw2(index(i-1)) /= iw2(index(i))).AND.
141 . (iw1(index(i+1)) /= iw1(index(i)).OR.
142 . iw2(index(i+1)) /= iw2(index(i))))
THEN
144 line_ord(1,nseg) = iw1(index(i))
145 line_ord(2,nseg) = iw2(index(i))
146 line_ord(3,nseg) = iw5(index(i))
147 line_ord(4,nseg) = iw6(index(i))
150 IF (iw1(index(k-1)) /= iw1(index(k)).OR.
151 . iw2(index(k-1)) /= iw2(index(k)))
THEN
153 line_ord(1,nseg) = iw1(index(k))
154 line_ord(2,nseg) = iw2(index(k))
155 line_ord(3,nseg) = iw5(index(k))
156 line_ord(4,nseg) = iw6(index(k))
170 itri(2,i) = line_ord(2,i)
171 itri(3,i) = line_ord(4,i)
173 CALL my_orders(0,iwork,itri,index,nseg,3)
177 IF (
ALLOCATED(clause%LINE_NODES))
DEALLOCATE(clause%LINE_NODES)
178 IF (
ALLOCATED(clause%LINE_ELTYP))
DEALLOCATE(clause%LINE_ELTYP)
179 IF (
ALLOCATED(clause%LINE_ELEM))
DEALLOCATE(clause%LINE_ELEM)
181 clause%NB_LINE_SEG = nseg
182 CALL my_alloc(clause%LINE_NODES,nseg,2)
183 CALL my_alloc(clause%LINE_ELTYP,nseg)
184 CALL my_alloc(clause%LINE_ELEM,nseg)
187 clause%LINE_NODES(i,1) = line_ord(1,index(i))
188 clause%LINE_NODES(i,2) = line_ord(2,index(i))
189 clause%LINE_ELTYP(i) = line_ord(3,index(i))
190 clause%LINE_ELEM(i) = line_ord(4,index(i))
193 IF (
ALLOCATED(line_ord))
DEALLOCATE(line_ord)
194 IF (
ALLOCATED(itri))
DEALLOCATE(itri)
195 IF (
ALLOCATED(index))
DEALLOCATE(index)
196 IF (
ALLOCATED(iw1))
DEALLOCATE(iw1)
197 IF (
ALLOCATED(iw2))
DEALLOCATE(iw2)
198 IF (
ALLOCATED(iw5))
DEALLOCATE(iw5)
199 IF (
ALLOCATED(iw6))
DEALLOCATE(iw6)