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 390 of file main.cpp.

390 {
391 util::parallel::initMpi(argc, argv);
392 util::io::InputParser input(argc, argv);
393
394 unsigned n_threads = 1;
395 if (input.cmdOptionExists("-nThreads"))
396 n_threads = static_cast<unsigned>(std::stoi(input.getCmdOption("-nThreads")));
398
399 std::string mpi_strategy = "none";
400 if (input.cmdOptionExists("-mpiStrategy"))
401 mpi_strategy = input.getCmdOption("-mpiStrategy");
402
403 namespace fs = std::filesystem;
404 fs::path out_dir = fs::current_path() / "out";
405 fs::path inp_dir = fs::current_path() / "inp";
406 if (input.cmdOptionExists("-outputDir"))
407 out_dir = input.getCmdOption("-outputDir");
408 if (input.cmdOptionExists("-inputDir"))
409 inp_dir = input.getCmdOption("-inputDir");
410 fs::create_directories(out_dir);
411 fs::create_directories(inp_dir);
412
413 // Short stable window with soft contact.
414 const double final_time = 2.0e-4;
415 const size_t num_steps = 1000;
416
417 auto input_json =
419 inp_dir / "mesh_cir.msh", inp_dir / "mesh_wall.msh",
420 mpi_strategy, final_time, num_steps);
421 {
422 std::ofstream os(inp_dir / "input.json");
423 os << input_json.dump(2);
424 }
425
426 auto deck = std::make_shared<inp::Input>(input_json);
427 PeriDEMModel dem(deck);
428 auto witness = std::make_unique<ContactWitness>();
429 ContactWitness *witness_p = witness.get();
430 dem.setPostprocess(std::move(witness));
431 dem.init();
432 dem.integrate();
433 witness_p->assertOk();
434 dumpFinalNodal(dem, out_dir);
435 dem.close();
436
437 if (util::parallel::mpiRank() == 0)
438 util::io::print(std::format("mpi_identity_twop_wall done (strategy={})\n",
439 mpi_strategy));
441 return 0;
442}
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:171
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(), main(), util::parallel::mpiRank(), util::io::print(), and PeriDEMModel::setPostprocess().

Here is the call graph for this function: