source: issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp@ 16529

Last change on this file since 16529 was 16529, checked in by Mathieu Morlighem, 11 years ago

CHG: removing Surfaceslopes and bedslopes analysis, replaced by L2ProjectionBase

File size: 8.4 KB
Line 
1/*!\file: CreateDataSets
2 * \brief general driver for creating all datasets that make a finite element iomodel
3 */
4
5#ifdef HAVE_CONFIG_H
6 #include <config.h>
7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
11#include "../../classes/classes.h"
12#include "../../shared/shared.h"
13#include "../MeshPartitionx/MeshPartitionx.h"
14#include "./ModelProcessorx.h"
15
16void CreateDataSets(Elements** pelements,Nodes** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints** pconstraints, Loads** ploads,Parameters** pparameters,IoModel* iomodel,FILE* toolkitfile,char* rootpath,const int solution_type,const int analysis_type,const int nummodels,int analysis_counter){
17
18 Elements *elements = NULL;
19 Materials *materials = NULL;
20 Parameters *parameters = NULL;
21
22 /*Process Finite Element Mesh*/
23
24 /*Partition Elements and Nodes*/
25 ElementsAndVerticesPartitioning(&iomodel->my_elements,&iomodel->my_vertices,iomodel);
26
27 /*Create elements, vertices and materials, independent of analysis_type: */
28 CreateElementsVerticesAndMaterials(pelements, pvertices, pmaterials, iomodel,nummodels);
29
30 /*Recover elements and materials, for future update: */
31 elements = *pelements;
32 materials = *pmaterials;
33
34 /*Creates Nodes and constraints datasets if empty*/
35 if(!*pnodes) *pnodes = new Nodes();
36 if(!*pconstraints) *pconstraints = new Constraints();
37 if(!*ploads) *ploads = new Loads();
38
39 /*Now, branch onto analysis dependent model generation: */
40 switch(analysis_type){
41
42 #ifdef _HAVE_STRESSBALANCE_
43 case StressbalanceAnalysisEnum:
44 CreateNodesStressbalance(pnodes,iomodel);
45 CreateConstraintsStressbalance(pconstraints,iomodel);
46 CreateLoadsStressbalance(ploads,iomodel);
47 UpdateElementsStressbalance(elements,iomodel,analysis_counter,analysis_type);
48 break;
49
50 case StressbalanceVerticalAnalysisEnum:
51 CreateNodesStressbalanceVertical(pnodes, iomodel);
52 CreateConstraintsStressbalanceVertical(pconstraints,iomodel);
53 CreateLoadsStressbalanceVertical(ploads,iomodel);
54 UpdateElementsStressbalanceVertical(elements,iomodel,analysis_counter,analysis_type);
55 break;
56
57 case StressbalanceSIAAnalysisEnum:
58 CreateNodesStressbalanceSIA(pnodes, iomodel);
59 CreateConstraintsStressbalanceSIA(pconstraints,iomodel);
60 CreateLoadsStressbalanceSIA(ploads,iomodel);
61 UpdateElementsStressbalanceSIA(elements,iomodel,analysis_counter,analysis_type);
62 break;
63 #endif
64
65 #ifdef _HAVE_HYDROLOGY_
66 case HydrologyShreveAnalysisEnum:
67 CreateNodesHydrologyShreve(pnodes, iomodel);
68 CreateConstraintsHydrologyShreve(pconstraints,iomodel);
69 CreateLoadsHydrologyShreve(ploads,iomodel);
70 UpdateElementsHydrologyShreve(elements,iomodel,analysis_counter,analysis_type);
71 break;
72 case HydrologyDCInefficientAnalysisEnum:
73 CreateNodesHydrologyDCInefficient(pnodes, iomodel);
74 CreateConstraintsHydrologyDCInefficient(pconstraints,iomodel);
75 CreateLoadsHydrologyDCInefficient(ploads,iomodel);
76 UpdateElementsHydrologyDCInefficient(elements,iomodel,analysis_counter,analysis_type);
77 break;
78 case HydrologyDCEfficientAnalysisEnum:
79 CreateNodesHydrologyDCEfficient(pnodes, iomodel);
80 CreateConstraintsHydrologyDCEfficient(pconstraints,iomodel);
81 CreateLoadsHydrologyDCEfficient(ploads,iomodel);
82 UpdateElementsHydrologyDCEfficient(elements,iomodel,analysis_counter,analysis_type);
83 break;
84 #endif
85
86 #ifdef _HAVE_THERMAL_
87 case ThermalAnalysisEnum:
88 CreateNodesThermal(pnodes, iomodel);
89 CreateConstraintsThermal(pconstraints,iomodel);
90 CreateLoadsThermal(ploads,iomodel);
91 UpdateElementsThermal(elements,iomodel,analysis_counter,analysis_type);
92 break;
93
94 case EnthalpyAnalysisEnum:
95 CreateNodesEnthalpy(pnodes, iomodel);
96 CreateConstraintsEnthalpy(pconstraints,iomodel);
97 CreateLoadsEnthalpy(ploads,iomodel);
98 UpdateElementsEnthalpy(elements,iomodel,analysis_counter,analysis_type);
99 break;
100
101 case MeltingAnalysisEnum:
102 CreateNodesMelting(pnodes, iomodel);
103 CreateConstraintsMelting(pconstraints,iomodel);
104 CreateLoadsMelting(ploads,iomodel);
105 UpdateElementsMelting(elements,iomodel,analysis_counter,analysis_type);
106 break;
107 #endif
108
109 #ifdef _HAVE_BALANCED_
110 case BalancethicknessAnalysisEnum:
111 CreateNodesBalancethickness(pnodes, iomodel);
112 CreateConstraintsBalancethickness(pconstraints,iomodel);
113 CreateLoadsBalancethickness(ploads,iomodel);
114 UpdateElementsBalancethickness(elements,iomodel,analysis_counter,analysis_type);
115 break;
116 case BalancevelocityAnalysisEnum:
117 CreateNodesBalancevelocity(pnodes, iomodel);
118 CreateConstraintsBalancevelocity(pconstraints,iomodel);
119 CreateLoadsBalancevelocity(ploads,iomodel);
120 UpdateElementsBalancevelocity(elements,iomodel,analysis_counter,analysis_type);
121 break;
122 #endif
123
124 #ifdef _HAVE_GIA_
125 case GiaAnalysisEnum:
126 CreateNodesGia(pnodes, iomodel);
127 CreateConstraintsGia(pconstraints,iomodel);
128 CreateLoadsGia(ploads,iomodel);
129 UpdateElementsGia(elements,iomodel,analysis_counter,analysis_type);
130 break;
131 #endif
132
133 #ifdef _HAVE_DAMAGE_
134 case DamageEvolutionAnalysisEnum:
135 CreateNodesDamage(pnodes, iomodel);
136 CreateConstraintsDamage(pconstraints,iomodel);
137 CreateLoadsDamage(ploads,iomodel);
138 UpdateElementsDamage(elements,iomodel,analysis_counter,analysis_type);
139 break;
140 #endif
141
142
143 #ifdef _HAVE_SLOPE_
144 case L2ProjectionBaseAnalysisEnum:
145 CreateNodesL2ProjectionBase(pnodes, iomodel);
146 CreateConstraintsL2ProjectionBase(pconstraints,iomodel);
147 CreateLoadsL2ProjectionBase(ploads,iomodel);
148 UpdateElementsL2ProjectionBase(elements,iomodel,analysis_counter,analysis_type);
149 break;
150
151 case L2ProjectionTopAnalysisEnum:
152 CreateNodesL2ProjectionTop(pnodes, iomodel);
153 CreateConstraintsL2ProjectionTop(pconstraints,iomodel);
154 CreateLoadsL2ProjectionTop(ploads,iomodel);
155 UpdateElementsL2ProjectionTop(elements,iomodel,analysis_counter,analysis_type);
156 break;
157 #endif
158
159 #ifdef _HAVE_MASSTRANSPORT_
160 case MasstransportAnalysisEnum:
161 CreateNodesMasstransport(pnodes, iomodel);
162 CreateConstraintsMasstransport(pconstraints,iomodel);
163 CreateLoadsMasstransport(ploads,iomodel);
164 UpdateElementsMasstransport(elements,iomodel,analysis_counter,analysis_type);
165 break;
166 case FreeSurfaceTopAnalysisEnum:
167 CreateNodesFreeSurfaceTop(pnodes, iomodel);
168 CreateConstraintsFreeSurfaceTop(pconstraints,iomodel);
169 CreateLoadsFreeSurfaceTop(ploads,iomodel);
170 UpdateElementsFreeSurfaceTop(elements,iomodel,analysis_counter,analysis_type);
171 break;
172 case FreeSurfaceBaseAnalysisEnum:
173 CreateNodesFreeSurfaceBase(pnodes, iomodel);
174 CreateConstraintsFreeSurfaceBase(pconstraints,iomodel);
175 CreateLoadsFreeSurfaceBase(ploads,iomodel);
176 UpdateElementsFreeSurfaceBase(elements,iomodel,analysis_counter,analysis_type);
177 break;
178 case ExtrudeFromBaseAnalysisEnum:
179 CreateNodesExtrudeFromBase(pnodes, iomodel);
180 CreateConstraintsExtrudeFromBase(pconstraints,iomodel);
181 CreateLoadsExtrudeFromBase(ploads,iomodel);
182 UpdateElementsExtrudeFromBase(elements,iomodel,analysis_counter,analysis_type);
183 break;
184 case ExtrudeFromTopAnalysisEnum:
185 CreateNodesExtrudeFromTop(pnodes, iomodel);
186 CreateConstraintsExtrudeFromTop(pconstraints,iomodel);
187 CreateLoadsExtrudeFromTop(ploads,iomodel);
188 UpdateElementsExtrudeFromTop(elements,iomodel,analysis_counter,analysis_type);
189 break;
190 #endif
191
192 default:
193 _error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
194 }
195
196 /*Update Elements and Materials For Inversions*/
197 #ifdef _HAVE_CONTROL_
198 UpdateElementsAndMaterialsControl(elements,materials,iomodel);
199 #endif
200
201 /*Update Elements and Materials For Dakota*/
202 #ifdef _HAVE_DAKOTA_
203 UpdateElementsAndMaterialsDakota(elements,materials,iomodel);
204 #endif
205
206 /*Generate objects that are not dependent on any analysis_type: */
207 CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_type,analysis_type,analysis_counter);
208
209 /*Update Elements in case we are running a transient solution: */
210 #ifdef _HAVE_TRANSIENT_
211 parameters=*pparameters;
212 if(analysis_counter==(nummodels-1)&& solution_type==TransientSolutionEnum){
213 UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_type);
214 }
215 #endif
216
217 /*Sort datasets: */
218 SortDataSets(pelements,pnodes,pvertices, ploads, pmaterials, pconstraints, pparameters);
219
220 /* Update counters, because we have created more nodes, loads and
221 * constraints, and ids for objects created in next call to CreateDataSets
222 * will need to start at the end of the updated counters: */
223 UpdateCounters(iomodel,pnodes,ploads,pconstraints);
224}
Note: See TracBrowser for help on using the repository browser.