36
37
38
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "vect01_c.inc"
62#include "com04_c.inc"
63#include "param_c.inc"
64#include "sms_c.inc"
65
66
67
68 INTEGER IXT(5,*),ISEL(*),INUM(7,*),IPARTT(*),
69 . EADD(*),ITR1(*),INDEX(*),ITRI(5,*),
70 . ND, CEP(*), XEP(*),
71 . ITRUOFF(*), TAGPRT_SMS(*)
72 INTEGER ,INTENT(INOUT), DIMENSION(NUMELT) ::ITAGPRLD_TRUSS
73 my_real :: pm(npropm,*), geo(npropg,*)
74
75 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS
76 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
77
78
79
80 INTEGER :: I,J,K,L,NG, ISSN, NN,N,MLN,MID,PID ,NGROU
81 INTEGER :: II,JJ,II2,JJ2,II3,JJ3,II4,JJ4,II5,JJ5
82 INTEGER :: MSKMLN,MSKISN,MSKPID, MSKMID, MODE
83 INTEGER :: WORK(70000),IPRLD
85 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
86
87 DATA mskmln /o'07770000000'/
88 DATA mskisn /o'00000000700'/
89 DATA mskmid /o'07777777777'/
90 DATA mskpid /o'07777777777'/
91
92
93
94
95
96
97 DO i=1,numelt
98 eadd(i)=1
99 index(i)=i
100 inum(1,i)=ipartt(i)
101 inum(2,i)=itruoff(i)
102 inum(3,i)=ixt(1,i)
103 inum(4,i)=ixt(2,i)
104 inum(5,i)=ixt(3,i)
105 inum(6,i)=ixt(4,i)
106 inum(7,i)=ixt(5,i)
107 ENDDO
108
109 DO i=1,numelt
110 xep(i)=cep(i)
111 ENDDO
112
113
114 DO i = 1, numelt
115 ii = i
116 mid= ixt(1,ii)
117 mln= pm(19,mid)
118 pid= ixt(4,ii)
119 issn = 0
120 IF(geo(5,pid)/=0.) issn=1
121 iprld = itagprld_truss(ii)
122 IF (iprld>0) mln = mln+iprld
123
126
127 itri(1,i)=mln+issn
128 itri(2,i)=itruoff(i)
129
130 jsms = 0
131 IF(isms/=0)THEN
132 IF(idtgrs/=0)THEN
133 IF(tagprt_sms(ipartt(ii))/=0)jsms=1
134 ELSE
135 jsms=1
136 END IF
137 END IF
138
139 itri(3,i) = jsms
140
141
142
143 itri(4,i) = mid
144
145 itri(5,i) = pid
146
147 ENDDO
148
149 mode=0
150 CALL my_orders( mode, work, itri, index, numelt , 4)
151
152 DO i=1,numelt
153 ipartt(i) =inum(1,index(i))
154 itruoff(i) =inum(2,index(i))
155 ENDDO
156 DO k=1,5
157 DO i=1,numelt
158 ixt(k,i)=inum(k+2,index(i))
159 ENDDO
160 ENDDO
161
162 DO i=1,numelt
163 cep(i)=xep(index(i))
164 ENDDO
165
166
167
168 DO i=1,numelt
169 itr1(index(i))=i
170 ENDDO
171
172
173
174
175
176
177 DO i=1,nsurf
178 nn=igrsurf(i)%NSEG
179 DO j=1,nn
180 IF(igrsurf(i)%ELTYP(j) == 4)
181 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
182 ENDDO
183 ENDDO
184
185
186
187 DO i=1,ngrtrus
188 nn=igrtruss(i)%NENTITY
189 DO j=1,nn
190 igrtruss(i)%ENTITY(j) = itr1(igrtruss(i)%ENTITY(j))
191 ENDDO
192 ENDDO
193
194 inum(2,1:numelt)=itagprld_truss(1:numelt)
195 DO i=1,numelt
196 itagprld_truss(i) =inum(2,index(i))
197 ENDDO
198
199
200
201
202 nd=1
203 DO i=2,numelt
204 ii=itri(1,index(i))
205 jj=itri(1,index(i-1))
206 ii2=itri(2,index(i))
207 jj2=itri(2,index(i-1))
208 ii3=itri(3,index(i))
209 jj3=itri(3,index(i-1))
210 ii4=itri(4,index(i))
211 jj4=itri(4,index(i-1))
212 ii5=itri(5,index(i))
213 jj5=itri(5,index(i-1))
214
215 IF (ii/=jj .OR. ii2/=jj2 .OR. ii3/=jj3 .OR.
216 . ii4/=jj4 .OR. ii5/=jj5) THEN
217 nd=nd+1
218 eadd(nd)=i
219 ENDIF
220 ENDDO
221 eadd(nd+1) = numelt+1
222
223 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
int my_shiftr(int *a, int *n)
int my_shiftl(int *a, int *n)
int my_and(int *a, int *b)