32
33
34
36 use element_mod , only : nixc,nixtg
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "com01_c.inc"
45#include "com04_c.inc"
46#include "com_xfem1.inc"
47#include "param_c.inc"
48
49
50
51 INTEGER NCRKPART
52 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),INOD_CRK(*),
53 . NODLEVXF(*),INDX_CRK(*)
54 TYPE (XFEM_SHELL_) , DIMENSION(NLEVMAX) :: CRKSHELL
55
56
57
58 INTEGER NG,ITY,LFT,LLT,N,I,J,NEL,NFT,IXFEM,ILEV,NCOUNT,
59 . SHCOUNT,NCOUNTG
60 INTEGER TAG_ARRAY(NUMNOD),TAG_SHELLS_C(NUMELC),TAG_SHELLS_TG(NUMELTG),
61 . NLEVXF,NN(4),TYPE_SHELLS_C(NUMELC),TYPE_SHELLS_TG(NUMELTG)
62
63 DO ilev=1,nlevmax
64 crkshell(ilev)%CRKNUMSHELL = 0
65 crkshell(ilev)%CRKNUMSH4 = 0
66 crkshell(ilev)%CRKNUMSH3 = 0
67 ENDDO
68
69 DO ilev=1,nlevmax
70 tag_array=0
71 tag_shells_c=0
72 tag_shells_tg=0
73 shcount =0
74 type_shells_c=0
75 type_shells_tg=0
76
77 DO ng=1,ngroup
78 ixfem =iparg(54,ng)
79 IF (ixfem > 0) THEN
80 nel =iparg(2,ng)
81 nft =iparg(3,ng)
82 ity =iparg(5,ng)
83 nlevxf=iparg(65,ng)
84 lft=1
85 llt=nel
86 IF (ity == 3) THEN
87
88
89
90 DO i=lft,llt
91 n = i + nft
92 tag_array(ixc(2,n))=1
93 tag_array(ixc(3,n))=1
94 tag_array(ixc(4,n))=1
95 tag_array(ixc(5,n))=1
96
97 nn(1) = inod_crk(ixc(2,n))
98 nn(2) = inod_crk(ixc(3,n))
99 nn(3) = inod_crk(ixc(4,n))
100 nn(4) = inod_crk(ixc(5,n))
101
102 nodlevxf(nn(1)) = nlevxf
103 nodlevxf(nn(2)) = nlevxf
104 nodlevxf(nn(3)) = nlevxf
105 nodlevxf(nn(4)) = nlevxf
106
107 tag_shells_c(n) = ilev
108 type_shells_c(n) = 4
109 crkshell(ilev)%CRKNUMSHELL = crkshell(ilev)%CRKNUMSHELL+1
110 crkshell(ilev)%CRKNUMSH4 = crkshell(ilev)%CRKNUMSH4+1
111 ENDDO
112 ELSEIF (ity == 7) THEN
113
114
115
116 DO i=lft,llt
117 n = i + nft
118 tag_array(ixtg(2,n))=1
119 tag_array(ixtg(3,n))=1
120 tag_array(ixtg(4,n))=1
121
122 nn(1) = inod_crk(ixtg(2,n))
123 nn(2) = inod_crk(ixtg(3,n))
124 nn(3) = inod_crk(ixtg(4,n))
125
126 nodlevxf(nn(1)) = nlevxf
127 nodlevxf(nn(2)) = nlevxf
128 nodlevxf(nn(3)) = nlevxf
129
130 tag_shells_tg(n) = ilev
131 type_shells_tg(n) = 3
132 crkshell(ilev)%CRKNUMSHELL = crkshell(ilev)%CRKNUMSHELL+1
133 crkshell(ilev)%CRKNUMSH3 = crkshell(ilev)%CRKNUMSH3+1
134 ENDDO
135 ENDIF
136 ENDIF
137 ENDDO
138
139
140
141 shcount = crkshell(ilev)%CRKNUMSHELL
142 ALLOCATE (crkshell(ilev)%PHANTOML(shcount))
143 ALLOCATE (crkshell(ilev)%ELTYPE(shcount))
144
145 shcount=0
146 DO i=1, numelc
147 IF (tag_shells_c(i) > 0)THEN
148 shcount = shcount+1
149 crkshell(ilev)%PHANTOML(shcount)=i
150 crkshell(ilev)%ELTYPE(shcount)=type_shells_c(i)
151 ENDIF
152 ENDDO
153
154 DO i=1,numeltg
155 IF (tag_shells_tg(i) > 0)THEN
156 shcount = shcount+1
157 crkshell(ilev)%PHANTOML(shcount)=i
158 crkshell(ilev)%ELTYPE(shcount)=type_shells_tg(i)
159 ENDIF
160 ENDDO
161
162 ENDDO
163
164
165
166
167 ncount = 0
168 DO ilev=1,nlevmax
169 ALLOCATE(crkshell(ilev)%PHANTOMG(crkshell(ilev)%CRKNUMSHELL))
170
171 DO i=1,crkshell(ilev)%CRKNUMSHELL
172 ncount=ncount+1
173 crkshell(ilev)%PHANTOMG(i)=ncount
174 ENDDO
175 ENDDO
176
177
178
179
180
181
182 DO ilev=1,nlevmax
183 IF (crkshell(ilev)%CRKNUMSHELL > 0) THEN
184 ncrkpart = ncrkpart + 1
185 indx_crk(ncrkpart) = ilev
186 ENDIF
187 ENDDO
188
189
190
191
192
193 ncountg = 0
194 DO ilev=1,nlevmax
195 ALLOCATE(crkshell(ilev)%XNODEG(4,crkshell(ilev)%CRKNUMSHELL))
196 ALLOCATE(crkshell(ilev)%XNODEL(4,crkshell(ilev)%CRKNUMSHELL))
197
198 ncount = 0
199 DO i=1,crkshell(ilev)%CRKNUMSHELL
200 DO j=1,4
201 ncount = ncount + 1
202 ncountg = ncountg + 1
203 crkshell(ilev)%XNODEG(j,i) = ncountg
204 crkshell(ilev)%XNODEL(j,i) = ncount
205 END DO
206 ENDDO
207 ENDDO
208
209 ncrknodg = 4*crkshell(1)%CRKNUMSHELL
210
211 RETURN