34
36 use element_mod , only : nixc
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "mvsiz_p.inc"
45
46
47
48#include "com04_c.inc"
49#include "com_xfem1.inc"
50#include "param_c.inc"
51
52
53
54 INTEGER NFT,JFT,JLT,NXLAY
55 INTEGER IPARG(NPARG,*),IXC(NIXC,*),ELCUTC(2,*),IADC_CRK(4,*),
56 . IEL_CRK(*),ENRTAG(NUMNOD,*),INOD_CRK(*),NODEDGE(2,*),XEDGE4N(4,*)
57
58
59
60 INTEGER I,K,K1,K2,IR,II,ELCRK,ILEV,LAYCUT,IECUT,ILAY,IXEL,NELCRK,
61 . IADC1,IADC2,IADC3,IADC4,IE10,IE20,IE1,IE2,NOD1,NOD2,IED,EDGE,
62 . EN1,EN2,EN3,EN4
63 INTEGER JCT(MVSIZ),ENR0(4),D(4),NS(4)
64 DATA d/2,3,4,1/
65 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
66
67
68 nelcrk = 0
69 DO i=jft,jlt
70 jct(i) = 0
71 IF (elcutc(1,i+nft) /= 0) THEN
72 nelcrk = nelcrk + 1
73 jct(nelcrk) = i
74 ENDIF
75 ENDDO
76 IF (nelcrk == 0) RETURN
77
78 DO ilay=1,nxlay
79 ii = nxel*(ilay-1)
80 DO ir=1,nelcrk
81 i = jct(ir)
82 elcrk = iel_crk(i+nft)
83 laycut = crkedge(ilay)%LAYCUT(elcrk)
84 IF (laycut /= 0) THEN
85 iadc1 = iadc_crk(1,elcrk)
86 iadc2 = iadc_crk(2,elcrk)
87 iadc3 = iadc_crk(3,elcrk)
88 iadc4 = iadc_crk(4,elcrk)
89 ns(1) = ixc(2,i+nft)
90 ns(2) = ixc(3,i+nft)
91 ns(3) = ixc(4,i+nft)
92 ns(4) = ixc(5,i+nft)
93
94 DO ixel=1,nxel
95 ilev = ii+ixel
96 enr0(1) = 0
97 enr0(2) = 0
98 enr0(3) = 0
99 enr0(4) = 0
104 IF (en1 /= 0) enr0(1) = en1
105 IF (en2 /= 0) enr0(2) = en2
106 IF (en3 /= 0) enr0(3) = en3
107 IF (en4 /= 0) enr0(4) = en4
108
109 DO k=1,4
110 edge = xedge4n(k,elcrk)
111 iecut = crkedge(ilay)%ICUTEDGE(edge)
112 ie1 = 0
113 ie2 = 0
114 ied = crkedge(ilay)%IEDGEC(k,elcrk)
115 IF (iecut == 3 .and. ied > 0) THEN
116 nod1 = nodedge(1,edge)
117 nod2 = nodedge(2,edge)
118 ie10 = crkedge(ilay)%EDGEENR(1,edge)
119 ie20 = crkedge(ilay)%EDGEENR(2,edge)
120 IF (nod1 == ixc(k+1,i+nft) .and.
121 . nod2 == ixc(d(k)+1,i+nft)) THEN
122 k1 = k
123 k2 = d(k)
124 ie1 = enr0(k)
125 ie2 = enr0(d(k))
126 ELSE IF (nod2 == ixc(k+1,i+nft) .and.
127 . nod1 == ixc(d(k)+1,i+nft)) THEN
128 k1 = d(k)
129 k2 = k
130 ie1 = enr0(d(k))
131 ie2 = enr0(k)
132 ENDIF
133
134
135
136 IF (ie1 /= 0) enrtag(ns(k1),abs(ie1))
137 . =
max(enrtag(ns(k1),abs
138 IF (ie2 /= 0) enrtag(ns(k2),abs(ie2))
139 . =
max(enrtag(ns(k2),abs(ie2)),ie20)
140
141
142
143
144
145
146
147
148 ENDIF
149 ENDDO
150 ENDDO
151 ENDIF
152 ENDDO
153 ENDDO
154
155 RETURN
type(xfem_lvset_), dimension(:), allocatable crklvset