commit d6cbc0743dea18ee64a56180a8150560ed138d38
parent f9f501b7c18e3b190677bc5b961b225bb074f588
Author: Fabian Wermelinger <fabianw@mavt.ethz.ch>
Date: Sat, 19 Dec 2020 23:13:18 +0100
Remove _POS_STATE_ dependencies
Diffstat:
3 files changed, 95 insertions(+), 110 deletions(-)
diff --git a/src/bubbleDynamics.cpp b/src/bubbleDynamics.cpp
@@ -9,12 +9,14 @@
#include <kernels.h>
#include <cassert>
-#include <cstdio>
-#include <iostream>
-#include <iomanip>
-#include <fstream>
#include <cmath>
+#include <cstdio>
#include <ctime>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <memory>
+#include <stdexcept>
using namespace std;
@@ -34,104 +36,17 @@ void say_hello(const int argc, const char * argv[])
cout << endl;
}
-template <typename Tinput, typename Trhs=Tinput>
-KernelBase<Tinput,Trhs>* kernelFactory(ArgumentParser& parser, Tinput& U, BubbleData& simConfig)
-{
- int yeaBinary;
- if (parser("-binary").asBool(false))
- yeaBinary = GnuplotDump::BIN;
- else
- yeaBinary = GnuplotDump::ASCII;
-
-#ifndef _POS_STATE_
- if (parser("-dynamics").asString("rp") == "rp")
- {
- RayleighPlesset<Tinput,Trhs>::IC(U, simConfig);
- return new RayleighPlesset<Tinput,Trhs>(U.size(), yeaBinary);
- }
- else if (parser("-dynamics").asString("rp") == "hbgl")
- {
- RayleighPlesset_HBGL<Tinput,Trhs>::IC(U, simConfig);
- return new RayleighPlesset_HBGL<Tinput,Trhs>(U.size(), yeaBinary);
- }
- else if (parser("-dynamics").asString("rp") == "km")
- {
- KellerMiksis<Tinput,Trhs>::IC(U, simConfig);
- return new KellerMiksis<Tinput,Trhs>(U.size(), yeaBinary);
- }
-#ifdef _USE_EIGEN_
- else if (parser("-dynamics").asString("rp") == "kmcluster")
- {
- KMCluster_TY<Tinput,Trhs>::IC(U, simConfig);
- return new KMCluster_TY<Tinput,Trhs>(U.size(), yeaBinary);
- }
- else if (parser("-dynamics").asString("rp") == "kmcluster-fc")
- {
- KMCluster_FC<Tinput,Trhs>::IC(U, simConfig);
- return new KMCluster_FC<Tinput,Trhs>(U.size(), yeaBinary);
- }
- else if (parser("-dynamics").asString("rp") == "rpcluster")
- {
- RPCluster<Tinput,Trhs>::IC(U, simConfig);
- return new RPCluster<Tinput,Trhs>(U.size(), yeaBinary);
- }
-#endif
- else
- return nullptr;
-#else
- if (parser("-dynamics").asString("rp") == "rpcluster-positions")
- {
- RPClusterPositions_D<Tinput,Trhs>::IC(U, simConfig);
- return new RPClusterPositions_D<Tinput,Trhs>(U.size(), yeaBinary);
- }
- else if (parser("-dynamics").asString("rp") == "kmcluster-positions")
- {
- KMClusterPositions_D<Tinput,Trhs>::IC(U, simConfig);
- return new KMClusterPositions_D<Tinput,Trhs>(U.size(), yeaBinary);
- }
- else
- return nullptr;
-#endif
-}
-
-template <typename Tinput, typename Trhs=Tinput>
-StepperBase<Tinput,Trhs>* stepperFactory(ArgumentParser& p, Tinput& U, StepperSettings& S, BubbleData& D)
-{
- KernelBase<Tinput,Trhs> * const kern = kernelFactory<Tinput,Trhs>(p, U, D);
- assert(kern != nullptr);
- return S.template stepperFactory<Tinput,Trhs>(p, U, kern);
-}
-
-
-int main(int argc, const char** argv)
+template <typename T>
+void run(ArgumentParser &parser,
+ StepperSettings &stepperData,
+ BubbleData &simConfig,
+ StepperBase<T> *const stepper)
{
- say_hello(argc, argv);
-
- // Parameter
- ArgumentParser parser(argc, argv);
- if (parser.exist("-conf")) parser.readFile(parser("-conf").asString());
- parser.print_args();
-
- // set user specific data
- StepperSettings stepperData(parser);
- BubbleData simConfig(parser);
-
- // set up solution vector
-#if (_POS_STATE_ && _USE_EIGEN_)
- typedef State<Real,8> State8;
- using vec_t = LightVector<State8>;
-#else
- typedef State<Real,2> State2;
- using vec_t = LightVector<State2>;
-#endif
- vec_t U(simConfig.Nbubbles);
-
- // Select stepper and kernel
- StepperBase<vec_t> * const stepper = stepperFactory<vec_t>(parser, U, stepperData, simConfig);
- assert(stepper != nullptr);
-
simConfig.print();
+ using vec_t = T;
+ T &U = stepper->U();
+
size_t& step = stepperData.step;
Real& t = stepperData.t;
Real& dt = stepperData.dt;
@@ -187,9 +102,88 @@ int main(int argc, const char** argv)
printf("\nFinal Time = %e;\nFinal Step = %zu\n",
stepperData.t,
stepperData.step);
+}
+
+int main(int argc, const char **argv)
+{
+ say_hello(argc, argv);
- stepper->dispose();
- delete stepper;
+ // Parameter
+ ArgumentParser parser(argc, argv);
+ if (parser.exist("-conf"))
+ parser.readFile(parser("-conf").asString());
+ parser.print_args();
+
+ // set user specific data
+ StepperSettings stepperData(parser);
+ BubbleData simConfig(parser);
+ int binary_dump;
+ if (parser("-binary").asBool(false))
+ binary_dump = GnuplotDump::BIN;
+ else
+ binary_dump = GnuplotDump::ASCII;
+
+ if (parser("-dynamics").asString("rp") == "rpcluster-positions" ||
+ parser("-dynamics").asString("rp") == "kmcluster-positions") {
+ // with additional 6 DoF for bubble translation (3 x and 3 \dot{x})
+ using TVec = LightVector<State<Real, 8>>;
+
+ // Select stepper and kernel
+ TVec U(simConfig.Nbubbles);
+ std::unique_ptr<KernelBase<TVec>> kern;
+ if (parser("-dynamics").asString("rp") == "rpcluster-positions") {
+ RPClusterPositions_D<TVec>::IC(U, simConfig);
+ kern.reset(new RPClusterPositions_D<TVec>(U.size(), binary_dump));
+ } else if (parser("-dynamics").asString("rp") ==
+ "kmcluster-positions") {
+ KMClusterPositions_D<TVec>::IC(U, simConfig);
+ kern.reset(new KMClusterPositions_D<TVec>(U.size(), binary_dump));
+ } else {
+ throw std::runtime_error("Unknown kernel: " +
+ parser("-dynamics").asString("rp"));
+ }
+
+ std::unique_ptr<StepperBase<TVec>> stepper(
+ stepperData.template stepperFactory<TVec>(parser, U, kern.get()));
+ assert(stepper != nullptr);
+
+ run<TVec>(parser, stepperData, simConfig, stepper.get());
+ } else {
+ // regular R and \dot{R} state
+ using TVec = LightVector<State<Real, 2>>;
+
+ // Select stepper and kernel
+ TVec U(simConfig.Nbubbles);
+ std::unique_ptr<KernelBase<TVec>> kern;
+ if (parser("-dynamics").asString("rp") == "rp") {
+ RayleighPlesset<TVec>::IC(U, simConfig);
+ kern.reset(new RayleighPlesset<TVec>(U.size(), binary_dump));
+ } else if (parser("-dynamics").asString("rp") == "hbgl") {
+ RayleighPlesset_HBGL<TVec>::IC(U, simConfig);
+ kern.reset(new RayleighPlesset_HBGL<TVec>(U.size(), binary_dump));
+ } else if (parser("-dynamics").asString("rp") == "km") {
+ KellerMiksis<TVec>::IC(U, simConfig);
+ kern.reset(new KellerMiksis<TVec>(U.size(), binary_dump));
+ } else if (parser("-dynamics").asString("rp") == "kmcluster") {
+ KMCluster_TY<TVec>::IC(U, simConfig);
+ kern.reset(new KMCluster_TY<TVec>(U.size(), binary_dump));
+ } else if (parser("-dynamics").asString("rp") == "kmcluster-fc") {
+ KMCluster_FC<TVec>::IC(U, simConfig);
+ kern.reset(new KMCluster_FC<TVec>(U.size(), binary_dump));
+ } else if (parser("-dynamics").asString("rp") == "rpcluster") {
+ RPCluster<TVec>::IC(U, simConfig);
+ kern.reset(new RPCluster<TVec>(U.size(), binary_dump));
+ } else {
+ throw std::runtime_error("Unknown kernel: " +
+ parser("-dynamics").asString("rp"));
+ }
+
+ std::unique_ptr<StepperBase<TVec>> stepper(
+ stepperData.template stepperFactory<TVec>(parser, U, kern.get()));
+ assert(stepper != nullptr);
+
+ run<TVec>(parser, stepperData, simConfig, stepper.get());
+ }
return 0;
}
diff --git a/src/kernels.h b/src/kernels.h
@@ -9,14 +9,10 @@
#include <kernels/KellerMiksis.h>
#include <kernels/RayleighPlesset.h>
#include <kernels/RayleighPlesset_HBGL.h>
-#ifdef _USE_EIGEN_
#include <kernels/KMCluster_FC.h>
#include <kernels/KMCluster_TY.h>
#include <kernels/RPCluster.h>
-#ifdef _POS_STATE_
#include <kernels/KMClusterPositions_D.h>
#include <kernels/RPClusterPositions_D.h>
-#endif
-#endif
#endif /* KERNELS_H_KY4W86QV */
diff --git a/src/meson.build b/src/meson.build
@@ -1,12 +1,7 @@
-cpp_args = ['-D_USE_EIGEN_']
eigen_dependency = dependency('eigen3', fallback: ['eigen', 'eigen_dep'])
-if get_option('position')
- cpp_args += ['-D_POS_STATE_']
-endif
rpbd = executable('rpbd', 'bubbleDynamics.cpp',
include_directories: 'kernels',
- cpp_args: cpp_args,
dependencies: [lib_ode_deps, eigen_dependency],
cpp_pch: 'pch/bubbleDynamics.h',
install: true,