diff --git a/dune/gfe/coupling/rodcontinuumfixedpointstep.hh b/dune/gfe/coupling/rodcontinuumfixedpointstep.hh index e09c5666b2fd86af3228fa61f3af78c8e36f6e21..5ab435afb0f795ba214782b504ad2db36b7b5feb 100644 --- a/dune/gfe/coupling/rodcontinuumfixedpointstep.hh +++ b/dune/gfe/coupling/rodcontinuumfixedpointstep.hh @@ -574,17 +574,26 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd // Compute new damped interface value ////////////////////////////////////////////////////////////// - std::pair<std::string,std::string> interfaceName = std::make_pair("rod","continuum"); - - const RigidBodyMotion<dim>& referenceInterface = complex_.coupling(interfaceName).referenceInterface_; + typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >::iterator it = lambda.begin(); + typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >::const_iterator aIIt = averageInterface.begin(); + + for (; it!=lambda.end(); ++it, ++aIIt) { - for (int j=0; j<dim; j++) - lambda[interfaceName].r[j] = (1-damping_) * lambda[interfaceName].r[j] - + damping_ * (referenceInterface.r[j] + averageInterface[interfaceName].r[j]); + assert(it->first == aIIt->first); + + const std::pair<std::string,std::string>& interfaceName = it->first; + + const RigidBodyMotion<dim>& referenceInterface = complex_.coupling(interfaceName).referenceInterface_; + + for (int j=0; j<dim; j++) + it->second.r[j] = (1-damping_) * it->second.r[j] + + damping_ * (referenceInterface.r[j] + averageInterface[interfaceName].r[j]); lambda[interfaceName].q = Rotation<3,double>::interpolate(lambda[interfaceName].q, referenceInterface.q.mult(averageInterface[interfaceName].q), damping_); + + } }