mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-06-22 16:28:30 +00:00
sphereParticles tested on CPU, iteration, write to file, particle deletion
This commit is contained in:
@ -35,20 +35,20 @@ using rpIntegration = Kokkos::RangePolicy<
|
||||
|
||||
bool intAllActive(
|
||||
real dt,
|
||||
realx3PointField_D& y,
|
||||
realx3Field_D& y,
|
||||
realx3PointField_D& dy,
|
||||
realx3PointField_D& dy1)
|
||||
{
|
||||
|
||||
auto d_dy = dy.fieldDevice();
|
||||
auto d_y = y.fieldDevice();
|
||||
auto d_dy1= dy1.fieldDevice();
|
||||
auto d_dy = dy.deviceView();
|
||||
auto d_y = y.deviceView();
|
||||
auto d_dy1= dy1.deviceView();
|
||||
auto activeRng = dy1.activeRange();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsBashforth2::correct",
|
||||
rpIntegration (activeRng.start(), activeRng.end()),
|
||||
LAMBDA_HD(int32 i){
|
||||
LAMBDA_HD(uint32 i){
|
||||
d_y[i] += dt*(static_cast<real>(1.5) * d_dy[i] - static_cast<real>(0.5) * d_dy1[i]);
|
||||
d_dy1[i] = d_dy[i];
|
||||
});
|
||||
@ -60,22 +60,22 @@ bool intAllActive(
|
||||
bool intScattered
|
||||
(
|
||||
real dt,
|
||||
realx3PointField_D& y,
|
||||
realx3Field_D& y,
|
||||
realx3PointField_D& dy,
|
||||
realx3PointField_D& dy1
|
||||
)
|
||||
{
|
||||
|
||||
auto d_dy = dy.fieldDevice();
|
||||
auto d_y = y.fieldDevice();
|
||||
auto d_dy1 = dy1.fieldDevice();
|
||||
auto d_dy = dy.deviceView();
|
||||
auto d_y = y.deviceView();
|
||||
auto d_dy1 = dy1.deviceView();
|
||||
auto activeRng = dy1.activeRange();
|
||||
const auto& activeP = dy1.activePointsMaskDevice();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsBashforth2::correct",
|
||||
rpIntegration (activeRng.start(), activeRng.end()),
|
||||
LAMBDA_HD(int32 i){
|
||||
LAMBDA_HD(uint32 i){
|
||||
if( activeP(i))
|
||||
{
|
||||
d_y[i] += dt*(static_cast<real>(1.5) * d_dy[i] - static_cast<real>(0.5) * d_dy1[i]);
|
||||
@ -122,16 +122,30 @@ bool pFlow::AdamsBashforth2::predict
|
||||
realx3PointField_D& UNUSED(dy)
|
||||
)
|
||||
{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool pFlow::AdamsBashforth2::predict
|
||||
(
|
||||
real dt,
|
||||
realx3Field_D &y,
|
||||
realx3PointField_D &dy
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool pFlow::AdamsBashforth2::correct
|
||||
(
|
||||
real dt,
|
||||
realx3PointField_D& y,
|
||||
realx3PointField_D& dy
|
||||
)
|
||||
{
|
||||
return correct(dt, y.field(), dy);
|
||||
}
|
||||
|
||||
bool pFlow::AdamsBashforth2::correct(real dt, realx3Field_D &y, realx3PointField_D &dy)
|
||||
{
|
||||
auto& dy1l = dy1();
|
||||
|
||||
@ -143,8 +157,7 @@ bool pFlow::AdamsBashforth2::correct
|
||||
{
|
||||
return intScattered(dt, y, dy, dy1l);
|
||||
}
|
||||
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pFlow::AdamsBashforth2::setInitialVals(
|
||||
|
@ -81,12 +81,23 @@ public:
|
||||
real UNUSED(dt),
|
||||
realx3PointField_D& UNUSED(y),
|
||||
realx3PointField_D& UNUSED(dy)) final;
|
||||
|
||||
bool predict(
|
||||
real dt,
|
||||
realx3Field_D& y,
|
||||
realx3PointField_D& dy) final;
|
||||
|
||||
bool correct(
|
||||
real dt,
|
||||
realx3PointField_D& y,
|
||||
realx3PointField_D& dy) final;
|
||||
|
||||
bool correct(
|
||||
real dt,
|
||||
realx3Field_D& y,
|
||||
realx3PointField_D& dy);
|
||||
|
||||
|
||||
bool setInitialVals(
|
||||
const int32IndexContainer& newIndices,
|
||||
const realx3Vector& y) final;
|
||||
|
@ -89,9 +89,9 @@ bool pFlow::AdamsBashforth3::intAll(
|
||||
realx3Vector_D& dy,
|
||||
range activeRng)
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_history = history_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_history = history_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsBashforth3::correct",
|
||||
|
@ -160,9 +160,9 @@ bool pFlow::AdamsBashforth3::intRange(
|
||||
realx3Vector_D& dy,
|
||||
activeFunctor activeP )
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_history = history_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_history = history_.deviceViewAll();
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
|
@ -89,9 +89,9 @@ bool pFlow::AdamsBashforth4::intAll(
|
||||
realx3Vector_D& dy,
|
||||
range activeRng)
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_history = history_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_history = history_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsBashforth4::correct",
|
||||
|
@ -165,9 +165,9 @@ bool pFlow::AdamsBashforth4::intRange(
|
||||
realx3Vector_D& dy,
|
||||
activeFunctor activeP )
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_history = history_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_history = history_.deviceViewAll();
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
|
@ -89,9 +89,9 @@ bool pFlow::AdamsBashforth5::intAll(
|
||||
realx3Vector_D& dy,
|
||||
range activeRng)
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_history = history_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_history = history_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsBashforth5::correct",
|
||||
|
@ -165,9 +165,9 @@ bool pFlow::AdamsBashforth5::intRange(
|
||||
realx3Vector_D& dy,
|
||||
activeFunctor activeP )
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_history = history_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_history = history_.deviceViewAll();
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
|
@ -124,11 +124,11 @@ bool pFlow::AdamsMoulton3::predictAll(
|
||||
range activeRng)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_dy1= dy1_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_dy1= dy1_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsMoulton3::predict",
|
||||
@ -150,12 +150,12 @@ bool pFlow::AdamsMoulton3::intAll(
|
||||
range activeRng)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsMoulton3::correct",
|
||||
|
@ -144,11 +144,11 @@ bool AdamsMoulton3::predictRange(
|
||||
realx3Vector_D& dy,
|
||||
activeFunctor activeP)
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_dy1= dy1_.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_dy1= dy1_.deviceViewAll();
|
||||
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
@ -182,12 +182,12 @@ bool pFlow::AdamsMoulton3::intRange(
|
||||
activeFunctor activeP)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
|
@ -135,13 +135,13 @@ bool pFlow::AdamsMoulton4::predictAll(
|
||||
range activeRng)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsMoulton4::predict",
|
||||
@ -165,13 +165,13 @@ bool pFlow::AdamsMoulton4::intAll(
|
||||
range activeRng)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsMoulton4::correct",
|
||||
|
@ -147,13 +147,13 @@ bool AdamsMoulton4::predictRange(
|
||||
realx3Vector_D& dy,
|
||||
activeFunctor activeP )
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
@ -185,13 +185,13 @@ bool pFlow::AdamsMoulton4::intRange(
|
||||
activeFunctor activeP )
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
|
@ -145,14 +145,14 @@ bool pFlow::AdamsMoulton5::predictAll(
|
||||
range activeRng)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_dy3 = dy3_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
auto d_dy3 = dy3_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsMoulton5::predict",
|
||||
@ -178,14 +178,14 @@ bool pFlow::AdamsMoulton5::intAll(
|
||||
range activeRng)
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_dy3 = dy3_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
auto d_dy3 = dy3_.deviceViewAll();
|
||||
|
||||
Kokkos::parallel_for(
|
||||
"AdamsMoulton5::correct",
|
||||
|
@ -150,14 +150,14 @@ bool AdamsMoulton5::predictRange(
|
||||
realx3Vector_D& dy,
|
||||
activeFunctor activeP )
|
||||
{
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_dy3 = dy3_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
auto d_dy3 = dy3_.deviceViewAll();
|
||||
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
@ -189,14 +189,14 @@ bool pFlow::AdamsMoulton5::intRange(
|
||||
activeFunctor activeP )
|
||||
{
|
||||
|
||||
auto d_dy = dy.deviceVectorAll();
|
||||
auto d_y = y.deviceVectorAll();
|
||||
auto d_dy = dy.deviceViewAll();
|
||||
auto d_y = y.deviceViewAll();
|
||||
|
||||
auto d_dy0 = dy0_.deviceVectorAll();
|
||||
auto d_y0 = y0_.deviceVectorAll();
|
||||
auto d_dy1 = dy1_.deviceVectorAll();
|
||||
auto d_dy2 = dy2_.deviceVectorAll();
|
||||
auto d_dy3 = dy3_.deviceVectorAll();
|
||||
auto d_dy0 = dy0_.deviceViewAll();
|
||||
auto d_y0 = y0_.deviceViewAll();
|
||||
auto d_dy1 = dy1_.deviceViewAll();
|
||||
auto d_dy2 = dy2_.deviceViewAll();
|
||||
auto d_dy3 = dy3_.deviceViewAll();
|
||||
|
||||
auto activeRng = activeP.activeRange();
|
||||
|
||||
|
@ -139,10 +139,16 @@ public:
|
||||
virtual
|
||||
bool predict(real dt, realx3PointField_D& y, realx3PointField_D& dy) = 0;
|
||||
|
||||
virtual
|
||||
bool predict(real dt, realx3Field_D& y, realx3PointField_D& dy) = 0;
|
||||
|
||||
/// Correction/main integration step
|
||||
virtual
|
||||
bool correct(real dt, realx3PointField_D& y, realx3PointField_D& dy) = 0;
|
||||
|
||||
virtual
|
||||
bool correct(real dt, realx3Field_D& y, realx3PointField_D& dy) = 0;
|
||||
|
||||
/// Set the initial values for new indices
|
||||
virtual
|
||||
bool setInitialVals(
|
||||
|
Reference in New Issue
Block a user