From c907db6273337ee088f005dca42e20f0bf51d18a Mon Sep 17 00:00:00 2001 From: "Bastian M. Wojek" Date: Sat, 19 Sep 2009 17:59:16 +0000 Subject: [PATCH] Some hobby work with the multidimensional integrals... --- src/external/libGapIntegrals/GapIntegrals.pdf | Bin 0 -> 77600 bytes src/external/libGapIntegrals/INSTALL | 15 +- .../libGapIntegrals/Makefile.libGapIntegrals | 124 +++++++++-- .../libGapIntegrals/PMusrCanvas.cpp.BMWpatch | 101 +++++++++ .../libGapIntegrals/TGapIntegrals.cpp | 208 +++++++++++++++++- src/external/libGapIntegrals/TGapIntegrals.h | 57 ++++- .../libGapIntegrals/TGapIntegralsLinkDef.h | 5 +- src/external/libGapIntegrals/TIntegrator.cpp | 71 +++++- src/external/libGapIntegrals/TIntegrator.h | 37 +++- 9 files changed, 587 insertions(+), 31 deletions(-) create mode 100644 src/external/libGapIntegrals/GapIntegrals.pdf create mode 100644 src/external/libGapIntegrals/PMusrCanvas.cpp.BMWpatch diff --git a/src/external/libGapIntegrals/GapIntegrals.pdf b/src/external/libGapIntegrals/GapIntegrals.pdf new file mode 100644 index 0000000000000000000000000000000000000000..861126122de11ce5592ab6b035a0c703018da5fb GIT binary patch literal 77600 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

