// Dirichlet BCs void Albany::CahnHillProblem::constructDirichletEvaluators(const std::vector<std::string>& nodeSetIDs) { // Construct BC evaluators for all node sets and names std::vector<std::string> bcNames(neq); bcNames[0] = "rho"; Albany::BCUtils<Albany::DirichletTraits> bcUtils; dfm = bcUtils.constructBCEvaluators(nodeSetIDs, bcNames, this->params, this->paramLib); }
// Dirichlet BCs void Albany::HeatProblem::constructDirichletEvaluators(const std::vector<std::string>& nodeSetIDs) { // Construct BC evaluators for all node sets and names std::vector<std::string> bcNames(neq); bcNames[0] = "T"; Albany::BCUtils<Albany::DirichletTraits> bcUtils; dfm = bcUtils.constructBCEvaluators(nodeSetIDs, bcNames, this->params, this->paramLib); use_sdbcs_ = bcUtils.useSDBCs(); offsets_ = bcUtils.getOffsets(); nodeSetIDs_ = bcUtils.getNodeSetIDs(); }
// Neumann BCs void Albany::HeatProblem::constructNeumannEvaluators(const Teuchos::RCP<Albany::MeshSpecsStruct>& meshSpecs) { // Note: we only enter this function if sidesets are defined in the mesh file // i.e. meshSpecs.ssNames.size() > 0 Albany::BCUtils<Albany::NeumannTraits> bcUtils; // Check to make sure that Neumann BCs are given in the input file if(!bcUtils.haveBCSpecified(this->params)) return; // Construct BC evaluators for all side sets and names // Note that the string index sets up the equation offset, so ordering is important std::vector<std::string> bcNames(neq); Teuchos::ArrayRCP<std::string> dof_names(neq); Teuchos::Array<Teuchos::Array<int> > offsets; offsets.resize(neq); bcNames[0] = "T"; dof_names[0] = "Temperature"; offsets[0].resize(1); offsets[0][0] = 0; // Construct BC evaluators for all possible names of conditions // Should only specify flux vector components (dudx, dudy, dudz), or dudn, not both std::vector<std::string> condNames(5); //dudx, dudy, dudz, dudn, scaled jump (internal surface), or robin (like DBC plus scaled jump) // Note that sidesets are only supported for two and 3D currently if(numDim == 2) condNames[0] = "(dudx, dudy)"; else if(numDim == 3) condNames[0] = "(dudx, dudy, dudz)"; else TEUCHOS_TEST_FOR_EXCEPTION(true, Teuchos::Exceptions::InvalidParameter, std::endl << "Error: Sidesets only supported in 2 and 3D." << std::endl); condNames[1] = "dudn"; condNames[2] = "scaled jump"; condNames[3] = "robin"; condNames[4] = "radiate"; nfm.resize(1); // Heat problem only has one physics set nfm[0] = bcUtils.constructBCEvaluators(meshSpecs, bcNames, dof_names, false, 0, condNames, offsets, dl, this->params, this->paramLib, materialDB); }
// Dirichlet BCs void Albany::HydrideProblem::constructDirichletEvaluators(const std::vector<std::string>& nodeSetIDs) { // Construct BC evaluators for all node sets and names std::vector<std::string> bcNames(neq); bcNames[0] = "X"; if (numDim>1) bcNames[1] = "Y"; if (numDim>2) bcNames[2] = "Z"; bcNames[numDim] = "c"; bcNames[numDim+1] = "w"; Albany::BCUtils<Albany::DirichletTraits> bcUtils; dfm = bcUtils.constructBCEvaluators(nodeSetIDs, bcNames, this->params, this->paramLib); offsets_ = bcUtils.getOffsets(); }