Ice Sheet System Model  4.18
Code documentation
Functions
ModelProcessorx.cpp File Reference
#include "../../classes/classes.h"
#include "../../shared/shared.h"
#include "./ModelProcessorx.h"

Go to the source code of this file.

Functions

void ModelProcessorx (Elements **pelements, Nodes ***pnodes, Vertices **pvertices, Materials **pmaterials, Constraints ***pconstraints, Loads ***ploads, Parameters **pparameters, Inputs2 **pinputs2, IoModel *iomodel, FILE *toolkitfile, char *rootpath, const int solution_enum, const int nummodels, const int *analysis_enum_list)
 

Function Documentation

◆ ModelProcessorx()

void ModelProcessorx ( Elements **  pelements,
Nodes ***  pnodes,
Vertices **  pvertices,
Materials **  pmaterials,
Constraints ***  pconstraints,
Loads ***  ploads,
Parameters **  pparameters,
Inputs2 **  pinputs2,
IoModel iomodel,
FILE *  toolkitfile,
char *  rootpath,
const int  solution_enum,
const int  nummodels,
const int *  analysis_enum_list 
)

Definition at line 15 of file ModelProcessorx.cpp.

15  {
16  _assert_(nummodels>0);
17 
18  /*Set Verbosity once for all*/
19  int verbose;
20  iomodel->FindConstant(&verbose,"md.verbose");
21  SetVerbosityLevel(verbose);
22 
23  if(VerboseMProcessor()) _printf0_(" starting model processor \n");
24 
25  /*Initialize datasets*/
26  Elements *elements = new Elements();
27  Vertices *vertices = new Vertices();
28  Materials *materials = new Materials();
29  Parameters *parameters = new Parameters();
30  Constraints **constraints = xNew<Constraints*>(nummodels);
31  Loads **loads = xNew<Loads*>(nummodels);
32  Nodes **nodes = xNew<Nodes*>(nummodels);
33  for(int i = 0;i<nummodels;i++) constraints[i] = new Constraints();
34  for(int i = 0;i<nummodels;i++) loads[i] = new Loads();
35  for(int i = 0;i<nummodels;i++) nodes[i] = new Nodes();
36 
37  /*Partition Elements and Nodes*/
39 
40  /*Create elements, vertices and materials, independent of analysis_enum: */
41  CreateElements(elements,iomodel,nummodels);
42  CreateVertices(elements,vertices,iomodel,solution_enum);
43  CreateParameters(parameters,iomodel,rootpath,toolkitfile,solution_enum);
44 
45  /*Should move to CreateInputs2*/
46  Inputs2 *inputs2 = new Inputs2(elements->Size(),vertices->Size());
47  if (iomodel->domaintype != Domain3DsurfaceEnum) iomodel->FetchDataToInput(inputs2,elements,"md.mesh.scale_factor",MeshScaleFactorEnum,1.);
48 
49  /*Can now do Materials since we have created Inputs*/
50  CreateMaterials(elements,inputs2,materials,iomodel,nummodels);
51 
52  /*Update datasets based on each analysis (and add nodes, constrains and loads)*/
53  for(int i=0;i<nummodels;i++){
54 
55  int analysis_enum=analysis_enum_list[i];
56  parameters->AddObject(new IntParam(AnalysisCounterEnum,i));
57 
58  if(VerboseMProcessor()) _printf0_(" creating datasets for analysis " << EnumToStringx(analysis_enum) << "\n");
59  Analysis* analysis = EnumToAnalysis(analysis_enum);
60  analysis->UpdateParameters(parameters,iomodel,solution_enum,analysis_enum);
61  analysis->CreateNodes(nodes[i],iomodel);
62  analysis->UpdateElements(elements,inputs2,iomodel,i,analysis_enum);
63  analysis->CreateConstraints(constraints[i],iomodel);
64  analysis->CreateLoads(loads[i],iomodel);
65  delete analysis;
66 
67  /*Tell datasets that Ids are already sorted*/
68  constraints[i]->Presort();
69  loads[i]->Presort();
70  nodes[i]->Presort();
71 
72  /*Finalize loads (count pengrids,penpairs,rifts,etc)*/
73  loads[i]->Finalize();
74  }
75 
76  /*Solution specific updates*/
77  if(VerboseMProcessor()) _printf0_(" updating elements and materials for control parameters" << "\n");
78  UpdateElementsAndMaterialsControl(elements,parameters,inputs2,materials,iomodel);
79  #ifdef _HAVE_DAKOTA_
80  if(VerboseMProcessor()) _printf0_(" updating elements and materials for uncertainty quantification" << "\n");
81  UpdateElementsAndMaterialsDakota(elements,inputs2,materials,iomodel);
82  #endif
83  if(solution_enum==TransientSolutionEnum) UpdateElementsTransient(elements,parameters,inputs2,iomodel);
84 
85  /*Output definitions dataset: */
86  if(VerboseMProcessor()) _printf0_(" creating output definitions" << "\n");
87  CreateOutputDefinitions(elements,parameters,inputs2,iomodel);
88 
89  /* Sort datasets:
90  * All our datasets are already ordered by ids. Set presort flag so that
91  * later on, when sorting is requested on these datasets, it will not be
92  * redone: */
93  elements->Presort();
94  vertices->Presort();
95  materials->Presort();
96 
97  /*Assign output pointers:*/
98  *pelements = elements;
99  *pnodes = nodes;
100  *pvertices = vertices;
101  *pmaterials = materials;
102  *pconstraints = constraints;
103  *ploads = loads;
104  *pparameters = parameters;
105  *pinputs2 = inputs2;
106 
107  if(VerboseMProcessor()) _printf0_(" done with model processor \n");
108 }
DataSet::Size
int Size()
Definition: DataSet.cpp:399
Vertices
Declaration of Vertices class.
Definition: Vertices.h:15
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
Analysis::CreateConstraints
virtual void CreateConstraints(Constraints *constraints, IoModel *iomodel)=0
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
TransientSolutionEnum
@ TransientSolutionEnum
Definition: EnumDefinitions.h:1317
VerboseMProcessor
bool VerboseMProcessor(void)
Definition: Verbosity.cpp:22
CreateVertices
void CreateVertices(Elements *elements, Vertices *vertices, IoModel *iomodel, int solution_type, bool isamr)
Definition: CreateElementsVerticesAndMaterials.cpp:301
UpdateElementsTransient
void UpdateElementsTransient(Elements *elements, Parameters *parameters, Inputs2 *inputs2, IoModel *iomodel)
Definition: UpdateElementsTransient.cpp:11
Constraints
Declaration of Constraints class.
Definition: Constraints.h:13
Elements
Declaration of Elements class.
Definition: Elements.h:17
Analysis::UpdateElements
virtual void UpdateElements(Elements *elements, Inputs2 *inputs2, IoModel *iomodel, int analysis_counter, int analysis_type)=0
CreateParameters
void CreateParameters(Parameters *parameters, IoModel *iomodel, char *rootpath, FILE *toolkitsoptionsfid, const int solution_type)
Definition: CreateParameters.cpp:18
AnalysisCounterEnum
@ AnalysisCounterEnum
Definition: EnumDefinitions.h:35
UpdateElementsAndMaterialsControl
void UpdateElementsAndMaterialsControl(Elements *elements, Parameters *parameters, Inputs2 *inputs2, Materials *materials, IoModel *iomodel)
Definition: UpdateElementsAndMaterialsControl.cpp:11
Parameters::AddObject
void AddObject(Param *newparam)
Definition: Parameters.cpp:67
Analysis::CreateLoads
virtual void CreateLoads(Loads *loads, IoModel *iomodel)=0
Materials
Declaration of Materials class.
Definition: Materials.h:16
SetVerbosityLevel
void SetVerbosityLevel(int level)
Definition: Verbosity.cpp:34
CreateElements
void CreateElements(Elements *elements, IoModel *iomodel, const int nummodels)
Definition: CreateElementsVerticesAndMaterials.cpp:35
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
Domain3DsurfaceEnum
@ Domain3DsurfaceEnum
Definition: EnumDefinitions.h:1039
IoModel::FindConstant
void FindConstant(bool *pvalue, const char *constant_name)
Definition: IoModel.cpp:2362
IntParam
Definition: IntParam.h:20
Inputs2
Declaration of Inputs class.
Definition: Inputs2.h:23
EnumToAnalysis
Analysis * EnumToAnalysis(int analysis_enum)
Definition: EnumToAnalysis.cpp:13
DataSet::Presort
void Presort()
Definition: DataSet.cpp:368
Loads
Declaration of Loads class.
Definition: Loads.h:16
MeshScaleFactorEnum
@ MeshScaleFactorEnum
Definition: EnumDefinitions.h:652
UpdateElementsAndMaterialsDakota
void UpdateElementsAndMaterialsDakota(Elements *elements, Inputs2 *inputs2, Materials *materials, IoModel *iomodel)
Definition: UpdateElementsAndMaterialsDakota.cpp:11
CreateMaterials
void CreateMaterials(Elements *elements, Inputs2 *inputs2, Materials *materials, IoModel *iomodel, const int nummodels)
Definition: CreateElementsVerticesAndMaterials.cpp:87
CreateOutputDefinitions
void CreateOutputDefinitions(Elements *elements, Parameters *parameters, Inputs2 *inputs2, IoModel *iomodel)
Definition: CreateOutputDefinitions.cpp:10
IoModel::FetchDataToInput
void FetchDataToInput(Inputs2 *inputs2, Elements *elements, const char *vector_name, int input_enum)
Definition: IoModel.cpp:1651
Loads::Finalize
void Finalize()
Definition: Loads.cpp:97
IoModel::domaintype
int domaintype
Definition: IoModel.h:78
Analysis::UpdateParameters
virtual void UpdateParameters(Parameters *parameters, IoModel *iomodel, int solution_enum, int analysis_enum)=0
ElementsAndVerticesPartitioning
void ElementsAndVerticesPartitioning(IoModel *iomodel)
Definition: ElementsAndVerticesPartitioning.cpp:17
Analysis
Definition: Analysis.h:30
Analysis::CreateNodes
virtual void CreateNodes(Nodes *nodes, IoModel *iomodel, bool isamr=false)=0