Skip to content

Commit

Permalink
Merge branch 'release/v0.2.0'
Browse files Browse the repository at this point in the history
* release/v0.2.0:
  polish up release notes
  examples: scalar: a few little cleanups
  removed const keywords in scalar_sweeper; they should be there, no idea why it worked even with them
  more documentation for scalar example; added mathjax directives at multiple points
  improved docu for scalar example; added ** at several points
  extended documentation for scalar example
  docu: extending/fixing/cleaning docu for upcoming release
  some enhancements of the coverage generation script
  fix for aggegrated coverage results
  cmake and tests: enable and provide test coverage analysis
  cmake: add option for GCC profiling
  sweeper: incorporate @memmett's remarks
  exceptions must be thrown to be effective
  some code formatting tweaks
  docu: some docu on IMEXSweeper::predict
  encap: some templatization tweaks
  tests: further tweaking MPI advec test
  Travis: explicitly setting occasions of Travis' notification emails
  QUAD: fixed accuracy of QmatTest
  changelog: Add Dr. Speck/Bacon/Pancetta to contributors.
  high precision test for scalar now running: tolerance set to 5e-12
  removed old test_scalar; now called test_scalar_conv
  renamed test_scalar into test_scalar_conv; added new file that will provide the high precision test suggested by michael
  added tests for clenshaw curtis and equidistant nodes but they are NOT working; not sure why
  tests: mpi-fix for GTest
  tests: using another matcher
  tests: on MPI run do not execute GTest::run() on all ranks
  tests: stupid namespaces...
  tests: advec: using different matcher
  travis: enable APT caching and make tests more verbose
  travis: different repos for different versions
  travis: even more stupid...
  stupidity...
  travis: switch to other Boost PPA and test 1.53 and 1.55
  merged torbjoerns improved test_scalar and added tests for radau nodes: now, lobatto, legendre and radau are tested
  tests: scalar: Yo Dawg, I herd you like better tests
  scalar_test is now running and tests legendre and lobatto nodes
  added some comments to test_scalar
  test_scalar now also checks legendre nodes, but the test with DoubleNear fail, because we encounter better-than-expected convergence. Need a DoubleMore, but I did not get a corresponding matcher to run properly
  test_scalar: computation of convergence rate moved from TEST_P script into ConvergenceTest class ; started to add some lines for legendre node testing (not yet complete)
  run_scalar_sdc now gets and pfasst::QuadratureType argument to specify the type of used nodes
  TESTS: added quadrature test comparing Qmat and nodes
  QUAD: uniform -> Uniform
  QUAD: enum class for quadrature types as well..
  QUAD: changed type to enum class, containing S and Q so far
  Add .dir-locals.el for emacs users.
  tests: examples: scalar: rewamped to be parameterized
  scalar: some further cleanup
  Style.
  doc: Tweak README.md, begin adding notes for v0.2.0 to CHANGELOG.md.
  quadrature: Initialize matrix with zeros.
  imex: Support virtual nodes (0 and 1).
  test_scalar now used DoubleNear and checks directly within loop computing convergence rates
  in test_scalar, should now use size_t instead of int
  removed first version of run_scalar_sdc function from scalar_sdc.cpp; instead, the main routine sets default values and calls the run function with these as parameter
  added a test for the scalar example that verifies convergence orders for up to six lobatto nodes
  updated scalar example to fit into testing enviroment; added test routine for scalar example, but so far without any tests
  examples: scalar: some code cleanup
  cmake: little tweaks on example run targets
  quadrature: Add `pfasst::augment_nodes` and handle `is_proper` flags appropriately.
  scalar: Update to new naming convention.
  cmake: Restore and flesh out comments.
  scalar: Put 3rdpart_INCLUDES back.
  incorporating @memmett's suggestions
  scalar: Don't need FFTW.
  a couple of code formatting tweaks
  pfasst: Add `tag` helper and state V-cycle on finest level.
  interp: Flense.
  interfaces: Split out `restrict_initial` from `restrict`.
  cmake: Cut some comments.
  test: Loosen tolerances.
  tests: Update expected solutions and tighten tolerances.
  mpi_pfasst: Set nsweeps on coarse level to 2.
  pfasst: Fix predictor.
  mlsdc: Add `set_nsweeps`.
  poly_interp: Split `interpolate` and `interpolate_initial` routines.
  interfaces: Add `spread` interface and split interpolation.
  encap_sweeper: Add `spread` and `as_encap_sweeper`.
  tests: Add test_mpi_advection_diffusion.cpp.
  renaming a few variables
  Untabify.
  doc: Fix explanation of `impl_solv`.
  travis: Tidy and add full path for MPI example.
  cmake: Change how we're handling MPI.
  examples: some docu and variable renaming for the AdVecSweeper
  further documentation for interfaces
  sweeper: cleanup of IMEXSweeper
  add UNUSED(expr) makro to denote unused parameters
  sweeper: rename f_solve to impl_solve
  adding 'override' identifier where valid
  sweeper: better names for function evaluations
  code style: whitespaces
  travis: make travis use Ubuntu's libfftw3
  cmake: try find system-wide FFTW3 before self-compiling it
  travis: Echo more compiler info.
  cmake: some more output on compiler selection
  3rdparty: using tar file instead of SVN checkout for GMock
  travis: Punt.
  travis: Another shot...
  travis: Use mpich2.
  travis: Fix 'if' statement.
  reordering tests for examples into subfolder
  different parameters in scalar example
  Untabify.
  cmake: Fix typo.
  pfasst/mpi: Flesh out broadcasting.
  style: Applied astyle throughout.
  encap: Provide default implementation of mat_apply.
  docs: Add troubleshooting.md.
  cmake: add make targets to run compiled examples
  travis: another try on enabling MPI on Travis
  cmake: introducing automatic MPI selection
  controller: Go back to `int` vs `size_t` for level iterator.
  docs: Add troubleshooting.md.
  travis: Use mpic++.
  travis: Take a stab at adding MPICH2 support.
  advection-diffusion: Add MPI-PFASST example (mpi_pfasst.cpp).
  style: Untabify.
  controller: Revert back to `size_t` instead of `int`.
  pfasst: Update loops to use new controller state routines.
  style: Tidy and silence some compiler warnings.
  removed scalar example; to be put in through merge with scalar branch
  scalar example
  pfasst: Get PFASST working.  Needs to be flensed.
  mpi_vector: Call MPI_Wait when doing a non-blocking send.
  interp: Add interp_initial_only flag.
  added a sweeper for the scalar test equation
  mpi/pfasst: Flesh out MPI send/recv.
  send/recv: Add `tag` and `blocking` flags to send/recv.
  poly_interp: Add `restrict_initial_only` flag to `restrict`.
  interfaces: Add `initial_only` flag to `save`.
  controller: Use `int` instead of `size_t` in `LevelIter`.
  DEBUG: echo mag of q in f1eval.
  mlsdc: Fix IMEX sweeper to get MLSDC working again.
  pfasst: Add pfasst.hpp.
  mpi: Add mpi_communicator.hpp and mpi_vector.hpp.
  interfaces: Pass ICommunicator to send/recv.
  • Loading branch information
