diff --git a/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh b/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh index 423c560c432ffbc3816d5edf32f1089e672aca5b..50fb426b076cffd106de9b5b427e463b4f1bd545 100644 --- a/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh +++ b/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh @@ -97,8 +97,8 @@ private: std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> linearizedRodNeumannToDirichletMap(const std::string& rodName, const RodConfigurationType& currentIterate, - const RigidBodyMotion<3>::TangentVector& forceTorque, - const Dune::FieldVector<double,3>& centerOfTorque) const; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& centerOfTorque) const; /** \brief Map a Neumann value to a Dirichlet value * @@ -109,8 +109,8 @@ private: std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, const VectorType& currentIterate, - const RigidBodyMotion<3>::TangentVector& forceTorque, - const Dune::FieldVector<double,3>& centerOfTorque) const; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& centerOfTorque) const; std::set<std::string> rodsPerContinuum(const std::string& name) const; @@ -494,8 +494,8 @@ template <class RodGridType, class ContinuumGridType> std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: linearizedRodNeumannToDirichletMap(const std::string& rodName, const RodConfigurationType& currentIterate, - const RigidBodyMotion<3>::TangentVector& forceTorque, - const Dune::FieldVector<double,3>& centerOfTorque) const + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& centerOfTorque) const { std::pair<std::string,std::string> interfaceName = std::make_pair(rodName,"continuum"); @@ -526,7 +526,7 @@ linearizedRodNeumannToDirichletMap(const std::string& rodName, ///////////////////////////////////////////////////////////////////// // The weak form of the Neumann data - rhs[0] += forceTorque; + rhs[0] += forceTorque.find(interfaceName)->second; /////////////////////////////////////////////////////////// // Modify matrix and rhs to contain one Dirichlet node @@ -572,8 +572,8 @@ template <class RodGridType, class ContinuumGridType> std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, const VectorType& currentIterate, - const RigidBodyMotion<3>::TangentVector& forceTorque, - const Dune::FieldVector<double,3>& centerOfTorque) const + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& centerOfTorque) const { std::pair<std::string,std::string> interfaceName = std::make_pair("rod", continuumName); @@ -600,9 +600,9 @@ linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, neumannValues = 0; // - computeAveragePressure<typename ContinuumGridType::LeafGridView>(forceTorque, + computeAveragePressure<typename ContinuumGridType::LeafGridView>(forceTorque.find(interfaceName)->second, interface, - centerOfTorque, + centerOfTorque.find(interfaceName)->second.r, neumannValues); // The weak form of the volume and Neumann data @@ -737,8 +737,8 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd interfaceCorrection = linearizedContinuumNeumannToDirichletMap("continuum", continuumSubdomainSolutions_["continuum"], - residualForceTorque[interfaceName], - lambda[interfaceName].r); + residualForceTorque, + lambda); } else if (preconditioner_=="NeumannDirichlet") { @@ -749,8 +749,8 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd interfaceCorrection = linearizedRodNeumannToDirichletMap("rod", rodSubdomainSolutions_["rod"], - residualForceTorque[interfaceName], - lambda[interfaceName].r); + residualForceTorque, + lambda); } else if (preconditioner_=="NeumannNeumann") { @@ -764,13 +764,13 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> continuumCorrection = linearizedContinuumNeumannToDirichletMap("continuum", continuumSubdomainSolutions_["continuum"], - residualForceTorque[interfaceName], - lambda[interfaceName].r); + residualForceTorque, + lambda); std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> rodCorrection = linearizedRodNeumannToDirichletMap("rod", rodSubdomainSolutions_["rod"], - residualForceTorque[interfaceName], - lambda[interfaceName].r); + residualForceTorque, + lambda); for (int j=0; j<6; j++) interfaceCorrection[interfaceName][j] = (alpha_[0] * continuumCorrection[interfaceName][j] + alpha_[1] * rodCorrection[interfaceName][j])