Changeset 21497


Ignore:
Timestamp:
01/17/17 16:45:16 (8 years ago)
Author:
tsantos
Message:

CHG: amr object added in FemModel.h (just CPU #0 keeps it); initialization and delete processes added in FemModel.cpp.

Location:
issm/trunk-jpl/src/c/classes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp

    r21490 r21497  
    138138        if(parameters)delete parameters;
    139139        if(results)delete results;
     140       
     141        #ifdef _HAVE_NEOPZ_
     142        if(amr)delete amr;
     143        #endif
    140144
    141145        /*Now delete: */
     
    29202924       
    29212925        /*Initialize AMR*/
    2922         //AdaptiveMeshRefinement *AMR = new AdaptiveMeshRefinement();
    2923        
    2924         /*Set max level of refinement*/
    2925         int hmax = 2;
    2926         //AMR->SetHMax(hmax);
     2926        if(my_rank==0){
     2927                /*Just CPU #0 should keep AMR object*/
     2928                this->amr = new AdaptiveMeshRefinement();
     2929                int hmax = 2; //itapopo: it must be defined by interface. Using 2 just to test
     2930                this->amr->SetHMax(hmax); //Set max level of refinement
     2931        }
     2932        else{
     2933                this->amr=NULL;
     2934        }
    29272935       
    29282936        /*Get initial mesh*/
    29292937        /*Get total number of elements and total numbers of elements in the initial mesh*/
    2930         int numberofvertices, numberofelements, numberofsegments;
     2938        long numberofvertices, numberofelements, numberofsegments;
    29312939        numberofvertices = this->vertices->NumberOfVertices();
    29322940        numberofelements = this->elements->NumberOfElements();
     
    29462954        Vector<IssmDouble>* vid3= new Vector<IssmDouble>(numberofelements);
    29472955
    2948         /*Go through elements, and for each element, object*/
    2949     for(int i=0;i<this->elements->Size();i++){
     2956        /*Go through elements, and for each element, get vertices*/
     2957   for(int i=0;i<this->elements->Size();i++){
    29502958        Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
    29512959        element->GetVerticesSidList(elem_vertices);
     
    29532961        vid2->SetValue(element->sid,elem_vertices[1],INS_VAL);
    29542962        vid3->SetValue(element->sid,elem_vertices[2],INS_VAL);
    2955     }
     2963   }
    29562964               
    29572965        /*Assemble*/
    2958     vid1->Assemble();
    2959     vid2->Assemble();
    2960     vid3->Assemble();
    2961 
    2962     /*Serialize*/
     2966   vid1->Assemble();
     2967   vid2->Assemble();
     2968   vid3->Assemble();
     2969
     2970   /*Serialize*/
    29632971        IssmDouble *id1 = vid1->ToMPISerial();
    29642972   IssmDouble *id2 = vid2->ToMPISerial();
    29652973        IssmDouble *id3 = vid3->ToMPISerial();
    29662974       
    2967         int **elementsptr;
    2968         elementsptr = new int*[numberofelements];
    2969     for(int i=0;i<numberofelements;i++){
    2970         elementsptr[i] = new int[elementswidth];
    2971         elementsptr[i][0] = (int)id1[i];
    2972         elementsptr[i][1] = (int)id2[i];
    2973         elementsptr[i][2] = (int)id3[i];
    2974     }
    2975 
    2976         //if(my_rank==0){
    2977         //      _printf_("   PRINTING COORDINATES... \n");         
    2978    //           for(long i=0;i<numberofvertices;i++) _printf_("ID: " << i << "\t" << "X: " << x[i] << "\t" << "Y: " << y[i] << "\n");
    2979    //   _printf_("   PRINTING ELEMENTS... \n");   
    2980    //   for(int i=0;i<numberofelements;i++) _printf_("El: " << i << "\t" << elementsptr[i][0] << "\t" << elementsptr[i][1] << "\t" << elementsptr[i][2] << "\n");
    2981         //}
    2982 
    2983     //AMR->CreateInitialMesh(numberofvertices, numberofelements, 0, elementswidth, x, y, z, elementsptr, NULL);
     2975        long **elementsptr;
     2976        elementsptr = new long*[numberofelements];
     2977   for(int i=0;i<numberofelements;i++){
     2978                elementsptr[i] = new long[elementswidth];
     2979      elementsptr[i][0] = (long)id1[i];
     2980                elementsptr[i][1] = (long)id2[i];
     2981      elementsptr[i][2] = (long)id3[i];
     2982        }
     2983
     2984        /*Create initial mesh (coarse mesh) in neopz data structure*/
     2985   if(my_rank==0){
     2986                long nsegments=0;
     2987                this->amr->CreateInitialMesh(numberofvertices, numberofelements, nsegments, elementswidth, x, y, z, elementsptr, NULL);
     2988        }
    29842989
    29852990        /*Free the vectors*/
    2986         delete x;
    2987         delete y;
    2988         delete z;
     2991        xDelete<IssmDouble>(x);
     2992        xDelete<IssmDouble>(y);
     2993        xDelete<IssmDouble>(z);
    29892994        delete vid1;
    29902995        delete vid2;
    29912996        delete vid3;
    2992         delete id1;
    2993         delete id2;
    2994         delete id3;
    2995         for(int i=0;i<numberofelements;i++) delete elementsptr[i];
    2996    if(elementsptr) delete elementsptr;
    2997         xDelete<int>(elem_vertices);
     2997        xDelete<IssmDouble>(id1);
     2998        xDelete<IssmDouble>(id2);
     2999        xDelete<IssmDouble>(id3);                       
     3000        for(int i=0;i<numberofelements;i++) delete [] elementsptr[i];
     3001   if(elementsptr) delete [] elementsptr;
     3002        xDelete<int>(elem_vertices);
     3003
    29983004}
    29993005/*}}}*/
     
    34913497
    34923498        //itapopo voltar aqui
    3493         InterpFromMeshToMesh2dx(&newspcvx,oldelements,oldx,oldy,nods_data,nels_data,spcvx,M_data,N_data,newx,newy,N_interp,options);
    3494         InterpFromMeshToMesh2dx(&newspcvx,oldelements,oldx,oldy,nods_data,nels_data,spcvx,M_data,N_data,newx,newy,N_interp,options);
     3499        //InterpFromMeshToMesh2dx(&newspcvx,oldelements,oldx,oldy,nods_data,nels_data,spcvx,M_data,N_data,newx,newy,N_interp,options);
     3500        //InterpFromMeshToMesh2dx(&newspcvx,oldelements,oldx,oldy,nods_data,nels_data,spcvx,M_data,N_data,newx,newy,N_interp,options);
    34953501
    34963502        output->constraints = new Constraints();
  • TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h

    r21490 r21497  
    2020class Profiler;
    2121class Elements;
     22#ifdef _HAVE_NEOPZ_
     23#include "./AdaptiveMeshRefinement.h"
     24#endif
    2225/*}}}*/
    2326
     
    4346                Results     *results;              //results that cannot be fit into the elements
    4447                Vertices    *vertices;             //one set of vertices
     48
     49                #ifdef _HAVE_NEOPZ_
     50                AdaptiveMeshRefinement *amr;              //adaptive mesh refinement object. It keeps coarse mesh and execute refinement process
     51                #endif
    4552
    4653                /*constructors, destructors: */
Note: See TracChangeset for help on using the changeset viewer.