// // Created by jholder on 22.10.21. // #include #include "Calculation.h" #include "Integratoren2d_force.h" #include "Integratoren2d_forceless.h" int main() { constexpr int numStep = 1000000; constexpr double k = 0.01; [[maybe_unused]] auto harmonic_Force = [](const Eigen::Vector2d &pos, const Eigen::Vector2d & /*torque*/) -> Eigen::Vector2d { return -k * pos; }; [[maybe_unused]] auto zero_Force = [](const Eigen::Vector2d & /*pos*/, const Eigen::Vector2d & /*torque*/) -> Eigen::Vector2d { return {0.0, 0.0}; }; auto zero_Torque = [](const Eigen::Vector2d & /*pos*/, const Eigen::Vector2d & /*torque*/) -> double { return 0.0; }; /* auto euler_Zero = [&](Rod2d &rod, Simulation &sim) { return Integratoren2d_force::Set1_Euler(rod, sim, zero_Force, zero_Torque); };*/ auto heun_Zero = [&](Rod2d &rod, Simulation &sim) { return Integratoren2d_force::Set1_Euler(rod, sim, harmonic_Force, zero_Torque); }; /*auto exact_Zero = [&](Rod2d &rod, Simulation &sim) { return Integratoren2d_force::Set3_Exact(rod, sim, zero_Force, zero_Torque); };*/ /* auto bdas_Zero = [&](Rod2d &rod, Simulation &sim) { return Integratoren2d_force::Set4_BDAS(rod, sim, zero_Force, zero_Torque); };*/ Calculation euler(heun_Zero, {{Compute::Type::msd, 1}, {Compute::Type::msd, 2}, {Compute::Type::msd, 4}, {Compute::Type::msd, 8}, {Compute::Type::msd, 16}, {Compute::Type::msd, 32}, {Compute::Type::msd, 64}, {Compute::Type::msd, 128}, {Compute::Type::msd, 256}, {Compute::Type::msd, 512}, {Compute::Type::msd, 1024}, {Compute::Type::oaf, 1}, {Compute::Type::oaf, 2}, {Compute::Type::oaf, 4}, {Compute::Type::oaf, 8}, {Compute::Type::oaf, 16}}, 0.01, 12345); euler.run(numStep); for (const auto &com : euler.getComputes()) { if (com.getType() != Compute::Type::msd) continue; std::cout << "MSD: " << com.getDifference() << " " << com.getAgg().getMean() << " <-> " << com.getTarget() << std::endl; } for (const auto &com : euler.getComputes()) { if (com.getType() != Compute::Type::oaf) continue; std::cout << "OAF: " << com.getDifference() << " " << com.getAgg().getMean() << " <-> " << com.getTarget() << std::endl; } }