Mercurial > fem-fenics-eugenio
diff src/PETSc_factory.cc @ 268:61830a4f9ab9
Improve formatting
author | Eugenio Gianniti <eugenio.gianniti@mail.polimi.it> |
---|---|
date | Thu, 14 Aug 2014 12:26:55 +0200 |
parents | 8fe68d94ab76 |
children |
line wrap: on
line diff
--- a/src/PETSc_factory.cc Tue Aug 12 15:42:50 2014 +0200 +++ b/src/PETSc_factory.cc Thu Aug 14 12:26:55 2014 +0200 @@ -21,240 +21,238 @@ #include <boost/serialization/vector.hpp> #endif -femfenics_base_factory const& +femfenics_base_factory const & PETSc_factory::instance (void) - { - static PETSc_factory const theinstance; - return theinstance; - } +{ + static PETSc_factory const theinstance; + return theinstance; +} octave_value -PETSc_factory::matrix (dolfin::Matrix const& A) const - { - octave_value retval; +PETSc_factory::matrix (dolfin::Matrix const & A) const +{ + octave_value retval; - unsigned const size = + unsigned const size = #ifdef LATEST_DOLFIN - dolfin::MPI::size (MPI_COMM_WORLD); + dolfin::MPI::size (MPI_COMM_WORLD); #else - dolfin::MPI::num_processes (); + dolfin::MPI::num_processes (); #endif - if (size > 1) - retval = do_matrix_parallel (A); - else - retval = do_matrix_serial (A); + if (size > 1) + { retval = do_matrix_parallel (A); } + else + { retval = do_matrix_serial (A); } - return retval; - } + return retval; +} octave_value -PETSc_factory::vector (dolfin::Vector const& b) const - { - octave_value retval; +PETSc_factory::vector (dolfin::Vector const & b) const +{ + octave_value retval; - unsigned const size = + unsigned const size = #ifdef LATEST_DOLFIN - dolfin::MPI::size (MPI_COMM_WORLD); + dolfin::MPI::size (MPI_COMM_WORLD); #else - dolfin::MPI::num_processes (); + dolfin::MPI::num_processes (); #endif - if (size > 1) - retval = do_vector_parallel (b); - else - retval = do_vector_serial (b); + if (size > 1) + { retval = do_vector_parallel (b); } + else + { retval = do_vector_serial (b); } - return retval; - } + return retval; +} void PETSc_factory::add_to_arrays (Array <octave_idx_type> & ridx, Array <octave_idx_type> & cidx, Array <double> & values, - std::vector <std::size_t> const& row, - std::vector <std::size_t> const& col, - std::vector <double> const& val) - { - octave_idx_type pos = cidx.numel (); + std::vector <std::size_t> const & row, + std::vector <std::size_t> const & col, + std::vector <double> const & val) +{ + octave_idx_type pos = cidx.numel (); - dim_vector dims = cidx.dims (); - if (dims(1) == 1) - dims(0) += col.size (); - else - dims(1) += col.size (); - ridx.resize (dims, 0); - cidx.resize (dims, 0); - values.resize (dims, 0); + dim_vector dims = cidx.dims (); + if (dims(1) == 1) + { dims(0) += col.size (); } + else + { dims(1) += col.size (); } + ridx.resize (dims, 0); + cidx.resize (dims, 0); + values.resize (dims, 0); - std::vector <std::size_t>::const_iterator rit = row.begin (), - cit = col.begin (); - std::vector <double>::const_iterator vit = val.begin (); + std::vector <std::size_t>::const_iterator rit = row.begin (), + cit = col.begin (); + std::vector <double>::const_iterator vit = val.begin (); - while (cit != col.end ()) - { - ridx(pos) = *rit; - cidx(pos) = *cit; - values(pos) = *vit; + while (cit != col.end ()) + { + ridx(pos) = *rit; + cidx(pos) = *cit; + values(pos) = *vit; - ++rit; - ++cit; - ++vit; - ++pos; - } + ++rit; + ++cit; + ++vit; + ++pos; + } - return; - } + return; +} octave_value -PETSc_factory::do_matrix_serial (dolfin::Matrix const& A) const - { - octave_value retval; - - std::size_t nr = A.size (0), nc = A.size (1); +PETSc_factory::do_matrix_serial (dolfin::Matrix const & A) const +{ + octave_value retval; - dim_vector dims (0, 1); - Array <octave_idx_type> - ridx (dims, 0), - cidx (dims, 0); - Array<double> data (dims, 0); + std::size_t nr = A.size (0), nc = A.size (1); + + dim_vector dims (0, 1); + Array <octave_idx_type> ridx (dims, 0), cidx (dims, 0); + Array<double> data (dims, 0); - for (std::size_t i = 0; i < nr; ++i) - { - std::vector <double> data_tmp; - std::vector <std::size_t> cidx_tmp; - A.getrow (i, cidx_tmp, data_tmp); - std::vector <std::size_t> ridx_tmp (cidx_tmp.size (), i); - add_to_arrays (ridx, cidx, data, ridx_tmp, cidx_tmp, data_tmp); - } + for (std::size_t i = 0; i < nr; ++i) + { + std::vector <double> data_tmp; + std::vector <std::size_t> cidx_tmp; + A.getrow (i, cidx_tmp, data_tmp); + std::vector <std::size_t> ridx_tmp (cidx_tmp.size (), i); + add_to_arrays (ridx, cidx, data, ridx_tmp, cidx_tmp, data_tmp); + } - SparseMatrix sm (data, ridx, cidx, nr, nc); - retval = sm; + SparseMatrix sm (data, ridx, cidx, nr, nc); + retval = sm; - return retval; - } + return retval; +} octave_value -PETSc_factory::do_matrix_parallel (dolfin::Matrix const& A) const - { - octave_value retval; +PETSc_factory::do_matrix_parallel (dolfin::Matrix const & A) const +{ + octave_value retval; - std::vector <std::size_t> rows, cols; - std::vector <double> vals; - std::size_t const nrows = A.size (0), ncols = A.size (1); + std::vector <std::size_t> rows, cols; + std::vector <double> vals; + std::size_t const nrows = A.size (0), ncols = A.size (1); - std::pair <std::size_t, std::size_t> const range = A.local_range (0); - for (std::size_t i = range.first; i < range.second; ++i) - { - std::vector <std::size_t> cols_tmp; - std::vector <double> vals_tmp; - A.getrow (i, cols_tmp, vals_tmp); - cols.insert (cols.end (), cols_tmp.begin (), cols_tmp.end ()); - vals.insert (vals.end (), vals_tmp.begin (), vals_tmp.end ()); - for (std::size_t j = 0; j < cols_tmp.size (); ++j) - rows.push_back (i); - } + std::pair <std::size_t, std::size_t> const range = A.local_range (0); + for (std::size_t i = range.first; i < range.second; ++i) + { + std::vector <std::size_t> cols_tmp; + std::vector <double> vals_tmp; + A.getrow (i, cols_tmp, vals_tmp); + cols.insert (cols.end (), cols_tmp.begin (), cols_tmp.end ()); + vals.insert (vals.end (), vals_tmp.begin (), vals_tmp.end ()); + for (std::size_t j = 0; j < cols_tmp.size (); ++j) + { rows.push_back (i); } + } - boost::mpi::communicator world; + boost::mpi::communicator world; - unsigned const size = world.size (); - unsigned const rank = world.rank (); + unsigned const size = world.size (); + unsigned const rank = world.rank (); - for (unsigned p = 1; p < size; ++p) - { - if (rank == p) - { - unsigned const tag = 3*(p-1); - world.send (0, tag, rows); - world.send (0, tag+1, cols); - world.send (0, tag+2, vals); - } - } + for (unsigned p = 1; p < size; ++p) + { + if (rank == p) + { + unsigned const tag = 3 * (p - 1); + world.send (0, tag, rows); + world.send (0, tag + 1, cols); + world.send (0, tag + 2, vals); + } + } - if (rank == 0) - { - dim_vector dims (0, 1); - Array <octave_idx_type> ridx (dims, 0), cidx (dims, 0); - Array <double> data (dims, 0); - add_to_arrays (ridx, cidx, data, rows, cols, vals); + if (rank == 0) + { + dim_vector dims (0, 1); + Array <octave_idx_type> ridx (dims, 0), cidx (dims, 0); + Array <double> data (dims, 0); + add_to_arrays (ridx, cidx, data, rows, cols, vals); - for (unsigned p = 1; p < size; ++p) - { - std::vector <double> new_vals; - std::vector <std::size_t> new_rows, new_cols; - unsigned const tag = 3*(p-1); + for (unsigned p = 1; p < size; ++p) + { + std::vector <double> new_vals; + std::vector <std::size_t> new_rows, new_cols; + unsigned const tag = 3 * (p - 1); - world.recv (p, tag, new_rows); - world.recv (p, tag+1, new_cols); - world.recv (p, tag+2, new_vals); + world.recv (p, tag, new_rows); + world.recv (p, tag + 1, new_cols); + world.recv (p, tag + 2, new_vals); - add_to_arrays (ridx, cidx, data, new_rows, new_cols, new_vals); - } + add_to_arrays (ridx, cidx, data, new_rows, new_cols, new_vals); + } - SparseMatrix sm (data, ridx, cidx, nrows, ncols); - retval = sm; - } - else - // Return an identity matrix just to avoid warnings or errors - { - dim_vector dims (nrows, 1); - Array <octave_idx_type> ridx (dims), cidx (dims); - Array <double> data (dims, 1); + SparseMatrix sm (data, ridx, cidx, nrows, ncols); + retval = sm; + } + else + // Return an identity matrix just to avoid warnings or errors + { + dim_vector dims (nrows, 1); + Array <octave_idx_type> ridx (dims), cidx (dims); + Array <double> data (dims, 1); - for (std::size_t i = 0; i < nrows; ++i) - { - ridx.xelem (i) = i; - cidx.xelem (i) = i; - } + for (std::size_t i = 0; i < nrows; ++i) + { + ridx.xelem (i) = i; + cidx.xelem (i) = i; + } - SparseMatrix sm (data, ridx, cidx, nrows, ncols); - retval = sm; - } + SparseMatrix sm (data, ridx, cidx, nrows, ncols); + retval = sm; + } - return retval; - } + return retval; +} octave_value -PETSc_factory::do_vector_serial (dolfin::Vector const& b) const - { - octave_value retval; +PETSc_factory::do_vector_serial (dolfin::Vector const & b) const +{ + octave_value retval; - dim_vector dims; - dims.resize (2); - dims(0) = b.size (); - dims(1) = 1; - Array <double> myb (dims); + dim_vector dims; + dims.resize (2); + dims(0) = b.size (); + dims(1) = 1; + Array <double> myb (dims); - for (std::size_t i = 0; i < b.size (); ++i) - myb.xelem (i) = b[i]; + for (std::size_t i = 0; i < b.size (); ++i) + { myb.xelem (i) = b[i]; } - retval = myb; + retval = myb; - return retval; - } + return retval; +} octave_value -PETSc_factory::do_vector_parallel (dolfin::Vector const& b) const - { - octave_value retval; +PETSc_factory::do_vector_parallel (dolfin::Vector const & b) const +{ + octave_value retval; - std::size_t const length = b.size (); - dim_vector dims (length, 1); - Array <double> vec (dims, 0); + std::size_t const length = b.size (); + dim_vector dims (length, 1); + Array <double> vec (dims, 0); - std::vector <double> entries; - b.gather_on_zero (entries); + std::vector <double> entries; + b.gather_on_zero (entries); #ifdef LATEST_DOLFIN - if (dolfin::MPI::rank (MPI_COMM_WORLD) == 0) + if (dolfin::MPI::rank (MPI_COMM_WORLD) == 0) #else - if (dolfin::MPI::process_number () == 0) + if (dolfin::MPI::process_number () == 0) #endif - for (std::size_t i = 0; i < length; ++i) - vec.xelem (i) = entries[i]; + for (std::size_t i = 0; i < length; ++i) + { vec.xelem (i) = entries[i]; } - // On nodes other than zero, return an all zero vector of the right length - retval = vec; + // On nodes other than zero, return an all zero vector of the right length + retval = vec; - return retval; - } + return retval; +}