PeriDEM 0.3.0
PeriDEM -- Peridynamics-based high-fidelity model for granular media
Loading...
Searching...
No Matches
main.cpp File Reference
#include "geom/geomObjectsUtil.h"
#include "inp/deckIncludes.h"
#include "material/materialUtil.h"
#include "periDEMModel.h"
#include "util/function.h"
#include "util/io.h"
#include <algorithm>
#include <cmath>
#include <filesystem>
#include <format>
#include <fstream>
#include <limits>
#include <random>
#include <stdexcept>
#include <string>
#include <thread>
#include <vector>
Include dependency graph for main.cpp:

Go to the source code of this file.

Data Structures

struct  anonymous_namespace{main.cpp}::PackedParticle
 
struct  anonymous_namespace{main.cpp}::PackedBounds
 

Namespaces

namespace  anonymous_namespace{main.cpp}
 

Functions

std::string anonymous_namespace{main.cpp}::directoryPathWithTrailingSep (const std::filesystem::path &dir)
 
double anonymous_namespace{main.cpp}::maxElem (const std::vector< double > &v)
 
bool anonymous_namespace{main.cpp}::doesParticleIntersect (const PackedParticle &p, const std::vector< PackedParticle > &existing, const std::vector< double > &rect, double padding)
 
std::vector< PackedParticleanonymous_namespace{main.cpp}::generateParticleLocations (const std::vector< double > &in_rect, double max_y, double mesh_size, double R, int N_target, double padding, std::mt19937 &gen)
 
PackedBounds anonymous_namespace{main.cpp}::packedAxisBounds (const std::vector< PackedParticle > &packed)
 
json anonymous_namespace{main.cpp}::contactPairJson (double R_contact_factor, bool damping_on, bool friction_on, double Kn, double beta_n_eps, double friction_coeff, double Kn_factor, double beta_n_factor)
 
double anonymous_namespace{main.cpp}::KnFromBulk (double Ka, double Kb, double horizon)
 
json anonymous_namespace{main.cpp}::buildInputJson (const std::string &output_path_for_deck, const std::filesystem::path &inp_dir, int argc, char *argv[])
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

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

Definition at line 491 of file main.cpp.

491 {
492
493 util::parallel::initMpi(argc, argv);
495 util::io::print(std::format("Initialized MPI. MPI size = {}, MPI rank = {}\n", mpiSize, mpiRank));
497
498 util::io::InputParser input(argc, argv);
499
500 unsigned int nThreads;
501 if (input.cmdOptionExists("-nThreads"))
502 nThreads = std::stoi(input.getCmdOption("-nThreads"));
503 else {
504 nThreads = std::thread::hardware_concurrency();
505 util::io::print(std::format("Running test with default number of threads = {}\n", nThreads));
506 }
508 util::io::print(std::format("Number of threads = {}\n", util::parallel::getNThreads()));
509
510 namespace fs = std::filesystem;
511 const fs::path cwd = fs::current_path();
512
513 fs::path out_dir = cwd / "out";
514 fs::path inp_dir = cwd / "inp";
515
516 if (input.cmdOptionExists("-outputDir")) {
517 fs::path p = input.getCmdOption("-outputDir");
518 out_dir = p.is_absolute() ? std::move(p) : cwd / p;
519 }
520 if (input.cmdOptionExists("-inputDir")) {
521 fs::path p = input.getCmdOption("-inputDir");
522 inp_dir = p.is_absolute() ? std::move(p) : cwd / p;
523 } else if (input.cmdOptionExists("-outputDir")) {
524 inp_dir = out_dir.parent_path() / "inp";
525 }
526
527 fs::create_directories(out_dir);
528 fs::create_directories(inp_dir);
529
530 const std::string output_path_for_deck = directoryPathWithTrailingSep(out_dir);
531
532 util::io::print(std::format("Output directory (VTU, log.txt): {}\n", fs::absolute(out_dir).string()));
533 util::io::print(std::format("Input directory (input.json, meshes): {}\n", fs::absolute(inp_dir).string()));
534
535 auto inputJson = buildInputJson(output_path_for_deck, inp_dir, argc, argv);
536
537 const fs::path input_json_path = inp_dir / "input.json";
538 {
539 std::ofstream os(input_json_path);
540 if (!os)
541 throw std::runtime_error("Failed to open " + input_json_path.string() + " for writing.");
542 os << inputJson.dump(2);
543 }
544 util::io::print(std::format("Wrote deck to {}\n", fs::absolute(input_json_path).string()));
545
546 auto deck = std::make_shared<inp::Input>(inputJson);
547
548 PeriDEMModel dem(deck);
549 dem.run(deck);
550
551 return EXIT_SUCCESS;
552}
Input command line argument parser.
Definition inputParser.h:28
json buildInputJson(const std::string &output_path_for_deck, const std::filesystem::path &inp_dir, int argc, char *argv[])
Definition main.cpp:203
std::string directoryPathWithTrailingSep(const std::filesystem::path &dir)
Definition main.cpp:34
std::string printStr(const T &msg, int nt=print_default_tab)
Returns formatted string for output.
Definition io.h:53
void print(const T &msg, int nt=print_default_tab, int printMpiRank=print_default_mpi_rank)
Prints formatted information.
Definition io.h:128
unsigned int getNThreads()
Get number of threads to be used by taskflow.
void initNThreads(unsigned int nThreads=std::thread::hardware_concurrency())
Initializes MpiStatus struct.
const MpiStatus * getMpiStatus()
Returns pointer to MpiStatus struct.
void initMpi(int argc=0, char *argv[]=nullptr)
Initializes MPI and also creates MpiStatus struct.
int mpiSize()
Get size (number) of processors.
int mpiRank()
get rank (id) of this processor

References anonymous_namespace{main.cpp}::buildInputJson(), util::io::InputParser::cmdOptionExists(), util::io::InputParser::getCmdOption(), util::parallel::getMpiStatus(), util::parallel::getNThreads(), util::parallel::initMpi(), util::parallel::initNThreads(), util::parallel::mpiRank(), util::parallel::mpiSize(), util::io::print(), and PeriDEMModel::run().

Here is the call graph for this function: