Skip to content
Snippets Groups Projects
Commit f3962131 authored by Oliver Sander's avatar Oliver Sander Committed by sander@FU-BERLIN.DE
Browse files

make mergeDirichletAndCouplingBoundaries work for more than one rod coupling

[[Imported from SVN: r6828]]
parent 034d7696
Branches
No related tags found
No related merge requests found
...@@ -51,6 +51,9 @@ class RodContinuumComplex ...@@ -51,6 +51,9 @@ class RodContinuumComplex
public: public:
/** \brief Iterator over the couplings */
typedef typename std::map<std::pair<std::string,std::string>, Coupling>::const_iterator ConstCouplingIterator;
/** \brief Simple const access to rod grids */ /** \brief Simple const access to rod grids */
const Dune::shared_ptr<RodGrid> rodGrid(const std::string& name) const const Dune::shared_ptr<RodGrid> rodGrid(const std::string& name) const
{ {
......
...@@ -322,6 +322,8 @@ private: ...@@ -322,6 +322,8 @@ private:
RigidBodyMotion<3>::TangentVector continuumDirichletToNeumannMap(const RigidBodyMotion<3>& lambda) const; RigidBodyMotion<3>::TangentVector continuumDirichletToNeumannMap(const RigidBodyMotion<3>& lambda) const;
std::set<std::string> rodsPerContinuum(const std::string& name) const;
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
// Data members related to the coupled problem // Data members related to the coupled problem
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
...@@ -426,20 +428,43 @@ mergeContinuumDirichletAndCouplingBoundaries() ...@@ -426,20 +428,43 @@ mergeContinuumDirichletAndCouplingBoundaries()
for (int i=0; i<dirichletAndCouplingNodes.size(); i++) for (int i=0; i<dirichletAndCouplingNodes.size(); i++)
dirichletAndCouplingNodes[i] = dirichletBoundary.containsVertex(i); dirichletAndCouplingNodes[i] = dirichletBoundary.containsVertex(i);
const LeafBoundaryPatch<ContinuumGridType>& continuumInterfaceBoundary // get the names of all the rods that we couple with
= complex_.coupling(std::make_pair("rod",name)).continuumInterfaceBoundary_; std::set<std::string> rodNames = rodsPerContinuum(name);
for (int i=0; i<dirichletAndCouplingNodes.size(); i++) { for (std::set<std::string>::const_iterator rIt = rodNames.begin();
bool v = continuumInterfaceBoundary.containsVertex(i); rIt != rodNames.end();
for (int j=0; j<dim; j++) ++rIt) {
dirichletAndCouplingNodes[i][j] = dirichletAndCouplingNodes[i][j] or v;
const LeafBoundaryPatch<ContinuumGridType>& continuumInterfaceBoundary
= complex_.coupling(std::make_pair(*rIt,name)).continuumInterfaceBoundary_;
for (int i=0; i<dirichletAndCouplingNodes.size(); i++) {
bool v = continuumInterfaceBoundary.containsVertex(i);
for (int j=0; j<dim; j++)
dirichletAndCouplingNodes[i][j] = dirichletAndCouplingNodes[i][j] or v;
}
} }
} }
} }
template <class RodGridType, class ContinuumGridType>
std::set<std::string> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>::
rodsPerContinuum(const std::string& name) const
{
std::set<std::string> result;
for (typename RodContinuumComplex<RodGridType,ContinuumGridType>::ConstCouplingIterator it = complex_.couplings_.begin();
it!=complex_.couplings_.end(); ++it)
if (it->first.second == name)
result.insert(it->first.first);
return result;
}
template <class RodGridType, class ContinuumGridType> template <class RodGridType, class ContinuumGridType>
RigidBodyMotion<3>::TangentVector RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: RigidBodyMotion<3>::TangentVector RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>::
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment