summaryrefslogtreecommitdiff
path: root/demo/cuba.F
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-02-11 14:59:17 +0400
committerIgor Pashev <pashev.igor@gmail.com>2013-02-11 14:59:17 +0400
commita232a950cc15b2c6e3427b59d4f90006a70e04f6 (patch)
tree903fe3c3d4258b04bd61ba8bda78dba5ad727efe /demo/cuba.F
downloadlibcuba-upstream.tar.gz
Imported Upstream version 3.0+20111124upstream/3.0+20111124upstream
Diffstat (limited to 'demo/cuba.F')
-rw-r--r--demo/cuba.F104
1 files changed, 104 insertions, 0 deletions
diff --git a/demo/cuba.F b/demo/cuba.F
new file mode 100644
index 0000000..a227d4f
--- /dev/null
+++ b/demo/cuba.F
@@ -0,0 +1,104 @@
+* cuba.F
+* Fortran chooser for the Cuba routines
+* last modified 3 Feb 05 th
+
+#define VEGAS 1
+#define SUAVE 2
+#define DIVONNE 3
+#define CUHRE 4
+
+
+ subroutine Cuba(method, ndim, ncomp, integrand,
+ & integral, error, prob)
+ implicit none
+ integer method, ndim, ncomp
+ external integrand
+ double precision integral(*), error(*), prob(*)
+
+ character*7 name(4)
+ data name /"Vegas", "Suave", "Divonne", "Cuhre"/
+
+ integer mineval, maxeval, verbose, last
+ double precision epsrel, epsabs
+ parameter (epsrel = 1D-3)
+ parameter (epsabs = 1D-12)
+ parameter (verbose = 2)
+ parameter (last = 4)
+ parameter (mineval = 0)
+ parameter (maxeval = 50000)
+
+ integer nstart, nincrease
+ parameter (nstart = 1000)
+ parameter (nincrease = 500)
+
+ integer nnew
+ double precision flatness
+ parameter (nnew = 1000)
+ parameter (flatness = 25D0)
+
+ integer key1, key2, key3, maxpass
+ double precision border, maxchisq, mindeviation
+ integer ngiven, ldxgiven, nextra
+ parameter (key1 = 47)
+ parameter (key2 = 1)
+ parameter (key3 = 1)
+ parameter (maxpass = 5)
+ parameter (border = 0D0)
+ parameter (maxchisq = 10D0)
+ parameter (mindeviation = .25D0)
+ parameter (ngiven = 0)
+ parameter (ldxgiven = ndim)
+ parameter (nextra = 0)
+
+ integer key
+ parameter (key = 0)
+
+ integer nregions, neval, fail
+
+
+ if( method .eq. VEGAS ) then
+
+ call vegas(ndim, ncomp, integrand,
+ & epsrel, epsabs, verbose, mineval, maxeval,
+ & nstart, nincrease,
+ & neval, fail, integral, error, prob)
+ nregions = 1
+
+ else if( method .eq. SUAVE ) then
+
+ call suave(ndim, ncomp, integrand,
+ & epsrel, epsabs, verbose + last, mineval, maxeval,
+ & nnew, flatness,
+ & nregions, neval, fail, integral, error, prob)
+
+ else if( method .eq. DIVONNE ) then
+
+ call divonne(ndim, ncomp, integrand,
+ & epsrel, epsabs, verbose, mineval, maxeval,
+ & key1, key2, key3, maxpass,
+ & border, maxchisq, mindeviation,
+ & ngiven, ldxgiven, 0, nextra, 0,
+ & nregions, neval, fail, integral, error, prob)
+
+ else if( method .eq. CUHRE ) then
+
+ call cuhre(ndim, ncomp, integrand,
+ & epsrel, epsabs, verbose + last, mineval, maxeval,
+ & key,
+ & nregions, neval, fail, integral, error, prob)
+
+ else
+
+ print *, "invalid method ", method
+ return
+
+ endif
+
+ print *, "method =", name(method)
+ print *, "nregions =", nregions
+ print *, "neval =", neval
+ print *, "fail =", fail
+ print '(G20.12," +- ",G20.12," p = ",F8.3)',
+ & (integral(c), error(c), prob(c), c = 1, ncomp)
+ end
+