torbjoernk committed Aug 30, 2014
2 parents f31a44b + d5d735c commit 0dbb82f
Show file tree
Hide file tree
Showing 49 changed files with 2,943 additions and 554 deletions.
101 changes: 101 additions & 0 deletions .dir-locals.el
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
; Adapted from PETSc

((nil . ((indent-tabs-mode . nil)
(show-trailing-whitespace . t)))

(c++-mode . ((c-tab-always-indent . t)
(fill-column . 100)
(c-basic-offset . 2)
(c-comment-only-line-offset . 0)
(c-hanging-braces-alist . ((substatement-open after)
(brace-list-open after)
(brace-entry-open)
(defun-open after)
(class-open after)
(inline-open after)
(block-open after)
(block-close . c-snug-do-while)
(statement-case-open after)
(substatement after)))
(c-hanging-colons-alist . ((member-init-intro before)
(inher-intro)
(case-label after)
(label after)
(access-label after)))
(c-cleanup-list . (scope-operator
brace-else-brace
brace-elseif-brace
brace-catch-brace
empty-defun-braces
list-close-comma
defun-close-semi))
(c-offsets-alist . ((inexpr-class . +)
(inexpr-statement . +)
(lambda-intro-cont . +)
(inlambda . c-lineup-inexpr-block)
(template-args-cont c-lineup-template-args +)
(incomposition . +)
(inmodule . +)
(innamespace . +)
(inextern-lang . +)
(composition-close . 0)
(module-close . 0)
(namespace-close . 0)
(extern-lang-close . 0)
(composition-open . 0)
(module-open . 0)
(namespace-open . 0)
(extern-lang-open . 0)
(friend . 0)
(cpp-define-intro c-lineup-cpp-define +)
(cpp-macro-cont . +)
(cpp-macro . [0])
(inclass . ++)
(stream-op . c-lineup-streamop)
(arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist)
(arglist-cont c-lineup-gcc-asm-reg 0)
(arglist-intro . +)
(catch-clause . 0)
(else-clause . 0)
(do-while-closure . 0)
(label . 2)
(access-label . -)
(substatement-label . 2)
(substatement . +)
(statement-case-open . 0)
(statement-case-intro . +)
(statement-block-intro . +)
(statement-cont . +)
(statement . 0)
(brace-entry-open . 0)
(brace-list-entry . 0)
(brace-list-intro . +)
(brace-list-close . 0)
(brace-list-open . 0)
(block-close . 0)
(inher-cont . c-lineup-multi-inher)
(inher-intro . +)
(member-init-cont . c-lineup-multi-inher)
(member-init-intro . +)
(annotation-var-cont . +)
(annotation-top-cont . 0)
(topmost-intro-cont . c-lineup-topmost-intro-cont)
(topmost-intro . 0)
(knr-argdecl . 0)
(func-decl-cont . +)
(inline-close . 0)
(inline-open . 0)
(class-close . 0)
(class-open . 0)
(defun-block-intro . +)
(defun-close . 0)
(defun-open . 0)
(string . c-lineup-dont-change)
(arglist-close . c-lineup-arglist)
(substatement-open . 0)
(case-label . 0)
(block-open . 0)
(c . 1)
(comment-intro . 0)
(knr-argdecl-intro . -)))
)))
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
/doc/build
/build*
/dist
/coverage
*.info

