13 #ifndef eli_mutil_fd_d2o2_hpp
14 #define eli_mutil_fd_d2o2_hpp
18 #include "eli/code_eli.hpp"
26 template<
typename data__>
44 template<
typename __itc,
typename __itphi> data__
calculate_dot(__itc a, __itphi itphi)
const
46 data__ d(static_cast<data__>(0));
94 template<
typename __iti> std::ptrdiff_t
index(__iti iti)
const
147 template<
typename __itphi>
int evaluate(data__ &d, __itphi itphi,
const data__ &dx)
const
159 template<
typename __itphi,
typename __itx>
int evaluate(data__ &d, __itphi itphi, __itx itx)
const
171 template<
typename __itc>
int coefficients(__itc itc,
const data__ &dx)
const
177 (*itc)=
static_cast<data__
>(-1)/dx/dx;++itc;
178 (*itc)=
static_cast<data__
>( 4)/dx/dx;++itc;
179 (*itc)=
static_cast<data__
>(-5)/dx/dx;++itc;
180 (*itc)=
static_cast<data__
>( 2)/dx/dx;
186 (*itc)=
static_cast<data__
>( 0)/dx/dx;++itc;
187 (*itc)=
static_cast<data__
>( 1)/dx/dx;++itc;
188 (*itc)=
static_cast<data__
>(-2)/dx/dx;++itc;
189 (*itc)=
static_cast<data__
>( 1)/dx/dx;
195 (*itc)=
static_cast<data__
>( 1)/dx/dx;++itc;
196 (*itc)=
static_cast<data__
>(-2)/dx/dx;++itc;
197 (*itc)=
static_cast<data__
>( 1)/dx/dx;++itc;
198 (*itc)=
static_cast<data__
>( 0)/dx/dx;
204 (*itc)=
static_cast<data__
>( 2)/dx/dx;++itc;
205 (*itc)=
static_cast<data__
>(-5)/dx/dx;++itc;
206 (*itc)=
static_cast<data__
>( 4)/dx/dx;++itc;
207 (*itc)=
static_cast<data__
>(-1)/dx/dx;
221 template<
typename __itc,
typename __itx>
int coefficients(__itc itc, __itx itx)
const
233 data__ alphaim1, betaim2, gammaim3;
238 (*itc)=-2*(alphaim1+betaim2)/(gammaim3*(gammaim3-betaim2)*(gammaim3-alphaim1));++itc;
239 (*itc)=+2*(alphaim1+gammaim3)/(betaim2*(gammaim3-betaim2)*(betaim2-alphaim1));++itc;
240 (*itc)=-2*(gammaim3+betaim2)/(alphaim1*(betaim2-alphaim1)*(gammaim3-alphaim1));++itc;
241 (*itc)=+2*(alphaim1+betaim2+gammaim3)/(alphaim1*betaim2*gammaim3);
247 data__ alphai, alphaim1, betaim2;
252 (*itc)=+2*(alphai-alphaim1)/(betaim2*(alphai+betaim2)*(betaim2-alphaim1));++itc;
253 (*itc)=+2*(betaim2-alphai)/(alphaim1*(alphai+alphaim1)*(betaim2-alphaim1));++itc;
254 (*itc)=-2*(alphaim1-alphai+betaim2)/(alphaim1*alphai*betaim2);++itc;
255 (*itc)=+2*(alphaim1+betaim2)/(alphai*(alphai+alphaim1)*(alphai+betaim2));
261 data__ alphai, alphaim1, betai;
266 (*itc)=+2*(alphai+betai)/(alphaim1*(alphaim1+betai)*(alphai+alphaim1));++itc;
267 (*itc)=-2*(alphai-alphaim1+betai)/(alphai*alphaim1*betai);++itc;
268 (*itc)=+2*(betai-alphaim1)/(alphai*(alphai+alphaim1)*(betai-alphai));++itc;
269 (*itc)=-2*(alphai-alphaim1)/(betai*(alphaim1+betai)*(betai-alphai));
276 data__ alphai, betai, gammai;
281 (*itc)=+2*(alphai+betai+gammai)/(alphai*betai*gammai);++itc;
282 (*itc)=-2*(betai+gammai)/(alphai*(gammai-alphai)*(betai-alphai));++itc;
283 (*itc)=+2*(alphai+gammai)/(betai*(gammai-betai)*(betai-alphai));++itc;
284 (*itc)=-2*(alphai+betai)/(gammai*(gammai-alphai)*(gammai-betai));
332 template<
typename __itx>
int truncation_error(data__ &te,
const data__ &phi4, __itx itx)
const
344 data__ alphaim1, betaim2, gammaim3;
349 te=phi4*(alphaim1*gammaim3+betaim2*(alphaim1+gammaim3))/
static_cast<data__
>(12);
355 data__ alphai, alphaim1, betaim2;
360 te=-phi4*(alphai*(alphaim1+betaim2)-alphaim1*betaim2)/
static_cast<data__
>(12);
365 data__ alphai, alphaim1, betai;
370 te=-phi4*(alphaim1*(alphai+betai)-alphai*betai)/
static_cast<data__
>(12);
375 data__ alphai, betai, gammai;
380 te=phi4*(alphai*gammai+betai*(alphai+gammai))/
static_cast<data__
>(12);
stencil
Definition: d2o2.hpp:30
std::ptrdiff_t index(__iti iti) const
Definition: d2o2.hpp:94
const int n_order
Definition: d2o2.hpp:40
data__ calculate_dot(__itc a, __itphi itphi) const
Definition: d2o2.hpp:44
void set_stencil(const stencil &s)
Definition: d2o2.hpp:74
int order(bool) const
Definition: d2o2.hpp:84
int evaluate(data__ &d, __itphi itphi, const data__ &dx) const
Definition: d2o2.hpp:147
~d2o2()
Definition: d2o2.hpp:70
const size_t nnodes
Definition: d2o2.hpp:39
int coefficients(__itc itc, const data__ &dx) const
Definition: d2o2.hpp:171
size_t number_nodes() const
Definition: d2o2.hpp:89
int truncation_error(data__ &te, const data__ &phi4, __itx itx) const
Definition: d2o2.hpp:332
int truncation_error(data__ &te, const data__ &phi4, const data__ &dx) const
Definition: d2o2.hpp:298
d2o2()
Definition: d2o2.hpp:58
stencil st
Definition: d2o2.hpp:41
d2o2(const stencil &s)
Definition: d2o2.hpp:62
d2o2(const d2o2< data__ > &d)
Definition: d2o2.hpp:66
int evaluate(data__ &d, __itphi itphi, __itx itx) const
Definition: d2o2.hpp:159
const stencil & get_stencil() const
Definition: d2o2.hpp:79
int coefficients(__itc itc, __itx itx) const
Definition: d2o2.hpp:221