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

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

NEW: added free surface solver for bottom and upper surface, not working yet

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