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 29 : int main (int argc, char* argv[])
28 : {
29 29 : Util::Initialize(argc,argv);
30 :
31 29 : std::string program;
32 29 : IO::ParmParse pp;
33 : // which integrator to use (can only be mechanics)
34 116 : pp.query_validate("alamo.program",program,{"mechanics"});
35 29 : srand(2);
36 :
37 29 : Integrator::Integrator *integrator = nullptr;
38 :
39 29 : if (program == "mechanics")
40 : {
41 58 : std::string model = "linear.isotropic";
42 : // which mechanics model to use
43 29 : pp.query_default("alamo.program.mechanics.model",model,"linear.isotropic");
44 29 : if (model == "linear.isotropic")
45 9 : pp.select_only<Integrator::Mechanics<Model::Solid::Linear::Isotropic>>(integrator);
46 20 : else if (model == "linear.cubic")
47 1 : pp.select_only<Integrator::Mechanics<Model::Solid::Linear::Cubic>>(integrator);
48 19 : else if (model == "affine.cubic")
49 1 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::Cubic>>(integrator);
50 18 : else if (model == "affine.hexagonal")
51 1 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::Hexagonal>>(integrator);
52 17 : else if (model == "affine.isotropic")
53 3 : pp.select_only<Integrator::Mechanics<Model::Solid::Affine::Isotropic>>(integrator);
54 14 : else if (model == "linear.laplacian")
55 9 : pp.select_only<Integrator::Mechanics<Model::Solid::Linear::Laplacian>>(integrator);
56 5 : else if (model == "finite.neohookean")
57 3 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::NeoHookean>>(integrator);
58 2 : else if (model == "finite.neohookeanpre")
59 0 : pp.select_only<Integrator::Mechanics<Model::Solid::Finite::NeoHookeanPredeformed>>(integrator);
60 2 : else if (model == "linear.transverse")
61 1 : 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 29 : }
72 0 : else Util::Abort(INFO,"Error: \"",program,"\" is not a valid program.");
73 :
74 29 : integrator->InitData();
75 29 : integrator->Evolve();
76 29 : delete integrator;
77 :
78 29 : Util::Finalize();
79 29 : }
|