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