NESSi  v1.0.2
The NonEquilibrium Systems Simulation Library

◆ interpolate_CF4()

template<typename T >
void cntr::interpolate_CF4 ( int  tstp,
cntr::function< T > &  H,
cdmatrix &  Hinte1,
cdmatrix &  Hinte2,
int  kt,
bool  fixHam = false 
)

Interpolation for the forth order propagator

Purpose

Interpolates \(H(t - dt + dt*c1)\) and \(H(t - dt + dt*c2)\), where

\(c1 = 1/2 - \sqrt(3)/6\) \(c2 = 1/2 + \sqrt(3)/6\) from \(H(t+dt)\), \(H(t)\), \(H(t-dt)\) where \(H(t+dt)\) is obtained from the extrapolation if not yet known. If fixham=true we assume that the hamiltonian is known for all times and there is no extrapolation

Parameters
tstp

timestep at which propagator is calculated

H

Time dependent Hamiltonian

Hinte1

Interpolated Hamiltonian at c1

Hinte2

Interpolated Hamiltonian at c2

kt

Order of integrator used for extrapolation and interpolation

fixHam

Hamiltonian is known for all times and no extrapolation is needed for the predictor/corrector

Definition at line 698 of file cntr_equilibrium_impl.hpp.

References integration::I< double >(), and cntr::function< T >::size1_.

Referenced by propagator_exp().

698  {
699  int size=H.size1_;
700  cdmatrix tmp(size,size);
701  int ktextrap=(tstp<=kt ? tstp : kt);
702  int n1=(tstp<=kt ? kt : tstp);
703  // Extrapolate to get H(t)
704  if(!fixHam && tstp>kt){
705  extrapolate_timestep(tstp-1,H,integration::I<double>(ktextrap));
706  }
707  Hinte1=interpolation(n1,(tstp-0.5-sqrt(3)/6.0),H,integration::I<double>(kt)); //ktextrap+1 since we added one more point
708  Hinte2=interpolation(n1,(tstp-0.5+sqrt(3)/6.0),H,integration::I<double>(kt)); //ktextrap+1 since we added one more point
709 
710 }
int size1_
Number of the colums in the Matrix form.
template Integrator< double > & I< double >(int k)
+ Here is the call graph for this function:
+ Here is the caller graph for this function: