diff --git a/src/field_descriptor.cpp b/src/field_descriptor.cpp index 86d020c44c8343f2ecaa071382a6573b0f0c0668..c9ad03e939da168bab92f0364e1e2ca052dd4f71 100644 --- a/src/field_descriptor.cpp +++ b/src/field_descriptor.cpp @@ -1,7 +1,7 @@ #include "field_descriptor.hpp" -int field_descriptor::initialize( +field_descriptor::field_descriptor( int ndims, int *n, MPI_Datatype element_type) @@ -33,16 +33,14 @@ int field_descriptor::initialize( this->mpi_dtype, &this->mpi_array_dtype); MPI_Type_commit(&this->mpi_array_dtype); - return EXIT_SUCCESS; } -int field_descriptor::finalize() +field_descriptor::~field_descriptor() { free((void*)this->sizes); free((void*)this->subsizes); free((void*)this->starts); MPI_Type_free(&this->mpi_array_dtype); - return EXIT_SUCCESS; } int field_descriptor::read( diff --git a/src/field_descriptor.hpp b/src/field_descriptor.hpp index fcad79a8a2b5fa7f135693778e119ce38029c221..ea0398e5fe2f05172a814158dbbcb9a8ed2a1859 100644 --- a/src/field_descriptor.hpp +++ b/src/field_descriptor.hpp @@ -20,13 +20,11 @@ class field_descriptor int local_size, full_size; MPI_Datatype mpi_array_dtype, mpi_dtype; - field_descriptor(){} - ~field_descriptor(){} - int initialize( + field_descriptor( int ndims, int *n, MPI_Datatype element_type); - int finalize(); + ~field_descriptor(); int read( const char *fname, void *buffer); diff --git a/src/transp.cpp b/src/transp.cpp index e034bd0ee927562cda2af588de47cf37799467d1..3f6c294e6947deb6499ddba8af4aaa79b1f1ce8b 100644 --- a/src/transp.cpp +++ b/src/transp.cpp @@ -9,7 +9,7 @@ int main(int argc, char *argv[]) MPI_Comm_size(MPI_COMM_WORLD, &nprocs); int n[3]; - field_descriptor f0, f1; + field_descriptor *f0, *f1; switch(argc) { @@ -19,10 +19,10 @@ int main(int argc, char *argv[]) // dimensions n[0] = atoi(argv[1]); n[1] = atoi(argv[2]); - f0.initialize(2, n, MPI_FLOAT); + f0 = new field_descriptor(2, n, MPI_FLOAT); n[0] = atoi(argv[2]); n[1] = atoi(argv[1]); - f1.initialize(2, n, MPI_FLOAT); + f1 = new field_descriptor(2, n, MPI_FLOAT); break; case 4: if (myrank == 0) @@ -31,29 +31,30 @@ int main(int argc, char *argv[]) n[0] = atoi(argv[1]); n[1] = atoi(argv[2]); n[2] = atoi(argv[3]); - f0.initialize(3, n, MPI_FLOAT); + f0 = new field_descriptor(3, n, MPI_FLOAT); n[0] = atoi(argv[3]); n[1] = atoi(argv[2]); n[2] = atoi(argv[1]); - f1.initialize(3, n, MPI_FLOAT); + f1 = new field_descriptor(3, n, MPI_FLOAT); break; default: printf("you messed up the parameters, I'm not doing anything.\n"); - f0.finalize(); - f1.finalize(); MPI_Finalize(); + return EXIT_SUCCESS; break; } float *a0, *a1; - a0 = (float*)malloc(f0.local_size*sizeof(float)); - a1 = (float*)malloc(f1.local_size*sizeof(float)); - f0.read("data0", (void*)a0); - f0.transpose(a0, a1); - f1.write("data1", (void*)a1); + a0 = (float*)malloc(f0->local_size*sizeof(float)); + a1 = (float*)malloc(f1->local_size*sizeof(float)); + f0->read("data0", (void*)a0); + f0->transpose(a0, a1); + f1->write("data1", (void*)a1); free(a0); free(a1); + delete f0; + delete f1; MPI_Finalize(); return EXIT_SUCCESS; }