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

Last change on this file since 16181 was 16181, checked in by Eric.Larour, 12 years ago

NEW: hooked up damage core into ISSM, created 271 solution to start running it. More remains to be done inside the damage_core to hook up to the
Element Tria CreateKMatrix and CreatePVector.

File size: 7.6 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 BedSlopeAnalysisEnum:
145 CreateNodesBedSlope(pnodes, iomodel);
146 CreateConstraintsBedSlope(pconstraints,iomodel);
147 CreateLoadsBedSlope(ploads,iomodel);
148 UpdateElementsBedSlope(elements,iomodel,analysis_counter,analysis_type);
149 break;
150
151 case SurfaceSlopeAnalysisEnum:
152 CreateNodesSurfaceSlope(pnodes, iomodel);
153 CreateConstraintsSurfaceSlope(pconstraints,iomodel);
154 CreateLoadsSurfaceSlope(ploads,iomodel);
155 UpdateElementsSurfaceSlope(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 #endif
179
180 default:
181 _error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
182 }
183
184 /*Update Elements and Materials For Control methods*/
185 #ifdef _HAVE_CONTROL_
186 UpdateElementsAndMaterialsControl(elements,materials,iomodel);
187 #endif
188
189 /*Generate objects that are not dependent on any analysis_type: */
190 CreateParameters(pparameters,iomodel,rootpath,toolkitfile,solution_type,analysis_type,analysis_counter);
191
192 /*Update Elements in case we are running a transient solution: */
193 #ifdef _HAVE_TRANSIENT_
194 parameters=*pparameters;
195 if(analysis_counter==(nummodels-1)&& solution_type==TransientSolutionEnum){
196 UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_type);
197 }
198 #endif
199
200 /*Sort datasets: */
201 SortDataSets(pelements,pnodes,pvertices, ploads, pmaterials, pconstraints, pparameters);
202
203 /* Update counters, because we have created more nodes, loads and
204 * constraints, and ids for objects created in next call to CreateDataSets
205 * will need to start at the end of the updated counters: */
206 UpdateCounters(iomodel,pnodes,ploads,pconstraints);
207}
Note: See TracBrowser for help on using the repository browser.