125 if (fflag(ii,jj ,k).isRegular() && fflag(ii+1,jj ,k).isRegular() &&
126 fflag(ii,jj+1,k).isRegular() && fflag(ii+1,jj+1,k).isRegular())
128 cflag(i,j,k).setRegular();
129 cvol(i,j,k) = 1.0_rt;
130 ccent(i,j,k,0) = 0.0_rt;
131 ccent(i,j,k,1) = 0.0_rt;
133 cbc(i,j,k,0) = -1.0_rt;
134 cbc(i,j,k,1) = -1.0_rt;
135 cbn(i,j,k,0) = 0.0_rt;
136 cbn(i,j,k,1) = 0.0_rt;
138 else if (fflag(ii,jj ,k).isCovered() && fflag(ii+1,jj ,k).isCovered() &&
139 fflag(ii,jj+1,k).isCovered() && fflag(ii+1,jj+1,k).isCovered())
141 cflag(i,j,k).setCovered();
142 cvol(i,j,k) = 0.0_rt;
143 ccent(i,j,k,0) = 0.0_rt;
144 ccent(i,j,k,1) = 0.0_rt;
146 cbc(i,j,k,0) = -1.0_rt;
147 cbc(i,j,k,1) = -1.0_rt;
148 cbn(i,j,k,0) = 0.0_rt;
149 cbn(i,j,k,1) = 0.0_rt;
153 cflag(i,j,k).setSingleValued();
155 cvol(i,j,k) = 0.25_rt*(fvol(ii,jj ,k) + fvol(ii+1,jj ,k) +
156 fvol(ii,jj+1,k) + fvol(ii+1,jj+1,k));
157 Real cvolinv = 1.0_rt/cvol(i,j,k);
159 ccent(i,j,k,0) = 0.25_rt * cvolinv *
160 (fvol(ii ,jj ,k)*(0.5_rt*fcent(ii ,jj ,k,0)-0.25_rt) +
161 fvol(ii+1,jj ,k)*(0.5_rt*fcent(ii+1,jj ,k,0)+0.25_rt) +
162 fvol(ii ,jj+1,k)*(0.5_rt*fcent(ii ,jj+1,k,0)-0.25_rt) +
163 fvol(ii+1,jj+1,k)*(0.5_rt*fcent(ii+1,jj+1,k,0)+0.25_rt));
164 ccent(i,j,k,1) = 0.25_rt * cvolinv *
165 (fvol(ii ,jj ,k)*(0.5_rt*fcent(ii ,jj ,k,1)-0.25_rt) +
166 fvol(ii+1,jj ,k)*(0.5_rt*fcent(ii+1,jj ,k,1)-0.25_rt) +
167 fvol(ii ,jj+1,k)*(0.5_rt*fcent(ii ,jj+1,k,1)+0.25_rt) +
168 fvol(ii+1,jj+1,k)*(0.5_rt*fcent(ii+1,jj+1,k,1)+0.25_rt));
170 cba(i,j,k) = 0.5_rt*(fba(ii,jj ,k) + fba(ii+1,jj ,k) +
171 fba(ii,jj+1,k) + fba(ii+1,jj+1,k));
172 Real cbainv = 1.0_rt/cba(i,j,k);
174 cbc(i,j,k,0) = 0.5_rt * cbainv *
175 (fba(ii ,jj ,k)*(0.5_rt*fbc(ii ,jj ,k,0)-0.25_rt) +
176 fba(ii+1,jj ,k)*(0.5_rt*fbc(ii+1,jj ,k,0)+0.25_rt) +
177 fba(ii ,jj+1,k)*(0.5_rt*fbc(ii ,jj+1,k,0)-0.25_rt) +
178 fba(ii+1,jj+1,k)*(0.5_rt*fbc(ii+1,jj+1,k,0)+0.25_rt));
179 cbc(i,j,k,1) = 0.5_rt * cbainv *
180 (fba(ii ,jj ,k)*(0.5_rt*fbc(ii ,jj ,k,1)-0.25_rt) +
181 fba(ii+1,jj ,k)*(0.5_rt*fbc(ii+1,jj ,k,1)-0.25_rt) +
182 fba(ii ,jj+1,k)*(0.5_rt*fbc(ii ,jj+1,k,1)+0.25_rt) +
183 fba(ii+1,jj+1,k)*(0.5_rt*fbc(ii+1,jj+1,k,1)+0.25_rt));
185 Real nx = fbn(ii ,jj ,k,0)*fba(ii ,jj ,k)
186 + fbn(ii+1,jj ,k,0)*fba(ii+1,jj ,k)
187 + fbn(ii ,jj+1,k,0)*fba(ii ,jj+1,k)
188 + fbn(ii+1,jj+1,k,0)*fba(ii+1,jj+1,k);
189 Real ny = fbn(ii ,jj ,k,1)*fba(ii ,jj ,k)
190 + fbn(ii+1,jj ,k,1)*fba(ii+1,jj ,k)
191 + fbn(ii ,jj+1,k,1)*fba(ii ,jj+1,k)
192 + fbn(ii+1,jj+1,k,1)*fba(ii+1,jj+1,k);
193 Real nfac = 1.0_rt/std::sqrt(nx*nx+ny*ny+1.e-30_rt);
194 cbn(i,j,k,0) = nx*nfac;
195 cbn(i,j,k,1) = ny*nfac;
196 ierr = (nx == 0.0_rt && ny == 0.0_rt)
199 || ( fapx(ii,jj ,k)==1.0_rt && fapx(ii+2,jj ,k)==1.0_rt
200 && fapx(ii,jj+1,k)==1.0_rt && fapx(ii+2,jj+1,k)==1.0_rt
201 && fapy(ii,jj ,k)==1.0_rt && fapy(ii+1,jj ,k)==1.0_rt
202 && fapy(ii,jj+2,k)==1.0_rt && fapy(ii+1,jj+2,k)==1.0_rt);
207 cvol(i,j,k) = 1.0_rt;
208 ccent(i,j,k,0) = 0.0_rt;
209 ccent(i,j,k,1) = 0.0_rt;
211 cbc(i,j,k,0) = -1.0_rt;
212 cbc(i,j,k,1) = -1.0_rt;
213 cbn(i,j,k,0) = 0.0_rt;
214 cbn(i,j,k,1) = 0.0_rt;
219 capx(i,j,k) = 0.5_rt*(fapx(ii,jj,k) + fapx(ii,jj+1,k));
220 if (capx(i,j,k) != 0.0_rt) {
221 cfcx(i,j,k) = 0.5_rt / capx(i,j,k) *
222 (fapx(ii,jj ,k)*(0.5_rt*ffcx(ii,jj ,k)-0.25_rt) +
223 fapx(ii,jj+1,k)*(0.5_rt*ffcx(ii,jj+1,k)+0.25_rt));
224 if (fecy(ii,jj,k) ==
Real(1.0) && fecy(ii,jj+1,k) ==
Real(1.0)) {
225 cecy(i,j,k) =
Real(1.0);
227 cecy(i,j,k) = cfcx(i,j,k);
231 cfcx(i,j,k) = 0.0_rt;
232 cecy(i,j,k) = -1.0_rt;
237 capx(i,j,k) = 1.0_rt;
238 cfcx(i,j,k) = 0.0_rt;
239 cecy(i,j,k) = 1.0_rt;
244 capy(i,j,k) = 0.5_rt*(fapy(ii,jj,k) + fapy(ii+1,jj,k));
245 if (capy(i,j,k) != 0.0_rt) {
246 cfcy(i,j,k) = 0.5_rt / capy(i,j,k) *
247 (fapy(ii ,jj,k)*(0.5_rt*ffcy(ii ,jj,k)-0.25_rt) +
248 fapy(ii+1,jj,k)*(0.5_rt*ffcy(ii+1,jj,k)+0.25_rt));
249 if (fecx(ii,jj,k) ==
Real(1.0) && fecx(ii+1,jj,k) ==
Real(1.0)) {
250 cecx(i,j,k) =
Real(1.0);
252 cecx(i,j,k) = cfcy(i,j,k);
255 cfcy(i,j,k) = 0.0_rt;
256 cecx(i,j,k) = -1.0_rt;
261 capy(i,j,k) = 1.0_rt;
262 cfcy(i,j,k) = 0.0_rt;
263 cecx(i,j,k) = 1.0_rt;
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int coarsen_from_fine(int i, int j, Box const &bx, int ngrow, Array4< Real > const &cvol, Array4< Real > const &ccent, Array4< Real > const &cba, Array4< Real > const &cbc, Array4< Real > const &cbn, Array4< Real > const &capx, Array4< Real > const &capy, Array4< Real > const &cfcx, Array4< Real > const &cfcy, Array4< Real > const &cecx, Array4< Real > const &cecy, Array4< EBCellFlag > const &cflag, Array4< Real const > const &fvol, Array4< Real const > const &fcent, Array4< Real const > const &fba, Array4< Real const > const &fbc, Array4< Real const > const &fbn, Array4< Real const > const &fapx, Array4< Real const > const &fapy, Array4< Real const > const &ffcx, Array4< Real const > const &ffcy, Array4< Real const > const &fecx, Array4< Real const > const &fecy, Array4< EBCellFlag const > const &fflag)
Definition AMReX_EB2_2D_C.H:98