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