www.cemf.ir
AdamsBashforth3.cpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow ---------------------------------
2  O C enter of
3  O O E ngineering and
4  O O M ultiscale modeling of
5  OOOOOOO F luid flow
6 ------------------------------------------------------------------------------
7  Copyright (C): www.cemf.ir
8  email: hamid.r.norouzi AT gmail.com
9 ------------------------------------------------------------------------------
10 Licence:
11  This file is part of phasicFlow code. It is a free software for simulating
12  granular and multiphase flows. You can redistribute it and/or modify it under
13  the terms of GNU General Public License v3 or any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the field of
16  granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
17  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 
19 -----------------------------------------------------------------------------*/
20 
21 #include "AdamsBashforth3.hpp"
22 
23 //const real AB3_coef[] = { 23.0 / 12.0, 16.0 / 12.0, 5.0 / 12.0 };
24 
26 (
27  const word& baseName,
28  repository& owner,
29  const pointStructure& pStruct,
30  const word& method
31 )
32 :
33  integration(baseName, owner, pStruct, method),
34  history_(
35  owner.emplaceObject<pointField<VectorSingle,AB3History>>(
36  objectFile(
37  groupNames(baseName,"AB3History"),
38  "",
39  objectFile::READ_IF_PRESENT,
40  objectFile::WRITE_ALWAYS),
41  pStruct,
43 
44 {
45 
46 }
47 
49 (
50  real UNUSED(dt),
53 )
54 {
55 
56  return true;
57 }
58 
60 (
61  real dt,
62  realx3Vector_D& y,
63  realx3Vector_D& dy
64 )
65 {
66 
67  if(this->pStruct().allActive())
68  {
69  return intAll(dt, y, dy, this->pStruct().activeRange());
70  }
71  else
72  {
73  return intRange(dt, y, dy, this->pStruct().activePointsMaskD());
74  }
75 
76  return true;
77 }
78 
80  const int32IndexContainer& newIndices,
81  const realx3Vector& y)
82 {
83  return true;
84 }
85 
87  real dt,
88  realx3Vector_D& y,
89  realx3Vector_D& dy,
90  range activeRng)
91 {
92  auto d_dy = dy.deviceViewAll();
93  auto d_y = y.deviceViewAll();
94  auto d_history = history_.deviceViewAll();
95 
96  Kokkos::parallel_for(
97  "AdamsBashforth3::correct",
98  rpIntegration (activeRng.first, activeRng.second),
99  LAMBDA_HD(int32 i){
100  auto ldy = d_dy[i];
101  d_y[i] += dt*( static_cast<real>(23.0 / 12.0) * ldy
102  - static_cast<real>(16.0 / 12.0) * d_history[i].dy1_
103  + static_cast<real>(5.0 / 12.0) * d_history[i].dy2_);
104  d_history[i] = {ldy ,d_history[i].dy1_};
105  });
106  Kokkos::fence();
107 
108  return true;
109 }
pFlow::AdamsBashforth3::setInitialVals
bool setInitialVals(const int32IndexContainer &newIndices, const realx3Vector &y) override
Set the initial values for new indices.
Definition: AdamsBashforth3.cpp:79
pFlow::AdamsBashforth3::rpIntegration
Kokkos::RangePolicy< DefaultExecutionSpace, Kokkos::Schedule< Kokkos::Static >, Kokkos::IndexType< int32 > > rpIntegration
Range policy for integration kernel.
Definition: AdamsBashforth3.hpp:87
pFlow::real
float real
Definition: builtinTypes.hpp:45
pFlow::AB3History
Definition: AdamsBashforth3.hpp:31
pFlow::AdamsBashforth3::predict
bool predict(real UNUSED(dt), realx3Vector_D &UNUSED(y), realx3Vector_D &UNUSED(dy)) override
Definition: AdamsBashforth3.cpp:49
UNUSED
#define UNUSED(x)
Definition: pFlowMacros.hpp:35
pFlow::integration
Base class for integrating the first order ODE (IVP)
Definition: integration.hpp:51
pFlow::word
std::string word
Definition: builtinTypes.hpp:64
pFlow::zero3
const realx3 zero3(0.0)
Definition: types.hpp:137
AdamsBashforth3.hpp
pFlow::AdamsBashforth3::correct
bool correct(real dt, realx3Vector_D &y, realx3Vector_D &dy) override
Definition: AdamsBashforth3.cpp:60
pFlow::AdamsBashforth3::AdamsBashforth3
AdamsBashforth3(const word &baseName, repository &owner, const pointStructure &pStruct, const word &method)
Construct from components.
Definition: AdamsBashforth3.cpp:26
pFlow::baseName
word baseName(const word &w, char sep='.')
Find the base in a group separated by "." and return it.
Definition: bTypesFunctions.cpp:185
pFlow::pointField
Definition: pointField.hpp:33
pFlow::pointStructure
Definition: pointStructure.hpp:34
pFlow::int32
int int32
Definition: builtinTypes.hpp:50
pFlow::VectorSingle
Definition: VectorSingle.hpp:44
pFlow::objectFile
Definition: objectFile.hpp:30
pFlow::AdamsBashforth3::intAll
bool intAll(real dt, realx3Vector_D &y, realx3Vector_D &dy, range activeRng)
Integrate on all points in the active range.
Definition: AdamsBashforth3.cpp:86
pStruct
auto & pStruct
Definition: setPointStructure.hpp:24
pFlow::VectorSingle::deviceViewAll
INLINE_FUNCTION_H auto & deviceViewAll()
Device view range [0,capcity)
Definition: VectorSingle.cpp:249
LAMBDA_HD
#define LAMBDA_HD
Definition: pFlowMacros.hpp:58
pFlow::groupNames
word groupNames(const word &bw, const word &tw, char sep='.')
Group words and output bw.tw.
Definition: bTypesFunctions.cpp:179
pFlow::repository
Definition: repository.hpp:34
pFlow::Vector< realx3 >
pFlow::indexContainer
It holds two vectors of indecis on Host and Device.
Definition: indexContainer.hpp:39