1#include "Grid/grid_dist_id.hpp"
2#include "data_type/aggregate.hpp"
57 auto it = Old.getDomainIterator();
65 Old.template get<U>(key) = 1.0;
66 Old.template get<V>(key) = 0.0;
69 New.template get<U>(key) = 0.0;
70 New.template get<V>(key) = 0.0;
75 long int x_start = Old.size(0)*1.55f/domain.getHigh(0);
76 long int y_start = Old.size(1)*1.55f/domain.getHigh(1);
77 long int z_start = Old.size(1)*1.55f/domain.getHigh(2);
79 long int x_stop = Old.size(0)*1.85f/domain.getHigh(0);
80 long int y_stop = Old.size(1)*1.85f/domain.getHigh(1);
81 long int z_stop = Old.size(1)*1.85f/domain.getHigh(2);
85 auto it_init = Old.getSubDomainIterator(start,stop);
87 while (it_init.isNext())
89 auto key = it_init.
get();
91 Old.template get<U>(key) = 0.5 + (((double)std::rand())/RAND_MAX -0.5)/10.0;
92 Old.template get<V>(key) = 0.25 + (((double)std::rand())/RAND_MAX -0.5)/20.0;
99int main(
int argc,
char* argv[])
101 openfpm_init(&argc,&argv);
107 size_t sz[3] = {128,128,128};
125 size_t timeSteps = 5000;
138 double spacing[3] = {Old.spacing(0),Old.spacing(1),Old.spacing(2)};
140 init(Old,New,domain);
144 Old.template ghost_get<U,V>();
148 double uFactor = deltaT * du/(spacing[x]*spacing[x]);
149 double vFactor = deltaT * dv/(spacing[x]*spacing[x]);
166 for (
size_t i = 0; i < timeSteps; ++i)
169 {std::cout <<
"STEP: " << i << std::endl;}
173 auto it = Old.getDomainIteratorStencil(star_stencil_3D);
178 auto Cp = it.getStencil<0>();
181 auto mx = it.getStencil<1>();
182 auto px = it.getStencil<2>();
183 auto my = it.getStencil<3>();
184 auto py = it.getStencil<4>();
185 auto mz = it.getStencil<5>();
186 auto pz = it.getStencil<6>();
189 New.
get<U>(Cp) = Old.get<U>(Cp) + uFactor * (
196 6.0*Old.get<U>(Cp)) +
197 - deltaT * Old.get<U>(Cp) * Old.get<V>(Cp) * Old.get<V>(Cp) +
198 - deltaT *
F * (Old.get<U>(Cp) - 1.0);
202 New.get<V>(Cp) = Old.get<V>(Cp) + vFactor * (
210 deltaT * Old.get<U>(Cp) * Old.get<V>(Cp) * Old.get<V>(Cp) +
211 - deltaT * (
F+K) * Old.get<V>(Cp);
227 Old.ghost_get<U,V>();
239 std::cout <<
"Total simulation: " << tot_sim.
getwct() << std::endl;
This class represent an N-dimensional box.
This is a distributed grid.
grid_key_dx is the key to access any element in the grid
__device__ __host__ index_type get(index_type i) const
Get the i index.
Class for cpu time benchmarking.
void stop()
Stop the timer.
void start()
Start the timer.
double getwct()
Return the elapsed real time.
OutputIteratorT OffsetT ReductionOpT OuputT init
< [in] The initial value of the reduction
[v_transform metafunction]
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...