1 #ifndef SRC_SNAP_IMPLICIT_IMPLICIT_SOLVER_HPP_
2 #define SRC_SNAP_IMPLICIT_IMPLICIT_SOLVER_HPP_
13 #include <athena/athena.hpp>
22 class EquationOfState;
32 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
58 template <
typename T1,
typename T2>
59 void ForwardSweep(std::vector<T1> &
a, std::vector<T1> &
b, std::vector<T1> &c,
60 std::vector<T2> &delta, std::vector<T2> &corr, Real dt,
61 int k,
int j,
int il,
int iu);
63 template <
typename T1,
typename T2>
65 int ku,
int jl,
int ju,
int il,
int iu);
68 template <
typename T1,
typename T2>
70 std::vector<T1> &c, std::vector<T2> &corr, Real dt,
71 int k,
int j,
int il,
int iu);
73 template <
typename T1,
typename T2>
75 std::vector<T2> &delta,
int kl,
int ku,
76 int jl,
int ju,
int il,
int iu);
88 void SendBuffer(T
const &
a,
int k,
int j, NeighborBlock nb);
90 template <
typename T1,
typename T2>
91 void SendBuffer(T1
const &
a, T2
const &
b,
int k,
int j, NeighborBlock nb);
93 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
95 void SendBuffer(T1
const &
a, T2
const &
b, T3
const &c, T4
const &d,
96 T5
const &
e, T6
const &f,
int k,
int j, NeighborBlock ntop);
98 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
99 typename T6,
typename T7>
100 void SendBuffer(T1
const &
a, T2
const &
b, T3
const &c, T4
const &d,
101 T5
const &
e, T6
const &f, T7
const &g,
int k,
int j,
104 template <
typename T>
107 template <
typename T1,
typename T2>
108 void RecvBuffer(T1 &
a, T2 &
b,
int k,
int j, NeighborBlock nb);
110 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
112 void RecvBuffer(T1 &
a, T2 &
b, T3 &c, T4 &d, T5 &
e, T6 &f,
int k,
int j,
115 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
116 typename T6,
typename T7>
117 void RecvBuffer(T1 &
a, T2 &
b, T3 &c, T4 &d, T5 &
e, T6 &f, T7 &g,
int k,
int j,
120 template <
typename T1,
typename T2>
124 template <
typename T1,
typename T2,
typename T3,
typename T4>
126 std::vector<T3> &c, std::vector<T4> &d,
int k,
int j,
129 template <
typename T1,
typename T2>
133 template <
typename T1,
typename T2,
typename T3,
typename T4>
135 std::vector<T3> &c, std::vector<T4> &d,
int k,
int j,
158 MPI_Request **req_send_data1_;
159 MPI_Request **req_send_data2_;
160 MPI_Request **req_send_data6_;
161 MPI_Request **req_send_data7_;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW bool has_top_neighbor
void FullCorrection(AthenaArray< Real > &du, AthenaArray< Real > const &w, Real dt)
int CreateMPITag(int lid, int bufid, std::string phy)
void ForwardSweep(std::vector< T1 > &a, std::vector< T1 > &b, std::vector< T1 > &c, std::vector< T2 > &delta, std::vector< T2 > &corr, Real dt, int k, int j, int il, int iu)
EIGEN_MAKE_ALIGNED_OPERATOR_NEW bool has_bot_neighbor
void RecvBuffer(T &a, int k, int j, NeighborBlock nb)
Eigen::Matrix< Real, 5, 5 > p3_
void PartialCorrection(AthenaArray< Real > &du, AthenaArray< Real > const &w, Real dt)
CoordinateDirection mydir_
AthenaArray< Real > coefficients_
void JacobianGravityCoriolis(T &jac, Real const prim[], int k, int j, int i)
void PeriodicBackwardSubstitution(std::vector< T1 > &a, std::vector< T1 > &c, std::vector< T2 > &delta, int kl, int ku, int jl, int ju, int il, int iu)
void BackwardSubstitution(std::vector< T1 > &a, std::vector< T2 > &delta, int kl, int ku, int jl, int ju, int il, int iu)
void SetDirection(CoordinateDirection dir)
void LoadCoefficients(std::vector< T1 > &a, std::vector< T2 > &b, int k, int j, int il, int iu)
void PeriodicForwardSweep(std::vector< T1 > &a, std::vector< T1 > &b, std::vector< T1 > &c, std::vector< T2 > &corr, Real dt, int k, int j, int il, int iu)
void SaveCoefficients(std::vector< T1 > &a, std::vector< T2 > &b, int k, int j, int il, int iu)
Eigen::Matrix< Real, 5, 5 > p2_
MeshBlock const * pmy_block_
ImplicitSolver(MeshBlock *pmb, ParameterInput *pin)
void SendBuffer(T const &a, int k, int j, NeighborBlock nb)
std::shared_ptr< ImplicitSolver > ImplicitSolverPtr