PeriDEM 0.3.0
PeriDEM -- Peridynamics-based high-fidelity model for granular media
Loading...
Searching...
No Matches
main.cpp File Reference
#include "geom/geomIncludes.h"
#include "inp/deckIncludes.h"
#include "inp/input.h"
#include "material/materialUtil.h"
#include "particle/baseParticle.h"
#include "particle/particleMpi.h"
#include "periDEMModel.h"
#include "postprocess/postprocess.h"
#include "util/function.h"
#include "util/io.h"
#include "util/parallelUtil.h"
#include "util/point.h"
#include <mpi.h>
#include <algorithm>
#include <cmath>
#include <cstdint>
#include <filesystem>
#include <format>
#include <fstream>
#include <stdexcept>
#include <string>
#include <thread>
#include <vector>
Include dependency graph for main.cpp:

Go to the source code of this file.

Data Structures

class  anonymous_namespace{main.cpp}::ContactWitness
 

Namespaces

namespace  anonymous_namespace{main.cpp}
 

Functions

std::string anonymous_namespace{main.cpp}::directoryPathWithTrailingSep (const std::filesystem::path &dir)
 
bool anonymous_namespace{main.cpp}::ownsNode (const data::ModelData &data, size_t i)
 
void anonymous_namespace{main.cpp}::dumpFinalNodal (const data::ModelData &data, const std::filesystem::path &out_dir)
 
json anonymous_namespace{main.cpp}::buildInputJson (const std::string &output_path, const std::filesystem::path &mesh_cir, const std::filesystem::path &mesh_wall, const std::string &mpi_strategy, double final_time, size_t num_steps)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 345 of file main.cpp.

345 {
346 util::parallel::initMpi(argc, argv);
347 util::io::InputParser input(argc, argv);
348
349 unsigned n_threads = 1;
350 if (input.cmdOptionExists("-nThreads"))
351 n_threads = static_cast<unsigned>(std::stoi(input.getCmdOption("-nThreads")));
353
354 std::string mpi_strategy = "none";
355 if (input.cmdOptionExists("-mpiStrategy"))
356 mpi_strategy = input.getCmdOption("-mpiStrategy");
357
358 namespace fs = std::filesystem;
359 fs::path out_dir = fs::current_path() / "out";
360 fs::path inp_dir = fs::current_path() / "inp";
361 if (input.cmdOptionExists("-outputDir"))
362 out_dir = input.getCmdOption("-outputDir");
363 if (input.cmdOptionExists("-inputDir"))
364 inp_dir = input.getCmdOption("-inputDir");
365 fs::create_directories(out_dir);
366 fs::create_directories(inp_dir);
367
368 // Short stable window with soft contact.
369 const double final_time = 2.0e-4;
370 const size_t num_steps = 1000;
371
372 auto input_json =
374 inp_dir / "mesh_cir.msh", inp_dir / "mesh_wall.msh",
375 mpi_strategy, final_time, num_steps);
376 {
377 std::ofstream os(inp_dir / "input.json");
378 os << input_json.dump(2);
379 }
380
381 auto deck = std::make_shared<inp::Input>(input_json);
382 PeriDEMModel dem(deck);
383 auto witness = std::make_unique<ContactWitness>();
384 ContactWitness *witness_p = witness.get();
385 dem.setPostprocess(std::move(witness));
386 dem.init();
387 dem.integrate();
388 witness_p->assertOk();
389 dumpFinalNodal(dem, out_dir);
390 dem.close();
391
392 if (util::parallel::mpiRank() == 0)
393 util::io::print(std::format("mpi_identity_twop_wall done (strategy={})\n",
394 mpi_strategy));
396 return 0;
397}
Input command line argument parser.
Definition inputParser.h:28
std::string directoryPathWithTrailingSep(const std::filesystem::path &dir)
Definition main.cpp:34
void dumpFinalNodal(const data::ModelData &data, const std::filesystem::path &out_dir)
Definition main.cpp:74
json buildInputJson(const std::string &output_path, const std::filesystem::path &mesh_cir, const std::filesystem::path &mesh_wall, const std::string &mpi_strategy, double final_time, size_t num_steps)
Definition main.cpp:202
void print(const T &msg, int nt=print_default_tab, int printMpiRank=print_default_mpi_rank)
Prints formatted information.
Definition io.h:128
void initNThreads(unsigned int nThreads=std::thread::hardware_concurrency())
Initializes MpiStatus struct.
void initMpi(int argc=0, char *argv[]=nullptr)
Initializes MPI and also creates MpiStatus struct.
int mpiRank()
get rank (id) of this processor
void finalizeMpi()
Call MPI_Finalize if this process initialized MPI.

References anonymous_namespace{main.cpp}::buildInputJson(), PeriDEMModel::close(), util::io::InputParser::cmdOptionExists(), anonymous_namespace{main.cpp}::dumpFinalNodal(), util::parallel::finalizeMpi(), util::io::InputParser::getCmdOption(), PeriDEMModel::init(), util::parallel::initMpi(), util::parallel::initNThreads(), PeriDEMModel::integrate(), util::parallel::mpiRank(), util::io::print(), and PeriDEMModel::setPostprocess().

Here is the call graph for this function: