38
39
40
43 USE matparam_def_mod
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "com01_c.inc"
65#include "com04_c.inc"
66#include "units_c.inc"
67#include "param_c.inc"
68#include "vect01_c.inc"
69#include "tabsiz_c.inc"
70
71
72
73 INTEGER KXIG3D(NIXIG3D,*),IPARG(NPARG,*),EADD(*),
74 . ND, (NSPMD+1,*),IDX,IGEO(NPROPGI,NUMGEO),
75 . LB_MAX, INUM(NIXIG3D+1,*), INDEX(*),CEP(*),
76 . IPARTIG3D(*), ITR1(*),NIGE(*)
77 my_real geo(npropg,numgeo),pm(npropm,nummat),knotlocel(*)
78 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
79 TYPE(MATPARAM_STRUCT_) , TARGET, DIMENSION(NUMMAT),INTENT(IN) ::
80
81
82
83 INTEGER NGR1, NG, , MTNN, I, NE1, N, NFIX,
84 . PID, NEL_PREC, LB_L, P, NEL,NB,
85 . , WORK(70000),NN,IAD1,NGROU, J,MID,IETYP,
86 . MT,IXIG3D(*),NUVAR,NUVARN,NXVIE,NXVIN,INND,II,inno,
87 . NGP(NSPMD+1),JALE_FROM_MAT,JALE_FROM_PROP
88 my_real knotlocelindx(sknotlocel)
89 TYPE(MATPARAM_STRUCT_) , POINTER :: MATPARAM
90
91 DATA nxvie/3/, nxvin/0/
92
93 npt = 1
94
95 ngr1 = ngroup + 1
96 nullify(matparam)
97
98
99
100 idx=idx+nd*(nspmd+1)
101 CALL zeroin(1,nd*(nspmd+1),dd_iad(1,nspgroup+1))
102 nft = 0
103
104 DO n=1,nd
105 DO p=1,nspmd+1
106 dd_iad(p,nspgroup+n) = 0
107 END DO
108 ENDDO
109
110 DO n=1,nd
111 nel = eadd(n+1)-eadd(n)
112
113 DO i = 1, nel
114 index(i) = i
115 inum(1,i)=ipartig3d(nft+i)
116 DO j=1,nixig3d
117 inum(j+1,i)=kxig3d(j,nft+i)
118 ENDDO
119 DO j=1,6
120 knotlocelindx((i-1)*6+j)=knotlocel((nft+i-1)*6+j)
121 ENDDO
122 ENDDO
123
124 mode=0
125 CALL my_orders( mode, work, cep(nft+1), index, nel , 1)
126 DO i = 1, nel
127 ipartig3d(i+nft)=inum(1,index(i))
128 DO j=1,6
129 knotlocel((i+nft-1)*6+j)=knotlocelindx((index(i)-1)*6+j)
130 ENDDO
131 DO j=1,nixig3d
132 kxig3d(j,i+nft)=inum(j+1,index(i))
133 ENDDO
134
135 itr1(nft+index(i)) = nft+i
136 ENDDO
137
138 p = cep(nft+index(1))
139 nb = 1
140 DO i = 2, nel
141 IF (cep(nft+index(i))/=p) THEN
142 dd_iad(p+1,nspgroup+n) = nb
143 nb = 1
144 p = cep(nft+index(i))
145 ELSE
146 nb = nb + 1
147 ENDIF
148 ENDDO
149 dd_iad(p+1,nspgroup+n) = nb
150 DO p = 2, nspmd
151 dd_iad(p,nspgroup+n) = dd_iad(p,nspgroup+n)
152 . + dd_iad(p-1,nspgroup+n)
153 ENDDO
154 DO p = nspmd+1,2,-1
155 dd_iad(p,nspgroup+n) = dd_iad(p-1,nspgroup+n)+1
156 ENDDO
157 dd_iad(1,nspgroup+n) = 1
158
159
160
161 DO i = 1, nel
162 index(i) = cep
163 ENDDO
164 DO i = 1, nel
165 cep(nft+i) = index(i)
166 ENDDO
167 nft = nft + nel
168 ENDDO
169
170
171
172 DO 300 n=1,nd
173 nft = 0
174 lb_l = lbufel
175 DO p = 1, nspmd
176 ngp(p)=0
177 nel = dd_iad(p+1,nspgroup+n)-dd_iad(p,nspgroup+n)
178 IF (nel>0) THEN
179 nel_prec = dd_iad(p,nspgroup+n)-dd_iad(1,nspgroup+n)
180 ngp(p)=ngroup
181 ng = (nel-1)/nvsiz + 1
182 DO 220 i=1,ng
183
184 ngroup=ngroup+1
185 ii = eadd(n)+nft
186 mid = kxig3d(1,ii)
187 pid = kxig3d(2,ii)
188 innd = kxig3d(3,ii)
189 mtnn= nint(pm(19,abs(kxig3d(1,ii))))
190 ietyp = 101
191 geo(8,pid)=ietyp + em01
192 matparam => matparam_tab(mid)
193
194 jale_from_mat = nint(pm(72,mid))
195 jale_from_prop = igeo(62,pid)
196 jale =
max(jale_from_mat, jale_from_prop)
197
198 jlag=0
199 IF(jale == 0.AND.mtnn/=18)jlag=1
200 jeul=0
201 IF(jale == 2)THEN
202 jale=0
203 jeul=1
204
205 ELSEIF(jale == 3 .AND. mtnn == 77) THEN
206 jlag=1
207 ENDIF
208
209
210
211
212 IF(jale == 1)THEN
213 ale%REZON%NUM_NUVAR_MAT =
ale%REZON%NUM_NUVAR_MAT + matparam%REZON%NUM_NUVAR_MAT
214 ale%REZON%NUM_NUVAR_EOS =
ale%REZON%NUM_NUVAR_EOS + matparam%REZON%NUM_NUVAR_EOS
215 ENDIF
216
217
218 IF(jale == 1)THEN
219 iparg(81,ngroup) = matparam%REZON%NUM_NUVAR_MAT
220 iparg(82,ngroup) = matparam%REZON%NUM_NUVAR_EOS
221 ENDIF
222
223 IF(mtnn/=50)jtur=nint(pm(70,mid))
224 jthe = nint(pm(71,mid))
225
226 CALL zeroin(1,nparg,iparg(1,ngroup))
227
228 ne1 =
min( nvsiz, nel + nel_prec - nft)
229 nuvar =nint( geo(25,pid))
230 nuvarn=nint( geo(35,pid))
231
232 iparg(1,ngroup) = mtnn
233 iparg(2,ngroup) = ne1
234 iparg(3,ngroup) = ii-1
235 iparg(4,ngroup) = 1
236 iparg(5,ngroup) = ietyp
237 iparg(6,ngroup) = npt
238 iparg(7,ngroup) = jale
239 iparg(11,ngroup)= jeul
240 iparg(12,ngroup)= jtur
241 iparg(13,ngroup)= jthe
242 IF(jale+jeul>0)iparg(13,ngroup)=-jthe
243 iparg(14,ngroup)= jlag
244 iparg(75,ngroup) = innd
245 iparg(62,ngroup) = pid
246 iparg(38,ngroup) = igeo(11,pid)
247 iparg(56,ngroup) = igeo(41,pid)
248 iparg(57,ngroup) = igeo(42,pid)
249 iparg(58,ngroup) = igeo(43,pid)
250
251
252
253
254 iparg(32,ngroup)= p-1
255 nft = nft + ne1
256 220 CONTINUE
257 ngp(p)=ngroup-ngp(p)
258 ENDIF
259 ENDDO
260 lb_l = lbufel - lb_l
261 lb_max =
max(lb_max,lb_l)
262
263 ngp(nspmd+1)=0
264 DO p = 1, nspmd
265 ngp(nspmd+1)=ngp(nspmd+1)+ngp(p)
266 dd_iad(p,nspgroup+n)=ngp(p)
267 END DO
268 dd_iad(nspmd+1,nspgroup+n)=ngp(nspmd+1)
269
270 300 CONTINUE
271
272 nspgroup = nspgroup + nd
273
274
275
276 DO i=1,nsurf
277 nn=igrsurf(i)%NSEG_IGE
278 DO j=1,nn
279 IF(igrsurf(i)%ELTYP_IGE(j) == 101)
280 . igrsurf(i)%ELEM_IGE(j) = itr1(igrsurf(i)%ELEM_IGE(j))
281 ENDDO
282 ENDDO
283
284 DO i=1,numfakenodigeo
285 nige(i)=itr1(nige(i))
286 ENDDO
287
288 WRITE(iout,1000)
289 WRITE(iout,1001)(n,iparg(1,n),iparg(2,n),iparg(3,n)+1,
290 + iparg(4,n),iparg(5,n),
291 + n=ngr1,ngroup)
292
293
294 1000 FORMAT(10x,' 3D - ISO-GEOMETRIC ELEMENT GROUPS '/
295 + 10x,' ----------------------------------'/
296 +' GROUP ELEMENT ELEMENT FIRST BUFFER ELEMENT '/
297 +' MATERIAL NUMBER ELEMENT ADDRESS TYPE '/)
298 1001 FORMAT(6(1x,i7,1x))
299 1002 FORMAT(' BUFFER LENGTH : ',i10 )
300
301
302 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
subroutine zeroin(n1, n2, ma)