- Timestamp:
- 06/02/10 15:51:23 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp
r3998 r3999 1 1 /* 2 * Create ElementsNodesAndMaterialsPrognostic2.c:2 * CreateNodesPrognostic2.c: 3 3 */ 4 4 … … 13 13 #include "../ModelProcessorx.h" 14 14 15 void Create ElementsNodesAndMaterialsPrognostic2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){15 void CreateNodesPrognostic2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){ 16 16 17 17 /*Intermediary*/ 18 int i ,j;18 int i; 19 19 int vertex_index; 20 20 int node_index; 21 int totalnodes; 22 bool continuous_galerkin=false; 21 23 22 24 /*DataSets: */ 23 DataSet* elements = NULL;24 25 DataSet* nodes = NULL; 25 DataSet* vertices = NULL;26 DataSet* materials = NULL;27 26 28 /*First create the elements, nodes and material properties: */ 29 elements = new DataSet(ElementsEnum); 27 /*First create nodes*/ 30 28 nodes = new DataSet(NodesEnum); 31 vertices = new DataSet(VerticesEnum);32 materials = new DataSet(MaterialsEnum);33 29 34 /* Partition elements and vertices and nodes: */35 Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);30 /*Recover number of nodes already created in other analyses: */ 31 totalnodes=iomodel->nodecounter; 36 32 37 /*elements created vary if we are dealing with a 2d mesh, or a 3d mesh: */ 38 /*2d mesh: */ 39 if (iomodel->dim==2){ 33 /*Continuous Galerkin partition of nodes: */ 34 NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin); 40 35 41 /*Fetch data needed: */ 42 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements"); 43 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness"); 44 IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface"); 45 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed"); 46 IoModelFetchData(&iomodel->elementoniceshelf,NULL,NULL,iomodel_handle,"elementoniceshelf"); 47 IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater"); 48 IoModelFetchData(&iomodel->melting_rate,NULL,NULL,iomodel_handle,"melting_rate"); 49 IoModelFetchData(&iomodel->accumulation_rate,NULL,NULL,iomodel_handle,"accumulation_rate"); 50 IoModelFetchData(&iomodel->vx,NULL,NULL,iomodel_handle,"vx"); 51 IoModelFetchData(&iomodel->vy,NULL,NULL,iomodel_handle,"vy"); 52 53 for (i=0;i<iomodel->numberofelements;i++){ 54 55 if(iomodel->my_elements[i]){ 56 57 /*Create and add tria element to elements dataset: */ 58 elements->AddObject(new Tria(i+1,i,iomodel)); 59 60 /*Create and add material property to materials dataset: */ 61 materials->AddObject(new Matice(i+1,i,iomodel,3)); 62 } 63 }//for (i=0;i<numberofelements;i++) 64 65 /*Free data : */ 66 xfree((void**)&iomodel->thickness); 67 xfree((void**)&iomodel->surface); 68 xfree((void**)&iomodel->bed); 69 xfree((void**)&iomodel->elementoniceshelf); 70 xfree((void**)&iomodel->elementonwater); 71 xfree((void**)&iomodel->melting_rate); 72 xfree((void**)&iomodel->accumulation_rate); 73 xfree((void**)&iomodel->vx); 74 xfree((void**)&iomodel->vy); 75 76 } 77 else{ // if (dim==2) 78 ISSMERROR("not implemented yet"); 79 } //if (dim==2) 80 81 /*Add new constrant material property tgo materials, at the end: */ 82 materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel)); 83 84 /*Create nodes and vertices: */ 85 IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x"); 86 IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y"); 87 IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z"); 88 IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness"); 89 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed"); 36 /*Create nodes: */ 90 37 IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed"); 91 38 IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface"); … … 93 40 IoModelFetchData(&iomodel->gridonicesheet,NULL,NULL,iomodel_handle,"gridonicesheet"); 94 41 IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf"); 42 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements"); 95 43 if (iomodel->dim==3){ 96 44 IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids"); 97 45 IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids"); 98 }99 100 /*Build Vertices dataset*/101 for (i=0;i<iomodel->numberofvertices;i++){102 103 /*vertices and nodes (same number, as we are running continuous galerkin formulation: */104 if(iomodel->my_vertices[i]){105 106 /*Add vertex to vertices dataset: */107 vertices->AddObject(new Vertex(i+1,i,iomodel));108 109 }110 46 } 111 47 … … 132 68 /*Clean fetched data: */ 133 69 xfree((void**)&iomodel->deadgrids); 134 xfree((void**)&iomodel->x);135 xfree((void**)&iomodel->y);136 xfree((void**)&iomodel->z);137 xfree((void**)&iomodel->thickness);138 xfree((void**)&iomodel->bed);139 70 xfree((void**)&iomodel->gridonbed); 140 71 xfree((void**)&iomodel->gridonsurface); … … 146 77 /*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 147 78 * datasets, it will not be redone: */ 148 elements->Presort();149 79 nodes->Presort(); 150 vertices->Presort();151 materials->Presort();152 153 cleanup_and_return:154 80 155 81 /*Assign output pointer: */ 156 *pelements=elements;157 82 *pnodes=nodes; 158 *pvertices=vertices;159 *pmaterials=materials;160 83 }
Note:
See TracChangeset
for help on using the changeset viewer.