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

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

CHG: simpler way of creating new nodes

File size: 6.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 dataset if empty*/
35 if(!*pnodes) *pnodes = new Nodes();
36
37 /*Now, branch onto analysis dependent model generation: */
38 switch(analysis_type){
39
40 #ifdef _HAVE_DIAGNOSTIC_
41 case DiagnosticHorizAnalysisEnum:
42 CreateNodesDiagnosticHoriz(pnodes, iomodel);
43 CreateConstraintsDiagnosticHoriz(pconstraints,iomodel);
44 CreateLoadsDiagnosticHoriz(ploads,iomodel);
45 UpdateElementsDiagnosticHoriz(elements,iomodel,analysis_counter,analysis_type);
46 break;
47
48 case DiagnosticVertAnalysisEnum:
49 CreateNodesDiagnosticVert(pnodes, iomodel);
50 CreateConstraintsDiagnosticVert(pconstraints,iomodel);
51 CreateLoadsDiagnosticVert(ploads,iomodel);
52 UpdateElementsDiagnosticVert(elements,iomodel,analysis_counter,analysis_type);
53 break;
54
55 case DiagnosticHutterAnalysisEnum:
56 CreateNodesDiagnosticHutter(pnodes, iomodel);
57 CreateConstraintsDiagnosticHutter(pconstraints,iomodel);
58 CreateLoadsDiagnosticHutter(ploads,iomodel);
59 UpdateElementsDiagnosticHutter(elements,iomodel,analysis_counter,analysis_type);
60 break;
61 #endif
62
63 #ifdef _HAVE_HYDROLOGY_
64 case HydrologyShreveAnalysisEnum:
65 CreateNodesHydrologyShreve(pnodes, iomodel);
66 CreateConstraintsHydrologyShreve(pconstraints,iomodel);
67 CreateLoadsHydrologyShreve(ploads,iomodel);
68 UpdateElementsHydrologyShreve(elements,iomodel,analysis_counter,analysis_type);
69 break;
70 case HydrologyDCInefficientAnalysisEnum:
71 CreateNodesHydrologyDCInefficient(pnodes, iomodel);
72 CreateConstraintsHydrologyDCInefficient(pconstraints,iomodel);
73 CreateLoadsHydrologyDCInefficient(ploads,iomodel);
74 UpdateElementsHydrologyDCInefficient(elements,iomodel,analysis_counter,analysis_type);
75 break;
76 case HydrologyDCEfficientAnalysisEnum:
77 CreateNodesHydrologyDCEfficient(pnodes, iomodel);
78 CreateConstraintsHydrologyDCEfficient(pconstraints,iomodel);
79 CreateLoadsHydrologyDCEfficient(ploads,iomodel);
80 UpdateElementsHydrologyDCEfficient(elements,iomodel,analysis_counter,analysis_type);
81 break;
82 #endif
83
84 #ifdef _HAVE_THERMAL_
85 case ThermalAnalysisEnum:
86 CreateNodesThermal(pnodes, iomodel);
87 CreateConstraintsThermal(pconstraints,iomodel);
88 CreateLoadsThermal(ploads,iomodel);
89 UpdateElementsThermal(elements,iomodel,analysis_counter,analysis_type);
90 break;
91
92 case EnthalpyAnalysisEnum:
93 CreateNodesEnthalpy(pnodes, iomodel);
94 CreateConstraintsEnthalpy(pconstraints,iomodel);
95 CreateLoadsEnthalpy(ploads,iomodel);
96 UpdateElementsEnthalpy(elements,iomodel,analysis_counter,analysis_type);
97 break;
98
99 case MeltingAnalysisEnum:
100 CreateNodesMelting(pnodes, iomodel);
101 CreateConstraintsMelting(pconstraints,iomodel);
102 CreateLoadsMelting(ploads,iomodel);
103 UpdateElementsMelting(elements,iomodel,analysis_counter,analysis_type);
104 break;
105 #endif
106
107 #ifdef _HAVE_BALANCED_
108 case BalancethicknessAnalysisEnum:
109 CreateNodesBalancethickness(pnodes, iomodel);
110 CreateConstraintsBalancethickness(pconstraints,iomodel);
111 CreateLoadsBalancethickness(ploads,iomodel);
112 UpdateElementsBalancethickness(elements,iomodel,analysis_counter,analysis_type);
113 break;
114 #endif
115
116 #ifdef _HAVE_GIA_
117 case GiaAnalysisEnum:
118 CreateNodesGia(pnodes, iomodel);
119 CreateConstraintsGia(pconstraints,iomodel);
120 CreateLoadsGia(ploads,iomodel);
121 UpdateElementsGia(elements,iomodel,analysis_counter,analysis_type);
122 break;
123 #endif
124
125 #ifdef _HAVE_SLOPE_
126 case BedSlopeAnalysisEnum:
127 CreateNodesBedSlope(pnodes, iomodel);
128 CreateConstraintsBedSlope(pconstraints,iomodel);
129 CreateLoadsBedSlope(ploads,iomodel);
130 UpdateElementsBedSlope(elements,iomodel,analysis_counter,analysis_type);
131 break;
132
133 case SurfaceSlopeAnalysisEnum:
134 CreateNodesSurfaceSlope(pnodes, iomodel);
135 CreateConstraintsSurfaceSlope(pconstraints,iomodel);
136 CreateLoadsSurfaceSlope(ploads,iomodel);
137 UpdateElementsSurfaceSlope(elements,iomodel,analysis_counter,analysis_type);
138 break;
139 #endif
140
141 #ifdef _HAVE_PROGNOSTIC_
142 case PrognosticAnalysisEnum:
143 CreateNodesPrognostic(pnodes, iomodel);
144 CreateConstraintsPrognostic(pconstraints,iomodel);
145 CreateLoadsPrognostic(ploads,iomodel);
146 UpdateElementsPrognostic(elements,iomodel,analysis_counter,analysis_type);
147 break;
148 #endif
149
150 default:
151 _error_("analysis_type: " << EnumToStringx(analysis_type) << " not supported yet!");
152 }
153
154 /*Update Elements and Materials For Control methods*/
155 #ifdef _HAVE_CONTROL_
156 UpdateElementsAndMaterialsControl(elements,materials,iomodel);
157 #endif
158
159 /*Generate objects that are not dependent on any analysis_type: */
160 CreateParameters(pparameters,iomodel,rootpath,solution_type,analysis_type,analysis_counter);
161
162 /*Update Elements in case we are running a transient solution: */
163 #ifdef _HAVE_TRANSIENT_
164 parameters=*pparameters;
165 if(analysis_counter==(nummodels-1)&& solution_type==TransientSolutionEnum){
166 UpdateElementsTransient(elements,parameters,iomodel,analysis_counter,analysis_type);
167 }
168 #endif
169
170 /*Sort datasets: */
171 SortDataSets(pelements,pnodes,pvertices, ploads, pmaterials, pconstraints, pparameters);
172
173 /* Update counters, because we have created more nodes, loads and
174 * constraints, and ids for objects created in next call to CreateDataSets
175 * will need to start at the end of the updated counters: */
176 UpdateCounters(iomodel,pnodes,ploads,pconstraints);
177}
Note: See TracBrowser for help on using the repository browser.