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

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

added vx, vy, vz, vx_obs, vy_obs and weights in ModelProcessor when needed

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