From aed24a5439f1d521fdf98bc7c3031ba1bee9a3a7 Mon Sep 17 00:00:00 2001 From: Pietro Incardona <incardon@mpi-cbg.de> Date: Wed, 28 Oct 2015 12:31:55 +0100 Subject: [PATCH] Last changes to numerics --- example/Grid/0_simple/main.cpp | 2 +- openfpm_data | 2 +- openfpm_numerics | 2 +- src/Decomposition/ie_ghost.hpp | 4 +- src/Grid/grid_dist_id.hpp | 86 +++++++++++++++++++--------------- src/Grid/grid_dist_key.hpp | 12 ++++- 6 files changed, 65 insertions(+), 43 deletions(-) diff --git a/example/Grid/0_simple/main.cpp b/example/Grid/0_simple/main.cpp index b725c8bf..0e59f1db 100644 --- a/example/Grid/0_simple/main.cpp +++ b/example/Grid/0_simple/main.cpp @@ -144,7 +144,7 @@ int main(int argc, char* argv[]) // // For debugging porpouse and demostration we output the decomposition // - g_dist.getDecomposition().write("dec/out"); + g_dist.getDecomposition().write("out_dec"); // // ### WIKI 14 ### diff --git a/openfpm_data b/openfpm_data index 7c9737c9..fa6e1d93 160000 --- a/openfpm_data +++ b/openfpm_data @@ -1 +1 @@ -Subproject commit 7c9737c9de9051c7af21edceee29c0aa11cc8afa +Subproject commit fa6e1d93eee2226ca3547c5980601a71e0b14ae3 diff --git a/openfpm_numerics b/openfpm_numerics index 6ad65177..70629390 160000 --- a/openfpm_numerics +++ b/openfpm_numerics @@ -1 +1 @@ -Subproject commit 6ad651779c654df68af427d6294bc4ba368a372e +Subproject commit 706293905a3cd052ff6be0ce5d46263016b6d0e3 diff --git a/src/Decomposition/ie_ghost.hpp b/src/Decomposition/ie_ghost.hpp index b92ddbc6..86dca035 100644 --- a/src/Decomposition/ie_ghost.hpp +++ b/src/Decomposition/ie_ghost.hpp @@ -349,7 +349,7 @@ public: * \return sub-domain at which belong the internal ghost box * */ - inline const size_t getProcessorIGhostSub(size_t id, size_t j) const + inline size_t getProcessorIGhostSub(size_t id, size_t j) const { return proc_int_box.get(id).ibx.get(j).sub; } @@ -361,7 +361,7 @@ public: * \return sub-domain at which belong the external ghost box * */ - inline const size_t getProcessorEGhostSub(size_t id, size_t j) const + inline size_t getProcessorEGhostSub(size_t id, size_t j) const { return proc_int_box.get(id).ebx.get(j).sub; } diff --git a/src/Grid/grid_dist_id.hpp b/src/Grid/grid_dist_id.hpp index 77bf8f1d..1d847049 100644 --- a/src/Grid/grid_dist_id.hpp +++ b/src/Grid/grid_dist_id.hpp @@ -40,13 +40,10 @@ * \snippet grid_dist_id_unit_test.hpp Create and access a distributed grid complex * ### Synchronize a distributed grid for complex structures * \snippet grid_dist_id_unit_test.hpp Synchronized distributed grid complex -<<<<<<< HEAD * ### Usage of a grid dist iterator sub * \snippet grid_dist_id_unit_test.hpp Usage of a sub_grid iterator -======= * ### Construct two grid with the same decomposition * \snippet grid_dist_id_unit_test.hpp Construct two grid with the same decomposition ->>>>>>> master * */ template<unsigned int dim, typename St, typename T, typename Decomposition,typename Memory=HeapMemory , typename device_grid=grid_cpu<dim,T> > @@ -361,7 +358,6 @@ class grid_dist_id } } -<<<<<<< HEAD /*! \brief Create the grids on memory * */ @@ -369,18 +365,6 @@ class grid_dist_id { Box<dim,St> g_rnd_box; for (size_t i = 0 ; i < dim ; i++) {g_rnd_box.setHigh(i,0.5); g_rnd_box.setLow(i,-0.5);} -======= -public: - - //! constructor - grid_dist_id(Decomposition & dec, const size_t (& g_sz)[dim], const Box<dim,St> & domain, const Ghost<dim,St> & ghost) - :domain(domain),ghost(ghost),dec(dec),v_cl(*global_v_cluster) - { - // Increment the reference counter of the decomposition - dec.incRef(); - - check_size(g_sz); ->>>>>>> master // Get the number of local grid needed size_t n_grid = dec.getNLocalHyperCube(); @@ -388,7 +372,6 @@ public: // create local grids for each hyper-cube loc_grid = v_cl.allocate<device_grid>(n_grid); -<<<<<<< HEAD // Size of the grid on each dimension size_t l_res[dim]; @@ -404,15 +387,10 @@ public: // Convert from SpaceBox<dim,St> to SpaceBox<dim,long int> SpaceBox<dim,long int> sp_t = cd_sm.convertDomainSpaceIntoGridUnits(sp); SpaceBox<dim,long int> sp_tg = cd_sm.convertDomainSpaceIntoGridUnits(sp_g); -======= - // fill the global size of the grid - for (size_t i = 0 ; i < dim ; i++) {this->g_sz[i] = g_sz[i];} ->>>>>>> master //! Save the origin of the sub-domain of the local grid gdb_ext.last().origin = sp_tg.getP1(); -<<<<<<< HEAD // save information about the local grid: domain box seen inside the domain + ghost box (see GDBoxes for a visual meaning) // and where the GDBox start, or the origin of the local grid (+ghost) in global coordinate gdb_ext.last().Dbox = sp_t; @@ -427,10 +405,6 @@ public: // Set the dimensions of the local grid loc_grid.get(i).resize(l_res); } -======= - // Calculate ghost boxes - dec.calculateGhostBoxes(); ->>>>>>> master } /*! \brief Default Copy constructor on this class make no sense and is unsafe, this definition disable it @@ -444,12 +418,7 @@ public: * * */ -<<<<<<< HEAD inline void InitializeCellDecomposer(const size_t (& g_sz)[dim]) -======= - grid_dist_id(const size_t (& g_sz)[dim],const Box<dim,St> & domain, const Ghost<dim,St> & g) - :domain(domain),ghost(g),dec(*new Decomposition(*global_v_cluster)),v_cl(*global_v_cluster) ->>>>>>> master { // Increment the reference counter of the decomposition dec.incRef(); @@ -504,9 +473,10 @@ public: // Decomposition used typedef Decomposition decomposition; - //! constructor - grid_dist_id(Vcluster v_cl, Decomposition & dec, const size_t (& g_sz)[dim] , const Box<dim,St> & domain, const Ghost<dim,T> & ghost) - :domain(domain),ghost(ghost),loc_grid(NULL),v_cl(v_cl),dec(dec),ginfo(g_sz),ginfo_v(g_sz) + + //! constructor + grid_dist_id(Decomposition & dec, const size_t (& g_sz)[dim], const Box<dim,St> & domain, const Ghost<dim,St> & ghost) + :domain(domain),ghost(ghost),dec(dec),v_cl(*global_v_cluster) { InitializeCellDecomposer(g_sz); InitializeStructures(g_sz); @@ -520,7 +490,7 @@ public: * */ grid_dist_id(const size_t (& g_sz)[dim],const Box<dim,St> & domain, const Ghost<dim,St> & g) - :domain(domain),ghost(g),dec(Decomposition(*global_v_cluster)),v_cl(*global_v_cluster),ginfo(g_sz),ginfo_v(g_sz) + :domain(domain),ghost(g),dec(* new Decomposition(*global_v_cluster)),v_cl(*global_v_cluster),ginfo(g_sz),ginfo_v(g_sz) { InitializeCellDecomposer(g_sz); InitializeStructures(g_sz); @@ -534,7 +504,36 @@ public: * */ grid_dist_id(const size_t (& g_sz)[dim],const Box<dim,St> & domain, const Ghost<dim,size_t> & g) - :domain(domain),dec(Decomposition(*global_v_cluster)),v_cl(*global_v_cluster),ginfo(g_sz),ginfo_v(g_sz) + :domain(domain),dec(*new Decomposition(*global_v_cluster)),v_cl(*global_v_cluster),ginfo(g_sz),ginfo_v(g_sz) + { + InitializeCellDecomposer(g_sz); + + // get the grid spacing + Box<dim,St> sp = cd_sm.getCellBox(); + + // enlarge 0.001 of the spacing + sp.magnify_fix_P1(0.001); + + // set the ghost + for (size_t i = 0 ; i < dim ; i++) + { + ghost.setLow(i,sp.getHigh(i)); + ghost.setHigh(i,sp.getHigh(i)); + } + + // Initialize structures + InitializeStructures(g_sz); + } + + /*! \brief Constrcuctor + * + * \param g_sz array with the grid size on each dimension + * \param domain domain where this grid live + * \param g Ghost given in grid units + * + */ + grid_dist_id(Decomposition & dec, const size_t (& g_sz)[dim],const Box<dim,St> & domain, const Ghost<dim,size_t> & g) + :domain(domain),dec(dec),v_cl(*global_v_cluster),ginfo(g_sz),ginfo_v(g_sz) { InitializeCellDecomposer(g_sz); @@ -622,8 +621,10 @@ public: for (size_t i = 0 ; i < gdb_ext.size() ; i++) { - total += gdb_ext.Dbox.getVolumeKey(); + total += gdb_ext.get(i).Dbox.getVolumeKey(); } + + return total; } /*! \brief It return the informations about the local grids @@ -694,6 +695,17 @@ public: return v_cl; } + /*! \brief Get the reference of the selected element + * + * \param p property to get (is an integer) + * \param v1 grid_key that identify the element in the grid + * + */ + template <unsigned int p>inline const auto get(const grid_dist_key_dx<dim> & v1) const -> typename std::add_lvalue_reference<decltype(loc_grid.get(v1.getSub()).template get<p>(v1.getKey()))>::type + { + return loc_grid.get(v1.getSub()).template get<p>(v1.getKey()); + } + /*! \brief Get the reference of the selected element * * \param p property to get (is an integer) diff --git a/src/Grid/grid_dist_key.hpp b/src/Grid/grid_dist_key.hpp index e62d3b0f..832a7d83 100644 --- a/src/Grid/grid_dist_key.hpp +++ b/src/Grid/grid_dist_key.hpp @@ -40,6 +40,16 @@ public: return key; } + /*! \brief Get the reference key + * + * \return the local key + * + */ + inline grid_key_dx<dim> & getKeyRef() + { + return key; + } + /* \brief Check if two key are the same * * \param key_t key to check @@ -73,7 +83,7 @@ public: return grid_dist_key_dx<dim>(getSub(),key); } - inline grid_dist_key_dx(int g_c, grid_key_dx<dim> key) + inline grid_dist_key_dx(int g_c, const grid_key_dx<dim> & key) :g_c(g_c),key(key) { } -- GitLab