Kl 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 literal 0 HcmV?d00001 diff --git a/src/external/libGapIntegrals/INSTALL b/src/external/libGapIntegrals/INSTALL index ad927704..e8163714 100644 --- a/src/external/libGapIntegrals/INSTALL +++ b/src/external/libGapIntegrals/INSTALL @@ -1,6 +1,7 @@ #--------------------------------------------------------------------- # INSTALL -# Bastian M. Wojek, 2009/09/07 +# Bastian M. Wojek +# $Id$ #--------------------------------------------------------------------- Installation of the musrfit-plugin "libGapIntegrals.so" @@ -22,9 +23,15 @@ Installation of the musrfit-plugin "libGapIntegrals.so" * The plugin classes can now be accessed inside THEORY blocks of musrfit msr-files via: - userFcn libGapIntegrals.so TGapSWave 4 5 - userFcn libGapIntegrals.so TGapDWave 4 5 - userFcn libGapIntegrals.so TGapAnSWave 4 5 6 + userFcn libGapIntegrals.so TGapSWave 1 2 (Tc Delta0) + userFcn libGapIntegrals.so TGapDWave 1 2 (Tc Delta0) + userFcn libGapIntegrals.so TGapAnSWave 1 2 3 (Tc Delta0 a) + userFcn libGapIntegrals.so TGapNonMonDWave1 1 2 3 (Tc Delta0 a) + userFcn libGapIntegrals.so TGapNonMonDWave2 1 2 3 (Tc Delta0 a) + userFcn libGapIntegrals.so TGapPowerLaw 1 2 (Tc n) + +* For an introductory discussion on which functions are actually calculated, please refer to + GapIntegrals.pdf #--------------------------------------------------------------------- # this is the end ... diff --git a/src/external/libGapIntegrals/Makefile.libGapIntegrals b/src/external/libGapIntegrals/Makefile.libGapIntegrals index cebbf628..ff85507b 100644 --- a/src/external/libGapIntegrals/Makefile.libGapIntegrals +++ b/src/external/libGapIntegrals/Makefile.libGapIntegrals @@ -1,41 +1,126 @@ #--------------------------------------------------- -# get compilation flags from root-config +# Makefile.libGapIntegrals +# +# Author: Bastian M. Wojek +# e-mail: bastian.wojek@psi.ch +# +# $Id$ +# +#--------------------------------------------------- + +#--------------------------------------------------- +# get compilation and library flags from root-config ROOTCFLAGS = $(shell $(ROOTSYS)/bin/root-config --cflags) -# ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --libs) +ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --libs) +ROOTGLIBS = $(shell $(ROOTSYS)/bin/root-config --glibs) #--------------------------------------------------- +# depending on the architecture, choose the compiler, +# linker, and the flags to use +# -OS = LINUX +ARCH = $(shell $(ROOTSYS)/bin/root-config --arch) + +ifeq ($(ARCH),linux) +OS = LINUX +endif +ifeq ($(ARCH),linuxx8664gcc) +OS = LINUX +endif +ifeq ($(ARCH),win32gcc) +OS = WIN32GCC +endif +ifeq ($(ARCH),macosx) +OS = DARWIN +endif + +# -- Linux +ifeq ($(OS),LINUX) CXX = g++ CXXFLAGS = -O3 -Wall -Wno-trigraphs -fPIC -MUSRFITINCLUDE = ../../include -LOCALINCLUDE = . -ROOTINCLUDE = $(ROOTSYS)/include -INCLUDES = -I$(LOCALINCLUDE) -I$(MUSRFITINCLUDE) -I$(ROOTINCLUDE) +PMUSRPATH = ../../include +MNPATH = $(ROOTSYS)/include +GSLPATH = /usr/include/gsl +CUBAPATH = /usr/local/include +INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(CUBAPATH) LD = g++ LDFLAGS = -O -SOFLAGS = -shared +SOFLAGS = -shared +SHLIB = libGapIntegrals.so +endif + +# -- Windows/Cygwin +ifeq ($(OS),WIN32GCC) +CXX = g++ +CXXFLAGS = -O3 -Wall -Wno-trigraphs -D_DLL +PMUSRPATH = ../../include +MNPATH = $(ROOTSYS)/include +GSLPATH = /usr/include/gsl +CUBAPATH = /usr/local/include +INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(CUBAPATH) +LD = g++ +LDFLAGS = -O -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc +SOFLAGS = -shared -Wl,--export-all-symbols +SHLIB = libGapIntegrals.dll +endif + +# -- MacOSX/Darwin +ifeq ($(OS),DARWIN) +CXX = g++ +CXXFLAGS = -O3 -Wall -Wno-trigraphs -fPIC +PMUSRPATH = ../../include +MNPATH = $(ROOTSYS)/include +FINKPATH = /sw/include +GSLPATH = $(FINKPATH)/gsl +CUBAPATH = $(FINKPATH) +INCLUDES = -I$(PMUSRPATH) -I$(MNPATH) -I$(GSLPATH) -I$(CUBAPATH) +LD = g++ +LDFLAGS = -O -Xlinker -bind_at_load +SOFLAGS = -dynamiclib -flat_namespace -undefined suppress -Wl,-x +SHLIB = libGapIntegrals.dylib +endif # the output from the root-config script: CXXFLAGS += $(ROOTCFLAGS) -LDFLAGS += -L/usr/local/lib -lcuba -lm +LDFLAGS += + +# the ROOT libraries (G = graphic) +LIBS = $(ROOTLIBS) +GLIBS = $(ROOTGLIBS) + +# GSL lib +GSLLIB = -lgslcblas -lgsl +# Cuba lib +CUBALIB = -L/usr/local/lib -lcuba -lm + +ifeq ($(OS),WIN32GCC) +# GSL lib +GSLLIB = -L/usr/lib -lgslcblas -lgsl +# Cuba lib +CUBALIB = -L/usr/local/lib -lcuba -lm +endif + +ifeq ($(OS),DARWIN) +# GSL lib +GSLLIB = -L/sw/lib -lgslcblas -lgsl +# Cuba lib +CUBALIB = -L/sw/lib -lcuba -lm +endif # some definitions: headers (used to generate *Dict* stuff), sources, objects,... OBJS = OBJS += TIntegrator.o OBJS += TGapIntegrals.o TGapIntegralsDict.o -SHLIB = libGapIntegrals.so +# make the shared libs: -# make the shared lib: -# all: $(SHLIB) $(SHLIB): $(OBJS) @echo "---> Building shared library $(SHLIB) ..." /bin/rm -f $(SHLIB) - $(LD) $(SOFLAGS) -o $(SHLIB) $(OBJS) $(LDFLAGS) + $(LD) $(SOFLAGS) -o $(SHLIB) $(OBJS) $(LDFLAGS) $(LIBS) $(GSLLIB) $(CUBALIB) @echo "done" # clean up: remove all object file (and core files) @@ -53,7 +138,7 @@ $(OBJS): %.o: %.cpp TGapIntegralsDict.cpp: ./TIntegrator.h ./TGapIntegrals.h ./TGapIntegralsLinkDef.h @echo "Generating dictionary $@..." - rootcint -f $@ -c -p -I$(MUSRFITINCLUDE) $^ + rootcint -f $@ -c -p -I$(PMUSRPATH) $^ install: all @echo "Installing shared lib: $(SHLIB)" @@ -61,3 +146,14 @@ ifeq ($(OS),LINUX) cp -pv $(SHLIB) $(ROOTSYS)/lib cp -pv TIntegrator.h TGapIntegrals.h $(ROOTSYS)/include endif +ifeq ($(OS),WIN32GCC) + cp -pv $(SHLIB) $(ROOTSYS)/bin + ln -sf $(ROOTSYS)/bin/$(SHLIB) $(ROOTSYS)/lib/$(SHLIB) + cp -pv TIntegrator.h TGapIntegrals.h $(ROOTSYS)/include +endif +ifeq ($(OS),DARWIN) + cp -pv $(SHLIB) $(ROOTSYS)/lib + cp -pv TIntegrator.h TGapIntegrals.h $(ROOTSYS)/include +endif + +cleaninstall: clean install diff --git a/src/external/libGapIntegrals/PMusrCanvas.cpp.BMWpatch b/src/external/libGapIntegrals/PMusrCanvas.cpp.BMWpatch new file mode 100644 index 00000000..4ffdbad3 --- /dev/null +++ b/src/external/libGapIntegrals/PMusrCanvas.cpp.BMWpatch @@ -0,0 +1,101 @@ +--- PMusrCanvas.cpp.orig 2009-09-18 18:58:50.000000000 +0200 ++++ PMusrCanvas.cpp 2009-09-16 21:51:45.000000000 +0200 +@@ -5,7 +5,7 @@ + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +- $Id$ ++ $Id: PMusrCanvas.cpp 4106 2009-08-31 11:19:03Z nemu $ + + ***************************************************************************/ + +@@ -3291,6 +3291,36 @@ + return; + } + ++// BMW: Writing an extra file with the complete theory curve only until the issue of writing only single theory points has been resolved ++ ++ // generate output filename ++ ++ // in order to handle names with "." correctly this slightly odd data-filename generation ++ tokens = fMsrHandler->GetFileName().Tokenize("."); ++ str = ""; ++ for (int i=0; iGetEntries()-1; i++) { ++ ostr = dynamic_cast(tokens->At(i)); ++ str += ostr->GetString() + TString("."); ++ } ++ str += "dataTheory"; ++ ++ if (tokens) { ++ delete tokens; ++ tokens = 0; ++ } ++ ++ // open file ++ ofstream foutTheory; ++ ++ // open data-file ++ foutTheory.open(str.Data(), iostream::out); ++ if (!fout.is_open()) { ++ cout << endl << ">> PMusrCanvas::SaveDataAscii: **ERROR** couldn't open file " << str.Data() << " for writing." << endl; ++ return; ++ } ++ ++// endofBMW ++ + // extract data + Double_t time, xval, yval; + Int_t xminBin; +@@ -3688,11 +3718,39 @@ + fout << "Data" << fNonMusrData.size()-1 << ", eData" << fNonMusrData.size()-1 << ", Theo" << fNonMusrData.size()-1; + fout << endl; + // write data ++ ++// BMW: Writing an extra file with the complete theory curve only until the issue of writing only single theory points has been resolved ++ ++ // get current x-range ++ xminBin = fNonMusrData[0].theory->GetXaxis()->GetFirst(); // first bin of the zoomed range ++ xmaxBin = fNonMusrData[0].theory->GetXaxis()->GetLast(); // last bin of the zoomed range ++ xmin = fNonMusrData[0].theory->GetXaxis()->GetBinCenter(xminBin); ++ xmax = fNonMusrData[0].theory->GetXaxis()->GetBinCenter(xmaxBin); ++ ++ // get data ++ for (int i=0; iGetN(); i++) { ++ fNonMusrData[0].theory->GetPoint(i,xval,yval); // get values ++ if ((xval < xmin) || (xval > xmax)) ++ continue; ++ foutTheory << xval << " "; ++ for (unsigned int j=0; jGetPoint(i,xval,yval); // get values ++ foutTheory << yval << " "; ++ } ++ // write last data set ++ fNonMusrData[fNonMusrData.size()-1].theory->GetPoint(i,xval,yval); // get values ++ foutTheory << yval << " "; ++ foutTheory << endl; ++ } ++ ++// endofBMW ++ + // get current x-range + xminBin = fNonMusrData[0].data->GetXaxis()->GetFirst(); // first bin of the zoomed range + xmaxBin = fNonMusrData[0].data->GetXaxis()->GetLast(); // last bin of the zoomed range + xmin = fNonMusrData[0].data->GetXaxis()->GetBinCenter(xminBin); + xmax = fNonMusrData[0].data->GetXaxis()->GetBinCenter(xmaxBin); ++ + // get data + for (int i=0; iGetN(); i++) { + fNonMusrData[0].data->GetPoint(i,xval,yval); // get values +@@ -3739,6 +3797,12 @@ + // close file + fout.close(); + ++// BMW: Writing an extra file with the complete theory curve only until the issue of writing only single theory points has been resolved ++ ++ foutTheory.close(); ++ ++// endofBMW ++ + cout << endl << ">> Data windows saved in ascii format ..." << endl; + } + diff --git a/src/external/libGapIntegrals/TGapIntegrals.cpp b/src/external/libGapIntegrals/TGapIntegrals.cpp index 3555cec2..3016607a 100644 --- a/src/external/libGapIntegrals/TGapIntegrals.cpp +++ b/src/external/libGapIntegrals/TGapIntegrals.cpp @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2009/09/06 + $Id$ ***************************************************************************/ @@ -44,6 +44,9 @@ using namespace std; ClassImp(TGapSWave) ClassImp(TGapDWave) ClassImp(TGapAnSWave) +ClassImp(TGapNonMonDWave1) +ClassImp(TGapNonMonDWave2) +ClassImp(TGapPowerLaw) // s wave gap integral @@ -86,6 +89,32 @@ TGapAnSWave::TGapAnSWave() { fPar.clear(); } +TGapNonMonDWave1::TGapNonMonDWave1() { + TNonMonDWave1GapIntegralCuhre *gapint = new TNonMonDWave1GapIntegralCuhre(); + fGapIntegral = gapint; + gapint = 0; + delete gapint; + + fTemp.clear(); + fTempIter = fTemp.end(); + fIntegralValues.clear(); + fCalcNeeded.clear(); + fPar.clear(); +} + +TGapNonMonDWave2::TGapNonMonDWave2() { + TNonMonDWave2GapIntegralCuhre *gapint = new TNonMonDWave2GapIntegralCuhre(); + fGapIntegral = gapint; + gapint = 0; + delete gapint; + + fTemp.clear(); + fTempIter = fTemp.end(); + fIntegralValues.clear(); + fCalcNeeded.clear(); + fPar.clear(); +} + TGapSWave::~TGapSWave() { delete fGapIntegral; fGapIntegral = 0; @@ -119,6 +148,28 @@ TGapAnSWave::~TGapAnSWave() { fPar.clear(); } +TGapNonMonDWave1::~TGapNonMonDWave1() { + delete fGapIntegral; + fGapIntegral = 0; + + fTemp.clear(); + fTempIter = fTemp.end(); + fIntegralValues.clear(); + fCalcNeeded.clear(); + fPar.clear(); +} + +TGapNonMonDWave2::~TGapNonMonDWave2() { + delete fGapIntegral; + fGapIntegral = 0; + + fTemp.clear(); + fTempIter = fTemp.end(); + fIntegralValues.clear(); + fCalcNeeded.clear(); + fPar.clear(); +} + double TGapSWave::operator()(double t, const vector &par) const { assert(par.size() == 2); // two parameters: Tc, Delta(0) @@ -165,11 +216,11 @@ double TGapSWave::operator()(double t, const vector &par) const { double ds; vector intPar; // parameters for the integral, T & Delta(T) - intPar.push_back(t); + intPar.push_back(2.0*0.08617384436*t); // 2 kB T, kB in meV/K intPar.push_back(par[1]*tanh(1.82*pow(1.018*(par[0]/t-1.0),0.51))); fGapIntegral->SetParameters(intPar); - ds = 1.0+2.0*fGapIntegral->IntegrateFunc(0.0, 2.0*(t+intPar[1])); + ds = 1.0-1.0/intPar[0]*fGapIntegral->IntegrateFunc(0.0, 2.0*(t+intPar[1])); intPar.clear(); @@ -327,3 +378,154 @@ double TGapAnSWave::operator()(double t, const vector &par) const { return fIntegralValues[vectorIndex]; } + +double TGapNonMonDWave1::operator()(double t, const vector &par) const { + + assert(par.size() == 3); // two parameters: Tc, Delta(0), a + + if (t<=0.0) + return 1.0; + else if (t >= par[0]) + return 0.0; + + bool integralParChanged(false); + + if (fPar.empty()) { // first time calling this routine + fPar = par; + integralParChanged = true; + } else { // check if Tc or Delta0 have changed + for (unsigned int i(0); i intPar; // parameters for the integral: 2 k_B T, Delta(T), a, E_c, phi_c + intPar.push_back(2.0*0.08617384436*t); // 2 kB T, kB in meV/K + intPar.push_back(par[1]*tanh(1.82*pow(1.018*(par[0]/t-1.0),0.51))); + intPar.push_back(par[2]); + intPar.push_back(4.0*(t+intPar[1])); // upper limit of energy-integration: cutoff energy + intPar.push_back(TMath::PiOver2()); // upper limit of phi-integration + + fGapIntegral->SetParameters(intPar); + + ds = 1.0-intPar[3]/intPar[0]*fGapIntegral->IntegrateFunc(); + + intPar.clear(); + + if (newTemp) + fIntegralValues.push_back(ds); + else + fIntegralValues[vectorIndex] = ds; + + fCalcNeeded[vectorIndex] = false; + } + + return fIntegralValues[vectorIndex]; + +} + +double TGapNonMonDWave2::operator()(double t, const vector &par) const { + + assert(par.size() == 3); // two parameters: Tc, Delta(0), a + + if (t<=0.0) + return 1.0; + else if (t >= par[0]) + return 0.0; + + bool integralParChanged(false); + + if (fPar.empty()) { // first time calling this routine + fPar = par; + integralParChanged = true; + } else { // check if Tc or Delta0 have changed + for (unsigned int i(0); i intPar; // parameters for the integral: 2 k_B T, Delta(T), a, E_c, phi_c + intPar.push_back(2.0*0.08617384436*t); // 2 kB T, kB in meV/K + intPar.push_back(par[1]*tanh(1.82*pow(1.018*(par[0]/t-1.0),0.51))); + intPar.push_back(par[2]); + intPar.push_back(4.0*(t+intPar[1])); // upper limit of energy-integration: cutoff energy + intPar.push_back(TMath::PiOver2()); // upper limit of phi-integration + + fGapIntegral->SetParameters(intPar); + + ds = 1.0-intPar[3]/intPar[0]*fGapIntegral->IntegrateFunc(); + + intPar.clear(); + + if (newTemp) + fIntegralValues.push_back(ds); + else + fIntegralValues[vectorIndex] = ds; + + fCalcNeeded[vectorIndex] = false; + } + + return fIntegralValues[vectorIndex]; + +} + +double TGapPowerLaw::operator()(double t, const vector &par) const { + + assert(par.size() == 2); // two parameters: Tc, N + + if(t<=0.0) + return 1.0; + else if (t >= par[0]) + return 0.0; + + return 1.0 - pow(t/par[0], par[1]); + +} diff --git a/src/external/libGapIntegrals/TGapIntegrals.h b/src/external/libGapIntegrals/TGapIntegrals.h index 4efa847f..3d2ec2a5 100644 --- a/src/external/libGapIntegrals/TGapIntegrals.h +++ b/src/external/libGapIntegrals/TGapIntegrals.h @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2009/09/06 + $Id$ ***************************************************************************/ @@ -100,4 +100,59 @@ private: ClassDef(TGapAnSWave,1) }; +class TGapNonMonDWave1 : public PUserFcnBase { + +public: + TGapNonMonDWave1(); + ~TGapNonMonDWave1(); + + double operator()(double, const vector&) const; + +private: + TNonMonDWave1GapIntegralCuhre *fGapIntegral; + mutable vector fTemp; + mutable vector::const_iterator fTempIter; + mutable vector fIntegralValues; + mutable vector fCalcNeeded; + + mutable vector fPar; + + ClassDef(TGapNonMonDWave1,1) +}; + +class TGapNonMonDWave2 : public PUserFcnBase { + +public: + TGapNonMonDWave2(); + ~TGapNonMonDWave2(); + + double operator()(double, const vector&) const; + +private: + TNonMonDWave2GapIntegralCuhre *fGapIntegral; + mutable vector fTemp; + mutable vector::const_iterator fTempIter; + mutable vector fIntegralValues; + mutable vector fCalcNeeded; + + mutable vector fPar; + + ClassDef(TGapNonMonDWave2,1) +}; + + +class TGapPowerLaw : public PUserFcnBase { + +public: + TGapPowerLaw() {} + ~TGapPowerLaw() {} + + double operator()(double, const vector&) const; + +private: + + ClassDef(TGapPowerLaw,1) +}; + + #endif //_TGapIntegrals_H_ diff --git a/src/external/libGapIntegrals/TGapIntegralsLinkDef.h b/src/external/libGapIntegrals/TGapIntegralsLinkDef.h index c112003b..ddb102a4 100644 --- a/src/external/libGapIntegrals/TGapIntegralsLinkDef.h +++ b/src/external/libGapIntegrals/TGapIntegralsLinkDef.h @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2009/09/06 + $Id$ ***************************************************************************/ @@ -40,6 +40,9 @@ #pragma link C++ class TGapSWave+; #pragma link C++ class TGapDWave+; #pragma link C++ class TGapAnSWave+; +#pragma link C++ class TGapNonMonDWave1+; +#pragma link C++ class TGapNonMonDWave2+; +#pragma link C++ class TGapPowerLaw+; #endif //__CINT__ // root dictionary stuff -------------------------------------------------- diff --git a/src/external/libGapIntegrals/TIntegrator.cpp b/src/external/libGapIntegrals/TIntegrator.cpp index c17700ec..129bcaa2 100644 --- a/src/external/libGapIntegrals/TIntegrator.cpp +++ b/src/external/libGapIntegrals/TIntegrator.cpp @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2009/09/07 + $Id$ ***************************************************************************/ @@ -75,7 +75,7 @@ double TAnSWaveGapIntegralCuhre::IntegrateFunc() const double EPSABS (1e-6); const unsigned int VERBOSE (0); const unsigned int LAST (4); - const unsigned int MINEVAL (1000); + const unsigned int MINEVAL (100); const unsigned int MAXEVAL (1000000); const unsigned int KEY (13); @@ -173,3 +173,70 @@ void TAnSWaveGapIntegralSuave::Integrand(const int *ndim, const double x[], f[0] = 1.0/TMath::Power(TMath::CosH(TMath::Sqrt(x[0]*x[0]*fPar[3]*fPar[3]+deltasq)/fPar[0]),2.0); return; } + +std::vector TNonMonDWave1GapIntegralCuhre::fPar; + +double TNonMonDWave1GapIntegralCuhre::IntegrateFunc() +{ + const unsigned int NCOMP(1); + const double EPSREL (1e-4); + const double EPSABS (1e-6); + const unsigned int VERBOSE (0); + const unsigned int LAST (4); + const unsigned int MINEVAL (100); + const unsigned int MAXEVAL (1000000); + + const unsigned int KEY (13); + + int nregions, neval, fail; + double integral[NCOMP], error[NCOMP], prob[NCOMP]; + + Cuhre(fNDim, NCOMP, Integrand, + EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, + KEY, + &nregions, &neval, &fail, integral, error, prob); + + return integral[0]; +} + +void TNonMonDWave1GapIntegralCuhre::Integrand(const int *ndim, const double x[], + const int *ncomp, double f[]) // x = {E, phi}, fPar = {twokBT, Delta(T),a, Ec, phic} +{ + double deltasq(TMath::Power(fPar[1]*(fPar[2]*TMath::Cos(2.0*x[1]*fPar[4])+(1.0-fPar[2])*TMath::Cos(6.0*x[1]*fPar[4])),2.0)); + f[0] = 1.0/TMath::Power(TMath::CosH(TMath::Sqrt(x[0]*x[0]*fPar[3]*fPar[3]+deltasq)/fPar[0]),2.0); + return; +} + +std::vector TNonMonDWave2GapIntegralCuhre::fPar; + +double TNonMonDWave2GapIntegralCuhre::IntegrateFunc() +{ + const unsigned int NCOMP(1); + const double EPSREL (1e-4); + const double EPSABS (1e-6); + const unsigned int VERBOSE (0); + const unsigned int LAST (4); + const unsigned int MINEVAL (100); + const unsigned int MAXEVAL (1000000); + + const unsigned int KEY (13); + + int nregions, neval, fail; + double integral[NCOMP], error[NCOMP], prob[NCOMP]; + + Cuhre(fNDim, NCOMP, Integrand, + EPSREL, EPSABS, VERBOSE | LAST, MINEVAL, MAXEVAL, + KEY, + &nregions, &neval, &fail, integral, error, prob); + + return integral[0]; +} + +void TNonMonDWave2GapIntegralCuhre::Integrand(const int *ndim, const double x[], + const int *ncomp, double f[]) // x = {E, phi}, fPar = {twokBT, Delta(T),a, Ec, phic} +{ + double deltasq(4.0*fPar[2]/27.0*TMath::Power(fPar[1]*TMath::Cos(2.0*x[1]*fPar[4]), 2.0) \ + / TMath::Power(1.0 + fPar[2]*TMath::Cos(2.0*x[1]*fPar[4])*TMath::Cos(2.0*x[1]*fPar[4]), 3.0)); + f[0] = 1.0/TMath::Power(TMath::CosH(TMath::Sqrt(x[0]*x[0]*fPar[3]*fPar[3]+deltasq)/fPar[0]),2.0); + return; +} diff --git a/src/external/libGapIntegrals/TIntegrator.h b/src/external/libGapIntegrals/TIntegrator.h index 1fadf779..0a80899b 100644 --- a/src/external/libGapIntegrals/TIntegrator.h +++ b/src/external/libGapIntegrals/TIntegrator.h @@ -5,7 +5,7 @@ Author: Bastian M. Wojek e-mail: bastian.wojek@psi.ch - 2009/09/07 + $Id$ ***************************************************************************/ @@ -184,6 +184,34 @@ class TAnSWaveGapIntegralSuave { }; +class TNonMonDWave1GapIntegralCuhre { + public: + TNonMonDWave1GapIntegralCuhre() : fNDim(2) {} + ~TNonMonDWave1GapIntegralCuhre() { fPar.clear(); } + void SetParameters(const std::vector &par) { fPar=par; } + static void Integrand(const int*, const double[], const int*, double[]); + double IntegrateFunc(); + + protected: + static vector fPar; + unsigned int fNDim; + +}; + +class TNonMonDWave2GapIntegralCuhre { + public: + TNonMonDWave2GapIntegralCuhre() : fNDim(2) {} + ~TNonMonDWave2GapIntegralCuhre() { fPar.clear(); } + void SetParameters(const std::vector &par) { fPar=par; } + static void Integrand(const int*, const double[], const int*, double[]); + double IntegrateFunc(); + + protected: + static vector fPar; + unsigned int fNDim; + +}; + // To be integrated: x*y dx dy class T2DTest : public TMCIntegrator { @@ -230,7 +258,6 @@ inline double TAnSWaveGapIntegral::FuncAtX(double *x) const // x = {E, phi}, fPa return -1.0/(2.0*twokt*TMath::CosH(TMath::Sqrt(x[0]*x[0]+deltasq)/twokt)*TMath::CosH(TMath::Sqrt(x[0]*x[0]+deltasq)/twokt)); } - // To be integrated: Bessel function times Exponential class TIntBesselJ0Exp : public TIntegrator { @@ -259,7 +286,7 @@ inline double TIntSinGss::FuncAtX(double x) const return TMath::Sin(TMath::TwoPi()*fPar[0]*x) * TMath::Exp(-0.5*fPar[1]*fPar[1]*x*x); } -// To be integrated: df/dE * E / sqrt(E^2+ Delta^2) +// To be integrated: df/dE * E / sqrt(E^2 - Delta^2) class TGapIntegral : public TIntegrator { public: @@ -271,9 +298,7 @@ class TGapIntegral : public TIntegrator { inline double TGapIntegral::FuncAtX(double e) const { - double twokt(2.0*0.08617384436*fPar[0]); // kB in meV/K -// return -e/(2.0*twokt*TMath::CosH(e/twokt)*TMath::CosH(e/twokt)*TMath::Sqrt(e*e-fPar[1]*fPar[1])); - return -1.0/(2.0*twokt*TMath::CosH(TMath::Sqrt(e*e+fPar[1]*fPar[1])/twokt)*TMath::CosH(TMath::Sqrt(e*e+fPar[1]*fPar[1])/twokt)); + return 1.0/(TMath::Power(TMath::CosH(TMath::Sqrt(e*e+fPar[1]*fPar[1])/fPar[0]),2.0)); } #endif //_TIntegrator_H_