11#ifndef __Panzer_STK_PeriodicBC_MatchConditions_hpp__
12#define __Panzer_STK_PeriodicBC_MatchConditions_hpp__
14#include "Teuchos_Tuple.hpp"
34 std::string errStr =
"CoordMatcher \"" + std::string(1,
labels_[
index_]) +
"-coord\" takes at most two parameters <tol, relative>";
35 TEUCHOS_TEST_FOR_EXCEPTION(params.size()>2,std::logic_error,errStr);
43 std::string errStr2 = params[1] +
" is not a valid periodic option (try \"relative\")";
44 TEUCHOS_TEST_FOR_EXCEPTION(params[1]!=
"relative",std::logic_error,errStr2);
61 const Teuchos::Tuple<double,3> & b)
const
82 TEUCHOS_ASSERT(
index_ != 2);
90 void transform(
double * ptB,
const std::vector<double> & centroidA)
const
98 ptB[periodicIndex] = centroidA[periodicIndex];
118 +
"-coord\" takes at most two parameter <tol, relative>";
119 TEUCHOS_TEST_FOR_EXCEPTION(params.size()>2,std::logic_error,errStr);
122 if(params.size()>0) {
123 std::stringstream ss;
126 if(params.size()==2){
127 if (params[1] ==
"3D") {
129 std::cout <<
"WARNING : Keyword " << params[1] <<
" not needed for PlaneMatcher" << std::endl;
132 std::string errStr2 = params[1] +
" is not a valid periodic option (try \"relative\")";
133 TEUCHOS_TEST_FOR_EXCEPTION(params[1]!=
"relative",std::logic_error,errStr2);
148 PlaneMatcher(
int index0,
int index1,
const std::vector<std::string> & params)
156 const Teuchos::Tuple<double,3> & b)
const
167 std::stringstream ss;
198 void transform(
double * ptB,
const std::vector<double> & centroidA)
const
207 ptB[periodicIndex] = centroidA[periodicIndex];
226 +
"-quarter-coord\" takes only one parameter <tol>";
227 TEUCHOS_TEST_FOR_EXCEPTION(params.size()>1,std::logic_error,errStr);
230 if(params.size()==1) {
231 std::stringstream ss;
241 { TEUCHOS_ASSERT(index0a!=index1); TEUCHOS_ASSERT(index0b!=index1);
buildLabels(); }
245 { TEUCHOS_ASSERT(index0a!=index1); TEUCHOS_ASSERT(index0b!=index1);
buildLabels(); }
256 const Teuchos::Tuple<double,3> & b)
const
262 std::stringstream ss;
269 void transform(
double * ptB,
const std::vector<double> & centroidA)
const
312 TEUCHOS_TEST_FOR_EXCEPTION(params.size() > 2,std::logic_error,
"WedgeMatcher can only have one or two option parameters (tolerance and dimension)!");
315 if (params.size() > 0)
316 error_ = std::stod(params[0]);
318 if (params.size() > 1) {
319 if (params[1] ==
"2D")
321 else if (params[1] ==
"3D")
324 TEUCHOS_TEST_FOR_EXCEPTION(
true,std::runtime_error,
"ERROR: WedgeMatcher::parsParams() - the second params must be iether \"2D\" or \"3D\", param=" << params[1] <<
"\n");
331 const Teuchos::Tuple<double,3> & b)
const
336 (std::fabs(a[2]-b[2])<
error_) );
346 std::stringstream ss;
348 ss <<
"wy-coord <tol=" <<
error_ <<
">";
350 ss <<
"wx-coord <tol=" <<
error_ <<
">";
367 void transform(
double * ptB,
const std::vector<double> & centroidA)
const
void parseParams(const std::vector< std::string > ¶ms)
bool operator()(const Teuchos::Tuple< double, 3 > &a, const Teuchos::Tuple< double, 3 > &b) const
CoordMatcher(int index, const std::vector< std::string > ¶ms)
std::string getString() const
void transform(double *ptB, const std::vector< double > ¢roidA) const
CoordMatcher(int index)
index is the coordinate direction that will be compared to find matching nodes.
CoordMatcher(int index, double error)
CoordMatcher(const CoordMatcher &cm)
double getAbsoluteTolerance() const
int getPeriodicDirection() const
bool operator()(const Teuchos::Tuple< double, 3 > &a, const Teuchos::Tuple< double, 3 > &b) const
PlaneMatcher(int index0, int index1)
PlaneMatcher(int index0, int index1, double error)
double getAbsoluteTolerance() const
PlaneMatcher(int index0, int index1, const std::vector< std::string > ¶ms)
void transform(double *ptB, const std::vector< double > ¢roidA) const
PlaneMatcher(const PlaneMatcher &cm)
std::string getString() const
int getPeriodicDirection() const
void parseParams(const std::vector< std::string > ¶ms)
QuarterPlaneMatcher(int index0a, int index0b, int index1)
std::string getString() const
double getAbsoluteTolerance() const
void transform(double *ptB, const std::vector< double > ¢roidA) const
QuarterPlaneMatcher(int index0a, int index0b, int index1, const std::vector< std::string > ¶ms)
QuarterPlaneMatcher(int index0a, int index0b, int index1, double error)
QuarterPlaneMatcher(const QuarterPlaneMatcher &cm)
void parseParams(const std::vector< std::string > ¶ms)
bool operator()(const Teuchos::Tuple< double, 3 > &a, const Teuchos::Tuple< double, 3 > &b) const
int index0_
index to compare - 0 for wy (mirrored over yz), 1 for wx (mirrored over xz)
bool operator()(const Teuchos::Tuple< double, 3 > &a, const Teuchos::Tuple< double, 3 > &b) const
WedgeMatcher::MirrorPlane getMirrorPlane() const
bool is_three_d_
Set to true if a 3D problem, set to false if 2D.
WedgeMatcher(const WedgeMatcher &cm)=default
std::string getString() const
void transform(double *ptB, const std::vector< double > ¢roidA) const
WedgeMatcher(MirrorPlane mp, const std::vector< std::string > ¶ms)
double getAbsoluteTolerance() const