# Created by http://www.gitignore.io

Expand Down
48 changes: 35 additions & 13 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,24 +1,46 @@
language:
- cpp

compiler:
- gcc
- clang
cache: apt

notifications:
email:
on_success: change # default: change
on_failure: always # default: always

# why does Travis not allow for multi-dimensional build matrices?!?
# -> https://github.com/travis-ci/travis-ci/issues/1519
env:
- CMAKE_BUILD_TYPE="Release"
- CMAKE_BUILD_TYPE="Debug"
matrix:
- CMAKE_BUILD_TYPE="Release" WITH_MPI=OFF CXX=clang++ BOOST_VERSION=1.53
- CMAKE_BUILD_TYPE="Release" WITH_MPI=OFF CXX=g++ BOOST_VERSION=1.53
- CMAKE_BUILD_TYPE="Release" WITH_MPI=ON CXX=g++ BOOST_VERSION=1.53
- CMAKE_BUILD_TYPE="Debug" WITH_MPI=OFF CXX=clang++ BOOST_VERSION=1.53
- CMAKE_BUILD_TYPE="Debug" WITH_MPI=OFF CXX=g++ BOOST_VERSION=1.53
- CMAKE_BUILD_TYPE="Debug" WITH_MPI=ON CXX=g++ BOOST_VERSION=1.53
- CMAKE_BUILD_TYPE="Release" WITH_MPI=OFF CXX=clang++ BOOST_VERSION=1.55
- CMAKE_BUILD_TYPE="Release" WITH_MPI=OFF CXX=g++ BOOST_VERSION=1.55
- CMAKE_BUILD_TYPE="Release" WITH_MPI=ON CXX=g++ BOOST_VERSION=1.55
- CMAKE_BUILD_TYPE="Debug" WITH_MPI=OFF CXX=clang++ BOOST_VERSION=1.55
- CMAKE_BUILD_TYPE="Debug" WITH_MPI=OFF CXX=g++ BOOST_VERSION=1.55
- CMAKE_BUILD_TYPE="Debug" WITH_MPI=ON CXX=g++ BOOST_VERSION=1.55

