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

Last change on this file since 16007 was 16007, checked in by Mathieu Morlighem, 12 years ago

NEW: added balancevelocity solver (not finished yet)

File size: 7.3 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,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_SLOPE_
134 case BedSlopeAnalysisEnum:
135 CreateNodesBedSlope(pnodes, iomodel);
136 CreateConstraintsBedSlope(pconstraints,iomodel);
137 CreateLoadsBedSlope(ploads,iomodel);
138 UpdateElementsBedSlope(elements,iomodel,analysis_counter,analysis_type);
139 break;
140
141 case SurfaceSlopeAnalysisEnum:
142 CreateNodesSurfaceSlope(pnodes, iomodel);
143 CreateConstraintsSurfaceSlope(pconstraints,iomodel);
144 CreateLoadsSurfaceSlope(ploads,iomodel);
145 UpdateElementsSurfaceSlope(elements,iomodel,analysis_counter,analysis_type);
146 break;
147 #endif
148
149 #ifdef _HAVE_MASSTRANSPORT_
150 case MasstransportAnalysisEnum:
151 CreateNodesMasstransport(pnodes, iomodel);
152 CreateConstraintsMasstransport(pconstraints,iomodel);
153 CreateLoadsMasstransport(ploads,iomodel);
154 UpdateElementsMasstransport(elements,iomodel,analysis_counter,analysis_type);
155 break;
156 case FreeSurfaceTopAnalysisEnum:
157 CreateNodesFreeSurfaceTop(pnodes, iomodel);
158 CreateConstraintsFreeSurfaceTop(pconstraints,iomodel);
159 CreateLoadsFreeSurfaceTop(ploads,iomodel);
160 UpdateElementsFreeSurfaceTop(elements,iomodel,analysis_counter,analysis_type);
161 break;
162 case FreeSurfaceBaseAnalysisEnum:
163 CreateNodesFreeSurfaceBase(pnodes, iomodel);
164 CreateConstraintsFreeSurfaceBase(pconstraints,iomodel);
165 CreateLoadsFreeSurfaceBase(ploads,iomodel);
166 UpdateElementsFreeSurfaceBase(elements,iomodel,analysis_counter,analysis_type);
167 break;
168 #endif
169
170 default:
171 _error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
172 }
173
174 /*Update Elements and Materials For Control methods*/
175 #ifdef _HAVE_CONTROL_
176 UpdateElementsAndMaterialsControl(elements,materials,iomodel);
177 #endif
178
179 /*Generate objects that are not dependent on any analysis_type: */
180 CreateParameters(pparameters,iomodel,rootpath,solution_type,analysis_type,analysis_counter);
181
182 /*Update Elements in case we are running a transient solution: */
183 #ifdef _HAVE_TRANSIENT_
184 parameters=*pparameters;
185 if(analysis_counter==(nummodels-1)&& solution_type==TransientSolutionEnum){
186 UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_type);
187 }
188 #endif
189
190 /*Sort datasets: */
191 SortDataSets(pelements,pnodes,pvertices, ploads, pmaterials, pconstraints, pparameters);
192
193 /* Update counters, because we have created more nodes, loads and
194 * constraints, and ids for objects created in next call to CreateDataSets
195 * will need to start at the end of the updated counters: */
196 UpdateCounters(iomodel,pnodes,ploads,pconstraints);
197}
Note: See TracBrowser for help on using the repository browser.