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

Last change on this file since 3424 was 3424, checked in by seroussi, 15 years ago

added model processor for Prognostic

File size: 5.8 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 "../../MeshPartitionx/MeshPartitionx.h"
11#include "../../include/typedefs.h"
12#include "../IoModel.h"
13
14void CreateElementsNodesAndMaterialsPrognostic(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
15
16 /*output: int* epart, int* my_grids, double* my_bordergrids*/
17
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
46 for (i=0;i<iomodel->numberofelements;i++){
47
48 if(iomodel->my_elements[i]){
49
50 /*Create and add tria element to elements dataset: */
51 elements->AddObject(new Tria(i,iomodel));
52
53 /*Create and add material property to materials dataset: */
54 materials->AddObject(new Matice(i,iomodel,3));
55 }
56 }//for (i=0;i<numberofelements;i++)
57
58
59 /*Free data : */
60 xfree((void**)&iomodel->elements);
61 xfree((void**)&iomodel->thickness);
62 xfree((void**)&iomodel->surface);
63 xfree((void**)&iomodel->bed);
64 xfree((void**)&iomodel->elementoniceshelf);
65 xfree((void**)&iomodel->elementonwater);
66
67 }
68 else{ // if (strcmp(meshtype,"2d")==0)
69
70 /*Fetch data needed: */
71 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
72 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
73 IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
74 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
75 IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf");
76 IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
77 IoModelFetchData(&iomodel->elementonsurface,NULL,NULL,iomodel_handle,"elementonsurface");
78 IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
79
80 for (i=0;i<iomodel->numberofelements;i++){
81 if(iomodel->my_elements[i]){
82 /*Create and add penta element to elements dataset: */
83 elements->AddObject(new Penta(i,iomodel));
84
85 /*Create and add material property to materials dataset: */
86 materials->AddObject(new Matice(i,iomodel,6));
87 }
88 }//for (i=0;i<numberofelements;i++)
89
90 /*Free data: */
91 xfree((void**)&iomodel->elements);
92 xfree((void**)&iomodel->thickness);
93 xfree((void**)&iomodel->surface);
94 xfree((void**)&iomodel->bed);
95 xfree((void**)&iomodel->elementoniceshelf);
96 xfree((void**)&iomodel->elementonbed);
97 xfree((void**)&iomodel->elementonsurface);
98 xfree((void**)&iomodel->elementonwater);
99
100 } //if (strcmp(meshtype,"2d")==0)
101
102 /*Add new constrant material property to materials, at the end: */
103 materials->AddObject(new Matpar(iomodel));
104
105 /*First fetch data: */
106 if (strcmp(iomodel->meshtype,"3d")==0){
107 IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
108 IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
109 }
110 IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
111 IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
112 IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
113 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
114 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
115 IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
116 IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
117 IoModelFetchData(&iomodel->gridonicesheet,NULL,NULL,iomodel_handle,"gridonicesheet");
118 IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf");
119
120 for (i=0;i<iomodel->numberofvertices;i++){
121
122 /*vertices and nodes (same number, as we are running continuous galerkin formulation: */
123 if(iomodel->my_vertices[i]){
124
125 /*Add vertex to vertices dataset: */
126 vertices->AddObject(new Vertex(i,iomodel));
127
128 /*Add node to nodes dataset: */
129 nodes->AddObject(new Node(i,iomodel));
130
131 }
132 }
133
134 /*Clean fetched data: */
135 xfree((void**)&iomodel->deadgrids);
136 xfree((void**)&iomodel->x);
137 xfree((void**)&iomodel->y);
138 xfree((void**)&iomodel->z);
139 xfree((void**)&iomodel->thickness);
140 xfree((void**)&iomodel->bed);
141 xfree((void**)&iomodel->gridonbed);
142 xfree((void**)&iomodel->gridonsurface);
143 xfree((void**)&iomodel->uppernodes);
144 xfree((void**)&iomodel->gridonicesheet);
145 xfree((void**)&iomodel->gridoniceshelf);
146
147 /*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these
148 * datasets, it will not be redone: */
149 elements->Presort();
150 nodes->Presort();
151 vertices->Presort();
152 materials->Presort();
153
154 cleanup_and_return:
155
156 /*Assign output pointer: */
157 *pelements=elements;
158 *pnodes=nodes;
159 *pvertices=vertices;
160 *pmaterials=materials;
161
162}
Note: See TracBrowser for help on using the repository browser.