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/Prognostic2/CreateNodesPrognostic2.cpp

    r3998 r3999  
    11/*
    2  * CreateElementsNodesAndMaterialsPrognostic2.c:
     2 * CreateNodesPrognostic2.c:
    33 */
    44
     
    1313#include "../ModelProcessorx.h"
    1414
    15 void    CreateElementsNodesAndMaterialsPrognostic2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
     15void    CreateNodesPrognostic2(DataSet** pelements,DataSet** pnodes, DataSet** pvertices,DataSet** pmaterials, IoModel* iomodel,ConstDataHandle iomodel_handle){
    1616
    1717        /*Intermediary*/
    18         int i,j;
     18        int i;
    1919        int vertex_index;
    2020        int node_index;
     21        int totalnodes;
     22        bool continuous_galerkin=false;
    2123
    2224        /*DataSets: */
    23         DataSet* elements  = NULL;
    2425        DataSet* nodes = NULL;
    25         DataSet* vertices = NULL;
    26         DataSet* materials = NULL;
    2726
    28         /*First create the elements, nodes and material properties: */
    29         elements  = new DataSet(ElementsEnum);
     27        /*First create nodes*/
    3028        nodes     = new DataSet(NodesEnum);
    31         vertices  = new DataSet(VerticesEnum);
    32         materials = new DataSet(MaterialsEnum);
    3329
    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;
    3632
    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);
    4035
    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: */
    9037        IoModelFetchData(&iomodel->gridonbed,NULL,NULL,iomodel_handle,"gridonbed");
    9138        IoModelFetchData(&iomodel->gridonsurface,NULL,NULL,iomodel_handle,"gridonsurface");
     
    9340        IoModelFetchData(&iomodel->gridonicesheet,NULL,NULL,iomodel_handle,"gridonicesheet");
    9441        IoModelFetchData(&iomodel->gridoniceshelf,NULL,NULL,iomodel_handle,"gridoniceshelf");
     42        IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
    9543        if (iomodel->dim==3){
    9644                IoModelFetchData(&iomodel->deadgrids,NULL,NULL,iomodel_handle,"deadgrids");
    9745                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                 }
    11046        }
    11147
     
    13268        /*Clean fetched data: */
    13369        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);
    13970        xfree((void**)&iomodel->gridonbed);
    14071        xfree((void**)&iomodel->gridonsurface);
     
    14677        /*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these
    14778         * datasets, it will not be redone: */
    148         elements->Presort();
    14979        nodes->Presort();
    150         vertices->Presort();
    151         materials->Presort();
    152 
    153         cleanup_and_return:
    15480
    15581        /*Assign output pointer: */
    156         *pelements=elements;
    15782        *pnodes=nodes;
    158         *pvertices=vertices;
    159         *pmaterials=materials;
    16083}
Note: See TracChangeset for help on using the changeset viewer.