Line data Source code
1 : #include <iostream>
2 : #include <fstream>
3 : #include <iomanip>
4 :
5 : #include "Util/Util.H"
6 : #include "IO/ParmParse.H"
7 : #include "IO/FileNameParse.H"
8 : #include "IO/WriteMetaData.H"
9 : #include "AMReX_ParmParse.H"
10 :
11 : #include "Model/Solid/Linear/Isotropic.H"
12 : #include "Model/Solid/Affine/Isotropic.H"
13 : #include "Model/Solid/Linear/Cubic.H"
14 : #include "Model/Solid/Affine/Cubic.H"
15 : #include "Model/Solid/Finite/NeoHookean.H"
16 : #include "Model/Solid/Finite/NeoHookeanPredeformed.H"
17 : #include "Model/Solid/Finite/PseudoLinear/Cubic.H"
18 : #include "Model/Solid/Finite/PseudoAffine/Cubic.H"
19 : #include "Model/Solid/Linear/Laplacian.H"
20 : #include "Model/Solid/Affine/J2.H"
21 : #include "Model/Solid/Affine/Hexagonal.H"
22 :
23 : #include "Integrator/Mechanics.H"
24 : #include "Model/Solid/Finite/CrystalPlastic.H"
25 :
26 18 : int main (int argc, char* argv[])
27 : {
28 18 : Util::Initialize(argc,argv);
29 :
30 18 : std::string program;
31 18 : IO::ParmParse pp;
32 : // which integrator to use (can only be mechanics)
33 126 : pp.query_validate("alamo.program",program,{"mechanics"});
34 18 : srand(2);
35 :
36 18 : Integrator::Integrator *integrator = nullptr;
37 :
38 18 : if (program == "mechanics")
39 : {
40 36 : std::string model = "linear.isotropic";
41 : // which mechanics model to use
42 90 : pp.query_default("alamo.program.mechanics.model",model,"linear.isotropic");
43 18 : if (model == "linear.isotropic")
44 6 : pp.select_only<Integrator::Mechanics<Model::Solid::Linear::Isotropic>>(integrator);
45 12 : else if (model == "linear.cubic")
46 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Linear::Cubic>>(integrator);
47 12 : else if (model == "affine.cubic")
48 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::Cubic>>(integrator);
49 12 : else if (model == "affine.hexagonal")
50 1 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::Hexagonal>>(integrator);
51 11 : else if (model == "affine.isotropic")
52 3 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::Isotropic>>(integrator);
53 8 : else if (model == "linear.laplacian")
54 4 : pp.select_only<Integrator::Mechanics<Model::Solid::Linear::Laplacian>>(integrator);
55 4 : else if (model == "finite.neohookean")
56 3 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::NeoHookean>>(integrator);
57 1 : else if (model == "finite.neohookeanpre")
58 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::NeoHookeanPredeformed>>(integrator);
59 1 : else if (model == "finite.pseudolinear.cubic")
60 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::PseudoLinear::Cubic>>(integrator);
61 1 : else if (model == "finite.pseudoaffine.cubic")
62 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::PseudoAffine::Cubic>>(integrator);
63 1 : else if (model == "affine.j2")
64 1 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::J2>>(integrator);
65 0 : else if (model == "finite.crystalplastic")
66 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::CrystalPlastic>>(integrator);
67 0 : else Util::Abort(INFO,model," is not a valid model");
68 18 : }
69 0 : else Util::Abort(INFO,"Error: \"",program,"\" is not a valid program.");
70 :
71 18 : integrator->InitData();
72 18 : integrator->Evolve();
73 18 : delete integrator;
74 :
75 18 : Util::Finalize();
76 18 : }
|