AdamsBashforth4.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 "AdamsBashforth4.hpp"
22 
23 
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_(
36  objectFile(
37  groupNames(baseName,"AB4History"),
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.deviceVectorAll();
93  auto d_y = y.deviceVectorAll();
94  auto d_history = history_.deviceVectorAll();
95 
96  Kokkos::parallel_for(
97  "AdamsBashforth4::correct",
98  rpIntegration (activeRng.first, activeRng.second),
99  LAMBDA_HD(int32 i){
100  d_y[i] += dt*(
101  static_cast<real>(55.0 / 24.0) * d_dy[i]
102  - static_cast<real>(59.0 / 24.0) * d_history[i].dy1_
103  + static_cast<real>(37.0 / 24.0) * d_history[i].dy2_
104  - static_cast<real>( 9.0 / 24.0) * d_history[i].dy3_
105  );
106  d_history[i].dy3_ = d_history[i].dy2_;
107  d_history[i].dy2_ = d_history[i].dy1_;
108  d_history[i].dy1_ = d_dy[i];
109 
110 
111  });
112  Kokkos::fence();
113 
114  return true;
115 }
pFlow::real
float real
Definition: builtinTypes.hpp:46
UNUSED
#define UNUSED(x)
Definition: pFlowMacros.hpp:35
pFlow::integration
Definition: integration.hpp:35
pFlow::word
std::string word
Definition: builtinTypes.hpp:63
pFlow::zero3
const realx3 zero3(0.0)
Definition: types.hpp:97
pFlow::repository::emplaceObject
T & emplaceObject(const objectFile &objf, Args &&... args)
Definition: repositoryTemplates.cpp:38
pFlow::baseName
word baseName(const word &w, char sep='.')
Definition: bTypesFunctions.cpp:156
pFlow::pointField
Definition: pointField.hpp:35
pFlow::pointStructure
Definition: pointStructure.hpp:44
pFlow::AdamsBashforth4::rpIntegration
Kokkos::RangePolicy< DefaultExecutionSpace, Kokkos::Schedule< Kokkos::Static >, Kokkos::IndexType< int32 > > rpIntegration
Definition: AdamsBashforth4.hpp:92
pFlow::int32
int int32
Definition: builtinTypes.hpp:53
pFlow::AdamsBashforth4::predict
bool predict(real UNUSED(dt), realx3Vector_D &UNUSED(y), realx3Vector_D &UNUSED(dy)) override
Definition: AdamsBashforth4.cpp:49
pFlow::VectorSingle
Definition: VectorSingle.hpp:45
pFlow::objectFile
Definition: objectFile.hpp:33
pStruct
auto & pStruct
Definition: setPointStructure.hpp:24
pFlow::AdamsBashforth4::AdamsBashforth4
AdamsBashforth4(const word &baseName, repository &owner, const pointStructure &pStruct, const word &method)
Definition: AdamsBashforth4.cpp:26
LAMBDA_HD
#define LAMBDA_HD
Definition: pFlowMacros.hpp:54
AdamsBashforth4.hpp
pFlow::groupNames
word groupNames(const word &bw, const word &tw, char sep='.')
Definition: bTypesFunctions.cpp:151
pFlow::AdamsBashforth4::setInitialVals
bool setInitialVals(const int32IndexContainer &newIndices, const realx3Vector &y) override
Definition: AdamsBashforth4.cpp:79
pFlow::repository
Definition: repository.hpp:34
pFlow::VectorSingle::deviceVectorAll
INLINE_FUNCTION_H viewType & deviceVectorAll()
Definition: VectorSingle.hpp:295
pFlow::AB4History
Definition: AdamsBashforth4.hpp:31
pFlow::AdamsBashforth4::intAll
bool intAll(real dt, realx3Vector_D &y, realx3Vector_D &dy, range activeRng)
Definition: AdamsBashforth4.cpp:86
pFlow::Vector< realx3 >
pFlow::range
kPair< int, int > range
Definition: KokkosTypes.hpp:54
pFlow::AdamsBashforth4::correct
bool correct(real dt, realx3Vector_D &y, realx3Vector_D &dy) override
Definition: AdamsBashforth4.cpp:60
pFlow::indexContainer< int32 >