source: issm/trunk/src/c/ModelProcessorx/Prognostic/CreateElementsNodesAndMaterialsPrognostic.cpp@ 3811

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

Added upper and lower elements neighboors in Penta element

File size: 7.2 KB
Line 
1/*
2 * CreateElementsNodesAndMaterialsPrognostic.c:
3 */
4
5#include "../../DataSet/DataSet.h"
6#include "../../toolkits/toolkits.h"
7#include "../../EnumDefinitions/EnumDefinitions.h"
8#include "../../objects/objects.h"
9#include "../../shared/shared.h"
10#include "../../io/io.h"
11#include "../../MeshPartitionx/MeshPartitionx.h"
12#include "../../include/include.h"
13#include "../ModelProcessorx.h"
14
15void CreateElementsNodesAndMaterialsPrognostic(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
16
17 /*Intermediary*/
18 int i,j,k,n;
19
20 /*DataSets: */
21 DataSet* elements = NULL;
22 DataSet* nodes = NULL;
23 DataSet* vertices = NULL;
24 DataSet* materials = NULL;
25
26 /*First create the elements, nodes and material properties: */
27 elements = new DataSet(ElementsEnum);
28 nodes = new DataSet(NodesEnum);
29 vertices = new DataSet(VerticesEnum);
30 materials = new DataSet(MaterialsEnum);
31
32 /*Partition elements and vertices and nodes: */
33 Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
34
35 /*2d mesh: */
36 if (strcmp(iomodel->meshtype,"2d")==0){
37
38 /*Fetch data needed: */
39 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
40 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
41 IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
42 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
43 IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
44 IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
45 IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
46 IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
47 IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
48 IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
49
50 for (i=0;i<iomodel->numberofelements;i++){
51
52 if(iomodel->my_elements[i]){
53
54 /*Create and add tria element to elements dataset: */
55 elements->AddObject(new Tria(i+1,i,iomodel));
56
57 /*Create and add material property to materials dataset: */
58 materials->AddObject(new Matice(i+1,i,iomodel,3));
59 }
60 }//for (i=0;i<numberofelements;i++)
61
62
63 /*Free data : */
64 xfree((void**)&iomodel->elements);
65 xfree((void**)&iomodel->thickness);
66 xfree((void**)&iomodel->surface);
67 xfree((void**)&iomodel->bed);
68 xfree((void**)&iomodel->elementoniceshelf);
69 xfree((void**)&iomodel->elementonwater);
70 xfree((void**)&iomodel->melting_rate);
71 xfree((void**)&iomodel->accumulation_rate);
72 xfree((void**)&iomodel->vx);
73 xfree((void**)&iomodel->vy);
74
75 }
76 else{ // if (strcmp(meshtype,"2d")==0)
77
78 /*Fetch data needed: */
79 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
80 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
81 IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
82 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
83 IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
84 IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
85 IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
86 IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
87 IoModelFetchData(&iomodel->pressure,NULL,NULL,iomodel_handle,"pressure");
88 IoModelFetchData(&iomodel->temperature,NULL,NULL,iomodel_handle,"temperature");
89 IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate");
90 IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate");
91 IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx");
92 IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy");
93 IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
94 IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
95
96 for (i=0;i<iomodel->numberofelements;i++){
97 if(iomodel->my_elements[i]){
98 /*Create and add penta element to elements dataset: */
99 elements->AddObject(new Penta(i+1,i,iomodel));
100
101 /*Create and add material property to materials dataset: */
102 materials->AddObject(new Matice(i+1,i,iomodel,6));
103 }
104 }//for (i=0;i<numberofelements;i++)
105
106 /*Free data: */
107 xfree((void**)&iomodel->elements);
108 xfree((void**)&iomodel->thickness);
109 xfree((void**)&iomodel->surface);
110 xfree((void**)&iomodel->bed);
111 xfree((void**)&iomodel->elementoniceshelf);
112 xfree((void**)&iomodel->elementonbed);
113 xfree((void**)&iomodel->elementonsurface);
114 xfree((void**)&iomodel->elementonwater);
115 xfree((void**)&iomodel->pressure);
116 xfree((void**)&iomodel->temperature);
117 xfree((void**)&iomodel->melting_rate);
118 xfree((void**)&iomodel->accumulation_rate);
119 xfree((void**)&iomodel->vx);
120 xfree((void**)&iomodel->vy);
121 xfree((void**)&iomodel->upperelements);
122 xfree((void**)&iomodel->lowerelements);
123
124
125 } //if (strcmp(meshtype,"2d")==0)
126
127 /*Add new constrant material property to materials, at the end: */
128 materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel));//put it at the end of the materials
129
130 /*First fetch data: */
131 if (strcmp(iomodel->meshtype,"3d")==0){
132 IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
133 IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
134 }
135 IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
136 IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
137 IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
138 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
139 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
140 IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
141 IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
142 IoModelFetchData(&iomodel->gridonicesheet,NULL,NULL,iomodel_handle,"gridonicesheet");
143 IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf");
144
145 for (i=0;i<iomodel->numberofvertices;i++){
146
147 /*vertices and nodes (same number, as we are running continuous galerkin formulation: */
148 if(iomodel->my_vertices[i]){
149
150 /*Add vertex to vertices dataset: */
151 vertices->AddObject(new Vertex(i+1,i,iomodel));
152
153 /*Add node to nodes dataset: */
154 nodes->AddObject(new Node(i+1,i,iomodel));
155
156 }
157 }
158
159 /*Clean fetched data: */
160 xfree((void**)&iomodel->deadgrids);
161 xfree((void**)&iomodel->x);
162 xfree((void**)&iomodel->y);
163 xfree((void**)&iomodel->z);
164 xfree((void**)&iomodel->thickness);
165 xfree((void**)&iomodel->bed);
166 xfree((void**)&iomodel->gridonbed);
167 xfree((void**)&iomodel->gridonsurface);
168 xfree((void**)&iomodel->uppernodes);
169 xfree((void**)&iomodel->gridonicesheet);
170 xfree((void**)&iomodel->gridoniceshelf);
171
172 /*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these
173 * datasets, it will not be redone: */
174 elements->Presort();
175 nodes->Presort();
176 vertices->Presort();
177 materials->Presort();
178
179cleanup_and_return:
180
181 /*Assign output pointer: */
182 *pelements=elements;
183 *pnodes=nodes;
184 *pvertices=vertices;
185 *pmaterials=materials;
186
187}
Note: See TracBrowser for help on using the repository browser.