before_install:
- sudo add-apt-repository ppa:apokluda/boost1.53 --yes
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test --yes # libstdc++-4.8
- if [ "${CXX}" == "clang++" ]; then sudo add-apt-repository --yes ppa:h-rayflood/llvm; fi # clang++-3.2
# boost packages
- if [ "${BOOST_VERSION}" == "1.53" ]; then sudo add-apt-repository ppa:apokluda/boost1.53 --yes; fi
- if [ "${BOOST_VERSION}" == "1.55" ]; then sudo add-apt-repository ppa:boost-latest/ppa --yes; fi
# libstdc++-4.8
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test --yes
# clang++-3.2
- if [ "${CXX}" == "clang++" ]; then sudo add-apt-repository --yes ppa:h-rayflood/llvm; fi
- sudo apt-get update

install:
# note: clang needs g++-4.8 it for libstdc++ update
- if [ "${CXX}" == "clang++" ]; then sudo apt-get -qq install clang-3.2; fi
- sudo apt-get install g++-4.8 # clang need it for libstdc++ update
- sudo apt-get install libboost1.53-all-dev
- if [ "${WITH_MPI}" == "ON" ]; then sudo apt-get -qq install mpich2 libmpich2-dev; fi
- sudo apt-get install g++-4.8
- sudo apt-get install "libboost${BOOST_VERSION}-all-dev" libfftw3-3 libfftw3-dev

before_script:
# update compilers
Expand All @@ -28,7 +50,7 @@ before_script:
script:
- mkdir build
- cd build
- cmake -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -Dpfasst_DISABLE_LIBCXX=ON -Dpfasst_BUILD_TESTS=ON -Dpfasst_BUILD_EXAMPLES=ON ..
- cmake -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -Dpfasst_WITH_MPI=${WITH_MPI} -Dpfasst_DISABLE_LIBCXX=ON -Dpfasst_BUILD_TESTS=ON -Dpfasst_BUILD_EXAMPLES=ON ..
- make
- make test

- make test ARGS="-V"
- make run_example_all
64 changes: 36 additions & 28 deletions 3rdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,40 @@ list(APPEND 3rdparty_INCLUDES ${Boost_INCLUDE_DIRS})


if(pfasst_BUILD_EXAMPLES)
message(STATUS "FFTW3")
set(fftw3_SOURCE_DIR "${pfasst_BINARY_DIR}/3rdparty/src/fftw3")
set(fftw3_INSTALL_DIR "${pfasst_BINARY_DIR}/3rdparty/src/fftw3-install")
find_package(FFTW)

ExternalProject_Add(
fftw3
LIST_SEPARATOR " "
URL http://fftw.org/fftw-3.3.4.tar.gz
URL_MD5 2edab8c06b24feeb3b82bbb3ebf3e7b3
TIMEOUT 30
UPDATE_COMMAND ""
PATCH_COMMAND ""
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND ${fftw3_SOURCE_DIR}/configure CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CXXFLAGS=${CMAKE_CXX_FLAGS} --prefix=${fftw3_INSTALL_DIR} --libdir=${fftw3_INSTALL_DIR}/lib
BUILD_COMMAND make
TEST_COMMAND ""
INSTALL_DIR ${fftw3_SOURCE_DIR}-install
INSTALL_COMMAND make install
LOG_DOWNLOAD ON
LOG_CONFIGURE ON
LOG_BUILD ON
)
# Specify include dir
set(fftw3_INCLUDES ${fftw3_INSTALL_DIR}/include PARENT_SCOPE)
set(fftw3_LIBS ${fftw3_INSTALL_DIR}/lib/libfftw3.a PARENT_SCOPE)
if(NOT FFTW_FOUND)
message(STATUS "FFTW3 not found on your system.")
message(STATUS "Going to download and compile it automatically.")
set(fftw3_SOURCE_DIR "${pfasst_BINARY_DIR}/3rdparty/src/fftw3")
set(fftw3_INSTALL_DIR "${pfasst_BINARY_DIR}/3rdparty/src/fftw3-install")

