34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "com04_c.inc"
61
62
63
64 TYPE (SET_) :: CLAUSE
65
66
67
68 INTEGER I,J,IND,NOD(4),NB_SEG_NODE,NB_SEG,LIMIT
69 INTEGER, ALLOCATABLE, DIMENSION(:) :: TAGNOD,CLAUSE_NODE
70 INTEGER IWORK(70000)
71 INTEGER, DIMENSION(:),ALLOCATABLE:: IDX,SORT
72
73
74 nb_seg_node = 4
75 nb_seg = clause%NB_SURF_SEG
76
77 IF (clause%NB_SURF_SEG == 0) THEN
78 nb_seg_node = 2
79 nb_seg = clause%NB_LINE_SEG
80 ENDIF
81
84 ALLOCATE(clause_node(numnod))
85
86 ind = 0
87
88 IF (clause%NB_SURF_SEG > 0) THEN
89
90 DO i=1,nb_seg
91 DO j=1,nb_seg_node
92 nod(j) = clause%SURF_NODES(i,j)
93 IF(
tagnod(nod(j)) == 0)
THEN
95 ind = ind+1
96 clause_node(ind) = nod(j)
97 ENDIF
98 ENDDO
99 ENDDO
100
101 ELSE
102
103 DO i=1,nb_seg
104 DO j=1,nb_seg_node
105 nod(j) = clause%LINE_NODES(i,j)
106 IF(
tagnod(nod(j)) == 0)
THEN
108 ind = ind+1
109 clause_node(ind) = nod(j)
110 ENDIF
111 ENDDO
112 ENDDO
113
114 ENDIF
115
116
117 limit = numnod/2
118 IF (ind < limit)THEN
119 ALLOCATE(idx(2*ind))
120 ALLOCATE(sort(ind))
121 sort(1:ind) = clause_node(1:ind)
123
124 DO i=1,ind
125 clause_node(i) = sort(idx(i))
126 ENDDO
127 DEALLOCATE(idx)
128 DEALLOCATE(sort)
129 ELSE
130 ind = 0
131 DO i=1,numnod
133 ind = ind + 1
134 clause_node(ind) = i
135 ENDIF
136 ENDDO
137 ENDIF
138
139
140
141 clause%NB_NODE = ind
142 IF(ALLOCATED( clause%NODE )) DEALLOCATE( clause%NODE )
143 ALLOCATE( clause%NODE(ind) )
144 clause%NODE(1:ind) = clause_node(1:ind)
145
146
148 DEALLOCATE(clause_node)
149
150 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)