
Speeding up double integration by nested Integrate1D

Sandbo
Function/c do2DintForWF(xmin,xmax,ymin,ymax,pWave) Variable xmin,xmax,ymin,ymax wave/d pWave Variable/G globalXmin=xmin Variable/G globalXmax=xmax Variable/G globalY variable/d/c integralT multithread integralT = Integrate1d(outerInt,ymin,ymax,1,0,pWave) // Romberg integration return integralT End Function/c innerInt(pWave1,inX) wave/d pWave1 Variable inX //I chose inX to be lambda_Real, globalY to be lambda_Imaginary NVAR globalY=globalY //obtaining parameters from pWave variable m,n n=pWave1[2] m=pWave1[3] variable x,p x = pWave1[0] p = pWave1[1] //Breaking down the equation into parts variable/d/c integral1 variable/c/d inB=cmplx(1,0), inC=cmplx(1,0), inH, inI, inJ, inK variable k,l if (m==0) inB = cmplx(1,0) else multithread inB = (-cmplx(inX,-globalY))^m endif if (n==0) inC = cmplx(1,0) else multithread inC = (cmplx(inX,globalY))^n endif inH = exp(-0.5*cmplx(inX,globalY)*cmplx(inX,-globalY)) //tested inI = exp(cmplx(X,P)*cmplx(inX,-globalY)) //tested inJ = exp(cmplx(X,-P)*cmplx(inX,globalY)) //tested integral1 = inB*inC*inH*inI/inJ return integral1 End Function/c outerInt(pWave2,inY) wave/d pWave2 Variable inY NVAR globalY=globalY globalY=inY NVAR globalXmin=globalXmin NVAR globalXmax=globalXmax variable/d/c integral2 multithread integral2 = Integrate1D(innerInt,globalXmin,globalXmax,1,0,pWave2) // Romberg integration return integral2 End
June 11, 2018 at 10:13 am - Permalink
June 11, 2018 at 11:17 am - Permalink
June 12, 2018 at 01:01 pm - Permalink
June 12, 2018 at 06:41 pm - Permalink