From e4cd0347feb241030e7e2032c5fc204b453875de Mon Sep 17 00:00:00 2001 From: Jonathan Youett <youett@mi.fu-berlin.de> Date: Mon, 14 Nov 2011 16:04:40 +0000 Subject: [PATCH] adjust to new order of template arguments [[Imported from SVN: r8162]] --- dune/gfe/coupling/rodcontinuumcomplex.hh | 4 +- dune/gfe/coupling/rodcontinuumddstep.hh | 8 +- .../coupling/rodcontinuumfixedpointstep.hh | 74 ++++++------ .../rodcontinuumsteklovpoincarestep.hh | 108 +++++++++--------- 4 files changed, 97 insertions(+), 97 deletions(-) diff --git a/dune/gfe/coupling/rodcontinuumcomplex.hh b/dune/gfe/coupling/rodcontinuumcomplex.hh index d70bc3da..af791e58 100644 --- a/dune/gfe/coupling/rodcontinuumcomplex.hh +++ b/dune/gfe/coupling/rodcontinuumcomplex.hh @@ -20,7 +20,7 @@ class RodContinuumComplex static const int dim = ContinuumGrid::dimension; - typedef std::vector<RigidBodyMotion<3> > RodConfiguration; + typedef std::vector<RigidBodyMotion<double,3> > RodConfiguration; typedef Dune::BlockVector<Dune::FieldVector<double,3> > ContinuumConfiguration; @@ -32,7 +32,7 @@ class RodContinuumComplex BoundaryPatch<typename ContinuumGrid::LeafGridView> continuumInterfaceBoundary_; /** \brief The orientation of the interface in the reference configuration */ - RigidBodyMotion<dim> referenceInterface_; + RigidBodyMotion<double,dim> referenceInterface_; }; /** \brief Holds all data for a rod subproblem */ diff --git a/dune/gfe/coupling/rodcontinuumddstep.hh b/dune/gfe/coupling/rodcontinuumddstep.hh index b6c084ff..1bad7560 100644 --- a/dune/gfe/coupling/rodcontinuumddstep.hh +++ b/dune/gfe/coupling/rodcontinuumddstep.hh @@ -24,7 +24,7 @@ class RodContinuumDDStep static const int dim = ContinuumGridType::dimension; // The type used for rod configurations - typedef std::vector<RigidBodyMotion<dim> > RodConfigurationType; + typedef std::vector<RigidBodyMotion<double,dim> > RodConfigurationType; // The type used for continuum configurations typedef Dune::BlockVector<Dune::FieldVector<double,dim> > VectorType; @@ -41,7 +41,7 @@ public: /** \brief Constructor for a complex with one rod and one continuum */ RodContinuumDDStep(const RodContinuumComplex<RodGridType,ContinuumGridType>& complex/*, RodAssembler<typename RodGridType::LeafGridView,3>* rodAssembler, - RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >* rodSolver, + RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >* rodSolver, const MatrixType* stiffnessMatrix3d, const Dune::shared_ptr< ::LoopSolver<VectorType> > solver*/) : complex_(complex) @@ -61,7 +61,7 @@ public: /** \brief Do one domain decomposition step * \param[in,out] lambda The old and new iterate */ - virtual void iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambda) = 0; + virtual void iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >& lambda) = 0; protected: @@ -98,7 +98,7 @@ protected: RodLocalStiffness<typename RodGridType::LeafGridView,double>* localStiffness_; - RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >* solver_; + RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >* solver_; }; /** \brief Simple const access to rods */ diff --git a/dune/gfe/coupling/rodcontinuumfixedpointstep.hh b/dune/gfe/coupling/rodcontinuumfixedpointstep.hh index 2ae36ef7..b9a920a7 100644 --- a/dune/gfe/coupling/rodcontinuumfixedpointstep.hh +++ b/dune/gfe/coupling/rodcontinuumfixedpointstep.hh @@ -28,7 +28,7 @@ class RodContinuumFixedPointStep static const int dim = ContinuumGridType::dimension; // The type used for rod configurations - typedef std::vector<RigidBodyMotion<dim> > RodConfigurationType; + typedef std::vector<RigidBodyMotion<double,dim> > RodConfigurationType; // The type used for continuum configurations typedef Dune::BlockVector<Dune::FieldVector<double,dim> > VectorType; @@ -49,7 +49,7 @@ public: RodContinuumFixedPointStep(const RodContinuumComplex<RodGridType,ContinuumGridType>& complex, double damping, RodAssembler<typename RodGridType::LeafGridView,3>* rodAssembler, - RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >* rodSolver, + RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >* rodSolver, const MatrixType* stiffnessMatrix3d, const Dune::shared_ptr< ::LoopSolver<VectorType> > solver) : RodContinuumDDStep<RodGridType,ContinuumGridType>(complex), @@ -69,7 +69,7 @@ public: RodContinuumFixedPointStep(const RodContinuumComplex<RodGridType,ContinuumGridType>& complex, double damping, const std::map<std::string,RodAssembler<typename RodGridType::LeafGridView,3>*>& rodAssembler, - const std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >*>& rodSolver, + const std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >*>& rodSolver, const std::map<std::string,const MatrixType*>& stiffnessMatrix3d, const std::map<std::string, const Dune::shared_ptr< ::LoopSolver<VectorType> > >& solver) : RodContinuumDDStep<RodGridType,ContinuumGridType>(complex), @@ -83,7 +83,7 @@ public: ++it) rods_[it->first].assembler_ = it->second; - for (typename std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >*>::const_iterator it = rodSolver.begin(); + for (typename std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >*>::const_iterator it = rodSolver.begin(); it != rodSolver.end(); ++it) rods_[it->first].solver_ = it->second; @@ -113,23 +113,23 @@ public: /** \brief Do one fixed-point step * \param[in,out] lambda The old and new iterate */ - void iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambda); + void iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >& lambda); protected: - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> rodDirichletToNeumannMap(const std::string& rodName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda) const; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda) const; - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> rodDirichletToNeumannMap(const std::string& rodName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda, const RodConfigurationType& initialRodX) const; - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> > + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> > continuumNeumannToDirichletMap(const std::string& continuumName, - 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; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& centerOfTorque) const; ////////////////////////////////////////////////////////////////// // Data members related to the coupled problem @@ -152,7 +152,7 @@ protected: RodLocalStiffness<typename RodGridType::LeafGridView,double>* localStiffness_; - RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >* solver_; + RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >* solver_; }; /** \brief Simple const access to rods */ @@ -304,9 +304,9 @@ mergeContinuumDirichletAndCouplingBoundaries() template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumFixedPointStep<RodGridType,ContinuumGridType>:: +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> RodContinuumFixedPointStep<RodGridType,ContinuumGridType>:: rodDirichletToNeumannMap(const std::string& rodName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda) const + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda) const { // container for the subdomain solution RodConfigurationType& rodX = this->rodSubdomainSolutions_[rodName]; @@ -322,7 +322,7 @@ rodDirichletToNeumannMap(const std::string& rodName, if (dirichletBoundary.containsVertex(i)) rodX[i] = dirichletValues[i]; - typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >::const_iterator it = lambda.begin(); + typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >::const_iterator it = lambda.begin(); for (; it!=lambda.end(); ++it) { const std::pair<std::string,std::string>& couplingName = it->first; @@ -360,7 +360,7 @@ rodDirichletToNeumannMap(const std::string& rodName, rodX = rod(rodName).solver_->getSol(); // Extract Neumann values - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector > result; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector > result; for (it = lambda.begin(); it!=lambda.end(); ++it) { @@ -381,9 +381,9 @@ rodDirichletToNeumannMap(const std::string& rodName, template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumFixedPointStep<RodGridType,ContinuumGridType>:: +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> RodContinuumFixedPointStep<RodGridType,ContinuumGridType>:: rodDirichletToNeumannMap(const std::string& rodName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda, const RodConfigurationType& initialRodX ) const { // container for the subdomain solution @@ -402,7 +402,7 @@ rodDirichletToNeumannMap(const std::string& rodName, if (dirichletBoundary.containsVertex(i)) rodX[i] = dirichletValues[i]; - typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >::const_iterator it = lambda.begin(); + typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >::const_iterator it = lambda.begin(); for (; it!=lambda.end(); ++it) { const std::pair<std::string,std::string>& couplingName = it->first; @@ -437,7 +437,7 @@ rodDirichletToNeumannMap(const std::string& rodName, rodX = rod(rodName).solver_->getSol(); // Extract Neumann values - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector > result; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector > result; for (it = lambda.begin(); it!=lambda.end(); ++it) { @@ -455,11 +455,11 @@ rodDirichletToNeumannMap(const std::string& rodName, } template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> > +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> > RodContinuumFixedPointStep<RodGridType,ContinuumGridType>:: continuumNeumannToDirichletMap(const std::string& continuumName, - 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 + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& centerOfTorque) const { //////////////////////////////////////////////////// // Assemble the problem @@ -480,7 +480,7 @@ continuumNeumannToDirichletMap(const std::string& continuumName, VectorType rhs(this->complex_.continuumGrid(continuumName)->size(dim)); rhs = 0; - typedef typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>::const_iterator ForceIterator; + typedef typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>::const_iterator ForceIterator; for (ForceIterator it = forceTorque.begin(); it!=forceTorque.end(); ++it) { @@ -530,7 +530,7 @@ continuumNeumannToDirichletMap(const std::string& continuumName, ///////////////////////////////////////////////////////////////////////////////// // Average the continuum displacement on the coupling boundary ///////////////////////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> > averageInterface; + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> > averageInterface; for (ForceIterator it = forceTorque.begin(); it!=forceTorque.end(); ++it) { @@ -554,26 +554,26 @@ continuumNeumannToDirichletMap(const std::string& continuumName, */ template <class RodGridType, class ContinuumGridType> void RodContinuumFixedPointStep<RodGridType,ContinuumGridType>:: -iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambda) +iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >& lambda) { /////////////////////////////////////////////////////////////////// // Evaluate the Dirichlet-to-Neumann maps for the rods /////////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> rodForceTorque; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> rodForceTorque; for (RodIterator it = rods_.begin(); it != rods_.end(); ++it) { const std::string& rodName = it->first; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> forceTorque = rodDirichletToNeumannMap(rodName, lambda); + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> forceTorque = rodDirichletToNeumannMap(rodName, lambda); this->insert(rodForceTorque, forceTorque); } std::cout << "resultant rod forces and torques: " << std::endl; - typedef typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector>::iterator ForceIterator; + typedef typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector>::iterator ForceIterator; for (ForceIterator it = rodForceTorque.begin(); it != rodForceTorque.end(); ++it) std::cout << " [" << it->first.first << ", " << it->first.second << "] -- " << it->second << std::endl; @@ -590,13 +590,13 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd // Solve the Neumann problems for the continua /////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> > averageInterface; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> > averageInterface; for (ContinuumIterator it = continua_.begin(); it != continua_.end(); ++it) { const std::string& continuumName = it->first; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> > localAverageInterface + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> > localAverageInterface = continuumNeumannToDirichletMap(continuumName, rodForceTorque, lambda); @@ -606,7 +606,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd } std::cout << "averaged interfaces: " << std::endl; - for (typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >::const_iterator it = averageInterface.begin(); it != averageInterface.end(); ++it) + for (typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >::const_iterator it = averageInterface.begin(); it != averageInterface.end(); ++it) std::cout << " [" << it->first.first << ", " << it->first.second << "] -- " << it->second << std::endl; @@ -614,8 +614,8 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd // Compute new damped interface value ////////////////////////////////////////////////////////////// - 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(); + typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >::iterator it = lambda.begin(); + typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >::const_iterator aIIt = averageInterface.begin(); for (; it!=lambda.end(); ++it, ++aIIt) { @@ -623,13 +623,13 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd const std::pair<std::string,std::string>& interfaceName = it->first; - const RigidBodyMotion<dim>& referenceInterface = this->complex_.coupling(interfaceName).referenceInterface_; + const RigidBodyMotion<double,dim>& referenceInterface = this->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, + lambda[interfaceName].q = Rotation<double,3>::interpolate(lambda[interfaceName].q, referenceInterface.q.mult(averageInterface[interfaceName].q), damping_); diff --git a/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh b/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh index ba0830b5..c0834154 100644 --- a/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh +++ b/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh @@ -29,7 +29,7 @@ class RodContinuumSteklovPoincareStep static const int dim = ContinuumGridType::dimension; // The type used for rod configurations - typedef std::vector<RigidBodyMotion<dim> > RodConfigurationType; + typedef std::vector<RigidBodyMotion<double,dim> > RodConfigurationType; // The type used for continuum configurations typedef Dune::BlockVector<Dune::FieldVector<double,dim> > VectorType; @@ -53,7 +53,7 @@ public: double richardsonDamping, RodAssembler<typename RodGridType::LeafGridView,3>* rodAssembler, RodLocalStiffness<typename RodGridType::LeafGridView,double>* rodLocalStiffness, - RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >* rodSolver, + RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >* rodSolver, const MatrixType* stiffnessMatrix3d, const Dune::shared_ptr< ::LoopSolver<VectorType> > solver, LocalOperatorAssembler<ContinuumGridType, @@ -85,7 +85,7 @@ public: double richardsonDamping, const std::map<std::string,RodAssembler<typename RodGridType::LeafGridView,3>*>& rodAssembler, const std::map<std::string,RodLocalStiffness<typename RodGridType::LeafGridView,double>*>& rodLocalStiffness, - const std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >*>& rodSolver, + const std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >*>& rodSolver, const std::map<std::string,const MatrixType*>& stiffnessMatrix3d, const std::map<std::string, const Dune::shared_ptr< ::LoopSolver<VectorType> > >& solver, const std::map<std::string,LocalOperatorAssembler<ContinuumGridType, @@ -111,7 +111,7 @@ public: ++it) rods_[it->first].localStiffness_ = it->second; - for (typename std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >*>::const_iterator it = rodSolver.begin(); + for (typename std::map<std::string,RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >*>::const_iterator it = rodSolver.begin(); it != rodSolver.end(); ++it) rods_[it->first].solver_ = it->second; @@ -149,17 +149,17 @@ public: /** \brief Do one Steklov-Poincare step * \param[in,out] lambda The old and new iterate */ - void iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambda); + void iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >& lambda); protected: - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> rodDirichletToNeumannMap(const std::string& rodName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda) const; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda) const; - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> continuumDirichletToNeumannMap(const std::string& continuumName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda) const; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda) const; /** \brief Map a Neumann value to a Dirichlet value * @@ -167,11 +167,11 @@ protected: * * \return The Dirichlet value */ - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> linearizedRodNeumannToDirichletMap(const std::string& rodName, const RodConfigurationType& currentIterate, - 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; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& centerOfTorque) const; /** \brief Map a Neumann value to a Dirichlet value * @@ -179,11 +179,11 @@ protected: * * \return The infinitesimal movement of the interface */ - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, const VectorType& currentIterate, - 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; + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& centerOfTorque) const; ////////////////////////////////////////////////////////////////// // Data members related to the coupled problem @@ -214,7 +214,7 @@ protected: RodLocalStiffness<typename RodGridType::LeafGridView,double>* localStiffness_; - RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<3> >* solver_; + RiemannianTrustRegionSolver<RodGridType,RigidBodyMotion<double,3> >* solver_; }; /** \brief Simple const access to rods */ @@ -366,9 +366,9 @@ mergeContinuumDirichletAndCouplingBoundaries() template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: rodDirichletToNeumannMap(const std::string& rodName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda) const + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda) const { // container for the subdomain solution RodConfigurationType& rodX = this->rodSubdomainSolutions_[rodName]; @@ -384,7 +384,7 @@ rodDirichletToNeumannMap(const std::string& rodName, if (dirichletBoundary.containsVertex(i)) rodX[i] = dirichletValues[i]; - typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >::const_iterator it = lambda.begin(); + typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >::const_iterator it = lambda.begin(); for (; it!=lambda.end(); ++it) { const std::pair<std::string,std::string>& couplingName = it->first; @@ -422,7 +422,7 @@ rodDirichletToNeumannMap(const std::string& rodName, rodX = rod(rodName).solver_->getSol(); // Extract Neumann values - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector > result; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector > result; for (it = lambda.begin(); it!=lambda.end(); ++it) { @@ -441,9 +441,9 @@ rodDirichletToNeumannMap(const std::string& rodName, template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: continuumDirichletToNeumannMap(const std::string& continuumName, - const std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >& lambda) const + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& lambda) const { // Set initial iterate VectorType& x3d = this->continuumSubdomainSolutions_[continuumName]; @@ -458,7 +458,7 @@ continuumDirichletToNeumannMap(const std::string& continuumName, if (dirichletBoundary.containsVertex(i)) x3d[i] = dirichletValues[i]; - typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3> >::const_iterator it = lambda.begin(); + typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >::const_iterator it = lambda.begin(); for (; it!=lambda.end(); ++it) { const std::pair<std::string,std::string>& couplingName = it->first; @@ -468,7 +468,7 @@ continuumDirichletToNeumannMap(const std::string& continuumName, // Turn \lambda \in TSE(3) into a Dirichlet value for the continuum const ContinuumLeafBoundaryPatch& interfaceBoundary = this->complex_.coupling(couplingName).continuumInterfaceBoundary_; - const RigidBodyMotion<dim>& referenceInterface = this->complex_.coupling(couplingName).referenceInterface_; + const RigidBodyMotion<double,dim>& referenceInterface = this->complex_.coupling(couplingName).referenceInterface_; setRotation(interfaceBoundary, x3d, referenceInterface, it->second); @@ -520,7 +520,7 @@ continuumDirichletToNeumannMap(const std::string& continuumName, weakToStrongBoundaryStress(interfaceBoundary, residual, neumannForces); /** \todo Is referenceInterface.r the correct center of rotation? */ - const RigidBodyMotion<dim>& referenceInterface = this->complex_.coupling(couplingName).referenceInterface_; + const RigidBodyMotion<double,dim>& referenceInterface = this->complex_.coupling(couplingName).referenceInterface_; computeTotalForceAndTorque(interfaceBoundary, neumannForces, @@ -546,11 +546,11 @@ continuumDirichletToNeumannMap(const std::string& continuumName, * \return The Dirichlet value */ template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: linearizedRodNeumannToDirichletMap(const std::string& rodName, const RodConfigurationType& currentIterate, - 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 + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& centerOfTorque) const { //////////////////////////////////////////////////// // Assemble the linearized rod problem @@ -559,7 +559,7 @@ linearizedRodNeumannToDirichletMap(const std::string& rodName, const RodLeafBoundaryPatch& dirichletBoundary = this->complex_.rod(rodName).dirichletBoundary_; typedef Dune::BCRSMatrix<Dune::FieldMatrix<double,6,6> > MatrixType; - GeodesicFEAssembler<P1NodalBasis<typename RodGridType::LeafGridView>, RigidBodyMotion<3> > assembler(dirichletBoundary.gridView(), + GeodesicFEAssembler<P1NodalBasis<typename RodGridType::LeafGridView>, RigidBodyMotion<double,3> > assembler(dirichletBoundary.gridView(), rod(rodName).localStiffness_); MatrixType stiffnessMatrix; assembler.assembleMatrix(currentIterate, @@ -585,7 +585,7 @@ linearizedRodNeumannToDirichletMap(const std::string& rodName, // Turn the input force and torque into a Neumann boundary field ///////////////////////////////////////////////////////////////////// - typedef typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>::const_iterator ForceIterator; + typedef typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>::const_iterator ForceIterator; for (ForceIterator it = forceTorque.begin(); it!=forceTorque.end(); ++it) { @@ -609,7 +609,7 @@ linearizedRodNeumannToDirichletMap(const std::string& rodName, orientationMatrix.mtv(canonicalTorque,localTorque); localForce = canonicalForce; - RigidBodyMotion<3>::TangentVector localForceTorque; + RigidBodyMotion<double,3>::TangentVector localForceTorque; for (int i=0; i<3; i++) { localForceTorque[i] = localForce[i]; localForceTorque[3+i] = localTorque[i]; @@ -678,7 +678,7 @@ linearizedRodNeumannToDirichletMap(const std::string& rodName, /////////////////////////////////////////////////////////////////////////////////////// // Extract the solution at the interface boundaries /////////////////////////////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> interfaceCorrection; + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> interfaceCorrection; for (ForceIterator it = forceTorque.begin(); it!=forceTorque.end(); ++it) { @@ -710,11 +710,11 @@ linearizedRodNeumannToDirichletMap(const std::string& rodName, template <class RodGridType, class ContinuumGridType> -std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: +std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, const VectorType& currentIterate, - 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 + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>& forceTorque, + const std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3> >& centerOfTorque) const { //////////////////////////////////////////////////// // Assemble the linearized problem @@ -741,7 +741,7 @@ linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, VectorType rhs(this->complex_.continuumGrid(continuumName)->size(dim)); rhs = 0; - typedef typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>::const_iterator ForceIterator; + typedef typename std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector>::const_iterator ForceIterator; for (ForceIterator it = forceTorque.begin(); it!=forceTorque.end(); ++it) { @@ -791,7 +791,7 @@ linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, ///////////////////////////////////////////////////////////////////////////////// // Average the continuum displacement on the coupling boundary ///////////////////////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> interfaceCorrection; + std::map<std::pair<std::string,std::string>,RigidBodyMotion<double,3>::TangentVector> interfaceCorrection; for (ForceIterator it = forceTorque.begin(); it!=forceTorque.end(); ++it) { @@ -803,7 +803,7 @@ linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, // Use 'forceTorque' as a Neumann value for the rod const ContinuumLeafBoundaryPatch& interfaceBoundary = this->complex_.coupling(couplingName).continuumInterfaceBoundary_; - RigidBodyMotion<3> averageInterface; + RigidBodyMotion<double,3> averageInterface; computeAverageInterface(interfaceBoundary, x, averageInterface); // Compute the linearization @@ -814,7 +814,7 @@ linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, interfaceCorrection[couplingName][1] = averageInterface.r[1]; interfaceCorrection[couplingName][2] = averageInterface.r[2]; - Dune::FieldVector<double,3> infinitesimalRotation = Rotation<3,double>::expInv(averageInterface.q); + Dune::FieldVector<double,3> infinitesimalRotation = Rotation<double,3>::expInv(averageInterface.q); interfaceCorrection[couplingName][3] = infinitesimalRotation[0]; interfaceCorrection[couplingName][4] = infinitesimalRotation[1]; interfaceCorrection[couplingName][5] = infinitesimalRotation[2]; @@ -829,26 +829,26 @@ linearizedContinuumNeumannToDirichletMap(const std::string& continuumName, */ template <class RodGridType, class ContinuumGridType> void RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>:: -iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambda) +iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3> >& lambda) { /////////////////////////////////////////////////////////////////// // Evaluate the Dirichlet-to-Neumann maps for the rods /////////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> rodForceTorque; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> rodForceTorque; for (RodIterator it = rods_.begin(); it != rods_.end(); ++it) { const std::string& rodName = it->first; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> forceTorque = rodDirichletToNeumannMap(rodName, lambda); + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> forceTorque = rodDirichletToNeumannMap(rodName, lambda); this->insert(rodForceTorque, forceTorque); } std::cout << "resultant rod forces and torques: " << std::endl; - typedef typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector>::iterator ForceIterator; + typedef typename std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector>::iterator ForceIterator; for (ForceIterator it = rodForceTorque.begin(); it != rodForceTorque.end(); ++it) std::cout << " [" << it->first.first << ", " << it->first.second << "] -- " << it->second << std::endl; @@ -857,13 +857,13 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd // Evaluate the Dirichlet-to-Neumann map for the continuum /////////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> continuumForceTorque; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> continuumForceTorque; for (ContinuumIterator it = continua_.begin(); it != continua_.end(); ++it) { const std::string& continuumName = it->first; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> forceTorque + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> forceTorque = continuumDirichletToNeumannMap(continuumName, lambda); this->insert(continuumForceTorque, forceTorque); @@ -883,7 +883,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd for (ForceIterator it = rodForceTorque.begin(); it != rodForceTorque.end(); ++it) it->second *= -1; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> residualForceTorque = rodForceTorque; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> residualForceTorque = rodForceTorque; for (ForceIterator it = residualForceTorque.begin(), it2 = continuumForceTorque.begin(); it != residualForceTorque.end(); @@ -896,8 +896,8 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd // Apply the preconditioner /////////////////////////////////////////////////////////////// - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> continuumCorrection; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> rodCorrection; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> continuumCorrection; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> rodCorrection; if (preconditioner_=="DirichletNeumann" or preconditioner_=="NeumannNeumann") { @@ -910,7 +910,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd const std::string& continuumName = it->first; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> continuumInterfaceCorrection + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> continuumInterfaceCorrection = linearizedContinuumNeumannToDirichletMap(continuumName, this->continuumSubdomainSolutions_[continuumName], residualForceTorque, @@ -939,7 +939,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd const std::string& rodName = it->first; - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> rodInterfaceCorrection + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> rodInterfaceCorrection = linearizedRodNeumannToDirichletMap(rodName, this->rodSubdomainSolutions_[rodName], residualForceTorque, @@ -956,7 +956,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd } - std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> interfaceCorrection; + std::map<std::pair<std::string,std::string>, RigidBodyMotion<double,3>::TangentVector> interfaceCorrection; if (preconditioner_=="DirichletNeumann") { @@ -978,7 +978,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd << " -- " << continuumCorrection[interfaceName] << std::endl; // Compute weighted combination of both - RigidBodyMotion<3>::TangentVector& correction = interfaceCorrection[interfaceName]; + RigidBodyMotion<double,3>::TangentVector& correction = interfaceCorrection[interfaceName]; for (int j=0; j<6; j++) correction[j] = (alpha_[0] * continuumCorrection[interfaceName][j] + alpha_[1] * rodCorrection[interfaceName][j]) / (alpha_[0] + alpha_[1]); @@ -996,12 +996,12 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd // Apply the damped correction to the current interface value /////////////////////////////////////////////////////////////////////////////// - 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<double,3> >::iterator it = lambda.begin(); ForceIterator fIt = interfaceCorrection.begin(); for (; it!=lambda.end(); ++it, ++fIt) { assert(it->first == fIt->first); fIt->second *= richardsonDamping_; - it->second = RigidBodyMotion<3>::exp(it->second, fIt->second); + it->second = RigidBodyMotion<double,3>::exp(it->second, fIt->second); } } -- GitLab