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

rearrange code that calls the linearized NtD maps

[[Imported from SVN: r6870]]
parent 3dda20ef
No related branches found
No related tags found
No related merge requests found
......@@ -871,9 +871,10 @@ 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> interfaceCorrection;
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> continuumCorrection;
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> rodCorrection;
if (preconditioner_=="DirichletNeumann") {
if (preconditioner_=="DirichletNeumann" or preconditioner_=="NeumannNeumann") {
////////////////////////////////////////////////////////////////////
// Preconditioner is the linearized Neumann-to-Dirichlet map
......@@ -890,17 +891,19 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd
residualForceTorque,
lambda);
insert(interfaceCorrection, continuumInterfaceCorrection);
insert(continuumCorrection, continuumInterfaceCorrection);
}
std::cout << "resultant continuum interface corrections: " << std::endl;
for (ForceIterator it = interfaceCorrection.begin(); it != interfaceCorrection.end(); ++it)
for (ForceIterator it = continuumCorrection.begin(); it != continuumCorrection.end(); ++it)
std::cout << " [" << it->first.first << ", " << it->first.second << "] -- "
<< it->second << std::endl;
} else if (preconditioner_=="NeumannDirichlet") {
}
if (preconditioner_=="NeumannDirichlet" or preconditioner_=="NeumannNeumann") {
////////////////////////////////////////////////////////////////////
// Preconditioner is the linearized Neumann-to-Dirichlet map
......@@ -917,57 +920,29 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd
residualForceTorque,
lambda);
insert(interfaceCorrection, rodInterfaceCorrection);
insert(rodCorrection, rodInterfaceCorrection);
}
std::cout << "resultant rod interface corrections: " << std::endl;
for (ForceIterator it = interfaceCorrection.begin(); it != interfaceCorrection.end(); ++it)
for (ForceIterator it = rodCorrection.begin(); it != rodCorrection.end(); ++it)
std::cout << " [" << it->first.first << ", " << it->first.second << "] -- "
<< it->second << std::endl;
} else if (preconditioner_=="NeumannNeumann") {
////////////////////////////////////////////////////////////////////
// Preconditioner is a convex combination of the linearized
// Neumann-to-Dirichlet map of the continuum and the linearized
// Neumann-to-Dirichlet map of the rod.
////////////////////////////////////////////////////////////////////
// First the rod preconditioners
std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> rodCorrection;
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> tmp
= linearizedRodNeumannToDirichletMap(rodName,
rodSubdomainSolutions_[rodName],
residualForceTorque,
lambda);
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> interfaceCorrection;
insert(rodCorrection, tmp);
if (preconditioner_=="DirichletNeumann") {
}
// Then the continuum preconditioners
std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> continuumCorrection;
interfaceCorrection = continuumCorrection;
for (ContinuumIterator it = continua_.begin(); it != continua_.end(); ++it) {
} else if (preconditioner_=="NeumannDirichlet") {
const std::string& continuumName = it->first;
interfaceCorrection = rodCorrection;
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> tmp
= linearizedContinuumNeumannToDirichletMap(continuumName,
continuumSubdomainSolutions_[continuumName],
residualForceTorque,
lambda);
insert(continuumCorrection,tmp);
}
} else if (preconditioner_=="NeumannNeumann") {
std::cout << "resultant interface corrections: " << std::endl;
for (ForceIterator it = rodCorrection.begin(); it != rodCorrection.end(); ++it) {
......@@ -1185,9 +1160,10 @@ iterateWithContact(std::map<std::pair<std::string,std::string>, RigidBodyMotion<
// Apply the preconditioner
///////////////////////////////////////////////////////////////
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> interfaceCorrection;
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> continuumCorrection;
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> rodCorrection;
if (preconditioner_=="DirichletNeumann") {
if (preconditioner_=="DirichletNeumann" or preconditioner_=="NeumannNeumann") {
////////////////////////////////////////////////////////////////////
// Preconditioner is the linearized Neumann-to-Dirichlet map
......@@ -1206,17 +1182,19 @@ iterateWithContact(std::map<std::pair<std::string,std::string>, RigidBodyMotion<
residualForceTorque,
lambda);
insert(interfaceCorrection, continuumInterfaceCorrection);
insert(continuumCorrection, continuumInterfaceCorrection);
}
#endif
std::cout << "resultant continuum interface corrections: " << std::endl;
for (ForceIterator it = interfaceCorrection.begin(); it != interfaceCorrection.end(); ++it)
for (ForceIterator it = continuumCorrection.begin(); it != continuumCorrection.end(); ++it)
std::cout << " [" << it->first.first << ", " << it->first.second << "] -- "
<< it->second << std::endl;
} else if (preconditioner_=="NeumannDirichlet") {
}
if (preconditioner_=="NeumannDirichlet" or preconditioner_=="NeumannNeumann") {
////////////////////////////////////////////////////////////////////
// Preconditioner is the linearized Neumann-to-Dirichlet map
......@@ -1233,15 +1211,27 @@ iterateWithContact(std::map<std::pair<std::string,std::string>, RigidBodyMotion<
residualForceTorque,
lambda);
insert(interfaceCorrection, rodInterfaceCorrection);
insert(rodCorrection, rodInterfaceCorrection);
}
std::cout << "resultant rod interface corrections: " << std::endl;
for (ForceIterator it = interfaceCorrection.begin(); it != interfaceCorrection.end(); ++it)
for (ForceIterator it = rodCorrection.begin(); it != rodCorrection.end(); ++it)
std::cout << " [" << it->first.first << ", " << it->first.second << "] -- "
<< it->second << std::endl;
}
std::map<std::pair<std::string,std::string>, RigidBodyMotion<3>::TangentVector> interfaceCorrection;
if (preconditioner_=="DirichletNeumann") {
interfaceCorrection = continuumCorrection;
} else if (preconditioner_=="NeumannDirichlet") {
interfaceCorrection = rodCorrection;
} else if (preconditioner_=="NeumannNeumann") {
////////////////////////////////////////////////////////////////////
......@@ -1250,42 +1240,6 @@ iterateWithContact(std::map<std::pair<std::string,std::string>, RigidBodyMotion<
// Neumann-to-Dirichlet map of the rod.
////////////////////////////////////////////////////////////////////
// First the rod preconditioners
std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> rodCorrection;
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> tmp
= linearizedRodNeumannToDirichletMap(rodName,
rodSubdomainSolutions_[rodName],
residualForceTorque,
lambda);
insert(rodCorrection, tmp);
}
// Then the continuum preconditioners
std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> continuumCorrection;
#warning Neumann-to-Dirichlet map not implemented yet
#if 0
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> tmp
= linearizedContinuumNeumannToDirichletMap(continuumName,
continuumSubdomainSolutions_[continuumName],
residualForceTorque,
lambda);
insert(continuumCorrection,tmp);
}
#endif
std::cout << "resultant interface corrections: " << std::endl;
for (ForceIterator it = rodCorrection.begin(); it != rodCorrection.end(); ++it) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment