39
40
41
42
44 USE elbufdef_mod
45 use my_alloc_mod
46
47
48
49#include "implicit_f.inc"
50
51
52
53#include "param_c.inc"
54#include "com01_c.inc"
55#include "com04_c.inc"
56#include "com_xfem1.inc"
57#include "scr17_c.inc"
58#include "task_c.inc"
59
60
61
62 INTEGER (NPARG,*),EL2FA(*),NBF,IOFF(*),IEL_CRK(*),INDX_CRK(*),
63 . NBF_L,NBPART, IAD_CRKG(NSPMD,*),
64 . IPART(LIPART1,*),IPARTC(*),IPARTTG(*)
65 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP,NXEL), TARGET :: XFEM_TAB
66
67
68
69 INTEGER I,NG,NEL,NFT,ITY,LFT,LLT,N,ILEV,MLW,N_FA,IXFEM,NI,NLAY,
70 . ILAY,IXEL,CRKS,NEL_CRK,RBUF,ELCRK
71 INTEGER IE(NCRKPART),NELCRK(NCRKPART)
72 INTEGER,DIMENSION(:),ALLOCATABLE::IOFFBUF
73
75 my_real,
DIMENSION(:) ,
POINTER :: xoff
76
77 CALL my_alloc(ioffbuf,nbf_l)
78 nel_crk = 0
79
80 DO crks = 1,ncrkpart
81 ilev = indx_crk(crks)
82 nelcrk(crks) = nel_crk
83 nel_crk = nel_crk +
crkshell(ilev)%CRKNUMSHELL
84 ie(ilev) = 0
85 ENDDO
86
87 DO ng=1,ngroup
88 mlw =iparg(1,ng)
89 nel =iparg(2,ng)
90 ity =iparg(5,ng)
91 nft =iparg(3,ng)
92 ixfem =iparg(54,ng)
93 lft=1
94 llt=nel
95 IF (ixfem == 0) cycle
96
97 IF (ity == 3) THEN
98 ni = nft
99 ELSE
100 ni = nft + numelc
101 ENDIF
102
103
104
105 DO ixel=1,nxel
106 nlay = xfem_tab(ng,ixel)%NLAY
107 DO ilay=1,nlay
108
109 ilev = nxel*(ilay-1) + ixel
110 n_fa = nelcrk(ilev)
111
112 IF (nlay > 1) THEN
113 xoff => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)%OFF
114 ELSEIF (nlay == 1) THEN
115 xoff => xfem_tab(ng,ixel)%GBUF%OFF
116 ENDIF
117
118 IF (ity == 3) THEN
119
120 IF (mlw == 0 .OR. mlw == 13) THEN
121 DO i=lft,llt
122 n = i + ni
123 IF (iel_crk(n) > 0) THEN
124 ie(ilev) = ie(ilev) + 1
125 ioff(el2fa(n_fa+ie(ilev))) = 1
126 ENDIF
127 ENDDO
128 ELSE
129 DO i=lft,llt
130 n = i + ni
131 IF (iel_crk(n) > 0) THEN
132 offg = xoff(i)
133 ie(ilev) = ie(ilev) + 1
134 ioff(el2fa(n_fa+ie(ilev))) = nint(
min(offg,one))
135 ENDIF
136 ENDDO
137 ENDIF
138
139 ELSEIF (ity == 7) THEN
140
141 IF (mlw == 0 .OR. mlw == 13) THEN
142 DO i=lft,llt
143 n = i + ni
144 IF (iel_crk(n) > 0) THEN
145 ie(ilev) = ie(ilev) + 1
146 ioff(el2fa(n_fa+ie(ilev))) = 1
147 ENDIF
148 ENDDO
149 ELSE
150 DO i=lft,llt
151 n = i + ni
152 IF (iel_crk(n) > 0) THEN
153 offg = xoff(i)
154 ie(ilev) = ie(ilev) + 1
155 ioff(el2fa(n_fa+ie(ilev)))=nint(
min(offg,one))
156 ENDIF
157 ENDDO
158 ENDIF
159 ENDIF
160 ENDDO
161 ENDDO
162 ENDDO
163
164 IF (nspmd==1) THEN
166 ELSE
167 DO i = 1,nbf_l
168 ioffbuf(i) = ioff(i)
169 ENDDO
170
171 IF (ispmd == 0) THEN
172 rbuf = nbf
174 . iad_crkg,rbuf,2)
175 ELSE
176 rbuf = 1
178 . iad_crkg,rbuf,2)
179 END IF
180 ENDIF
181
182 DEALLOCATE(ioffbuf)
183 RETURN
type(xfem_shell_), dimension(:), allocatable crkshell
subroutine spmd_iget_partn(size, nbf_l, np, nbpart, iadg, srbuf, iflag)
void write_c_c(int *w, int *len)