Commit ee9f3fc1 authored by Yaroslav's avatar Yaroslav

Work on grid map

parent 1c44e271
......@@ -1693,15 +1693,39 @@ public:
getGlobalGridsInfo(gdb_ext_global);
std::cout << "Global size: " << gdb_ext_global.size() << std::endl;
/*
for (size_t i = 0; i < gdb_ext_global.size(); i++)
{
std::cout << "(" << gdb_ext_global.get(i).Dbox.getLow(0) << "; " << gdb_ext_global.get(i).Dbox.getHigh(0) << ")" << std::endl;
std::cout << "(" << gdb_ext_global.get(i).Dbox.getLow(0) << "; " << gdb_ext_global.get(i).Dbox.getLow(1) << "); (" << gdb_ext_global.get(i).Dbox.getHigh(0) << "; " << gdb_ext_global.get(i).Dbox.getHigh(1) << ")" << std::endl;
std::cout << "I = " << i << ", Origin is (" << gdb_ext_global.get(i).origin.get(0) << "; " << gdb_ext_global.get(i).origin.get(1) << ")" << std::endl;
}
*/
for (size_t i = 0; i < gdb_ext.size(); i++)
{
Box<dim,long int> box = gdb_ext.get(i).Dbox;
box += gdb_ext.get(i).origin;
std::cout << "(" << box.getLow(0) << "; " << box.getLow(1) << "); (" << box.getHigh(0) << "; " << box.getHigh(1) << ")" << std::endl;
}
this->template map_(domain,dec,cd_sm,loc_grid,loc_grid_old,gdb_ext,gdb_ext_old,gdb_ext_global);
}
void gdb_ext_info()
{
for (size_t i = 0; i < gdb_ext.size(); i++)
{
Box<dim,long int> box = gdb_ext.get(i).Dbox;
box += gdb_ext.get(i).origin;
std::cout << "(" << box.getLow(0) << "; " << box.getLow(1) << "); (" << box.getHigh(0) << "; " << box.getHigh(1) << ")" << std::endl;
}
std::cout << "--------------" << std::endl;
for (size_t i = 0; i < dec.getNSubDomain(); i++)
{
std::cout << "(" << dec.getSubDomain(i).getLow(0) << "; " << dec.getSubDomain(i).getLow(1) << "); (" << dec.getSubDomain(i).getHigh(0) << "; " << dec.getSubDomain(i).getHigh(1) << ")" << std::endl;
}
std::cout << "******************" << std::endl;
}
inline void save(const std::string & filename) const
{
......
......@@ -125,6 +125,39 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_hdf5_load_test )
BOOST_REQUIRE_EQUAL(sum, (size_t)k*k);
}
BOOST_AUTO_TEST_CASE( grid_gdb_test )
{
// Input data
size_t k = 10;
size_t ghost_part = 0.2;
// Domain
Box<2,float> domain({0.0,0.0},{1.0,1.0});
Vcluster & v_cl = create_vcluster();
// Skip this test on big scale
if (v_cl.getProcessingUnits() >= 32)
return;
if (v_cl.getProcessUnitID() == 0)
std::cout << "Testing gdb_ext grid info..." << std::endl;
// grid size
size_t sz[2];
sz[0] = k;
sz[1] = k;
// Ghost
Ghost<2,float> g(ghost_part);
// Distributed grid with id decomposition
grid_dist_id<2, float, scalar<float>, CartDecomposition<2,float>> g_dist(sz,domain,g);
g_dist.gdb_ext_info();
}
BOOST_AUTO_TEST_SUITE_END()
#endif /* SRC_GRID_GRID_DIST_ID_HDF5_CHCKPNT_RESTART_TEST_HPP_ */
......@@ -60,7 +60,7 @@ public:
/*! \brief Label intersection grids for mappings
*
* \param prc_sz For each processor the number of grids to send
* \param prc_sz For each processor the number of grids to send to
*/
inline void labelIntersectionGridsProcessor(Box<dim,St> domain, Decomposition & dec, CellDecomposer_sm<dim,St,shift<dim,St>> & cd_sm, openfpm::vector<device_grid> & loc_grid_old, openfpm::vector<GBoxes<device_grid::dims>> & gdb_ext, openfpm::vector<GBoxes<device_grid::dims>> & gdb_ext_old, openfpm::vector<GBoxes<device_grid::dims>> & gdb_ext_global, openfpm::vector<openfpm::vector<device_grid>> & lbl_b, openfpm::vector<size_t> & prc_sz)
{
......@@ -72,22 +72,27 @@ public:
for (size_t i = 0; i < gdb_ext_old.size(); i++)
{
// Local old sub-domain
SpaceBox<dim,St> sub_dom = gdb_ext_old.get(i).Dbox;
SpaceBox<dim,long int> sub_dom = gdb_ext_old.get(i).Dbox;
sub_dom += gdb_ext_old.get(i).origin;
for (size_t j = 0; j < gdb_ext_global.size(); j++)
{
size_t p_id = 0;
// Intersection box
SpaceBox<dim,St> inte_box;
SpaceBox<dim,long int> inte_box;
// Global new sub-domain
SpaceBox<dim,St> sub_dom_new = gdb_ext_global.get(j).Dbox;
SpaceBox<dim,long int> sub_dom_new = gdb_ext_global.get(j).Dbox;
sub_dom_new += gdb_ext_global.get(j).origin;
bool intersect = sub_dom.Intersect(sub_dom_new, inte_box);
if (intersect == true)
{
//std::cout << "Inte_box: (" << inte_box.getLow(0) << "; " << inte_box.getLow(1) << "); (" << inte_box.getHigh(0) << "; " << inte_box.getHigh(1) << ")" << std::endl;
/*
// Grid to send size
size_t sz1[dim];
......@@ -101,30 +106,40 @@ public:
Point<dim,St> p;
for (size_t i = 0; i < dim; i++)
p.get(i) = (inte_box.getHigh(i) + inte_box.getLow(i))/2;
//std::cout << "Point: (" << p.get(0) << "; " << p.get(1) << ")" << std::endl;
p_id = dec.processorID(p);
prc_sz.get(p_id)++;
std::cout << "P_id: " << p_id << std::endl;
//std::cout << "P_id: " << p_id << std::endl;
// Convert intersection box from contiguous to discrete
SpaceBox<dim,long int> inte_box_discr = cd_sm.convertDomainSpaceIntoGridUnits(inte_box,dec.periodicity());
//SpaceBox<dim,long int> inte_box_discr = cd_sm.convertDomainSpaceIntoGridUnits(inte_box,dec.periodicity());
std::cout << "Beg:" << inte_box_discr.getHigh(0) << "; " << inte_box.getHigh(1) << std::endl;
std::cout << "End:" << inte_box_discr.getLow(0) << "; " << inte_box.getLow(1) << std::endl;
//std::cout << "Beg:" << inte_box_discr.getHigh(0) << "; " << inte_box.getHigh(1) << std::endl;
//std::cout << "End:" << inte_box_discr.getLow(0) << "; " << inte_box.getLow(1) << std::endl;
// Transform coordinates to local
inte_box_discr -= gdb_ext.get(i).origin;
auto inte_box_local = inte_box;
inte_box_local -= gdb_ext_global.get(j).origin;
//std::cout << "Inte_box_local: (" << inte_box_local.getLow(0) << "; " << inte_box_local.getLow(1) << "); (" << inte_box_local.getHigh(0) << "; " << inte_box_local.getHigh(1) << ")" << std::endl;
// Grid corresponding for gdb_ext_old.get(i) box
device_grid gr = loc_grid_old.get(i);
for (size_t l = 0; l < dim; l++)
std::cout << "GR Size on " << l << " dimension: " << gr.getGrid().size(l) << std::endl;
// Size of the grid to send
size_t sz[dim];
for (size_t l = 0; l < dim; l++)
{
sz[l] = inte_box_discr.getHigh(l) - inte_box_discr.getLow(l);
//std::cout << " Size on " << l << " dimension: " << sz[l] << std::endl;
sz[l] = inte_box_local.getHigh(l) - inte_box_local.getLow(l);
std::cout << "GR_send size on " << l << " dimension: " << sz[l] << std::endl;
}
// Grid to send
......@@ -132,32 +147,34 @@ public:
gr_send.setMemory();
// Sub iterator across intersection box inside local grid
grid_key_dx<dim> start = inte_box_discr.getKP1();
grid_key_dx<dim> stop = inte_box_discr.getKP2();
grid_key_dx<dim> start = inte_box_local.getKP1();
grid_key_dx<dim> stop = inte_box_local.getKP2();
//std::string start2 = start.to_string();
//std::string stop2 = stop.to_string();
auto key_it = gr.getSubIterator(start,stop);
auto it = gr.getSubIterator(start,stop);
// Copy selected elements into a new sub-grid
while (key_it.isNext())
while (it.isNext())
{
grid_key_dx<dim> key = key_it.get();
//std::string str = key.to_string();
//std::cout << "Key: " << str << std::endl;
auto key = it.get();
std::string str = key.to_string();
std::cout << "Key: " << str << std::endl;
gr_send.get_o(key) = gr.get_o(key);
//gr_send.template get<0>(key) = gr.template get<0>(key);
//gr.template get<0>(key)
std::cout << "8" << std::endl;
//gr_send.set(key,gr,key);
++key_it;
++it;
}
// Add to the labeling vector
lbl_b.get(p_id).add(gr_send);
//lbl_b.get(p_id).add(gr_send);
//std::cout << "9" << std::endl;
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment