45
47 USE elbufdef_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "param_c.inc"
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "com_xfem1.inc"
59#include "task_c.inc"
60#include "vect01_c.inc"
61
62
63
64 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),NGROUC,IGROUC(*),
65 . ELCUTC(2,*),IADC_CRK(*),IEL_CRK(*),INOD_CRK(*),XEDGE4N(4,*),
66 . XEDGE3N(3,*),ADDCNE_CRK(*),KNOD2ELC(*),NODEDGE(2,*),
67 . CRKNODIAD(*),IAD_EDGE(*),FR_EDGE(*),FR_NBEDGE(*),NODLEVXF(*)
69 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
70 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP,NXEL) :: XFEM_TAB
71 TYPE (XFEM_EDGE_) , DIMENSION(NXLAYMAX) :: CRKEDGE
72
73
74
75 INTEGER I,K,IG,NG,JFT,JLT,NEL,NF1,IXFEM,NLEV,N,ITG1,ITG2,FLAG,
76 . SIZE,LSDRC,ICUT,IEDGE,ELCRK,ELCRKTG,ELCUT,ILEV,ILAY,NXLAY,PP1
77 INTEGER ITSK,NODFTSK,NODLTSK,OMP_GET_THREAD_NUM
79
80 numelcrk2 = numelcrk
81 itg1 = 1+numelc
82 itg2 = 1+4*ecrkxfec
83
84 nodftsk = 1
85 nodltsk = numnod
86 CALL crk_coord_ini(addcne_crk,inod_crk,nodftsk,nodltsk,x,nodlevxf)
87
88
89 DO i=nodftsk,nodltsk
90 n = inod_crk(i)
91 IF (n > 0) THEN
92 knod2elc(n) = addcne_crk(n+1)-addcne_crk(n)
93 ENDIF
94 ENDDO
95
96 IF (nlevset == 0) RETURN
97
98 itg1 = 1+numelc
99 itg2 = 1+4*ecrkxfec
100
101
102
103
104 DO ig = 1, ngrouc
105 ng = igrouc(ig)
106 ity = iparg(5,ng)
107 off = iparg(8,ng)
108 ixfem = iparg(54,ng)
109 IF (off == 1) cycle
110 IF (ixfem == 0) cycle
111 IF (ity /= 3 .and. ity /=7 ) cycle
113
114 nxlay = elbuf_tab(ng)%NLAY
115 nel =iparg(2,ng)
116 nft =iparg(3,ng)
117 npt =iparg(6,ng)
118 lft = 1
120 jft = lft
121 jlt = llt
122
123 IF (ity == 3) THEN
124 CALL enrichc_ini(elbuf_tab(ng) ,xfem_tab(ng,1:nxel),
125 . ixc ,nft ,jft ,jlt ,nxlay ,
126 . iadc_crk ,iel_crk ,inod_crk ,elcutc ,nodedge ,
127 . crknodiad ,knod2elc ,x ,crkedge ,xedge4n )
128
129 ELSEIF (ity == 7) THEN
131 . ixtg ,nft ,jft ,jlt ,nxlay ,
132 . iadc_crk(itg2),iel_crk(itg1),inod_crk,elcutc
133 . crknodiad ,knod2elc ,x ,crkedge ,xedge3n )
134 END IF
135
137 END DO
138
139
140
141 DO ig = 1, ngrouc
142 ng = igrouc(ig)
143 ity = iparg(5,ng)
144 off = iparg(8,ng)
145 ixfem = iparg(54,ng)
146 IF (off == 1) GOTO 200
147 IF (ixfem == 0) GOTO 200
148 IF (ity/=3 .AND. ity/=7) GOTO 200
150
151 nel =iparg(2,ng)
152 nft =iparg(3,ng)
153 lft = 1
155 jft = lft
156 jlt = llt
157
158 IF (ity == 3) THEN
159 DO ilay=1,nxlay
160 pp1 = (ilay-1)*nxel + 1
161 DO i=jft,jlt
162 elcrk = iel_crk(i+nft)
163 elcut = 0
165 IF (elcut /= 0) THEN
166 DO k=1,4
167 iedge = xedge4n(k,elcrk)
168 icut = 0
169 IF (iedge > 0) icut = crkedge(ilay)%ICUTEDGE(iedge)
170 IF (icut == 2) crkedge(ilay)%ICUTEDGE(iedge) = 1
171 ENDDO
172 ENDIF
173 ENDDO
174 ENDDO
175 ELSE IF (ity == 7) THEN
176 DO ilay=1,nxlay
177 pp1 = (ilay-1)*nxel + 1
178 DO i=jft,jlt
179 elcrktg = iel_crk(i+nft+numelc)
180 elcrk = elcrktg + ecrkxfec
181 elcut = 0
183 IF (elcut /= 0)THEN
184 DO k=1,3
185 iedge = xedge3n(k,elcrktg)
186 icut = 0
187 IF (iedge > 0) icut = crkedge(ilay)%ICUTEDGE(iedge)
188 IF (icut == 2) crkedge(ilay)%ICUTEDGE(iedge) = 1
189 ENDDO
190 ENDIF
191 ENDDO
192 ENDDO
193 END IF
194
196 200 CONTINUE
197 END DO
198
199 IF (nspmd > 1) THEN
200 flag = 2
201 SIZE = nxlay
202 lsdrc = fr_nbedge(nspmd+1)
204 . flag ,crkedge)
205 END IF
206
207 RETURN
subroutine crk_coord_ini(addcne_crk, inod_crk, nodft, nodlt, x, nodlevxf)
subroutine enrichc_ini(elbuf_str, xfem_str, ixc, nft, jft, jlt, nxlay, iadc_crk, iel_crk, inod_crk, elcutc, nodedge, crknodiad, knod2elc, x, crkedge, xedge4n)
subroutine enrichtg_ini(elbuf_str, ixtg, nft, jft, jlt, nxlay, iad_crktg, iel_crktg, inod_crk, elcutc, nodedge, crknodiad, knod2elc, x, crkedge, xedge3n)
type(xfem_phantom_), dimension(:), allocatable xfem_phantom
subroutine spmd_exch_iedge(iad_edge, fr_edge, size, lsdrc, fr_nbedge, flag, crkedge)