1 |
/******************************************************* |
/******************************************************* |
2 |
* |
* |
3 |
* Copyright (c) 2003-2009 by University of Queensland |
* Copyright (c) 2003-2010 by University of Queensland |
4 |
* Earth Systems Science Computational Center (ESSCC) |
* Earth Systems Science Computational Center (ESSCC) |
5 |
* http://www.uq.edu.au/esscc |
* http://www.uq.edu.au/esscc |
6 |
* |
* |
22 |
/**************************************************************/ |
/**************************************************************/ |
23 |
|
|
24 |
/* allocates a Mesh with name name for elements of type id using an integration order. If order is negative, */ |
/* allocates a Mesh with name name for elements of type id using an integration order. If order is negative, */ |
25 |
/* the most appropriate order is selected indepently. */ |
/* the most appropriate order is selected independently. */ |
26 |
|
|
27 |
Finley_Mesh* Finley_Mesh_alloc(char* name,dim_t numDim, Paso_MPIInfo *mpi_info) |
Finley_Mesh* Finley_Mesh_alloc(char* name,dim_t numDim, Esys_MPIInfo *mpi_info) |
28 |
{ |
{ |
29 |
Finley_Mesh *out; |
Finley_Mesh *out; |
30 |
|
|
45 |
out->FullReducedPattern=NULL; |
out->FullReducedPattern=NULL; |
46 |
out->ReducedFullPattern=NULL; |
out->ReducedFullPattern=NULL; |
47 |
out->ReducedReducedPattern=NULL; |
out->ReducedReducedPattern=NULL; |
48 |
out->MPIInfo = Paso_MPIInfo_getReference( mpi_info ); |
out->MPIInfo = Esys_MPIInfo_getReference( mpi_info ); |
49 |
if (! Finley_noError()) { |
if (! Finley_noError()) { |
50 |
Finley_Mesh_free(out); |
Finley_Mesh_free(out); |
51 |
return NULL; |
return NULL; |
85 |
return in; |
return in; |
86 |
} |
} |
87 |
|
|
88 |
/* freeates a mesh: */ |
/* frees a mesh: */ |
89 |
|
|
90 |
void Finley_Mesh_free(Finley_Mesh* in) { |
void Finley_Mesh_free(Finley_Mesh* in) { |
91 |
if (in!=NULL) { |
if (in!=NULL) { |
102 |
Paso_SystemMatrixPattern_free(in->FullReducedPattern); |
Paso_SystemMatrixPattern_free(in->FullReducedPattern); |
103 |
Paso_SystemMatrixPattern_free(in->ReducedFullPattern); |
Paso_SystemMatrixPattern_free(in->ReducedFullPattern); |
104 |
Paso_SystemMatrixPattern_free(in->ReducedReducedPattern); |
Paso_SystemMatrixPattern_free(in->ReducedReducedPattern); |
105 |
Paso_MPIInfo_free( in->MPIInfo ); |
Esys_MPIInfo_free( in->MPIInfo ); |
106 |
MEMFREE(in); |
MEMFREE(in); |
107 |
} |
} |
108 |
} |
} |
142 |
} |
} |
143 |
} |
} |
144 |
|
|
145 |
void Mesh_setOrders(Finley_Mesh *in) |
void Finley_Mesh_setOrders(Finley_Mesh *in) |
146 |
{ |
{ |
147 |
const dim_t order_max=9999999; |
const dim_t order_max=9999999; |
148 |
dim_t locals[4]; |
dim_t locals[4]; |
149 |
#ifdef PASO_MPI |
#ifdef ESYS_MPI |
150 |
dim_t globals[4]; |
dim_t globals[4]; |
151 |
#endif |
#endif |
152 |
locals[0]=order_max; locals[1]=order_max; locals[2]=order_max; locals[3]=order_max; |
locals[0]=order_max; locals[1]=order_max; locals[2]=order_max; locals[3]=order_max; |
179 |
|
|
180 |
} |
} |
181 |
|
|
182 |
#ifdef PASO_MPI |
#ifdef ESYS_MPI |
183 |
MPI_Allreduce( locals, globals, 4, MPI_INT, MPI_MIN, in->MPIInfo->comm ); |
MPI_Allreduce( locals, globals, 4, MPI_INT, MPI_MIN, in->MPIInfo->comm ); |
184 |
in->approximationOrder=(globals[0] < order_max ? globals[0] : -1 ); |
in->approximationOrder=(globals[0] < order_max ? globals[0] : -1 ); |
185 |
in->reducedApproximationOrder=(globals[1] < order_max ? globals[1] : -1 ); |
in->reducedApproximationOrder=(globals[1] < order_max ? globals[1] : -1 ); |