34
35
36
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "param_c.inc"
46#include "com01_c.inc"
47#include "com04_c.inc"
48
49
50
51 INTEGER CEP(*),NODLOCAL(*),IPARG(NPARG,*)
52 INTEGER NCLUSTER_L,PROC,LEN_IA,LEN_AM
53 INTEGER :: NUMLOCGROUP(NGROUP)
54 TYPE (CLUSTER_) ,DIMENSION(NCLUSTER) :: CLUSTER
55
56
57
58 INTEGER I,II,J,K,ID,NEL,NG,NELG,NNOD,NFT,ITY,IFAIL
59 INTEGER IL, RL
60 INTEGER ESHIFT(3), ILCLUSTER_MAX, RLCLUSTER_MAX
61 my_real,
DIMENSION(:),
ALLOCATABLE :: rcltab
62 INTEGER, DIMENSION(:), ALLOCATABLE :: ICLTAB,INDX,ILCLUSTER,RLCLUSTER
63
64
65 eshift(1) = 0
66 eshift(2) = numels+numelq+numelc+numelt+numelp
67 eshift(3) = numels+numelq+numelc+numelt+numelp
68 ALLOCATE(indx(ncluster_l))
69 ALLOCATE(ilcluster(ncluster_l))
70 ALLOCATE(rlcluster(ncluster_l))
71 j = 0
72 ilcluster(1:ncluster_l) = 0
73 rlcluster(1:ncluster_l) = 0
74 rlcluster_max = 0
75 ilcluster_max = 0
76
77 DO i = 1, ncluster
78 ity = cluster(i)%TYPE
79 IF ( cep(cluster(i)%ELEM(1) + eshift(ity)) == proc ) THEN
80 j = j + 1
81 nel = cluster(i)%NEL
82 nnod = cluster(i)%NNOD
83 ifail = cluster(i)%IFAIL
84 ilcluster(j) = 8 + 2 * (nel + nnod)
85 rlcluster(j) = 1
86 IF (ifail > 0) rlcluster(j) = rlcluster(j) + 4
87 IF (ifail == 3) rlcluster(j) = rlcluster(j) + 8
88 indx(j) = i
89 IF ( rlcluster_max < rlcluster(j) ) THEN
90 rlcluster_max = rlcluster(j)
91 ENDIF
92 IF ( ilcluster_max < ilcluster(j) ) THEN
93 ilcluster_max = ilcluster(j)
94 ENDIF
95 ENDIF
96 ENDDO
97
99 len_ia = len_ia + ncluster_l
101 len_ia = len_ia + ncluster_l
102
103 ALLOCATE (icltab(ilcluster_max))
104 ALLOCATE (rcltab(rlcluster_max)) ! real cluster table
105 DO i = 1, ncluster_l
106 ii = indx(i)
107
108
109
110
111 il = 0
112 rl = 0
113 icltab(il+1) = cluster(ii)%ID
114 icltab(il+2) = cluster(ii)%TYPE
115 icltab(il+3) = cluster(ii)%IFAIL
116 icltab(il+4) = cluster(ii)%IGR
117 icltab(il+5) = cluster(ii)%NEL
118 icltab(il+6) = cluster(ii)%NNOD
119 icltab(il+7) = cluster(ii)%SKEW
120 icltab(il+8) = cluster(ii)%OFF
121 il = il + 8
122 rcltab(rl+1) = cluster(ii)%FAIL
123 rl = rl + 1
124 nel = cluster(ii)%NEL
125 nnod = cluster(ii)%NNOD
126
127 DO j = 1,nel
128 id = cluster(ii)%ELEM(j)
129 k = 0
130 DO ng = 1,ngroup
131 nelg = iparg(2,ng)
132 nft = iparg(3,ng)
133 ity = iparg(5,ng)
134 IF (ity == 1 .AND. cluster(ii)%TYPE == 1) THEN
136 IF (k <= nelg) GOTO 100
137 ELSEIF (ity == 6 .AND. cluster(ii)%TYPE == 2) THEN
139 IF (k <= nelg) GOTO 100
140 ENDIF
141 ENDDO
142 100 CONTINUE
143 icltab(il + j) = numlocgroup(ng)
144 icltab(il + j+nel) = k
145 ENDDO
146
147 il = il + nel*2
148 DO j = 1,nnod
149 icltab(il + j) = nodlocal(cluster(ii)%NOD1(j))
150 icltab(il + j+nnod) = nodlocal(cluster(ii)%NOD2(j))
151 ENDDO
152 il = il + nnod*2
153
154 IF (cluster(ii)%IFAIL > 0) THEN
155 rcltab(rl + 1) = cluster(ii)%FMAX(1)
156 rcltab(rl + 2) = cluster(ii)%FMAX(2)
157 rcltab(rl + 3) = cluster(ii)%MMAX(1)
158 rcltab(rl + 4) = cluster(ii)%MMAX(2)
159 rl = rl + 4
160 ENDIF
161 IF (cluster(ii)%IFAIL == 3) THEN
162 rcltab(rl + 1) = cluster(ii)%AX(1)
163 rcltab(rl + 2) = cluster(ii)%AX(2)
164 rcltab(rl + 3) = cluster(ii)%AX(3)
165 rcltab(rl + 4) = cluster(ii)%AX(4)
166 rcltab(rl + 5) = cluster(ii)%NX(1)
167 rcltab(rl + 6) = cluster(ii)%NX(2)
168 rcltab(rl + 7) = cluster(ii)%NX(3)
169 rcltab(rl + 8) = cluster(ii)%NX(4)
170 rl = rl + 8
171 ENDIF
172
173
174 IF(il< ilcluster(i)) icltab(il+1:ilcluster(i)) = 0
175 IF(rl<rlcluster(i)) rcltab(rl+1:rlcluster(i)) = zero
176
177
179 len_am = len_am + rlcluster(i)
181 len_ia = len_ia + ilcluster(i)
182
183
184 ENDDO
185 DEALLOCATE (indx)
186 DEALLOCATE (ilcluster)
187 DEALLOCATE (rlcluster)
188 DEALLOCATE (rcltab)
189 DEALLOCATE (icltab)
190
191
192 RETURN
subroutine write_db(a, n)
void write_i_c(int *w, int *len)