41
42
43
46 USE tag_node_from_part_sphcel_mod
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "com04_c.inc"
55#include "param_c.inc"
56#include "sphcom.inc"
57
58
59
60 INTEGER IXS(NIXS,*),IXS10(6,*),IXS16(8,*),IXS20(12,*),
61 . IXQ(NIXQ,*),IXC(NIXC,*),IXTG(NIXTG,*),IXT(NIXT,*),
62 . IXP(NIXP,*),IXR(NIXR,*),IXX(*),KXX(*),KXSP(NISP,*)
64 . geo(npropg,*)
65
66 TYPE (SET_) :: CLAUSE
67 INTEGER ARRAY(*),SZ
68 LOGICAL GO_IN_ARRAY
69
70
71
72 INTEGER I,IND,LIMIT
73 INTEGER, ALLOCATABLE, DIMENSION(:) :: TAGNOD,CLAUSE_NODE
74 INTEGER IWORK(70000)
75 INTEGER, DIMENSION(:),ALLOCATABLE:: IDX,SORT
76
77
80 ALLOCATE(clause_node(numnod))
81
82 ind=0
83
84
85 IF ( clause%NB_SOLID > 0 )
87 . ixs ,ixs10 ,ixs20 ,ixs16 ,clause%NB_SOLID ,
88 . clause%SOLID ,
tagnod ,clause_node,ind )
89
90 IF ( clause%NB_QUAD > 0 )
92 . ixq ,nixq ,2 ,5 ,clause%NB_QUAD,
93 . clause%QUAD ,
tagnod,clause_node,ind )
94
95 IF ( clause%NB_SH4N > 0 )
97 . ixc ,nixc ,2 ,5 ,clause%NB_SH4N,
98 . clause%SH4N ,
tagnod,clause_node,ind )
99
100 IF ( clause%NB_SH3N > 0 .AND. clause%NB_TRIA == 0 )
102 . ixtg ,nixtg ,2 ,4 ,clause%NB_SH3N,
103 . clause%SH3N ,
tagnod,clause_node,ind )
104
105 IF ( clause%NB_TRIA > 0 )
107 . ixtg ,nixtg ,2 ,4 ,clause%NB_TRIA,
108 . clause%TRIA ,
tagnod,clause_node,ind )
109
110 IF ( clause%NB_TRUSS > 0 )
112 . ixt ,nixt ,2 ,3 ,clause%NB_TRUSS,
113 . clause%TRUSS,
tagnod,clause_node,ind )
114
115 IF ( clause%NB_BEAM > 0 )
117 . ixp ,nixp ,2 ,3 ,clause%NB_BEAM,
118 . clause%BEAM ,
tagnod,clause_node,ind )
119
120 IF ( clause%NB_SPRING > 0 )
122 . ixr ,geo ,clause%NB_SPRING ,clause%SPRING ,
tagnod,clause_node,ind)
123
124
125
126
127
128
129 IF ( clause%NB_SPHCEL > 0 )
130 . CALL tag_node_from_part_sphcel(
131 . clause%NB_SPHCEL ,clause%SPHCEL ,
tagnod,clause_node,ind,numnod)
132
133
134
135 limit = numnod/2
136 IF (ind < limit)THEN
137 ALLOCATE(idx(2*ind))
138 ALLOCATE(sort(ind))
139 sort(1:ind) = clause_node(1:ind)
141
142 DO i=1,ind
143 clause_node(i) = sort(idx(i))
144 ENDDO
145 DEALLOCATE(idx)
146 DEALLOCATE(sort)
147 ELSE
148 ind = 0
149 DO i=1,numnod
151 ind = ind + 1
152 clause_node(ind) = i
153 ENDIF
154 ENDDO
155 ENDIF
156
157
158
159
160
161 IF (go_in_array .EQV. .true.) THEN
162 sz = ind
163 array(1:ind) = clause_node(1:ind)
164 ELSE
165
166 sz=0
167 clause%NB_NODE = ind
168 IF(ALLOCATED( clause%NODE )) DEALLOCATE( clause%NODE )
169 ALLOCATE( clause%NODE(ind) )
170 clause%NODE(1:ind) = clause_node(1:ind)
171 ENDIF
172
174 DEALLOCATE(clause_node)
175
176 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
subroutine tag_node_from_1d_2d_elem(ix, nix, nix1, nix2, numel, elem, tagnod, clause_node, ind)
subroutine tag_node_from_solid(ixs, ixs10, ixs20, ixs16, numel, elem, tagnod, clause_node, ind)
subroutine tag_node_from_spring(ixr, geo, numelr, elem, tagnod, clause_node, ind)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)