aboutsummaryrefslogtreecommitdiff
path: root/code/grid2d_collide_and_stream.cpp
blob: 4660946a7cfd9f97c386a17d999d11485dd21ef3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
template <typename T, template<typename> class DESCRIPTOR>
void Grid2D<T,DESCRIPTOR>::collideAndStream()
{
  for ( auto& fineCoupler : _fineCouplers ) {
    fineCoupler->store(); // Speichern von Werten in $x_{g \to f}^g \in \G$ zu Zeit $t$
  }

  this->getSuperLattice().collideAndStream(); // Zeitschritt $t \to t+\delta t_g$ auf $\G$

  for ( auto& fineGrid : _fineGrids ) {
    fineGrid->collideAndStream(); // Zeitschritt $t \to t+\delta t_g / 2$ auf $\F$
  }

  for ( auto& fineCoupler : _fineCouplers ) {
    fineCoupler->interpolate(); // Interpolation von Werten in $x_{g \to f}^g \in \G$ zu Zeit $t + \delta t_g / 2$
    fineCoupler->couple();      // Setzen von $f_{f,i}$ in $x_{g \to f} \in \F$
  }

  for ( auto& fineGrid : _fineGrids ) {
    fineGrid->collideAndStream(); // Zeitschritt $t+\delta t_f \to t+2\delta t_f$ auf $\F$
  }

  for ( auto& fineCoupler : _fineCouplers ) {
    fineCoupler->store();    // Speichern von Werten in $x_{g \to f}^g \in \G$ zu Zeit $t + \delta t_g$
    fineCoupler->couple();   // Setzen von $f_{f,i}$ in $x_{g \to f} \in \F$
  }

  for ( auto& coarseCoupler : _coarseCouplers ) {
    coarseCoupler->couple(); // Setzen von $f_{g,i}$ in $x_{f \to g} \in \G$
  }
}