93 lines
2.0 KiB
C++
93 lines
2.0 KiB
C++
//
|
|
// Created by jholder on 22.10.21.
|
|
//
|
|
|
|
#include "Compute.h"
|
|
|
|
#include <utility>
|
|
#include <iostream>
|
|
#include "Rod2d.hpp"
|
|
#include "Simulation.h"
|
|
|
|
void Compute::evalMSD(const Rod2d &rod2D) {
|
|
const auto &new_pos = rod2D.getPos();
|
|
auto old_pos = start_rod.getPos();
|
|
auto msd = (new_pos - old_pos).squaredNorm();
|
|
agg.feed(msd);
|
|
}
|
|
|
|
void Compute::evalOAF(const Rod2d &rod2D) {
|
|
const auto &new_e = rod2D.getE();
|
|
auto old_e = start_rod.getE();
|
|
auto oaf = old_e.dot(new_e);
|
|
agg.feed(oaf);
|
|
}
|
|
|
|
void Compute::eval_empXX(const Rod2d & /*rod2D*/) {
|
|
//TODO
|
|
}
|
|
|
|
void Compute::eval_empYY(const Rod2d & /*rod2D*/) {
|
|
//TODO
|
|
}
|
|
|
|
void Compute::eval(const Rod2d &rod2D) {
|
|
time_step++;
|
|
if (time_step % every == 0) {
|
|
switch (type) {
|
|
case Type::msd:
|
|
evalMSD(rod2D);
|
|
break;
|
|
case Type::oaf:
|
|
evalOAF(rod2D);
|
|
break;
|
|
case Type::empxx:
|
|
eval_empXX(rod2D);
|
|
break;
|
|
case Type::empyy:
|
|
eval_empYY(rod2D);
|
|
break;
|
|
}
|
|
start_rod = rod2D;
|
|
}
|
|
|
|
}
|
|
|
|
Compute::Compute(Rod2d rod, Type t_type, size_t t_every, Simulation &sim)
|
|
: start_rod(std::move(rod)), every(t_every), time_step(0), type(t_type) {
|
|
auto time = sim.getMDeltaT() * static_cast<double>(every);
|
|
switch (type) {
|
|
case Type::msd:
|
|
target = 4.0 * 0.5 * (rod.getDiff().trace()) * time;
|
|
break;
|
|
case Type::oaf:
|
|
target = std::exp(-rod.getDRot() * time);
|
|
break;
|
|
case Type::empxx:
|
|
target = 0;
|
|
break;
|
|
case Type::empyy:
|
|
target = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
const LiveAgg &Compute::getAgg() const {
|
|
return agg;
|
|
}
|
|
|
|
Compute::Type Compute::getType() const {
|
|
return type;
|
|
}
|
|
|
|
double Compute::getTime() const {
|
|
return static_cast<double>(every);
|
|
}
|
|
|
|
double Compute::getTarget() const {
|
|
return target;
|
|
}
|
|
|
|
double Compute::getDifference() const {
|
|
return abs(agg.getMean() -target);
|
|
} |