51 amrex::Array4<amrex::Real>
const& crse,
52 amrex::Array4<amrex::Real const>
const& fine,
54 amrex::Array4<amrex::Real const>
const& cmsk,
55 int ccomp,
int fcomp, amrex::IntVect
const& ratio)
noexcept
58 const int facx = ratio[0];
59 const int facy = ratio[1];
60 const int facz = ratio[2];
61 const int ii = i*facx;
62 const int jj = j*facy;
63 const int kk = k*facz;
69 for (
int kref = 0; kref < facz; ++kref) {
70 for (
int jref = 0; jref < facy; ++jref) {
71 for (
int iref = 0; iref < facx; ++iref) {
72 const Real m = weight(ii+iref,jj+jref,kk+kref);
73 num += fine(ii+iref,jj+jref,kk+kref,n+fcomp) * m;
80 crse(i,j,k,n+ccomp) = (den > Real(0.0))
81 ? num * (Real(1.0)/den) * cmsk(i,j,0)
88 amrex::Array4<amrex::Real>
const& crse,
89 amrex::Array4<amrex::Real const>
const& fine,
90 amrex::Array4<amrex::Real const>
const& fmsk,
91 amrex::Array4<amrex::Real const>
const& cmsk,
92 int ccomp,
int fcomp, amrex::IntVect
const& ratio)
noexcept
94 avgdown_weighted(i,j,k,n,crse,fine,
MaskWeight{fmsk},cmsk,ccomp,fcomp,ratio);
101 amrex::Array4<amrex::Real>
const& crse,
102 amrex::Array4<amrex::Real const>
const& fine,
103 amrex::Array4<amrex::Real const>
const& fmsk,
104 amrex::Array4<amrex::Real const>
const& cmsk,
105 int ccomp,
int fcomp, amrex::IntVect
const& ratio,
int idir)
noexcept
108 const int facx = ratio[0];
109 const int facy = ratio[1];
110 const int facz = ratio[2];
111 const int ii = i*facx;
112 const int jj = j*facy;
113 const int kk = k*facz;
115 Real num = Real(0.0);
116 Real den = Real(0.0);
119 for (
int kref = 0; kref < facz; ++kref) {
120 for (
int jref = 0; jref < facy; ++jref) {
121 const Real m = amrex::min(Real(1.0), fmsk(ii,jj+jref,0));
122 num += fine(ii,jj+jref,kk+kref,n+fcomp) * m;
125 }
else if (idir == 1) {
126 for (
int kref = 0; kref < facz; ++kref) {
127 for (
int iref = 0; iref < facx; ++iref) {
128 const Real m = amrex::min(Real(1.0), fmsk(ii+iref,jj,0));
129 num += fine(ii+iref,jj,kk+kref,n+fcomp) * m;
133 for (
int jref = 0; jref < facy; ++jref) {
134 for (
int iref = 0; iref < facx; ++iref) {
135 const Real m = amrex::min(Real(1.0), fmsk(ii+iref,jj+jref,0));
136 num += fine(ii+iref,jj+jref,kk,n+fcomp) * m;
142 crse(i,j,k,n+ccomp) = (den > Real(0.0))
143 ? num * (Real(1.0)/den) * cmsk(i,j,0)