Ignore:
Timestamp:
06/02/10 15:51:23 (15 years ago)
Author:
Mathieu Morlighem
Message:

updated CreateNodes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp

    r3998 r3999  
    11/*
    2  * CreateElementsNodesAndMaterialsSlopeCompute.c:
     2 * CreateNodesSlopeCompute.c:
    33 */
    44
     
    1313#include "../ModelProcessorx.h"
    1414
    15 void    CreateElementsNodesAndMaterialsSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
     15void    CreateNodesSlopeCompute(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
    1616
    17                 /*output: int* epart, int* my_grids, double* my_bordergrids*/
     17        /*Intermediary*/
     18        int i;
     19        int totalnodes;
     20        bool continuous_galerkin=true;
    1821
    19         int i,j,k,n;
    2022        /*DataSets: */
    21         DataSet*    elements  = NULL;
    2223        DataSet*    nodes = NULL;
    23         DataSet*    vertices = NULL;
    24         DataSet*    materials = NULL;
    2524       
    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);
     25        /*First create nodes*/
     26        nodes = new DataSet(NodesEnum);
    3127
    32         /*Partition elements and vertices and nodes: */
    33         Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
     28        /*Recover number of nodes already created in other analyses: */
     29        totalnodes=iomodel->nodecounter;
    3430
    35         /*2d mesh: */
    36         if (iomodel->dim==2){
    37 
    38                 /*Fetch data needed: */
    39                 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
    40                 IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
    41                 IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
    42                 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
    43                
    44                 for (i=0;i<iomodel->numberofelements;i++){
    45 
    46                         if(iomodel->my_elements[i]){
    47                                
    48                                 /*Create and add tria element to elements dataset: */
    49                                 elements->AddObject(new Tria(i+1,i,iomodel));
    50 
    51                                 /*Create and add material property to materials dataset: */
    52                                 materials->AddObject(new Matice(i+1,i,iomodel,3));
    53                         }
    54 
    55                 }//for (i=0;i<numberofelements;i++)
    56 
    57        
    58                 /*Free data : */
    59                 xfree((void**)&iomodel->elements);
    60                 xfree((void**)&iomodel->surface);
    61                 xfree((void**)&iomodel->bed);
    62                 xfree((void**)&iomodel->elementonwater);
    63 
    64         }
    65         else{ //        if (dim==2)
    66 
    67                 /*Fetch data needed: */
    68                 IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
    69                 IoModelFetchData(&iomodel->surface,NULL,NULL,iomodel_handle,"surface");
    70                 IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
    71                 IoModelFetchData(&iomodel->elementonbed,NULL,NULL,iomodel_handle,"elementonbed");
    72                 IoModelFetchData(&iomodel->elementonwater,NULL,NULL,iomodel_handle,"elementonwater");
    73                 IoModelFetchData(&iomodel->upperelements,NULL,NULL,iomodel_handle,"upperelements");
    74                 IoModelFetchData(&iomodel->lowerelements,NULL,NULL,iomodel_handle,"lowerelements");
    75        
    76                 for (i=0;i<iomodel->numberofelements;i++){
    77                         if(iomodel->my_elements[i]){
    78                                 /*Create and add penta element to elements dataset: */
    79                                 elements->AddObject(new Penta(i+1,i,iomodel));
    80 
    81                                 /*Create and add material property to materials dataset: */
    82                                 materials->AddObject(new Matice(i+1,i,iomodel,6));
    83 
    84                         }//if(my_elements[i])
    85                 }//for (i=0;i<numberofelements;i++)
    86 
    87                 /*Free data: */
    88                 xfree((void**)&iomodel->elements);
    89                 xfree((void**)&iomodel->surface);
    90                 xfree((void**)&iomodel->bed);
    91                 xfree((void**)&iomodel->elementonbed);
    92                 xfree((void**)&iomodel->elementonwater);
    93                 xfree((void**)&iomodel->upperelements);
    94                 xfree((void**)&iomodel->lowerelements);
    95 
    96         } //if (dim==2)
    97 
    98         /*Add new constrant material property tgo materials, at the end: */
    99         materials->AddObject(new Matpar(iomodel->numberofelements+1,iomodel)); //put it at the end of the materials
     31        /*Continuous Galerkin partition of nodes: */
     32        NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
    10033       
    10134        /*First fetch data: */
     
    10437                IoModelFetchData(&iomodel->uppernodes,NULL,NULL,iomodel_handle,"uppergrids");
    10538        }
    106         IoModelFetchData(&iomodel->x,NULL,NULL,iomodel_handle,"x");
    107         IoModelFetchData(&iomodel->y,NULL,NULL,iomodel_handle,"y");
    108         IoModelFetchData(&iomodel->z,NULL,NULL,iomodel_handle,"z");
    109         IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
    110         IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
    11139        IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
    11240        IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
     
    11644        for (i=0;i<iomodel->numberofvertices;i++){
    11745
    118                 /*vertices and nodes (same number, as we are running continuous galerkin formulation: */
    11946                if(iomodel->my_vertices[i]){
    12047                       
    121                         /*Add vertex to vertices dataset: */
    122                         vertices->AddObject(new Vertex(i+1,i,iomodel));
    123 
    12448                        /*Add node to nodes dataset: */
    12549                        nodes->AddObject(new Node(i+1,i,iomodel));
     
    13054        /*Clean fetched data: */
    13155        xfree((void**)&iomodel->deadgrids);
    132         xfree((void**)&iomodel->x);
    133         xfree((void**)&iomodel->y);
    134         xfree((void**)&iomodel->z);
    135         xfree((void**)&iomodel->thickness);
    136         xfree((void**)&iomodel->bed);
    13756        xfree((void**)&iomodel->gridonbed);
    13857        xfree((void**)&iomodel->gridonsurface);
     
    14362        /*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these
    14463         * datasets, it will not be redone: */
    145         elements->Presort();
    14664        nodes->Presort();
    147         vertices->Presort();
    148         materials->Presort();
    149 
    150         cleanup_and_return:
    15165
    15266        /*Assign output pointer: */
    153         *pelements=elements;
    15467        *pnodes=nodes;
    155         *pvertices=vertices;
    156         *pmaterials=materials;
    15768
    15869}
Note: See TracChangeset for help on using the changeset viewer.