Grid 0.7.0
MultiShiftFunction.cc
Go to the documentation of this file.
1 /*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5 Source file: ./lib/algorithms/approx/MultiShiftFunction.cc
6
7 Copyright (C) 2015
8
9Author: Azusa Yamaguchi <ayamaguc@staffmail.ed.ac.uk>
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License along
22 with this program; if not, write to the Free Software Foundation, Inc.,
23 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24
25 See the full license in the file "LICENSE" in the top level distribution directory
26 *************************************************************************************/
27 /* END LEGAL */
28#include <Grid/GridCore.h>
29
31
33{
34 double a = norm;
35 for(int n=0;n<poles.size();n++){
36 a = a + residues[n]/(x+poles[n]);
37 }
38 return a;
39}
40void MultiShiftFunction::gnuplot(std::ostream &out)
41{
42 out<<"f(x) = "<<norm<<"";
43 for(int n=0;n<poles.size();n++){
44 out<<"+("<<residues[n]<<"/(x+"<<poles[n]<<"))";
45 }
46 out<<";"<<std::endl;
47}
48void MultiShiftFunction::csv(std::ostream &out)
49{
50 for (double x=lo; x<hi; x*=1.05) {
51 double f = approx(x);
52 double r = sqrt(x);
53 out<< x<<","<<r<<","<<f<<","<<r-f<<std::endl;
54 }
55 return;
56}
accelerator_inline Grid_simd< S, V > sqrt(const Grid_simd< S, V > &r)
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
void gnuplot(std::ostream &out)
std::vector< RealD > poles
void csv(std::ostream &out)
std::vector< RealD > residues