void FELIX::Hydrology::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> nbcUtils; // Check to make sure that Neumann BCs are given in the input file if (!nbcUtils.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> neumannNames(neq + 1); Teuchos::Array<Teuchos::Array<int> > offsets; offsets.resize(1); neumannNames[0] = "Hydraulic Potential"; neumannNames[1] = "all"; offsets[0].resize(1); offsets[0][0] = 0; // Construct BC evaluators for all possible names of conditions std::vector<std::string> condNames(1); condNames[0] = "neumann"; nfm.resize(1); // FELIX problem only has one element block nfm[0] = nbcUtils.constructBCEvaluators(meshSpecs, neumannNames, dof_names, false, 0, condNames, offsets, dl, this->params, this->paramLib); }
// 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); }
// Neumann BCs void Albany::PoissonsEquationProblem::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> neuUtils; // Check to make sure that Neumann BCs are given in the input file if(!neuUtils.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> neumannNames(neq); Teuchos::Array<Teuchos::Array<int> > offsets; offsets.resize(neq); neumannNames[0] = "P"; 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(2); //dudx, dudy, dudz, dudn, P Teuchos::ArrayRCP<std::string> dof_names(1); dof_names[0] = "Phi"; // 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"; nfm.resize(1); nfm[0] = neuUtils.constructBCEvaluators(meshSpecs, neumannNames, dof_names, true, 0, condNames, offsets, dl, this->params, this->paramLib); }
//------------------------------------------------------------------------------ // Traction BCs void Albany::MechanicsProblem:: 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> neuUtils; // Check to make sure that Neumann BCs are given in the input file if (!neuUtils.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> neumannNames(neq + 1); Teuchos::Array<Teuchos::Array<int>> offsets; offsets.resize(neq + 1); neumannNames[0] = "sig_x"; offsets[0].resize(1); offsets[0][0] = 0; // The Neumann BC code uses offsets[neq].size() as num dim, so use num_dims_ // here rather than neq. offsets[neq].resize(num_dims_); offsets[neq][0] = 0; if (num_dims_ > 1) { neumannNames[1] = "sig_y"; offsets[1].resize(1); offsets[1][0] = 1; offsets[neq][1] = 1; } if (num_dims_ > 2) { neumannNames[2] = "sig_z"; offsets[2].resize(1); offsets[2][0] = 2; offsets[neq][2] = 2; } neumannNames[neq] = "all"; // 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(3); //dudx, dudy, dudz, dudn, P Teuchos::ArrayRCP<std::string> dof_names(1); dof_names[0] = "Displacement"; // Note that sidesets are only supported for two and 3D currently if (num_dims_ == 2) condNames[0] = "(t_x, t_y)"; else if (num_dims_ == 3) condNames[0] = "(t_x, t_y, t_z)"; else TEUCHOS_TEST_FOR_EXCEPTION(true, Teuchos::Exceptions::InvalidParameter, '\n' << "Error: Sidesets only supported in 2 and 3D." << '\n'); condNames[1] = "dudn"; condNames[2] = "P"; nfm.resize(1); // Elasticity problem only has one element block nfm[0] = neuUtils.constructBCEvaluators( meshSpecs, neumannNames, dof_names, true, 0, condNames, offsets, dl_, this->params, this->paramLib); }