1 #include "Sph.h"
2 //#include "run/Presets.h"
3 
4 using namespace Sph;
5 
6 /// \brief Returns the name of the created output directory.
getRunName(const Float targetRadius,const Float impactorRadius,const Float targetPeriod,const Float impactSpeed,const Float impactAngle)7 std::string getRunName(const Float targetRadius,
8     const Float impactorRadius,
9     const Float targetPeriod,
10     const Float impactSpeed,
11     const Float impactAngle) {
12     std::stringstream ss;
13     ss << "sph_" << round(targetRadius) << "m_" << round(impactorRadius) << "m_" << round(targetPeriod * 60)
14        << "min_" << round(impactSpeed) << "kms_" << round(impactAngle);
15     return ss.str();
16 }
17 
main(int,char ** argv)18 int main(int, char** argv) {
19     (void)argv;
20     /*CollisionParams cp;
21 
22     // fixed parameters
23     cp.geometry.set(CollisionGeometrySettingsId::TARGET_PARTICLE_COUNT, 250000);
24 
25     const Float impactSpeed = 5.e3_f;
26     cp.geometry.set(CollisionGeometrySettingsId::IMPACT_SPEED, impactSpeed);
27 
28     ThreadPool pool;
29 
30     const int impactAngle1 = atoi(argv[1]);
31     for (Float targetRadius : { 5.e4f }) {
32         cp.geometry.set(CollisionGeometrySettingsId::TARGET_RADIUS, targetRadius);
33 
34         for (Float impactAngle : { impactAngle1 }) {
35             cp.geometry.set(CollisionGeometrySettingsId::IMPACT_ANGLE, impactAngle);
36 
37             for (Float period : { 2._f, 3._f, 1000._f }) {
38                 cp.geometry.set(CollisionGeometrySettingsId::TARGET_SPIN_RATE, 24._f / period);
39 
40                 for (Float impactEnergy : { 0.1_f, 0.3_f, 1._f, 3._f }) {
41                     const Float density = BodySettings::getDefaults().get<Float>(BodySettingsId::DENSITY);
42                     const Float impactorRadius =
43                         getImpactorRadius(targetRadius, impactSpeed, impactEnergy, density);
44                     cp.geometry.set(CollisionGeometrySettingsId::IMPACTOR_RADIUS, impactorRadius);
45 
46                     const std::string runName =
47                         getRunName(targetRadius, impactorRadius, period, impactSpeed / 1000._f, impactAngle);
48 
49                     cp.outputPath = Path(runName);
50                     SPH_ASSERT(!FileSystem::pathExists(cp.outputPath));
51 
52                     PhaseParams pp;
53                     pp.outputPath = Path(runName);
54 
55                     const Float runTime = 3600._f * targetRadius / 5.e3_f; // 1 hour for 10km body
56                     pp.stab.range = Interval(0._f, 10._f * targetRadius / 5.e3);
57                     pp.stab.overrides.set(RunSettingsId::RUN_LOGGER, LoggerEnum::FILE)
58                         .set(RunSettingsId::RUN_LOGGER_FILE, std::string(runName + "/stab.log"))
59                         .set(RunSettingsId::RUN_THREAD_CNT, 1);
60 
61                     pp.frag.range = Interval(0._f, runTime);
62                     pp.frag.overrides.set(RunSettingsId::RUN_LOGGER, LoggerEnum::FILE)
63                         .set(RunSettingsId::RUN_LOGGER_FILE, std::string(runName + "/frag.log"))
64                         .set(RunSettingsId::RUN_THREAD_CNT, 1);
65 
66                     pp.reacc.range = Interval(0._f, 3600._f * 24._f * 10._f); // 10 days
67                     pp.reacc.overrides.set(RunSettingsId::COLLISION_BOUNCE_MERGE_LIMIT, 1._f)
68                         .set(RunSettingsId::COLLISION_OVERLAP, OverlapEnum::FORCE_MERGE)
69                         .set(RunSettingsId::COLLISION_HANDLER, CollisionHandlerEnum::PERFECT_MERGING)
70                         .set(RunSettingsId::RUN_LOGGER, LoggerEnum::FILE)
71                         .set(RunSettingsId::RUN_LOGGER_FILE, std::string(runName + "/reac.log"))
72                         .set(RunSettingsId::RUN_THREAD_CNT, 1);
73 
74                     pool.submit([cp, pp] {
75                         CollisionRun run(cp, pp, makeShared<NullCallbacks>());
76                         run.setUp();
77                         run.run();
78                       //  runCollision(Path{});
79                     });
80                 }
81             }
82         }
83     }
84 
85     pool.waitForAll();*/
86 
87     return 0;
88 }
89