Anmerkung! Jacob mach mal!

This commit is contained in:
Anton Lüders 2021-10-25 12:54:19 +02:00
parent bfc112e9f3
commit 81f4796eeb

View File

@ -20,7 +20,12 @@ void Integratoren2d_forceless::Set1_Euler(Rod2d &rod2D, Simulation &sim) {
//translation
Eigen::Vector2d rand = {sim.getNorm(std), sim.getNorm(std)}; //gaussian noise
Eigen::Vector2d trans_part = rod2D.getDiff_Sqrt() * rand; //translation vector in Particle System
Eigen::Vector2d trans_lab = rod2D.getE_Base_matrix() * trans_part;
Eigen::Vector2d trans_lab = rod2D.getE_Base_matrix() * trans_part;
/* TODO
Statt Zeile 22 und 23 kannst du trans_lab = paralleler_matrix_eintrag * e plus senkrechter_matrix_eintrag * ortho(e);
*/
//rotation
double rot = sim.getNorm(std) * rod2D.getDRot_Sqrt();// rotationsmatrix verwenden.
@ -41,6 +46,15 @@ void Integratoren2d_forceless::Set2_Heun(Rod2d &rod2D, Simulation &sim) {
Eigen::Vector2d trans_part = rod2D.getDiff_Sqrt() * rand; //translation vector in Particle System
Eigen::Vector2d trans_lab = rod2D.getE_Base_matrix() * trans_part;
Eigen::Vector2d pos_predictor = rod2D.getPos() + trans_lab;
/*
TODO
Siehe Set_1: Hier auch über e und orth(e)
*/
//rotation
double rot_predict = sim.getNorm(std) * rod2D.getDRot_Sqrt();// rotationsmatrix verwenden.
Eigen::Vector2d e = rod2D.getE();
@ -67,6 +81,12 @@ void Integratoren2d_forceless::Set3_Exact(Rod2d &rod2D, Simulation &sim) {
Eigen::Vector2d trans_part = rod2D.getDiff_Sqrt() * rand; //translation vector in Particle System
Eigen::Vector2d trans_lab = rod2D.getE_Base_matrix() * trans_part;
/*
TODO: Siehe Set1
*/
//rotation
double rot = sim.getNorm(std) * rod2D.getDRot_Sqrt();
Eigen::Vector2d e = rod2D.getE();
@ -74,6 +94,10 @@ void Integratoren2d_forceless::Set3_Exact(Rod2d &rod2D, Simulation &sim) {
Eigen::Vector2d delta_e = correction * e + rot * ortho(e);
/*
TODO Warum hier kBT definiert?
*/
//apply
rod2D.setPos(rod2D.getPos() + trans_lab);
rod2D.setE((e + delta_e).normalized());
@ -91,10 +115,20 @@ void Integratoren2d_forceless::Set4_BDAS(Rod2d &rod2D, Simulation &sim) {
Eigen::Rotation2D rotMat(acos(unitVec.dot(rod2D.getE())));
auto trans_lab = rotMat * trans_part;
/*
TODO: Warum hier nicht die Matrix von oben?
*/
auto rot = Eigen::Rotation2D<double>(sim.getNorm(std) * rod2D.getDRot_Sqrt());
Eigen::Rotation2Dd rotation(rot);
auto e_new = (rotation.toRotationMatrix() * rod2D.getE()).normalized();
/*
TODO Warum Normierung? Ist der Fehler so gros? Wie siehts mit einer Winkelvariable aus,
dann musst du den Winkel nicht jedesmal berechnen?
*/
// Normalisation should not be necessary if a proper angular representation is used.
// But with vector e it is done in case of numerical errors