void set_boundary(BndryData& bd, const MultiFab& rhs, int comp=0) { BL_PROFILE("set_boundary"); Real bc_value = 0.0; for (int n=0; n<BL_SPACEDIM; ++n) { for (MFIter mfi(rhs); mfi.isValid(); ++mfi ) { int i = mfi.index(); const Box& bx = mfi.validbox(); // Our default will be that the face of this grid is either touching another grid // across an interior boundary or a periodic boundary. We will test for the other // cases below. { // Define the type of boundary conditions to be Dirichlet (even for periodic) bd.setBoundCond(Orientation(n, Orientation::low) ,i,comp,LO_DIRICHLET); bd.setBoundCond(Orientation(n, Orientation::high),i,comp,LO_DIRICHLET); // Set the boundary conditions to the cell centers outside the domain bd.setBoundLoc(Orientation(n, Orientation::low) ,i,0.5*dx[n]); bd.setBoundLoc(Orientation(n, Orientation::high),i,0.5*dx[n]); } // Now test to see if we should override the above with Dirichlet or Neumann physical bc's if (bc_type != Periodic) { int ibnd = static_cast<int>(bc_type); // either LO_DIRICHLET or LO_NEUMANN const Geometry& geom = bd.getGeom(); // We are on the low side of the domain in coordinate direction n if (bx.smallEnd(n) == geom.Domain().smallEnd(n)) { // Set the boundary conditions to live exactly on the faces of the domain bd.setBoundLoc(Orientation(n, Orientation::low) ,i,0.0 ); // Set the Dirichlet/Neumann boundary values bd.setValue(Orientation(n, Orientation::low) ,i, bc_value); // Define the type of boundary conditions bd.setBoundCond(Orientation(n, Orientation::low) ,i,comp,ibnd); } // We are on the high side of the domain in coordinate direction n if (bx.bigEnd(n) == geom.Domain().bigEnd(n)) { // Set the boundary conditions to live exactly on the faces of the domain bd.setBoundLoc(Orientation(n, Orientation::high) ,i,0.0 ); // Set the Dirichlet/Neumann boundary values bd.setValue(Orientation(n, Orientation::high) ,i, bc_value); // Define the type of boundary conditions bd.setBoundCond(Orientation(n, Orientation::high) ,i,comp,ibnd); } } } } }
ABecLaplacian::ABecLaplacian (const BndryData& _bd, const Real* _h) : LinOp(_bd,_h), alpha(alpha_def), beta(beta_def) { initCoefficients(_bd.boxes()); }
ABec4::ABec4 (const BndryData& _bd, const Real* _h) : LinOp(_bd,_h) { LO_Op = new ABec2(_bd,_h); buildWorkSpace(); initCoefficients(_bd.boxes()); }
void LinOp::bndryData (const BndryData& bd) { BL_ASSERT(gbox[0] == bd.boxes()); *bgb = bd; }