ExternalProject_Add(
fftw3
LIST_SEPARATOR " "
URL http://fftw.org/fftw-3.3.4.tar.gz
URL_MD5 2edab8c06b24feeb3b82bbb3ebf3e7b3
TIMEOUT 30
UPDATE_COMMAND ""
PATCH_COMMAND ""
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND ${fftw3_SOURCE_DIR}/configure CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CXXFLAGS=${CMAKE_CXX_FLAGS} --prefix=${fftw3_INSTALL_DIR} --libdir=${fftw3_INSTALL_DIR}/lib
BUILD_COMMAND make
TEST_COMMAND ""
INSTALL_DIR ${fftw3_SOURCE_DIR}-install
INSTALL_COMMAND make install
LOG_DOWNLOAD ON
LOG_CONFIGURE ON
LOG_BUILD ON
)
# Specify include dir
set(FFTW_INCLUDE_PATH ${fftw3_INSTALL_DIR}/include PARENT_SCOPE)
set(FFTW_LIBRARIES ${fftw3_INSTALL_DIR}/lib/libfftw3.a PARENT_SCOPE)
else()
set(FFTW_INCLUDE_PATH ${FFTW_INCLUDE_PATH} PARENT_SCOPE)
set(FFTW_LIBRARIES ${FFTW_LIBRARIES} PARENT_SCOPE)
endif()
set(FFTW_FOUND ${FFTW_FOUND} PARENT_SCOPE)

if(pfasst_BUILD_TESTS)
message(STATUS "--------------------------------------------------------------------------------")
Expand All @@ -58,10 +67,9 @@ if(pfasst_BUILD_TESTS)
# Add gmock
ExternalProject_Add(
googlemock
SVN_REPOSITORY http://googlemock.googlecode.com/svn/trunk/
SVN_REVISION -r 449 # release 1.7.0
TIMEOUT 10
# Disable SVN update
URL http://googlemock.googlecode.com/files/gmock-1.7.0.zip
URL_MD5 073b984d8798ea1594f5e44d85b20d66
TIMEOUT 30
UPDATE_COMMAND ""
PATCH_COMMAND ""
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
Expand Down
57 changes: 57 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,62 @@
# Changelog {#page_changelog}

## v0.2.0 -- MPI PFASST (2014/08/XX)

DOI: [10.5281/zenodo.11047](http://dx.doi.org/10.5281/zenodo.11047)

### Notable Features

* Addition of MPI based PFASST.

### Details

* Addition of MPI based PFASST algorithm using the standard predictor stage in a block mode with
fixed iterations.
([#46][], [#57][], [#59][])

* Addition of a simple scalar example and appropriate tests.
([#61][], [#63][], [#76][], [#81][])

* Further tests on proper calculation of quadrature nodes and weights
([#74][])

* Better handling of 3rd-party dependencies
([#53][], [#55][])

* Various tidying
([#56][], [#60][], [#77][])

* Basic Profiling support and test coverage report
([#78][])

[#46]: https://github.com/Parallel-in-Time/PFASST/pull/46
[#57]: https://github.com/Parallel-in-Time/PFASST/pull/56
[#59]: https://github.com/Parallel-in-Time/PFASST/pull/59
[#53]: https://github.com/Parallel-in-Time/PFASST/pull/53
[#55]: https://github.com/Parallel-in-Time/PFASST/pull/55
[#56]: https://github.com/Parallel-in-Time/PFASST/pull/56
[#60]: https://github.com/Parallel-in-Time/PFASST/pull/60
[#61]: https://github.com/Parallel-in-Time/PFASST/pull/61
[#63]: https://github.com/Parallel-in-Time/PFASST/pull/63
[#74]: https://github.com/Parallel-in-Time/PFASST/pull/74
[#76]: https://github.com/Parallel-in-Time/PFASST/pull/76
[#77]: https://github.com/Parallel-in-Time/PFASST/pull/77
[#78]: https://github.com/Parallel-in-Time/PFASST/pull/78
[#78]: https://github.com/Parallel-in-Time/PFASST/pull/81

### Contributors

* Matthew Emmett, Lawrence Berkeley National Laboratory ([memmett][])
* Torbjörn Klatt, Jülich Supercomputing Centre ([torbjoernk][])
* Daniel Ruprecht, Institute of Computational Science, University of Lugano ([danielru][])
* Robert Speck, Jülich Supercomputing Centre ([pancetta][])

[memmett]: https://github.com/memmett
[torbjoernk]: https://github.com/torbjoernk
[danielru]: https://github.com/danielru
[pancetta]: https://github.com/pancetta


## v0.1.0 -- First Release (2014/07/25)

DOI: [10.5281/zenodo.11047](http://dx.doi.org/10.5281/zenodo.11047)
Expand Down
Loading

0 comments on commit 0dbb82f

Please sign in to comment.