QUAD_OPEN_MP
Quadrature using OpenMP


QUAD_OPEN_MP is a C program which approximates a multidimensional integral using a quadrature rule. The quadrature computation is done with OpenMP.

The quadrature rule is defined by three text files:

  1. the "X" file lists the abscissas (N rows, M columns);
  2. the "W" file lists the weights (N rows);
  3. the "R" file lists the integration region corners (2 rows, M columns);

The program assumes that the names of the three files can be deduced from the file_root. For instance, if the file_root was "cc_d2_level5", this implies that

  1. the "X" file is cc_d2_level5_x.txt;
  2. the "W" file is cc_d2_level5_w.txt;
  3. the "R" file is cc_d2_level5_r.txt;

On an Apple PowerPC G5 with two processors, the following results were observed:
ThreadsQuadrature ruleTime
1cc_d10_level40.0033 seconds
2cc_d10_level40.0016 seconds
4cc_d10_level40.0017 seconds
1cc_d10_level50.0144 seconds
2cc_d10_level50.0072 seconds
4cc_d10_level50.0074 seconds

Usage:

        export OMP_NUM_THREADS=2
        ./quad_open_mp file_root
      
where file_root is the "root" name for a set of three files that define a quadrature rule.

Licensing:

The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.

Related Data and Programs:

CLENSHAW_CURTIS is a C++ library which can set up a Clenshaw Curtis quadrature grid in multiple dimensions.

FFT_OPEN_MP is a C program which demonstrates the computation of a Fast Fourier Transform in parallel, using OpenMP.

INTEGRAL_TEST is a FORTRAN90 program which uses test integrals to evaluate sets of quadrature points.

LEGENDRE_RULE_FAST, is a C program which uses a fast (order N) algorithm to compute a Gauss-Legendre quadrature rule of given order.

MD_OPEN_MP is a C program which carries out a molecular dynamics simulation using OpenMP.

MPI is a library of routines for doing parallel programming in a distributed memory environment, using message passing.

MXV_OPEN_MP is a C program which compares the performance of the matrix multiplication problem y=A*x, with and without parallelization by OpenMP.

OPEN_MP is a library of routines, and a set of compiler directives, which enable parallel programming in a shared memory environment.

OPEN_MP_ITHACA C programs which illustrate the use of OpenMP on the Virginia Tech ITHACA cluster.

PESSL is a parallel mathematical library for use on IBM SP systems.

PETSC is a scientific library for parallel computations.

PRODUCT_RULE is a C++ program which can create a multidimensional quadrature rule as a product of one dimensional rules.

QUAD_MPI is a C program which approximates an integral using a quadrature rule, and carries out the computation in parallel using MPI.

QUAD_OPEN_MP is also available in a C++ version and a FORTRAN77 version and a FORTRAN90 version.

QUADRATURE_RULES is a dataset directory which contains many examples of files that define quadrature rules.

QUADRATURE_TEST is a C++ program which reads files defining a quadrature rule, and applies them to all the test integrals defined by TEST_NINT.

QUADRULE is a C library which defines quadrature rules for 1D domains.

SANDIA_RULES, a C library which produces 1D quadrature rules of Chebyshev, Clenshaw Curtis, Fejer 2, Gegenbauer, generalized Hermite, generalized Laguerre, Hermite, Jacobi, Laguerre, Legendre and Patterson types.

SATISFIABILITY_OPEN_MP is a C program which demonstrates, for a particular circuit, an exhaustive search for solutions of the circuit satisfiability problem, using OpenMP for parallel execution.

SGEFA_OPEN_MP is a C program which reimplements the SGEFA/SGESL linear algebra routines from LINPACK for use with OpenMP.

STROUD is a C++ library which contains quadrature rules for a variety of unusual areas, surfaces and volumes in 2D, 3D and N-dimensions.

TEST_NINT is a C++ library which defines a set of integrand functions to be used for testing multidimensional quadrature rules and routines.

TESTPACK is a C++ library which defines a set of integrands used to test multidimensional quadrature.

ZIGGURAT_OPEN_MP, a C program which demonstrates how the ZIGGURAT library can be used to generate random numbers in an OpenMP parallel program.

Reference:

  1. Rohit Chandra, Leonardo Dagum, Dave Kohr, Dror Maydan, Jeff McDonald, Ramesh Menon,
    Parallel Programming in OpenMP,
    Morgan Kaufmann, 2001,
    ISBN: 1-55860-671-8,
    LC: QA76.642.P32.
  2. Barbara Chapman, Gabriele Jost, Ruud vanderPas, David Kuck,
    Using OpenMP: Portable Shared Memory Parallel Processing,
    MIT Press, 2007,
    ISBN13: 978-0262533027.
  3. Tim Mattson, Rudolf Eigenmann,
    OpenMP: An API for Writing Portable SMP Application Software,
    a slide presentation,
    open_mp_slides.pdf.
  4. libgomp.pdf,
    The GNU OpenMP Implementation.
  5. The OpenMP web site
  6. OpenMP Architecture Review Board,
    OpenMP C and C++ Application Program Interface,
    Version 2.0,
    March 2002.
  7. OpenMP Architecture Review Board,
    OpenMP Fortran Application Program Interface,
    Version 2.0,
    November 2000.

Source Code:

Examples and Tests:

CC_D10_LEVEL4 is a Clenshaw-Curtis sparse grid rule for a 10 dimensional hypercube, at the 4th level of fineness.

CC_D10_LEVEL5 is a Clenshaw-Curtis sparse grid rule for a 10 dimensional hypercube, at the 5th level of fineness.

List of Routines:

You can go up one level to the C source codes.


Last revised on 28 April 2008.