LCOV - code coverage report
Current view: top level - src/BC/Operator/Elastic - Constant.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 43.3 % 393 170
Test Date: 2026-02-24 04:46:08 Functions: 73.3 % 15 11

            Line data    Source code
       1              : //
       2              : // This BC defines boundary conditions that are constant with respect to space.
       3              : // However they may change in time using the :ref:`Numeric::Interpolator::Linear` method.
       4              : // 
       5              : // In 2D, BCs are prescribed for each edge (4) and corner (4) on the boundary, for a total of 8 possible regions.
       6              : // In 3D, BCs are prescribed for each face (6), each edge (12), and each corner (8), for a total of 26 possible regions.
       7              : // Care must be taken to define BCs for edges/corners consistently with the faces/edges, or you will get poor 
       8              : // convergence and inaccurate behavior.
       9              : // (See :ref:`BC::Operator::Elastic::TensionTest` for a reduced BC with streamlined load options.)
      10              : //
      11              : // To define a boundary condition, you must define both a "type" and a "value" in each direction.
      12              : // The type can be "displacement", "disp", "neumann", "traction", "trac".
      13              : // The value is the corresponding value.
      14              : // All BCs are, by default, dirichlet (displacement) with a value of zero.
      15              : //
      16              : 
      17              : #ifndef BC_OPERATOR_ELASTIC_CONSTANT_H
      18              : #define BC_OPERATOR_ELASTIC_CONSTANT_H
      19              : 
      20              : // #include "Operator/Elastic.H"
      21              : #include "IO/ParmParse.H"
      22              : #include "Numeric/Interpolator/Linear.H"
      23              : #include "BC/Operator/Elastic/Elastic.H"
      24              : 
      25              : namespace BC
      26              : {
      27              : namespace Operator
      28              : {
      29              : namespace Elastic
      30              : {
      31              : class Constant : public Elastic
      32              : {
      33              : public:
      34              :     static constexpr const char* name = "constant";
      35              : 
      36           28 :     Constant()
      37           28 :     {
      38              :         // By default, all boundary conditions are displacement
      39          360 :         for (int face = 0; face < m_nfaces; face++)
      40         1152 :             for (int direction = 0; direction < AMREX_SPACEDIM; direction++)
      41              :             {
      42          820 :                 m_bc_type[face][direction] = Type::Displacement;
      43          820 :                 m_bc_val [face][direction] = 0.0;
      44              :             }
      45           28 :     };
      46              : 
      47           17 :     Constant(IO::ParmParse &pp, std::string name): Constant()
      48           17 :     { pp_queryclass(name,*this); }
      49              : 
      50           45 :     ~Constant() {};
      51              : 
      52              : 
      53              :     void
      54              :     Set(const Face face,
      55              :         const Direction direction,
      56              :         const Type type,
      57              :         const Set::Scalar value)
      58              :     {
      59              :         m_bc_type[face][direction] = type;
      60              :         m_bc_val [face][direction] = value;
      61              :     }
      62              : 
      63              :     void
      64              :     Set(const Face /*face*/,
      65              :         const Direction /*direction*/,
      66              :         const Type /*type*/,
      67              :         const Set::Scalar /*value*/,
      68              :         amrex::Vector<amrex::MultiFab *> &/*a_rhs*/,
      69              :         const amrex::Vector<amrex::Geometry> &/*a_geom*/)
      70              :     {
      71              :         Util::Abort(INFO,"This has been depricated");
      72              :     }
      73              : 
      74              :     void
      75              :     Set(const Face face,
      76              :         const Direction direction,
      77              :         const Type type,
      78              :         const Set::Scalar value,
      79              :         amrex::Vector<amrex::MultiFab> &a_rhs,
      80              :         const amrex::Vector<amrex::Geometry> &a_geom)
      81              :     {
      82              :         amrex::Vector<amrex::MultiFab *> pa_rhs = amrex::GetVecOfPtrs(a_rhs);
      83              :         Set(face,direction,type,value,pa_rhs,a_geom);
      84              :     }
      85              : 
      86              :     void
      87              :     Set(const Face face,
      88              :         const Direction direction,
      89              :         const Type type,
      90              :         const Set::Scalar value,
      91              :         amrex::Vector<std::unique_ptr<amrex::MultiFab> > &a_rhs,
      92              :         const amrex::Vector<amrex::Geometry> &a_geom)
      93              :     {
      94              :         amrex::Vector<amrex::MultiFab *> pa_rhs = amrex::GetVecOfPtrs(a_rhs);
      95              :         Set(face,direction,type,value,pa_rhs,a_geom);
      96              :     }
      97              : 
      98              :     //using Elastic::Init;
      99              :     
     100              :     virtual void
     101          784 :     Init(amrex::FabArray<amrex::BaseFab<Set::Vector>> *a_rhs,
     102              :         const amrex::Geometry &a_geom,
     103              :         bool a_homogeneous = false) const override
     104              :     {
     105          784 :             amrex::Box domain(a_geom.growPeriodicDomain(2));
     106         1568 :             domain.convert(amrex::IntVect::TheNodeVector());
     107          784 :             const amrex::Dim3 lo= amrex::lbound(domain), hi = amrex::ubound(domain);
     108         1701 :             for (amrex::MFIter mfi(*a_rhs, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
     109              :             {
     110          917 :                 amrex::Box bx = mfi.grownnodaltilebox();
     111          917 :                 bx = bx & domain;
     112          917 :                 amrex::Array4<Set::Vector> const& rhs       = a_rhs->array(mfi);
     113          917 :                 amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) {
     114              :                     
     115       821805 :                 for (int dir = 0; dir < AMREX_SPACEDIM; dir++)
     116              :                 {
     117       572870 :                     Face face = Face::INT;
     118              :                         
     119              :                     #if AMREX_SPACEDIM == 2
     120              :                         
     121       347870 :                     if      (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     122       347580 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     123       347300 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     124       347020 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     125              : 
     126       346738 :                     else if (i==lo.x) face = Face::XLO;
     127       343426 :                     else if (i==hi.x) face = Face::XHI;
     128       340574 :                     else if (j==lo.y) face = Face::YLO;
     129       337346 :                     else if (j==hi.y) face = Face::YHI;
     130              : 
     131              :                     #elif AMREX_SPACEDIM == 3
     132              : 
     133       225000 :                     if      (i==lo.x && j==lo.y && k==lo.z) face = Face::XLO_YLO_ZLO;
     134       223200 :                     else if (i==lo.x && j==lo.y && k==hi.z) face = Face::XLO_YLO_ZHI;
     135       221400 :                     else if (i==lo.x && j==hi.y && k==lo.z) face = Face::XLO_YHI_ZLO;
     136       219600 :                     else if (i==lo.x && j==hi.y && k==hi.z) face = Face::XLO_YHI_ZHI;
     137       217800 :                     else if (i==hi.x && j==lo.y && k==lo.z) face = Face::XHI_YLO_ZLO;
     138       216000 :                     else if (i==hi.x && j==lo.y && k==hi.z) face = Face::XHI_YLO_ZHI;
     139       214200 :                     else if (i==hi.x && j==hi.y && k==lo.z) face = Face::XHI_YHI_ZLO;
     140       212400 :                     else if (i==hi.x && j==hi.y && k==hi.z) face = Face::XHI_YHI_ZHI;
     141              : 
     142       210600 :                     else if (j==lo.y && k==lo.z) face = Face::YLO_ZLO;
     143       205200 :                     else if (j==lo.y && k==hi.z) face = Face::YLO_ZHI;
     144       199800 :                     else if (j==hi.y && k==lo.z) face = Face::YHI_ZLO;
     145       194400 :                     else if (j==hi.y && k==hi.z) face = Face::YHI_ZHI;
     146       189000 :                     else if (k==lo.z && i==lo.x) face = Face::ZLO_XLO;
     147       183600 :                     else if (k==lo.z && i==hi.x) face = Face::ZLO_XHI;
     148       178200 :                     else if (k==hi.z && i==lo.x) face = Face::ZHI_XLO;
     149       172800 :                     else if (k==hi.z && i==hi.x) face = Face::ZHI_XHI;
     150       167400 :                     else if (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     151       162000 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     152       156600 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     153       151200 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     154              : 
     155       145800 :                     else if (i==lo.x) face = Face::XLO;
     156       129600 :                     else if (i==hi.x) face = Face::XHI;
     157       113400 :                     else if (j==lo.y) face = Face::YLO;
     158        97200 :                     else if (j==hi.y) face = Face::YHI;
     159        81000 :                     else if (k==lo.z) face = Face::ZLO;
     160        64800 :                     else if (k==hi.z) face = Face::ZHI;
     161              : 
     162              :                     #endif
     163              : 
     164       572870 :                     if (a_geom.isPeriodic(0) && a_geom.isPeriodic(1))
     165              :                     {
     166            0 :                         if (face == Face::XLO || face == Face::XHI ||
     167            0 :                             face == Face::YLO || face == Face::YHI) continue;
     168              :                     }
     169       572870 :                     if (a_geom.isPeriodic(0))
     170              :                     {
     171            0 :                         if (face == Face::XLO || face==Face::XHI) continue;
     172              :                     }
     173       572870 :                     if (a_geom.isPeriodic(1))
     174              :                     {
     175        58092 :                         if (face == Face::YLO || face==Face::YHI) continue;
     176              :                     }
     177              :                     #if AMREX_SPACEDIM == 3
     178       225000 :                     if (a_geom.isPeriodic(2))
     179              :                     {
     180            0 :                         if (face == Face::ZLO || face==Face::ZHI) continue;
     181              :                     }
     182              :                     #endif
     183              : 
     184       571378 :                     if (!(face == Face::INT))
     185              :                     {
     186       188220 :                         if (a_homogeneous && m_bc_type[face][dir] == Type::Displacement) 
     187            0 :                             rhs(i,j,k)(dir) = 0.0;
     188              :                         else 
     189       376440 :                             rhs(i,j,k)(dir) = m_bc_val[face][dir](m_time);
     190              :                     }
     191              :                 }
     192       248935 :             });
     193          784 :         }                    
     194          784 :     }
     195              : 
     196              :     using Elastic::Init;
     197              :     virtual void
     198            0 :     Init(amrex::MultiFab * a_rhs,
     199              :         const amrex::Geometry &a_geom,
     200              :         bool a_homogeneous = false) const override
     201              :     {
     202            0 :             amrex::Box domain(a_geom.Domain());
     203            0 :             domain.convert(amrex::IntVect::TheNodeVector());
     204            0 :             const amrex::Dim3 lo= amrex::lbound(domain), hi = amrex::ubound(domain);
     205            0 :             for (amrex::MFIter mfi(*a_rhs, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
     206              :             {
     207            0 :                 amrex::Box bx = mfi.tilebox();
     208            0 :                 bx.grow(2);
     209            0 :                 bx = bx & domain;
     210            0 :                 amrex::Array4<amrex::Real> const& rhs       = a_rhs->array(mfi);
     211            0 :                 amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) {
     212              :                     
     213            0 :                 for (int dir = 0; dir < AMREX_SPACEDIM; dir++)
     214              :                 {
     215            0 :                     Face face = Face::INT;
     216              :                         
     217              :                     #if AMREX_SPACEDIM == 2
     218              :                         
     219            0 :                     if      (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     220            0 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     221            0 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     222            0 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     223              : 
     224            0 :                     else if (i==lo.x) face = Face::XLO;
     225            0 :                     else if (i==hi.x) face = Face::XHI;
     226            0 :                     else if (j==lo.y) face = Face::YLO;
     227            0 :                     else if (j==hi.y) face = Face::YHI;
     228              : 
     229              :                     #elif AMREX_SPACEDIM == 3
     230              : 
     231            0 :                     if      (i==lo.x && j==lo.y && k==lo.z) face = Face::XLO_YLO_ZLO;
     232            0 :                     else if (i==lo.x && j==lo.y && k==hi.z) face = Face::XLO_YLO_ZHI;
     233            0 :                     else if (i==lo.x && j==hi.y && k==lo.z) face = Face::XLO_YHI_ZLO;
     234            0 :                     else if (i==lo.x && j==hi.y && k==hi.z) face = Face::XLO_YHI_ZHI;
     235            0 :                     else if (i==hi.x && j==lo.y && k==lo.z) face = Face::XHI_YLO_ZLO;
     236            0 :                     else if (i==hi.x && j==lo.y && k==hi.z) face = Face::XHI_YLO_ZHI;
     237            0 :                     else if (i==hi.x && j==hi.y && k==lo.z) face = Face::XHI_YHI_ZLO;
     238            0 :                     else if (i==hi.x && j==hi.y && k==hi.z) face = Face::XHI_YHI_ZHI;
     239              : 
     240            0 :                     else if (j==lo.y && k==lo.z) face = Face::YLO_ZLO;
     241            0 :                     else if (j==lo.y && k==hi.z) face = Face::YLO_ZHI;
     242            0 :                     else if (j==hi.y && k==lo.z) face = Face::YHI_ZLO;
     243            0 :                     else if (j==hi.y && k==hi.z) face = Face::YHI_ZHI;
     244            0 :                     else if (k==lo.z && i==lo.x) face = Face::ZLO_XLO;
     245            0 :                     else if (k==lo.z && i==hi.x) face = Face::ZLO_XHI;
     246            0 :                     else if (k==hi.z && i==lo.x) face = Face::ZHI_XLO;
     247            0 :                     else if (k==hi.z && i==hi.x) face = Face::ZHI_XHI;
     248            0 :                     else if (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     249            0 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     250            0 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     251            0 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     252              : 
     253            0 :                     else if (i==lo.x) face = Face::XLO;
     254            0 :                     else if (i==hi.x) face = Face::XHI;
     255            0 :                     else if (j==lo.y) face = Face::YLO;
     256            0 :                     else if (j==hi.y) face = Face::YHI;
     257            0 :                     else if (k==lo.z) face = Face::ZLO;
     258            0 :                     else if (k==hi.z) face = Face::ZHI;
     259              : 
     260              :                     #endif
     261              :                     
     262            0 :                     if (a_geom.isPeriodic(0) && a_geom.isPeriodic(1))
     263              :                     {
     264            0 :                         if (face == Face::XLO || face == Face::XHI ||
     265            0 :                             face == Face::YLO || face == Face::YHI) continue;
     266              :                     }
     267            0 :                     if (a_geom.isPeriodic(0))
     268              :                     {
     269            0 :                         if (face == Face::XLO || face==Face::XHI) continue;
     270              :                     }
     271            0 :                     if (a_geom.isPeriodic(1))
     272              :                     {
     273            0 :                         if (face == Face::YLO || face==Face::YHI) continue;
     274              :                     }
     275              : 
     276            0 :                     if (!(face == Face::INT))
     277              :                     {
     278            0 :                         if (a_homogeneous && m_bc_type[face][dir] == Type::Displacement) 
     279            0 :                             rhs(i,j,k,dir) = 0.0;
     280              :                         else 
     281            0 :                             rhs(i,j,k,dir) = m_bc_val[face][dir](m_time);
     282              :                     }
     283              :                 }
     284            0 :             });
     285            0 :         }                    
     286            0 :     }
     287              : 
     288              :     virtual
     289            0 :     std::array<Type,AMREX_SPACEDIM> getType (
     290              :                 const int &i, const int &j, [[maybe_unused]] const int &k,
     291              :                 const amrex::Box &domain) override
     292              :     {
     293            0 :         amrex::IntVect m(AMREX_D_DECL(i,j,k));
     294              :         const amrex::Dim3 lo = amrex::lbound(domain), hi = amrex::ubound(domain);
     295              : 
     296              :         // Corners
     297              :         #if AMREX_SPACEDIM == 2
     298            0 :         if (m[0] == lo.x && m[1] == lo.y)                  return m_bc_type[Face::XLO_YLO];
     299            0 :         if (m[0] == lo.x && m[1] == hi.y)                  return m_bc_type[Face::XLO_YHI];
     300            0 :         if (m[0] == hi.x && m[1] == lo.y)                  return m_bc_type[Face::XHI_YLO];
     301            0 :         if (m[0] == hi.x && m[1] == hi.y)                  return m_bc_type[Face::XHI_YHI];
     302            0 :         if (m[0] == lo.x)                                  return m_bc_type[Face::XLO];
     303            0 :         if (m[0] == hi.x)                                  return m_bc_type[Face::XHI];
     304            0 :         if (m[1] == lo.y)                                  return m_bc_type[Face::YLO];
     305            0 :         if (m[1] == hi.y)                                  return m_bc_type[Face::YHI];
     306              :         
     307              :         #elif AMREX_SPACEDIM == 3
     308              :         
     309            0 :         if (m[0] == lo.x &&  m[1] == lo.y && m[2] == lo.z) return m_bc_type[Face::XLO_YLO_ZLO];
     310            0 :         if (m[0] == lo.x &&  m[1] == lo.y && m[2] == hi.z) return m_bc_type[Face::XLO_YLO_ZHI];
     311            0 :         if (m[0] == lo.x &&  m[1] == hi.y && m[2] == lo.z) return m_bc_type[Face::XLO_YHI_ZLO];
     312            0 :         if (m[0] == lo.x &&  m[1] == hi.y && m[2] == hi.z) return m_bc_type[Face::XLO_YHI_ZHI];
     313            0 :         if (m[0] == hi.x &&  m[1] == lo.y && m[2] == lo.z) return m_bc_type[Face::XHI_YLO_ZLO];
     314            0 :         if (m[0] == hi.x &&  m[1] == lo.y && m[2] == hi.z) return m_bc_type[Face::XHI_YLO_ZHI];
     315            0 :         if (m[0] == hi.x &&  m[1] == hi.y && m[2] == lo.z) return m_bc_type[Face::XHI_YHI_ZLO];
     316            0 :         if (m[0] == hi.x &&  m[1] == hi.y && m[2] == hi.z) return m_bc_type[Face::XHI_YHI_ZHI];
     317              :         
     318            0 :         if (m[1] == lo.y && m[2] == lo.z)                  return m_bc_type[Face::YLO_ZLO];
     319            0 :         if (m[1] == lo.y && m[2] == hi.z)                  return m_bc_type[Face::YLO_ZHI];
     320            0 :         if (m[1] == hi.y && m[2] == lo.z)                  return m_bc_type[Face::YHI_ZLO];
     321            0 :         if (m[1] == hi.y && m[2] == hi.z)                  return m_bc_type[Face::YHI_ZHI];
     322            0 :         if (m[2] == lo.z && m[0] == lo.x)                  return m_bc_type[Face::ZLO_XLO];
     323            0 :         if (m[2] == lo.z && m[0] == hi.x)                  return m_bc_type[Face::ZLO_XHI];
     324            0 :         if (m[2] == hi.z && m[0] == lo.x)                  return m_bc_type[Face::ZHI_XLO];
     325            0 :         if (m[2] == hi.z && m[0] == hi.x)                  return m_bc_type[Face::ZHI_XHI];
     326            0 :         if (m[0] == lo.x && m[1] == lo.y)                  return m_bc_type[Face::XLO_YLO];
     327            0 :         if (m[0] == lo.x && m[1] == hi.y)                  return m_bc_type[Face::XLO_YHI];
     328            0 :         if (m[0] == hi.x && m[1] == lo.y)                  return m_bc_type[Face::XHI_YLO];
     329            0 :         if (m[0] == hi.x && m[1] == hi.y)                  return m_bc_type[Face::XHI_YHI];
     330              :         
     331            0 :         if (m[0] == lo.x)                                  return m_bc_type[Face::XLO];
     332            0 :         if (m[0] == hi.x)                                  return m_bc_type[Face::XHI];
     333            0 :         if (m[1] == lo.y)                                  return m_bc_type[Face::YLO];
     334            0 :         if (m[1] == hi.y)                                  return m_bc_type[Face::YHI];
     335            0 :         if (m[2] == lo.z)                                  return m_bc_type[Face::ZLO];
     336            0 :         if (m[2] == hi.z)                                  return m_bc_type[Face::ZHI];
     337              :         
     338              :         #endif        
     339              : 
     340            0 :         return {AMREX_D_DECL(Type::None,Type::None,Type::None)};
     341              :     }
     342              : 
     343              : 
     344              :     AMREX_FORCE_INLINE
     345      7896071 :     Set::Vector operator () (const Set::Vector &u,
     346              :                 const Set::Matrix &gradu,
     347              :                 const Set::Matrix &sigma,
     348              :                 const int &i, const int &j, const int &k,
     349              :                 const amrex::Box &domain) override
     350              :     {
     351              :         (void)i; (void)j; (void)k; // Suppress "unused variable" warnings
     352              :         //Set::Vector f;
     353              : 
     354              :         const amrex::Dim3 lo= amrex::lbound(domain), hi = amrex::ubound(domain);
     355              :         
     356      7896071 :         amrex::IntVect m(AMREX_D_DECL(i,j,k));
     357              : 
     358              :         // Corners
     359              :         #if AMREX_SPACEDIM == 2
     360              :         
     361      2217515 :         if (m[0] == lo.x && m[1] == lo.y)                  return set(m_bc_type[Face::XLO_YLO],     u, gradu, sigma, Set::Vector(-SQRT2INV, -SQRT2INV));
     362      2016278 :         if (m[0] == lo.x && m[1] == hi.y)                  return set(m_bc_type[Face::XLO_YHI],     u, gradu, sigma, Set::Vector(-SQRT2INV, +SQRT2INV));
     363      2000288 :         if (m[0] == hi.x && m[1] == lo.y)                  return set(m_bc_type[Face::XHI_YLO],     u, gradu, sigma, Set::Vector(+SQRT2INV, -SQRT2INV));
     364      1799043 :         if (m[0] == hi.x && m[1] == hi.y)                  return set(m_bc_type[Face::XHI_YHI],     u, gradu, sigma, Set::Vector(+SQRT2INV, +SQRT2INV));
     365              :         
     366      1513183 :         if (m[0] == lo.x)                                  return set(m_bc_type[Face::XLO],         u, gradu, sigma, Set::Vector(-1, 0));
     367      1163040 :         if (m[0] == hi.x)                                  return set(m_bc_type[Face::XHI],         u, gradu, sigma, Set::Vector(+1, 0));
     368       790149 :         if (m[1] == lo.y)                                  return set(m_bc_type[Face::YLO],         u, gradu, sigma, Set::Vector( 0,-1));
     369       526478 :         if (m[1] == hi.y)                                  return set(m_bc_type[Face::YHI],         u, gradu, sigma, Set::Vector( 0,+1));
     370              :         
     371              :         #elif AMREX_SPACEDIM == 3
     372              :         
     373      8799666 :         if (m[0] == lo.x &&  m[1] == lo.y && m[2] == lo.z) return set(m_bc_type[Face::XLO_YLO_ZLO], u, gradu, sigma, Set::Vector(-SQRT3INV,-SQRT3INV,-SQRT3INV));
     374      8381304 :         if (m[0] == lo.x &&  m[1] == lo.y && m[2] == hi.z) return set(m_bc_type[Face::XLO_YLO_ZHI], u, gradu, sigma, Set::Vector(-SQRT3INV,-SQRT3INV,+SQRT3INV));
     375      8241850 :         if (m[0] == lo.x &&  m[1] == hi.y && m[2] == lo.z) return set(m_bc_type[Face::XLO_YHI_ZLO], u, gradu, sigma, Set::Vector(-SQRT3INV,+SQRT3INV,-SQRT3INV));
     376      7823488 :         if (m[0] == lo.x &&  m[1] == hi.y && m[2] == hi.z) return set(m_bc_type[Face::XLO_YHI_ZHI], u, gradu, sigma, Set::Vector(-SQRT3INV,+SQRT3INV,+SQRT3INV));
     377      8241850 :         if (m[0] == hi.x &&  m[1] == lo.y && m[2] == lo.z) return set(m_bc_type[Face::XHI_YLO_ZLO], u, gradu, sigma, Set::Vector(+SQRT3INV,-SQRT3INV,-SQRT3INV));
     378      7823488 :         if (m[0] == hi.x &&  m[1] == lo.y && m[2] == hi.z) return set(m_bc_type[Face::XHI_YLO_ZHI], u, gradu, sigma, Set::Vector(+SQRT3INV,-SQRT3INV,+SQRT3INV));
     379      7684034 :         if (m[0] == hi.x &&  m[1] == hi.y && m[2] == lo.z) return set(m_bc_type[Face::XHI_YHI_ZLO], u, gradu, sigma, Set::Vector(+SQRT3INV,+SQRT3INV,-SQRT3INV));
     380      7265672 :         if (m[0] == hi.x &&  m[1] == hi.y && m[2] == hi.z) return set(m_bc_type[Face::XHI_YHI_ZHI], u, gradu, sigma, Set::Vector(+SQRT3INV,+SQRT3INV,+SQRT3INV));
     381              :         
     382      6707856 :         if (m[1] == lo.y && m[2] == lo.z)                  return set(m_bc_type[Face::YLO_ZLO],     u, gradu, sigma, Set::Vector(0,        -SQRT2INV,-SQRT2INV));
     383      6279572 :         if (m[1] == lo.y && m[2] == hi.z)                  return set(m_bc_type[Face::YLO_ZHI],     u, gradu, sigma, Set::Vector(0,        -SQRT2INV,+SQRT2INV));
     384      6279572 :         if (m[1] == hi.y && m[2] == lo.z)                  return set(m_bc_type[Face::YHI_ZLO],     u, gradu, sigma, Set::Vector(0,        +SQRT2INV,-SQRT2INV));
     385      5851288 :         if (m[1] == hi.y && m[2] == hi.z)                  return set(m_bc_type[Face::YHI_ZHI],     u, gradu, sigma, Set::Vector(0,        +SQRT2INV,+SQRT2INV));
     386      5423004 :         if (m[2] == lo.z && m[0] == lo.x)                  return set(m_bc_type[Face::ZLO_XLO],     u, gradu, sigma, Set::Vector(-SQRT2INV, 0,       -SQRT2INV));
     387      4994720 :         if (m[2] == lo.z && m[0] == hi.x)                  return set(m_bc_type[Face::ZLO_XHI],     u, gradu, sigma, Set::Vector(+SQRT2INV, 0,       -SQRT2INV));
     388      4994720 :         if (m[2] == hi.z && m[0] == lo.x)                  return set(m_bc_type[Face::ZHI_XLO],     u, gradu, sigma, Set::Vector(-SQRT2INV, 0,       +SQRT2INV));
     389      4566436 :         if (m[2] == hi.z && m[0] == hi.x)                  return set(m_bc_type[Face::ZHI_XHI],     u, gradu, sigma, Set::Vector(+SQRT2INV, 0,       +SQRT2INV));
     390      4566436 :         if (m[0] == lo.x && m[1] == lo.y)                  return set(m_bc_type[Face::XLO_YLO],     u, gradu, sigma, Set::Vector(-SQRT2INV, -SQRT2INV,0       ));
     391      4138152 :         if (m[0] == lo.x && m[1] == hi.y)                  return set(m_bc_type[Face::XLO_YHI],     u, gradu, sigma, Set::Vector(-SQRT2INV, +SQRT2INV,0       ));
     392      4138152 :         if (m[0] == hi.x && m[1] == lo.y)                  return set(m_bc_type[Face::XHI_YLO],     u, gradu, sigma, Set::Vector(+SQRT2INV, -SQRT2INV,0       ));
     393      3709868 :         if (m[0] == hi.x && m[1] == hi.y)                  return set(m_bc_type[Face::XHI_YHI],     u, gradu, sigma, Set::Vector(+SQRT2INV, +SQRT2INV,0       ));
     394              :         
     395      3067442 :         if (m[0] == lo.x)                                  return set(m_bc_type[Face::XLO],         u, gradu, sigma, Set::Vector(-1, 0, 0));
     396      2629236 :         if (m[0] == hi.x)                                  return set(m_bc_type[Face::XHI],         u, gradu, sigma, Set::Vector(+1, 0, 0));
     397      2191030 :         if (m[1] == lo.y)                                  return set(m_bc_type[Face::YLO],         u, gradu, sigma, Set::Vector( 0,-1, 0));
     398      1752824 :         if (m[1] == hi.y)                                  return set(m_bc_type[Face::YHI],         u, gradu, sigma, Set::Vector( 0,+1, 0));
     399      1314618 :         if (m[2] == lo.z)                                  return set(m_bc_type[Face::ZLO],         u, gradu, sigma, Set::Vector( 0, 0,-1));
     400       876412 :         if (m[2] == hi.z)                                  return set(m_bc_type[Face::ZHI],         u, gradu, sigma, Set::Vector( 0, 0,+1));
     401              :         
     402              :         #endif
     403              :         
     404            0 :         Util::Abort(INFO,"Boundary condition error");
     405            0 :         return Set::Vector::Zero();
     406              :     }
     407              : 
     408              :     AMREX_FORCE_INLINE
     409              :     Set::Vector set(std::array<Type,AMREX_SPACEDIM> &bc_type, 
     410              :                     const Set::Vector &u, const Set::Matrix &gradu, const Set::Matrix &sigma, Set::Vector n) const
     411              :     {
     412      7896071 :         Set::Vector f = Set::Vector::Zero();
     413     30002785 :         for (int i = 0; i < AMREX_SPACEDIM; i++)
     414              :         {
     415     22106714 :             if      (bc_type[i] == Type::Displacement) 
     416      9312018 :                 f(i) = u(i);
     417     12794696 :             else if (bc_type[i] == Type::Traction)
     418     12793214 :                 f(i) = (sigma*n)(i);
     419         1482 :             else if (bc_type[i] == Type::Neumann)
     420            0 :                 f(i) = (gradu*n)(i);
     421              :             else
     422         1482 :                 continue;
     423              :         }
     424      7896071 :         return f;
     425              :     }
     426              : 
     427              : protected:
     428              :     
     429              :     #if AMREX_SPACEDIM==2
     430              :     static const int m_nfaces = 8;
     431              :     #elif AMREX_SPACEDIM==3
     432              :     static const int m_nfaces = 26;
     433              :     #endif
     434              : 
     435              :     std::array<std::array<Type,                                      AMREX_SPACEDIM>, m_nfaces> m_bc_type; 
     436              :     std::array<std::array<Numeric::Interpolator::Linear<Set::Scalar>,AMREX_SPACEDIM>, m_nfaces> m_bc_val; 
     437              : 
     438              : public:
     439           17 :     static void Parse(Constant & value, IO::ParmParse & pp)
     440              :     {
     441           17 :         std::map<std::string, Type> bcmap;
     442           34 :         bcmap["displacement"] = Type::Displacement;
     443           34 :         bcmap["disp"]         = Type::Displacement;
     444           34 :         bcmap["neumann"]      = Type::Neumann;
     445           34 :         bcmap["traction"]     = Type::Traction;
     446           34 :         bcmap["trac"]         = Type::Traction;
     447           17 :         bcmap["periodic"]     = Type::Periodic;
     448              :         
     449           17 :         std::vector<std::string> str;
     450              :         
     451              :         // TYPES
     452              :         
     453              :         #if AMREX_SPACEDIM==3
     454            0 :         if (pp.contains("type.xloylozlo")) { 
     455            0 :             pp_queryarr("type.xloylozlo",str); // 3D Corner
     456            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YLO_ZLO][i] = bcmap[str[i]]; } 
     457            0 :         if (pp.contains("type.xloylozhi")) { 
     458            0 :             pp_queryarr("type.xloylozhi",str); // 3D Corner
     459            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YLO_ZHI][i] = bcmap[str[i]]; }
     460            0 :         if (pp.contains("type.xloyhizlo")) { 
     461            0 :             pp_queryarr("type.xloyhizlo",str); // 3D Corner
     462            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YHI_ZLO][i] = bcmap[str[i]]; }
     463            0 :         if (pp.contains("type.xloyhizhi")) { 
     464            0 :             pp_queryarr("type.xloyhizhi",str); // 3D Corner
     465            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YHI_ZHI][i] = bcmap[str[i]]; }
     466            0 :         if (pp.contains("type.xhiylozlo")) { 
     467            0 :             pp_queryarr("type.xhiylozlo",str); // 3D Corner
     468            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YLO_ZLO][i] = bcmap[str[i]]; }
     469            0 :         if (pp.contains("type.xhiylozhi")) { 
     470            0 :             pp_queryarr("type.xhiylozhi",str); // 3D Corner
     471            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YLO_ZHI][i] = bcmap[str[i]]; }
     472            0 :         if (pp.contains("type.xhiyhizlo")) { 
     473            0 :             pp_queryarr("type.xhiyhizlo",str); // 3D Corner
     474            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YHI_ZLO][i] = bcmap[str[i]]; }
     475            0 :         if (pp.contains("type.xhiyhizhi")) { 
     476            0 :             pp_queryarr("type.xhiyhizhi",str); // 3D Corner
     477            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YHI_ZHI][i] = bcmap[str[i]]; }
     478              :         #else // ignore unused inputs
     479          136 :         pp.ignore("type.xloylozlo"); pp.ignore("type.xloylozhi"); pp.ignore("type.xloyhizlo"); pp.ignore("type.xloyhizhi"); 
     480          136 :         pp.ignore("type.xhiylozlo"); pp.ignore("type.xhiylozhi"); pp.ignore("type.xhiyhizlo"); pp.ignore("type.xhiyhizhi");  
     481              :         #endif
     482              : 
     483              :         #if AMREX_SPACEDIM==3
     484            0 :         if (pp.contains("type.ylozlo")) { 
     485            0 :             pp_queryarr("type.ylozlo",str);  // 3D Edge
     486            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YLO_ZLO][i] = bcmap[str[i]]; }
     487            0 :         if (pp.contains("type.ylozhi")) { 
     488            0 :             pp_queryarr("type.ylozhi",str);  // 3D Edge
     489            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YLO_ZHI][i] = bcmap[str[i]]; }
     490            0 :         if (pp.contains("type.yhizlo")) { 
     491            0 :             pp_queryarr("type.yhizlo",str);  // 3D Edge
     492            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YHI_ZLO][i] = bcmap[str[i]]; }
     493            0 :         if (pp.contains("type.yhizhi")) { 
     494            0 :             pp_queryarr("type.yhizhi",str);  // 3D Edge
     495            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YHI_ZHI][i] = bcmap[str[i]]; }
     496            0 :         if (pp.contains("type.zloxlo")) { 
     497            0 :             pp_queryarr("type.zloxlo",str);  // 3D Edge
     498            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZLO_XLO][i] = bcmap[str[i]]; }
     499            0 :         if (pp.contains("type.zloxhi")) { 
     500            0 :             pp_queryarr("type.zloxhi",str);  // 3D Edge
     501            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZLO_XHI][i] = bcmap[str[i]]; }
     502            0 :         if (pp.contains("type.zhixlo")) { 
     503            0 :             pp_queryarr("type.zhixlo",str);  // 3D Edge
     504            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZHI_XLO][i] = bcmap[str[i]]; }
     505            0 :         if (pp.contains("type.zhixhi")) { 
     506            0 :             pp_queryarr("type.zhixhi",str);  // 3D Edge
     507            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZHI_XHI][i] = bcmap[str[i]]; }
     508              :         #else 
     509          136 :         pp.ignore("type.ylozlo"); pp.ignore("type.ylozhi"); pp.ignore("type.yhizlo"); pp.ignore("type.yhizhi"); 
     510          136 :         pp.ignore("type.zloxlo"); pp.ignore("type.zloxhi"); pp.ignore("type.zhixlo"); pp.ignore("type.zhixhi"); 
     511              :         #endif
     512              :         
     513           34 :         if (pp.contains("type.xloylo")) { 
     514            6 :             pp_queryarr("type.xloylo",str);  // 3D Edge / 2D Corner
     515           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YLO][i] = bcmap[str[i]]; }
     516           34 :         if (pp.contains("type.xloyhi")) { 
     517            6 :             pp_queryarr("type.xloyhi",str);  // 3D Edge / 2D Corner
     518           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YHI][i] = bcmap[str[i]]; }
     519           34 :         if (pp.contains("type.xhiylo")) { 
     520            6 :             pp_queryarr("type.xhiylo",str);  // 3D Edge / 2D Corner
     521           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YLO][i] = bcmap[str[i]]; }
     522           34 :         if (pp.contains("type.xhiyhi")) { 
     523            6 :             pp_queryarr("type.xhiyhi",str);  // 3D Edge / 2D Corner
     524           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YHI][i] = bcmap[str[i]]; }
     525              : 
     526           34 :         if (pp.contains("type.xlo")) { 
     527            6 :             pp_queryarr("type.xlo",str); // 3D Face / 2D Edge
     528           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO][i] = bcmap[str[i]]; } 
     529           34 :         if (pp.contains("type.xhi")) { 
     530            6 :             pp_queryarr("type.xhi",str); // 3D Face / 2D Edge
     531           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI][i] = bcmap[str[i]]; }
     532           34 :         if (pp.contains("type.ylo")) { 
     533           11 :             pp_queryarr("type.ylo",str); // 3D Face / 2D Edge
     534           33 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YLO][i] = bcmap[str[i]]; }
     535           34 :         if (pp.contains("type.yhi")) { 
     536           11 :             pp_queryarr("type.yhi",str); // 3D Face / 2D Edge
     537           33 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YHI][i] = bcmap[str[i]]; }
     538              :         #if AMREX_SPACEDIM==3
     539            0 :         if (pp.contains("type.zlo")) { 
     540            0 :             pp_queryarr("type.zlo",str); // 3D Face
     541            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZLO][i] = bcmap[str[i]]; } 
     542            0 :         if (pp.contains("type.zhi")) { 
     543            0 :             pp_queryarr("type.zhi",str); // 3D Face
     544            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZHI][i] = bcmap[str[i]]; } 
     545              :         #else
     546           51 :         pp.ignore("type.zlo"); pp.ignore("type.zhi");
     547              :         #endif
     548              : 
     549              :         // VALS
     550              :         //std::vector<Set::Scalar> val;
     551           17 :         std::vector<std::string> val;
     552              :         
     553              :         #if AMREX_SPACEDIM==3
     554            0 :         if (pp.contains("val.xloylozlo")) { 
     555            0 :             pp_queryarr("val.xloylozlo",val); // 3D Corner
     556            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YLO_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     557            0 :         if (pp.contains("val.xloylozhi")) { 
     558            0 :             pp_queryarr("val.xloylozhi",val); // 3D Corner
     559            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YLO_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     560            0 :         if (pp.contains("val.xloyhizlo")) { 
     561            0 :             pp_queryarr("val.xloyhizlo",val); // 3D Corner
     562            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YHI_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     563            0 :         if (pp.contains("val.xloyhizhi")) { 
     564            0 :             pp_queryarr("val.xloyhizhi",val); // 3D Corner
     565            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YHI_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     566            0 :         if (pp.contains("val.xhiylozlo")) { 
     567            0 :             pp_queryarr("val.xhiylozlo",val); // 3D Corner
     568            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YLO_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     569            0 :         if (pp.contains("val.xhiylozhi")) { 
     570            0 :             pp_queryarr("val.xhiylozhi",val); // 3D Corner
     571            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YLO_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     572            0 :         if (pp.contains("val.xhiyhizlo")) { 
     573            0 :             pp_queryarr("val.xhiyhizlo",val); // 3D Corner
     574            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YHI_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     575            0 :         if (pp.contains("val.xhiyhizhi")) { 
     576            0 :             pp_queryarr("val.xhiyhizhi",val); // 3D Corner
     577            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YHI_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     578              :         #else
     579          136 :         pp.ignore("val.xloylozlo"); pp.ignore("val.xloylozhi"); pp.ignore("val.xloyhizlo"); pp.ignore("val.xloyhizhi"); 
     580          136 :         pp.ignore("val.xhiylozlo"); pp.ignore("val.xhiylozhi"); pp.ignore("val.xhiyhizlo"); pp.ignore("val.xhiyhizhi");  
     581              :         #endif
     582              : 
     583              :         #if AMREX_SPACEDIM==3
     584            0 :         if (pp.contains("val.ylozlo")) { 
     585            0 :             pp_queryarr("val.ylozlo",val); // 3D Edge
     586            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YLO_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     587            0 :         if (pp.contains("val.ylozhi")) { 
     588            0 :             pp_queryarr("val.ylozhi",val); // 3D Edge
     589            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YLO_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     590            0 :         if (pp.contains("val.yhizlo")) { 
     591            0 :             pp_queryarr("val.yhizlo",val); // 3D Edge
     592            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YHI_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     593            0 :         if (pp.contains("val.yhizhi")) { 
     594            0 :             pp_queryarr("val.yhizhi",val); // 3D Edge
     595            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YHI_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     596            0 :         if (pp.contains("val.zloxlo")) { 
     597            0 :             pp_queryarr("val.zloxlo",val); // 3D Edge
     598            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZLO_XLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     599            0 :         if (pp.contains("val.zloxhi")) { 
     600            0 :             pp_queryarr("val.zloxhi",val); // 3D Edge
     601            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZLO_XHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     602            0 :         if (pp.contains("val.zhixlo")) { 
     603            0 :             pp_queryarr("val.zhixlo",val); // 3D Edge
     604            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZHI_XLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     605            0 :         if (pp.contains("val.zhixhi")) { 
     606            0 :             pp_queryarr("val.zhixhi",val); // 3D Edge
     607            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZHI_XHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     608              :         #else
     609          136 :         pp.ignore("val.ylozlo"); pp.ignore("val.ylozhi"); pp.ignore("val.yhizlo"); pp.ignore("val.yhizhi"); 
     610          136 :         pp.ignore("val.zloxlo"); pp.ignore("val.zloxhi"); pp.ignore("val.zhixlo"); pp.ignore("val.zhixhi"); 
     611              :         #endif
     612           34 :         if (pp.contains("val.xloylo")) { 
     613            0 :             pp_queryarr("val.xloylo",val); // 3D Edge / 2D Corner
     614            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     615           34 :         if (pp.contains("val.xloyhi")) { 
     616            0 :             pp_queryarr("val.xloyhi",val); // 3D Edge / 2D Corner
     617            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     618           34 :         if (pp.contains("val.xhiylo")) { 
     619            6 :             pp_queryarr("val.xhiylo",val); // 3D Edge / 2D Corner
     620           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     621           34 :         if (pp.contains("val.xhiyhi")) { 
     622            6 :             pp_queryarr("val.xhiyhi",val); // 3D Edge / 2D Corner
     623           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     624              : 
     625           34 :         if (pp.contains("val.xlo")) { 
     626            0 :             pp_queryarr("val.xlo",val); // 3D Face / 2D Edge
     627            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     628           34 :         if (pp.contains("val.xhi")) { 
     629            6 :             pp_queryarr("val.xhi",val); // 3D Face / 2D Edge
     630           18 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     631           34 :         if (pp.contains("val.ylo")) { 
     632            0 :             pp_queryarr("val.ylo",val); // 3D Face / 2D Edge
     633            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     634           34 :         if (pp.contains("val.yhi")) { 
     635            0 :             pp_queryarr("val.yhi",val); // 3D Face / 2D Edge
     636            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     637              :         #if AMREX_SPACEDIM==3
     638            0 :         if (pp.contains("val.zlo")) { 
     639            0 :             pp_queryarr("val.zlo",val); // 3D Face
     640            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     641            0 :         if (pp.contains("val.zhi")) { 
     642            0 :             pp_queryarr("val.zhi",val); // 3D Face
     643            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     644              :         #else
     645           51 :         pp.ignore("val.zlo"); pp.ignore("val.zhi");
     646              :         #endif
     647              : 
     648           17 :     }
     649              : };
     650              : }
     651              : }
     652              : }
     653              : #endif
        

Generated by: LCOV version 2.0-1