Changeset 21497
- Timestamp:
- 01/17/17 16:45:16 (8 years ago)
- 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 138 138 if(parameters)delete parameters; 139 139 if(results)delete results; 140 141 #ifdef _HAVE_NEOPZ_ 142 if(amr)delete amr; 143 #endif 140 144 141 145 /*Now delete: */ … … 2920 2924 2921 2925 /*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 } 2927 2935 2928 2936 /*Get initial mesh*/ 2929 2937 /*Get total number of elements and total numbers of elements in the initial mesh*/ 2930 intnumberofvertices, numberofelements, numberofsegments;2938 long numberofvertices, numberofelements, numberofsegments; 2931 2939 numberofvertices = this->vertices->NumberOfVertices(); 2932 2940 numberofelements = this->elements->NumberOfElements(); … … 2946 2954 Vector<IssmDouble>* vid3= new Vector<IssmDouble>(numberofelements); 2947 2955 2948 /*Go through elements, and for each element, object*/2949 2956 /*Go through elements, and for each element, get vertices*/ 2957 for(int i=0;i<this->elements->Size();i++){ 2950 2958 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 2951 2959 element->GetVerticesSidList(elem_vertices); … … 2953 2961 vid2->SetValue(element->sid,elem_vertices[1],INS_VAL); 2954 2962 vid3->SetValue(element->sid,elem_vertices[2],INS_VAL); 2955 2963 } 2956 2964 2957 2965 /*Assemble*/ 2958 2959 2960 2961 2962 2966 vid1->Assemble(); 2967 vid2->Assemble(); 2968 vid3->Assemble(); 2969 2970 /*Serialize*/ 2963 2971 IssmDouble *id1 = vid1->ToMPISerial(); 2964 2972 IssmDouble *id2 = vid2->ToMPISerial(); 2965 2973 IssmDouble *id3 = vid3->ToMPISerial(); 2966 2974 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 } 2984 2989 2985 2990 /*Free the vectors*/ 2986 delete x;2987 delete y;2988 delete z;2991 xDelete<IssmDouble>(x); 2992 xDelete<IssmDouble>(y); 2993 xDelete<IssmDouble>(z); 2989 2994 delete vid1; 2990 2995 delete vid2; 2991 2996 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 2998 3004 } 2999 3005 /*}}}*/ … … 3491 3497 3492 3498 //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); 3495 3501 3496 3502 output->constraints = new Constraints(); -
TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h ¶
r21490 r21497 20 20 class Profiler; 21 21 class Elements; 22 #ifdef _HAVE_NEOPZ_ 23 #include "./AdaptiveMeshRefinement.h" 24 #endif 22 25 /*}}}*/ 23 26 … … 43 46 Results *results; //results that cannot be fit into the elements 44 47 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 45 52 46 53 /*constructors, destructors: */
Note:
See TracChangeset
for help on using the changeset viewer.