#include #include #include #include #include #include #include #include "AdmmInit2D.h" #include "AdmmInit3D.h" #define T double #define dim 3 using namespace ZIRAN; int main(int argc, char* argv[]) { { bool displayHelp = false; int test_number = -1; // Non-lua option. bool three_d = false; // Non-lua option. bool use_double = false; // Non-lua option int restart = 0; // Non-lua option bool run_diff_test = false; // Non-lua option double diff_test_perturbation_scale = 1; // Non-lua option float phase_field_percentage; float phase_field_l0_ratio; // Not checking for nan, because when constitutive model returns that, MpmForceBase is skipping them (treating as zeros) // FPE::WatchedScope w(FPE::Mask::Overflow | FPE::Mask::DivZero); // Unconmment the following to catch division by 0 // FPE::WatchedScope w(FPE::Mask::Overflow | FPE::Mask::Invalid | FPE::Mask::DivZero); FPE::WatchedScope w(FPE::Mask::Invalid); std::string script_file_name; StdVector inline_strings; FLAGS::Register helpflag("--help", "Print help (this message) and exit", displayHelp); // Lua command line options FLAGS::Register scriptflag("-script", "Lua script to read for initial data", script_file_name); FLAGS::Register iflag("-i", "Append string to script", inline_strings); // Non-lua command line options FLAGS::Register test_number_flag("-test", "Test number (non-lua test)", test_number); FLAGS::Register three_d_flag("--3d", "Dimension is 3(non-lua test)", three_d); FLAGS::Register run_diff_test_flag("--run_diff_test", "Run diff test (non-lua test)", run_diff_test); FLAGS::Register diff_test_perturbation_scale_flag("-dtps", "diff_test_perturbation_scale (non-lua test)", diff_test_perturbation_scale); FLAGS::Register double_flag("--double", "Dimension (non-lua test)", use_double); FLAGS::Register restart_flag("-restart", "Restart frame (non-lua test)", restart); FLAGS::Register phase_field_percentage_flag("-p", "phase_field_percentage_flag", phase_field_percentage); FLAGS::Register phase_field_l0_ratio_flag("-l0", "phase_field_l0_ratio_flag", phase_field_l0_ratio); int num_threads = tbb::task_scheduler_init::automatic; FLAGS::Register thread_flag("-t", "Set number of threads", num_threads); std::stringstream script; PluginManager pm; try { FLAGS::ParseFlags(argc, argv); if (!script_file_name.empty()) { FILESYSTEM::readFile(script, script_file_name); } pm.loadAllPlugins(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; FLAGS::PrintUsage(std::cerr); return 1; } if (displayHelp) { std::cout << "Usage:\n"; FLAGS::PrintUsage(std::cout); return 0; } installSignalHandler(); for (const auto& s : inline_strings) { script << s << "\n"; } tbb::task_scheduler_init init(num_threads); if (script_file_name.empty()) { ZIRAN_ASSERT(test_number != -1, "No lua script loaded. Either load with --script or set --test"); AdmmSimulation e; if (run_diff_test) { e.diff_test = true; e.diff_test_perturbation_scale = diff_test_perturbation_scale; } e.logger = LogWorker::initializeLogging(); #if dim == 2 AdmmInit2D h(e, test_number); #else AdmmInit3D h(e, test_number); #endif if (!restart) h.start(); else h.restart(restart); } } return 0; }