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 % 379 164
Test Date: 2025-04-03 04:02:21 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           17 :     Constant()
      37           17 :     {
      38              :         // By default, all boundary conditions are displacement
      39          207 :         for (int face = 0; face < m_nfaces; face++)
      40          648 :             for (int direction = 0; direction < AMREX_SPACEDIM; direction++)
      41              :             {
      42          458 :                 m_bc_type[face][direction] = Type::Displacement;
      43          458 :                 m_bc_val [face][direction] = 0.0;
      44              :             }
      45           17 :     };
      46              : 
      47            9 :     Constant(IO::ParmParse &pp, std::string name): Constant()
      48           36 :     { pp_queryclass(name,*this); }
      49              : 
      50           26 :     ~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          468 :     Init(amrex::FabArray<amrex::BaseFab<Set::Vector>> *a_rhs,
     102              :         const amrex::Geometry &a_geom,
     103              :         bool a_homogeneous = false) const
     104              :     {
     105          468 :             amrex::Box domain(a_geom.Domain());
     106          936 :             domain.convert(amrex::IntVect::TheNodeVector());
     107          468 :             const amrex::Dim3 lo= amrex::lbound(domain), hi = amrex::ubound(domain);
     108         1069 :             for (amrex::MFIter mfi(*a_rhs, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
     109              :             {
     110          601 :                 amrex::Box bx = mfi.tilebox();
     111          601 :                 bx.grow(2);
     112          601 :                 bx = bx & domain;
     113          601 :                 amrex::Array4<Set::Vector> const& rhs       = a_rhs->array(mfi);
     114          601 :                 amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) {
     115              :                     
     116       584667 :                 for (int dir = 0; dir < AMREX_SPACEDIM; dir++)
     117              :                 {
     118       402278 :                     Face face = Face::INT;
     119              :                         
     120              :                     #if AMREX_SPACEDIM == 2
     121              :                         
     122       289778 :                     if      (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     123       289514 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     124       289250 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     125       288986 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     126              : 
     127       288720 :                     else if (i==lo.x) face = Face::XLO;
     128       286488 :                     else if (i==hi.x) face = Face::XHI;
     129       284196 :                     else if (j==lo.y) face = Face::YLO;
     130       281964 :                     else if (j==hi.y) face = Face::YHI;
     131              : 
     132              :                     #elif AMREX_SPACEDIM == 3
     133              : 
     134       112500 :                     if      (i==lo.x && j==lo.y && k==lo.z) face = Face::XLO_YLO_ZLO;
     135       111600 :                     else if (i==lo.x && j==lo.y && k==hi.z) face = Face::XLO_YLO_ZHI;
     136       110700 :                     else if (i==lo.x && j==hi.y && k==lo.z) face = Face::XLO_YHI_ZLO;
     137       109800 :                     else if (i==lo.x && j==hi.y && k==hi.z) face = Face::XLO_YHI_ZHI;
     138       108900 :                     else if (i==hi.x && j==lo.y && k==lo.z) face = Face::XHI_YLO_ZLO;
     139       108000 :                     else if (i==hi.x && j==lo.y && k==hi.z) face = Face::XHI_YLO_ZHI;
     140       107100 :                     else if (i==hi.x && j==hi.y && k==lo.z) face = Face::XHI_YHI_ZLO;
     141       106200 :                     else if (i==hi.x && j==hi.y && k==hi.z) face = Face::XHI_YHI_ZHI;
     142              : 
     143       105300 :                     else if (j==lo.y && k==lo.z) face = Face::YLO_ZLO;
     144       102600 :                     else if (j==lo.y && k==hi.z) face = Face::YLO_ZHI;
     145        99900 :                     else if (j==hi.y && k==lo.z) face = Face::YHI_ZLO;
     146        97200 :                     else if (j==hi.y && k==hi.z) face = Face::YHI_ZHI;
     147        94500 :                     else if (k==lo.z && i==lo.x) face = Face::ZLO_XLO;
     148        91800 :                     else if (k==lo.z && i==hi.x) face = Face::ZLO_XHI;
     149        89100 :                     else if (k==hi.z && i==lo.x) face = Face::ZHI_XLO;
     150        86400 :                     else if (k==hi.z && i==hi.x) face = Face::ZHI_XHI;
     151        83700 :                     else if (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     152        81000 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     153        78300 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     154        75600 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     155              : 
     156        72900 :                     else if (i==lo.x) face = Face::XLO;
     157        64800 :                     else if (i==hi.x) face = Face::XHI;
     158        56700 :                     else if (j==lo.y) face = Face::YLO;
     159        48600 :                     else if (j==hi.y) face = Face::YHI;
     160        40500 :                     else if (k==lo.z) face = Face::ZLO;
     161        32400 :                     else if (k==hi.z) face = Face::ZHI;
     162              : 
     163              :                     #endif
     164              : 
     165       402278 :                     if (!(face == Face::INT))
     166              :                     {
     167        98306 :                         if (a_homogeneous && m_bc_type[face][dir] == Type::Displacement) 
     168            0 :                             rhs(i,j,k)(dir) = 0.0;
     169              :                         else 
     170       196612 :                             rhs(i,j,k)(dir) = m_bc_val[face][dir](m_time);
     171              :                     }
     172              :                 }
     173       182389 :             });
     174          468 :         }                    
     175          468 :     }
     176              : 
     177              :     using Elastic::Init;
     178              :     virtual void
     179            0 :     Init(amrex::MultiFab * a_rhs,
     180              :         const amrex::Geometry &a_geom,
     181              :         bool a_homogeneous = false) const
     182              :     {
     183            0 :             amrex::Box domain(a_geom.Domain());
     184            0 :             domain.convert(amrex::IntVect::TheNodeVector());
     185            0 :             const amrex::Dim3 lo= amrex::lbound(domain), hi = amrex::ubound(domain);
     186            0 :             for (amrex::MFIter mfi(*a_rhs, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
     187              :             {
     188            0 :                 amrex::Box bx = mfi.tilebox();
     189            0 :                 bx.grow(2);
     190            0 :                 bx = bx & domain;
     191            0 :                 amrex::Array4<amrex::Real> const& rhs       = a_rhs->array(mfi);
     192            0 :                 amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) {
     193              :                     
     194            0 :                 for (int dir = 0; dir < AMREX_SPACEDIM; dir++)
     195              :                 {
     196            0 :                     Face face = Face::INT;
     197              :                         
     198              :                     #if AMREX_SPACEDIM == 2
     199              :                         
     200            0 :                     if      (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     201            0 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     202            0 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     203            0 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     204              : 
     205            0 :                     else if (i==lo.x) face = Face::XLO;
     206            0 :                     else if (i==hi.x) face = Face::XHI;
     207            0 :                     else if (j==lo.y) face = Face::YLO;
     208            0 :                     else if (j==hi.y) face = Face::YHI;
     209              : 
     210              :                     #elif AMREX_SPACEDIM == 3
     211              : 
     212            0 :                     if      (i==lo.x && j==lo.y && k==lo.z) face = Face::XLO_YLO_ZLO;
     213            0 :                     else if (i==lo.x && j==lo.y && k==hi.z) face = Face::XLO_YLO_ZHI;
     214            0 :                     else if (i==lo.x && j==hi.y && k==lo.z) face = Face::XLO_YHI_ZLO;
     215            0 :                     else if (i==lo.x && j==hi.y && k==hi.z) face = Face::XLO_YHI_ZHI;
     216            0 :                     else if (i==hi.x && j==lo.y && k==lo.z) face = Face::XHI_YLO_ZLO;
     217            0 :                     else if (i==hi.x && j==lo.y && k==hi.z) face = Face::XHI_YLO_ZHI;
     218            0 :                     else if (i==hi.x && j==hi.y && k==lo.z) face = Face::XHI_YHI_ZLO;
     219            0 :                     else if (i==hi.x && j==hi.y && k==hi.z) face = Face::XHI_YHI_ZHI;
     220              : 
     221            0 :                     else if (j==lo.y && k==lo.z) face = Face::YLO_ZLO;
     222            0 :                     else if (j==lo.y && k==hi.z) face = Face::YLO_ZHI;
     223            0 :                     else if (j==hi.y && k==lo.z) face = Face::YHI_ZLO;
     224            0 :                     else if (j==hi.y && k==hi.z) face = Face::YHI_ZHI;
     225            0 :                     else if (k==lo.z && i==lo.x) face = Face::ZLO_XLO;
     226            0 :                     else if (k==lo.z && i==hi.x) face = Face::ZLO_XHI;
     227            0 :                     else if (k==hi.z && i==lo.x) face = Face::ZHI_XLO;
     228            0 :                     else if (k==hi.z && i==hi.x) face = Face::ZHI_XHI;
     229            0 :                     else if (i==lo.x && j==lo.y) face = Face::XLO_YLO;
     230            0 :                     else if (i==lo.x && j==hi.y) face = Face::XLO_YHI;
     231            0 :                     else if (i==hi.x && j==lo.y) face = Face::XHI_YLO;
     232            0 :                     else if (i==hi.x && j==hi.y) face = Face::XHI_YHI;
     233              : 
     234            0 :                     else if (i==lo.x) face = Face::XLO;
     235            0 :                     else if (i==hi.x) face = Face::XHI;
     236            0 :                     else if (j==lo.y) face = Face::YLO;
     237            0 :                     else if (j==hi.y) face = Face::YHI;
     238            0 :                     else if (k==lo.z) face = Face::ZLO;
     239            0 :                     else if (k==hi.z) face = Face::ZHI;
     240              : 
     241              :                     #endif
     242              : 
     243            0 :                     if (!(face == Face::INT))
     244              :                     {
     245            0 :                         if (a_homogeneous && m_bc_type[face][dir] == Type::Displacement) 
     246            0 :                             rhs(i,j,k,dir) = 0.0;
     247              :                         else 
     248            0 :                             rhs(i,j,k,dir) = m_bc_val[face][dir](m_time);
     249              :                     }
     250              :                 }
     251            0 :             });
     252            0 :         }                    
     253            0 :     }
     254              : 
     255              :     virtual
     256            0 :     std::array<Type,AMREX_SPACEDIM> getType (
     257              :                 const int &i, const int &j, [[maybe_unused]] const int &k,
     258              :                 const amrex::Box &domain)
     259              :     {
     260            0 :         amrex::IntVect m(AMREX_D_DECL(i,j,k));
     261              :         const amrex::Dim3 lo = amrex::lbound(domain), hi = amrex::ubound(domain);
     262              : 
     263              :         // Corners
     264              :         #if AMREX_SPACEDIM == 2
     265            0 :         if (m[0] == lo.x && m[1] == lo.y)                  return m_bc_type[Face::XLO_YLO];
     266            0 :         if (m[0] == lo.x && m[1] == hi.y)                  return m_bc_type[Face::XLO_YHI];
     267            0 :         if (m[0] == hi.x && m[1] == lo.y)                  return m_bc_type[Face::XHI_YLO];
     268            0 :         if (m[0] == hi.x && m[1] == hi.y)                  return m_bc_type[Face::XHI_YHI];
     269            0 :         if (m[0] == lo.x)                                  return m_bc_type[Face::XLO];
     270            0 :         if (m[0] == hi.x)                                  return m_bc_type[Face::XHI];
     271            0 :         if (m[1] == lo.y)                                  return m_bc_type[Face::YLO];
     272            0 :         if (m[1] == hi.y)                                  return m_bc_type[Face::YHI];
     273              :         
     274              :         #elif AMREX_SPACEDIM == 3
     275              :         
     276            0 :         if (m[0] == lo.x &&  m[1] == lo.y && m[2] == lo.z) return m_bc_type[Face::XLO_YLO_ZLO];
     277            0 :         if (m[0] == lo.x &&  m[1] == lo.y && m[2] == hi.z) return m_bc_type[Face::XLO_YLO_ZHI];
     278            0 :         if (m[0] == lo.x &&  m[1] == hi.y && m[2] == lo.z) return m_bc_type[Face::XLO_YHI_ZLO];
     279            0 :         if (m[0] == lo.x &&  m[1] == hi.y && m[2] == hi.z) return m_bc_type[Face::XLO_YHI_ZHI];
     280            0 :         if (m[0] == hi.x &&  m[1] == lo.y && m[2] == lo.z) return m_bc_type[Face::XHI_YLO_ZLO];
     281            0 :         if (m[0] == hi.x &&  m[1] == lo.y && m[2] == hi.z) return m_bc_type[Face::XHI_YLO_ZHI];
     282            0 :         if (m[0] == hi.x &&  m[1] == hi.y && m[2] == lo.z) return m_bc_type[Face::XHI_YHI_ZLO];
     283            0 :         if (m[0] == hi.x &&  m[1] == hi.y && m[2] == hi.z) return m_bc_type[Face::XHI_YHI_ZHI];
     284              :         
     285            0 :         if (m[1] == lo.y && m[2] == lo.z)                  return m_bc_type[Face::YLO_ZLO];
     286            0 :         if (m[1] == lo.y && m[2] == hi.z)                  return m_bc_type[Face::YLO_ZHI];
     287            0 :         if (m[1] == hi.y && m[2] == lo.z)                  return m_bc_type[Face::YHI_ZLO];
     288            0 :         if (m[1] == hi.y && m[2] == hi.z)                  return m_bc_type[Face::YHI_ZHI];
     289            0 :         if (m[2] == lo.z && m[0] == lo.x)                  return m_bc_type[Face::ZLO_XLO];
     290            0 :         if (m[2] == lo.z && m[0] == hi.x)                  return m_bc_type[Face::ZLO_XHI];
     291            0 :         if (m[2] == hi.z && m[0] == lo.x)                  return m_bc_type[Face::ZHI_XLO];
     292            0 :         if (m[2] == hi.z && m[0] == hi.x)                  return m_bc_type[Face::ZHI_XHI];
     293            0 :         if (m[0] == lo.x && m[1] == lo.y)                  return m_bc_type[Face::XLO_YLO];
     294            0 :         if (m[0] == lo.x && m[1] == hi.y)                  return m_bc_type[Face::XLO_YHI];
     295            0 :         if (m[0] == hi.x && m[1] == lo.y)                  return m_bc_type[Face::XHI_YLO];
     296            0 :         if (m[0] == hi.x && m[1] == hi.y)                  return m_bc_type[Face::XHI_YHI];
     297              :         
     298            0 :         if (m[0] == lo.x)                                  return m_bc_type[Face::XLO];
     299            0 :         if (m[0] == hi.x)                                  return m_bc_type[Face::XHI];
     300            0 :         if (m[1] == lo.y)                                  return m_bc_type[Face::YLO];
     301            0 :         if (m[1] == hi.y)                                  return m_bc_type[Face::YHI];
     302            0 :         if (m[2] == lo.z)                                  return m_bc_type[Face::ZLO];
     303            0 :         if (m[2] == hi.z)                                  return m_bc_type[Face::ZHI];
     304              :         
     305              :         #endif        
     306              : 
     307            0 :         return {AMREX_D_DECL(Type::None,Type::None,Type::None)};
     308              :     }
     309              : 
     310              : 
     311              :     AMREX_FORCE_INLINE
     312     11673683 :     Set::Vector operator () (const Set::Vector &u,
     313              :                 const Set::Matrix &gradu,
     314              :                 const Set::Matrix &sigma,
     315              :                 const int &i, const int &j, const int &k,
     316              :                 const amrex::Box &domain)
     317              :     {
     318              :         (void)i; (void)j; (void)k; // Suppress "unused variable" warnings
     319              :         //Set::Vector f;
     320              : 
     321              :         const amrex::Dim3 lo= amrex::lbound(domain), hi = amrex::ubound(domain);
     322              :         
     323     11673683 :         amrex::IntVect m(AMREX_D_DECL(i,j,k));
     324              : 
     325              :         // Corners
     326              :         #if AMREX_SPACEDIM == 2
     327              :         
     328      3023458 :         if (m[0] == lo.x && m[1] == lo.y)                  return set(m_bc_type[Face::XLO_YLO],     u, gradu, sigma, Set::Vector(-SQRT2INV, -SQRT2INV));
     329      2670323 :         if (m[0] == lo.x && m[1] == hi.y)                  return set(m_bc_type[Face::XLO_YHI],     u, gradu, sigma, Set::Vector(-SQRT2INV, +SQRT2INV));
     330      2670352 :         if (m[0] == hi.x && m[1] == lo.y)                  return set(m_bc_type[Face::XHI_YLO],     u, gradu, sigma, Set::Vector(+SQRT2INV, -SQRT2INV));
     331      2317214 :         if (m[0] == hi.x && m[1] == hi.y)                  return set(m_bc_type[Face::XHI_YHI],     u, gradu, sigma, Set::Vector(+SQRT2INV, +SQRT2INV));
     332              :         
     333      1787478 :         if (m[0] == lo.x)                                  return set(m_bc_type[Face::XLO],         u, gradu, sigma, Set::Vector(-1, 0));
     334      1430023 :         if (m[0] == hi.x)                                  return set(m_bc_type[Face::XHI],         u, gradu, sigma, Set::Vector(+1, 0));
     335      1072481 :         if (m[1] == lo.y)                                  return set(m_bc_type[Face::YLO],         u, gradu, sigma, Set::Vector( 0,-1));
     336       715026 :         if (m[1] == hi.y)                                  return set(m_bc_type[Face::YHI],         u, gradu, sigma, Set::Vector( 0,+1));
     337              :         
     338              :         #elif AMREX_SPACEDIM == 3
     339              :         
     340     13248801 :         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));
     341     12636324 :         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));
     342     12432165 :         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));
     343     11819688 :         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));
     344     12432165 :         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));
     345     11819688 :         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));
     346     11615529 :         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));
     347     11003052 :         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));
     348              :         
     349     10186416 :         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));
     350      9543138 :         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));
     351      9543138 :         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));
     352      8899860 :         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));
     353      8256582 :         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));
     354      7613304 :         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));
     355      7613304 :         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));
     356      6970026 :         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));
     357      6970026 :         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       ));
     358      6326748 :         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       ));
     359      6326748 :         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       ));
     360      5683470 :         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       ));
     361              :         
     362      4718553 :         if (m[0] == lo.x)                                  return set(m_bc_type[Face::XLO],         u, gradu, sigma, Set::Vector(-1, 0, 0));
     363      4044474 :         if (m[0] == hi.x)                                  return set(m_bc_type[Face::XHI],         u, gradu, sigma, Set::Vector(+1, 0, 0));
     364      3370395 :         if (m[1] == lo.y)                                  return set(m_bc_type[Face::YLO],         u, gradu, sigma, Set::Vector( 0,-1, 0));
     365      2696316 :         if (m[1] == hi.y)                                  return set(m_bc_type[Face::YHI],         u, gradu, sigma, Set::Vector( 0,+1, 0));
     366      2022237 :         if (m[2] == lo.z)                                  return set(m_bc_type[Face::ZLO],         u, gradu, sigma, Set::Vector( 0, 0,-1));
     367      1348158 :         if (m[2] == hi.z)                                  return set(m_bc_type[Face::ZHI],         u, gradu, sigma, Set::Vector( 0, 0,+1));
     368              :         
     369              :         #endif
     370              :         
     371            0 :         Util::Abort(INFO,"Boundary condition error");
     372            0 :         return Set::Vector::Zero();
     373              :     }
     374              : 
     375              :     AMREX_FORCE_INLINE
     376              :     Set::Vector set(std::array<Type,AMREX_SPACEDIM> &bc_type, 
     377              :                     const Set::Vector &u, const Set::Matrix &gradu, const Set::Matrix &sigma, Set::Vector n) const
     378              :     {
     379     11673683 :         Set::Vector f = Set::Vector::Zero();
     380     44558463 :         for (int i = 0; i < AMREX_SPACEDIM; i++)
     381              :         {
     382     32884780 :             if      (bc_type[i] == Type::Displacement) 
     383     13494231 :                 f(i) = u(i);
     384     19390549 :             else if (bc_type[i] == Type::Traction)
     385     19390549 :                 f(i) = (sigma*n)(i);
     386            0 :             else if (bc_type[i] == Type::Neumann)
     387            0 :                 f(i) = (gradu*n)(i);
     388            0 :             else if (bc_type[i] == Periodic)
     389            0 :                 continue;
     390              :         }
     391     11673683 :         return f;
     392              :     }
     393              : 
     394              : protected:
     395              :     
     396              :     #if AMREX_SPACEDIM==2
     397              :     static const int m_nfaces = 8;
     398              :     #elif AMREX_SPACEDIM==3
     399              :     static const int m_nfaces = 26;
     400              :     #endif
     401              : 
     402              :     std::array<std::array<Type,                                      AMREX_SPACEDIM>, m_nfaces> m_bc_type; 
     403              :     std::array<std::array<Numeric::Interpolator::Linear<Set::Scalar>,AMREX_SPACEDIM>, m_nfaces> m_bc_val; 
     404              : 
     405              : public:
     406            9 :     static void Parse(Constant & value, IO::ParmParse & pp)
     407              :     {
     408            9 :         std::map<std::string, Type> bcmap;
     409           18 :         bcmap["displacement"] = Type::Displacement;
     410           18 :         bcmap["disp"]         = Type::Displacement;
     411           18 :         bcmap["neumann"]      = Type::Neumann;
     412           18 :         bcmap["traction"]     = Type::Traction;
     413           18 :         bcmap["trac"]         = Type::Traction;
     414            9 :         bcmap["periodic"]     = Type::Periodic;
     415              :         
     416            9 :         std::vector<std::string> str;
     417              :         
     418              :         // TYPES
     419              :         
     420              :         #if AMREX_SPACEDIM==3
     421            0 :         if (pp.contains("type.xloylozlo")) { 
     422            0 :             pp_queryarr("type.xloylozlo",str); // 3D Corner
     423            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YLO_ZLO][i] = bcmap[str[i]]; } 
     424            0 :         if (pp.contains("type.xloylozhi")) { 
     425            0 :             pp_queryarr("type.xloylozhi",str); // 3D Corner
     426            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YLO_ZHI][i] = bcmap[str[i]]; }
     427            0 :         if (pp.contains("type.xloyhizlo")) { 
     428            0 :             pp_queryarr("type.xloyhizlo",str); // 3D Corner
     429            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YHI_ZLO][i] = bcmap[str[i]]; }
     430            0 :         if (pp.contains("type.xloyhizhi")) { 
     431            0 :             pp_queryarr("type.xloyhizhi",str); // 3D Corner
     432            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YHI_ZHI][i] = bcmap[str[i]]; }
     433            0 :         if (pp.contains("type.xhiylozlo")) { 
     434            0 :             pp_queryarr("type.xhiylozlo",str); // 3D Corner
     435            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YLO_ZLO][i] = bcmap[str[i]]; }
     436            0 :         if (pp.contains("type.xhiylozhi")) { 
     437            0 :             pp_queryarr("type.xhiylozhi",str); // 3D Corner
     438            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YLO_ZHI][i] = bcmap[str[i]]; }
     439            0 :         if (pp.contains("type.xhiyhizlo")) { 
     440            0 :             pp_queryarr("type.xhiyhizlo",str); // 3D Corner
     441            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YHI_ZLO][i] = bcmap[str[i]]; }
     442            0 :         if (pp.contains("type.xhiyhizhi")) { 
     443            0 :             pp_queryarr("type.xhiyhizhi",str); // 3D Corner
     444            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YHI_ZHI][i] = bcmap[str[i]]; }
     445              :         #else // ignore unused inputs
     446           72 :         pp.ignore("type.xloylozlo"); pp.ignore("type.xloylozhi"); pp.ignore("type.xloyhizlo"); pp.ignore("type.xloyhizhi"); 
     447           72 :         pp.ignore("type.xhiylozlo"); pp.ignore("type.xhiylozhi"); pp.ignore("type.xhiyhizlo"); pp.ignore("type.xhiyhizhi");  
     448              :         #endif
     449              : 
     450              :         #if AMREX_SPACEDIM==3
     451            0 :         if (pp.contains("type.ylozlo")) { 
     452            0 :             pp_queryarr("type.ylozlo",str);  // 3D Edge
     453            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YLO_ZLO][i] = bcmap[str[i]]; }
     454            0 :         if (pp.contains("type.ylozhi")) { 
     455            0 :             pp_queryarr("type.ylozhi",str);  // 3D Edge
     456            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YLO_ZHI][i] = bcmap[str[i]]; }
     457            0 :         if (pp.contains("type.yhizlo")) { 
     458            0 :             pp_queryarr("type.yhizlo",str);  // 3D Edge
     459            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YHI_ZLO][i] = bcmap[str[i]]; }
     460            0 :         if (pp.contains("type.yhizhi")) { 
     461            0 :             pp_queryarr("type.yhizhi",str);  // 3D Edge
     462            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YHI_ZHI][i] = bcmap[str[i]]; }
     463            0 :         if (pp.contains("type.zloxlo")) { 
     464            0 :             pp_queryarr("type.zloxlo",str);  // 3D Edge
     465            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZLO_XLO][i] = bcmap[str[i]]; }
     466            0 :         if (pp.contains("type.zloxhi")) { 
     467            0 :             pp_queryarr("type.zloxhi",str);  // 3D Edge
     468            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZLO_XHI][i] = bcmap[str[i]]; }
     469            0 :         if (pp.contains("type.zhixlo")) { 
     470            0 :             pp_queryarr("type.zhixlo",str);  // 3D Edge
     471            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZHI_XLO][i] = bcmap[str[i]]; }
     472            0 :         if (pp.contains("type.zhixhi")) { 
     473            0 :             pp_queryarr("type.zhixhi",str);  // 3D Edge
     474            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZHI_XHI][i] = bcmap[str[i]]; }
     475              :         #else 
     476           72 :         pp.ignore("type.ylozlo"); pp.ignore("type.ylozhi"); pp.ignore("type.yhizlo"); pp.ignore("type.yhizhi"); 
     477           72 :         pp.ignore("type.zloxlo"); pp.ignore("type.zloxhi"); pp.ignore("type.zhixlo"); pp.ignore("type.zhixhi"); 
     478              :         #endif
     479              :         
     480           18 :         if (pp.contains("type.xloylo")) { 
     481           15 :             pp_queryarr("type.xloylo",str);  // 3D Edge / 2D Corner
     482            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YLO][i] = bcmap[str[i]]; }
     483           18 :         if (pp.contains("type.xloyhi")) { 
     484           15 :             pp_queryarr("type.xloyhi",str);  // 3D Edge / 2D Corner
     485            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO_YHI][i] = bcmap[str[i]]; }
     486           18 :         if (pp.contains("type.xhiylo")) { 
     487           15 :             pp_queryarr("type.xhiylo",str);  // 3D Edge / 2D Corner
     488            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YLO][i] = bcmap[str[i]]; }
     489           18 :         if (pp.contains("type.xhiyhi")) { 
     490           15 :             pp_queryarr("type.xhiyhi",str);  // 3D Edge / 2D Corner
     491            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI_YHI][i] = bcmap[str[i]]; }
     492              : 
     493           18 :         if (pp.contains("type.xlo")) { 
     494           15 :             pp_queryarr("type.xlo",str); // 3D Face / 2D Edge
     495            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XLO][i] = bcmap[str[i]]; } 
     496           18 :         if (pp.contains("type.xhi")) { 
     497           15 :             pp_queryarr("type.xhi",str); // 3D Face / 2D Edge
     498            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::XHI][i] = bcmap[str[i]]; }
     499           18 :         if (pp.contains("type.ylo")) { 
     500           15 :             pp_queryarr("type.ylo",str); // 3D Face / 2D Edge
     501            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YLO][i] = bcmap[str[i]]; }
     502           18 :         if (pp.contains("type.yhi")) { 
     503           15 :             pp_queryarr("type.yhi",str); // 3D Face / 2D Edge
     504            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::YHI][i] = bcmap[str[i]]; }
     505              :         #if AMREX_SPACEDIM==3
     506            0 :         if (pp.contains("type.zlo")) { 
     507            0 :             pp_queryarr("type.zlo",str); // 3D Face
     508            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZLO][i] = bcmap[str[i]]; } 
     509            0 :         if (pp.contains("type.zhi")) { 
     510            0 :             pp_queryarr("type.zhi",str); // 3D Face
     511            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_type[Face::ZHI][i] = bcmap[str[i]]; } 
     512              :         #else
     513           27 :         pp.ignore("type.zlo"); pp.ignore("type.zhi");
     514              :         #endif
     515              : 
     516              :         // VALS
     517              :         //std::vector<Set::Scalar> val;
     518            9 :         std::vector<std::string> val;
     519              :         
     520              :         #if AMREX_SPACEDIM==3
     521            0 :         if (pp.contains("val.xloylozlo")) { 
     522            0 :             pp_queryarr("val.xloylozlo",val); // 3D Corner
     523            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]); } 
     524            0 :         if (pp.contains("val.xloylozhi")) { 
     525            0 :             pp_queryarr("val.xloylozhi",val); // 3D Corner
     526            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]); }
     527            0 :         if (pp.contains("val.xloyhizlo")) { 
     528            0 :             pp_queryarr("val.xloyhizlo",val); // 3D Corner
     529            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]); }
     530            0 :         if (pp.contains("val.xloyhizhi")) { 
     531            0 :             pp_queryarr("val.xloyhizhi",val); // 3D Corner
     532            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]); }
     533            0 :         if (pp.contains("val.xhiylozlo")) { 
     534            0 :             pp_queryarr("val.xhiylozlo",val); // 3D Corner
     535            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]); }
     536            0 :         if (pp.contains("val.xhiylozhi")) { 
     537            0 :             pp_queryarr("val.xhiylozhi",val); // 3D Corner
     538            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]); }
     539            0 :         if (pp.contains("val.xhiyhizlo")) { 
     540            0 :             pp_queryarr("val.xhiyhizlo",val); // 3D Corner
     541            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]); }
     542            0 :         if (pp.contains("val.xhiyhizhi")) { 
     543            0 :             pp_queryarr("val.xhiyhizhi",val); // 3D Corner
     544            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]); }
     545              :         #else
     546           72 :         pp.ignore("val.xloylozlo"); pp.ignore("val.xloylozhi"); pp.ignore("val.xloyhizlo"); pp.ignore("val.xloyhizhi"); 
     547           72 :         pp.ignore("val.xhiylozlo"); pp.ignore("val.xhiylozhi"); pp.ignore("val.xhiyhizlo"); pp.ignore("val.xhiyhizhi");  
     548              :         #endif
     549              : 
     550              :         #if AMREX_SPACEDIM==3
     551            0 :         if (pp.contains("val.ylozlo")) { 
     552            0 :             pp_queryarr("val.ylozlo",val); // 3D Edge
     553            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YLO_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     554            0 :         if (pp.contains("val.ylozhi")) { 
     555            0 :             pp_queryarr("val.ylozhi",val); // 3D Edge
     556            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YLO_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     557            0 :         if (pp.contains("val.yhizlo")) { 
     558            0 :             pp_queryarr("val.yhizlo",val); // 3D Edge
     559            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YHI_ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     560            0 :         if (pp.contains("val.yhizhi")) { 
     561            0 :             pp_queryarr("val.yhizhi",val); // 3D Edge
     562            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YHI_ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     563            0 :         if (pp.contains("val.zloxlo")) { 
     564            0 :             pp_queryarr("val.zloxlo",val); // 3D Edge
     565            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZLO_XLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     566            0 :         if (pp.contains("val.zloxhi")) { 
     567            0 :             pp_queryarr("val.zloxhi",val); // 3D Edge
     568            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZLO_XHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     569            0 :         if (pp.contains("val.zhixlo")) { 
     570            0 :             pp_queryarr("val.zhixlo",val); // 3D Edge
     571            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZHI_XLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); }
     572            0 :         if (pp.contains("val.zhixhi")) { 
     573            0 :             pp_queryarr("val.zhixhi",val); // 3D Edge
     574            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZHI_XHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     575              :         #else
     576           72 :         pp.ignore("val.ylozlo"); pp.ignore("val.ylozhi"); pp.ignore("val.yhizlo"); pp.ignore("val.yhizhi"); 
     577           72 :         pp.ignore("val.zloxlo"); pp.ignore("val.zloxhi"); pp.ignore("val.zhixlo"); pp.ignore("val.zhixhi"); 
     578              :         #endif
     579           18 :         if (pp.contains("val.xloylo")) { 
     580            0 :             pp_queryarr("val.xloylo",val); // 3D Edge / 2D Corner
     581            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     582           18 :         if (pp.contains("val.xloyhi")) { 
     583            0 :             pp_queryarr("val.xloyhi",val); // 3D Edge / 2D Corner
     584            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO_YHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     585           18 :         if (pp.contains("val.xhiylo")) { 
     586           15 :             pp_queryarr("val.xhiylo",val); // 3D Edge / 2D Corner
     587            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     588           18 :         if (pp.contains("val.xhiyhi")) { 
     589           15 :             pp_queryarr("val.xhiyhi",val); // 3D Edge / 2D Corner
     590            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI_YHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     591              : 
     592           18 :         if (pp.contains("val.xlo")) { 
     593            0 :             pp_queryarr("val.xlo",val); // 3D Face / 2D Edge
     594            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     595           18 :         if (pp.contains("val.xhi")) { 
     596           15 :             pp_queryarr("val.xhi",val); // 3D Face / 2D Edge
     597            9 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::XHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     598           18 :         if (pp.contains("val.ylo")) { 
     599            0 :             pp_queryarr("val.ylo",val); // 3D Face / 2D Edge
     600            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     601           18 :         if (pp.contains("val.yhi")) { 
     602            0 :             pp_queryarr("val.yhi",val); // 3D Face / 2D Edge
     603            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::YHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     604              :         #if AMREX_SPACEDIM==3
     605            0 :         if (pp.contains("val.zlo")) { 
     606            0 :             pp_queryarr("val.zlo",val); // 3D Face
     607            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZLO][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     608            0 :         if (pp.contains("val.zhi")) { 
     609            0 :             pp_queryarr("val.zhi",val); // 3D Face
     610            0 :             for (int i = 0; i < AMREX_SPACEDIM; i++) value.m_bc_val[Face::ZHI][i] = Numeric::Interpolator::Linear<Set::Scalar>(val[i]); } 
     611              :         #else
     612           27 :         pp.ignore("val.zlo"); pp.ignore("val.zhi");
     613              :         #endif
     614              : 
     615            9 :     }
     616              : };
     617              : }
     618              : }
     619              : }
     620              : #endif
        

Generated by: LCOV version 2.0-1