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