36
37
38
39 USE my_alloc_mod
41 USE matparam_def_mod
42
43
44
45#include "implicit_f.inc"
46
47
48
49#include "vect01_c.inc"
50#include "com04_c.inc"
51#include "sphcom.inc"
52#include "param_c.inc"
53#include "scr17_c.inc"
54
55
56
57 INTEGER, DIMENSION(KVOISPH,NUMSPH),INTENT(INOUT) :: IXSPS
58 INTEGER KXSP(NISP,*),IPARG(NPARG,*),IXSP(KVOISPH,*),
59 . IPART(LIPART1,*),IPARTSP(*), EADD(*), CEPSP(*),
60 . IPM(NPROPMI,NUMMAT), IGEO(NPROPGI,NUMGEO),
61 . ND, SPH2SOL(*), SOL2SPH(2,*), IRST(3,NSPHSOL)
62 my_real pm(npropm,nummat), spbuf(nspbuf,numsph)
63 TYPE(MATPARAM_STRUCT_) ,DIMENSION(NUMMAT), INTENT(IN) :: MAT_PARAM
64
65
66
67 INTEGER NE, NG, MT, , I, J, MODE, II0, JJ0,
68 . II, JJ, II1, JJ1, II2, JJ2, II3, JJ3, II4, JJ4,
69 . N, IGTYP,IORDER,IPRT,ISLEEP,IUN,IFAIL,IEOS, IKIND, STAT,
70 . JALE_FROM_MAT,
71 INTEGER WORK(70000)
72 INTEGER, DIMENSION(:,:),ALLOCATABLE :: ITRI
73 INTEGER, DIMENSION(:),ALLOCATABLE :: INDEX
74 INTEGER, DIMENSION(:,:),ALLOCATABLE :: INUM
75 INTEGER, DIMENSION(:),ALLOCATABLE :: XEP
76 my_real,
DIMENSION(:,:),
ALLOCATABLE :: rnum
77 DATA iun/1/
78
79
80
81 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
84
85
86
87
88
89 CALL my_alloc(itri,7,numsph)
90 CALL my_alloc(index,2*numsph)
91 CALL my_alloc(inum,13,numsph)
92 CALL my_alloc(xep,numsph)
93 CALL my_alloc(rnum,nspbuf,numsph)
94
95 DO i=1,numsph
96 IF(nsphsol==0)THEN
97 itri(1,i)=0
98 ELSE
99 itri(1,i)=sph2sol(i)
100 END IF
101 itri(7,i)=i
102 index(i)=i
103 inum(1,i)=ipartsp(i)
104 inum(2,i)=kxsp(1,i)
105 inum(3,i)=kxsp(2,i)
106 inum(4,i)=kxsp(3,i)
107 inum(5,i)=kxsp(4,i)
108 inum(6,i)=kxsp(5,i)
109 inum(7,i)=kxsp(6,i)
110 inum(8,i)=kxsp(7,i)
111 inum(9,i)=kxsp(8,i)
112
113 DO j=1,nspbuf
114 rnum(j,i)=spbuf(j,i)
115 END DO
116 ENDDO
117
118 DO i=1,numsph
119 xep(i)=cepsp(i)
120 END DO
121
122 DO i = 1, numsph
123 DO j = 1, kvoisph
124 ixsps(j,i) = ixsp(j,i)
125 END DO
126 END DO
127
128 DO i = 1, numsph
129 iprt =ipartsp(i)
130 mt =ipart(1,iprt)
131 mln =nint(pm(19,abs(mt)))
132 ng =ipart(2,iprt)
133 igtyp = igeo(11,ng)
134 isorth=
min(iun,igeo(2,ng))
135 israt = ipm(3,mt)
136 ieos = ipm(4,mt)
137
138 iorder=get_u_geo(5,ng)
139 isleep=kxsp(2,i)
140 IF(nsphsol==0)THEN
141 itri(1,i)=0
142 ELSE
143 itri(1,i)=sph2sol(i)
144 END IF
145
146 jale_from_mat = nint(pm(72,mt))
147 jale_from_prop = igeo(62,ng)
148 jale =
max(jale_from_mat, jale_from_prop)
149
150 jlag=0
151 IF(jale==0.AND.mln/=18)jlag=1
152 jeul=0
153 IF(jale==2)THEN
154 jale=0
155 jeul=1
156 END IF
157 jtur=nint(pm(70,mt))
158 jthe=nint(pm(71,mt))
159 ifail = 0
160 IF (mat_param
161
167
168
169
170
171 IF(mln<28.OR.mln==36.OR.mln==46.OR.mln==47)mln=0
174 itri(2,i)=mln+jale+jlag+jeul+jtur+jthe+ifail
175
176 itri(3,i)=ng
177
178 itri(4,i)=mt
179
184
185 itri(5,i)=iorder+israt+isorth+ieos
186
187 itri(6,i)=isleep
188 END DO
189
190 mode = 0
191 CALL my_orders( mode, work, itri, index, numsph , 7)
192
193 DO i=1,numsph
194 ipartsp(i)= inum(1,index(i))
195 kxsp(1,i) = inum(2,index(i))
196 kxsp(2,i) = inum(3,index(i))
197 kxsp(3,i) = inum(4,index(i))
198 kxsp(4,i) = inum(5,index(i))
199 kxsp(5,i) = inum(6,index(i))
200 kxsp(6,i) = inum(7,index(i))
201 kxsp(7,i) = inum(8,index(i))
202 kxsp(8,i) = inum(9,index(i))
203
204
205 DO j=1,nspbuf
206 spbuf(j,i) = rnum(j,index(i))
207 ENDDO
208 END DO
209
210 DO i=1,numsph
211 cepsp(i) = xep(index(i))
212 END DO
213
214 DO i = 1, numsph
215 DO j = 1, kvoisph
216 ixsp(j,i) = ixsps(j,index(i))
217 END DO
218 END DO
219
220 IF(nsphsol/=0)THEN
221
222 DO i=1,numsph
223 inum(10,i)=sph2sol(i)
224 IF(i >= first_sphsol .AND. i < first_sphsol+nsphsol)THEN
225 inum(11,i)=irst(1,i-first_sphsol+1)
226 inum(12,i)=irst(2,i-first_sphsol+1)
227 inum(13,i)=irst(3,i-first_sphsol+1)
228 END IF
229 END DO
230
231 DO i=1,numsph
232 sph2sol(i) = inum(10,index(i))
233 IF(i >= first_sphsol .AND. i < first_sphsol+nsphsol)THEN
234
235 irst(1,i-first_sphsol+1)=inum(11,index(i))
236 irst(2,i-first_sphsol+1)=inum(12,index(i))
237 irst(3,i-first_sphsol+1)=inum(13,index(i))
238 END IF
239 END DO
240
241
242 DO n=1,numels8
243 sol2sph(1,n)=0
244 sol2sph(2,n)=0
245 END DO
246 n=sph2sol(first_sphsol)
247 sol2sph(1,n)=0
248 sol2sph(2,n)=sol2sph(1,n)+1
249 DO i=first_sphsol+1,first_sphsol+nsphsol-1
250 IF(sph2sol(i)==n)THEN
251 sol2sph(2,n)=sol2sph(2,n)+1
252 ELSE
253 n=sph2sol(i)
254 sol2sph(1,n)=i-1
255 sol2sph(2,n)=sol2sph(1,n)+1
256 END IF
257 END DO
258
259 END IF
260
261
262
263
264 nd=1
265 eadd(1) = 1
266 DO i=2,numsph
267 ii0=itri(1,index(i))
268 jj0=itri(1,index(i-1))
269 ii=itri(2,index(i))
270 jj=itri(2,index(i-1))
271 ii1=itri(3,index(i))
272 jj1=itri(3,index(i-1))
273 ii2=itri(4,index(i))
274 jj2=itri(4,index(i-1))
275 ii3=itri(5,index(i))
276 jj3=itri(5,index(i-1))
277 ii4=itri(6,index(i))
278 jj4=itri(6,index(i-1))
279 IF((ii0==0.AND.ii0/=jj0) .OR. ii/=jj .OR. ii1/=jj1.OR.ii2/=jj2 .OR. ii3/=jj3.OR.ii4/=jj4) THEN
280 nd=nd+1
281 eadd(nd)=i
282 END IF
283 END DO
284 eadd(nd+1) = numsph+1
285 ne = 0
286 DO n=1,nd
287 ne = ne + eadd(n+1)-eadd(n)
288 ENDDO
289 DEALLOCATE(itri)
290 DEALLOCATE(index)
291 DEALLOCATE(inum)
292 DEALLOCATE(xep)
293 DEALLOCATE(rnum)
294
295
296 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)