Skip to content
Permalink
Browse files

Merge branch 'pitchfork' into develop

  • Loading branch information...
jbakosi committed Mar 20, 2019
2 parents ea4bedd + a5b765e commit 5f5f579311aab17109e2800c2222ad91aecafd8b
Showing 683 changed files with 189 additions and 149 deletions.
@@ -73,13 +73,12 @@ jobs:
DISTRO: 'debian-doc'
steps:
- bash: |
cp -vr docker $(HOME)/docker
sed -i "/^FROM/s/debian/${DISTRO}/" docker/Dockerfile.quinoa-build-azure
sed -i "/^FROM/s/debian/${DISTRO}/" tools/docker/Dockerfile.quinoa-build-azure
docker build \
--build-arg COMPILER=${COMPILER} \
--build-arg BUILD=${BUILD} \
--build-arg DOC=${DOC} \
--build-arg SHARED_LIBS="${SHARED_LIBS}" \
--build-arg SMP=${SMP} \
--rm=false -f docker/Dockerfile.quinoa-build-azure -t ${DISTRO} .
--rm=false -f tools/docker/Dockerfile.quinoa-build-azure -t ${DISTRO} .
displayName: 'Build & Test'
@@ -1,3 +1,3 @@
[submodule "tpl"]
path = tpl
url = ../../quinoacomputing/quinoa-tpl.git
[submodule "external"]
path = external
url = https://github.com/quinoacomputing/quinoa-tpl
@@ -18,6 +18,27 @@ problems with a production-quality code that is extensible and maintainable,
using hardware resources efficiently, even for problems with _a priori_
unknown, heterogeneous, and dynamic load distribution.

## Directory layout

- `cmake/` - CMake code shared between [external
packages](https://github.com/quinoacomputing/quinoa-tpl) (third-party
libraries) and `src/`.
- `doc/` - Documentation, rendered at https://quinoacomputing.github.io.
- `external/` - External packages (third-party libraries) pulled in as git
submodules.
- `src/` - Compilable sources. For a more detailed description of the contents
of the `src/` directory and its subdirectories, see
`docs/pages/directories.dox`, rendered at
https://quinoacomputing.github.io/files.html.
- `tests/` - Unit-, and regression tests.
- `tools/` - Development utilities and docker files.

- `LICENSE` - Copyright and license.
- `README.md` - This file, rendered at https://github.com/quinoacomputing/quinoa.

## More info

For more details on philosophy, documentation, software design, journal papers,
license, contributing see the
license, and contributing see the
[documentation](https://quinoacomputing.github.io).

@@ -181,11 +181,15 @@ endfunction(PrintMissing)

if (CHARM_FOUND AND PUGIXML_FOUND AND SEACASExodus_FOUND AND EXODIFF_FOUND AND
HDF5_FOUND AND BRIGAND_FOUND AND TUT_FOUND AND PEGTL_FOUND AND Boost_FOUND
AND (MKL_FOUND OR LAPACKE_FOUND))
AND (MKL_FOUND OR LAPACKE_FOUND) AND ENABLE_TESTS)
set(ENABLE_UNITTEST "true")
set(UNITTEST_EXECUTABLE unittest)
else()
PrintMissing(unittest "CHARM_FOUND;PUGIXML_FOUND;SEACASExodus_FOUND;EXODIFF_FOUND;HDF5_FOUND;BRIGAND_FOUND;TUT_FOUND;PEGTL_FOUND;Boost_FOUND;MKL_FOUND;LAPACKE_FOUND")
if (NOT ENABLE_TESTS)
message(STATUS "Target 'unittest' will NOT be configured, tests disabled.")
else()
PrintMissing(unittest "CHARM_FOUND;PUGIXML_FOUND;SEACASExodus_FOUND;EXODIFF_FOUND;HDF5_FOUND;BRIGAND_FOUND;TUT_FOUND;PEGTL_FOUND;Boost_FOUND;MKL_FOUND;LAPACKE_FOUND")
endif()
endif()

if (CHARM_FOUND AND SEACASExodus_FOUND AND EXODIFF_FOUND AND HYPRE_FOUND AND
@@ -769,10 +769,10 @@ We also add a bunch of new regression tests that stress-test the asynchronous
logic in the discretization scheme classes:

@code{.diff}
$ git diff regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt
$ git diff tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt
index b54a207d..62732129 100644
--- a/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt
+++ b/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt
--- a/tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt
+++ b/tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt
@@ -1,7 +1,7 @@
# See cmake/add_regression_test.cmake for documentation on the arguments to
# add_regression_test().
@@ -18,7 +18,7 @@ across the simulation distributed across many computers.
Our ultimate goal is to simulate large and complex engineering multiphysics
problems with a production-quality code that is extensible and maintainable,
using hardware resources efficiently, even for problems with _a priori_
unknown, heterogeneous, and dynamic load distribution. Read more at our @ref
unknown, heterogeneous, and dynamic load distribution. Read more at our @ref
why page.

@section mainpage_tools Tools
@@ -80,6 +80,24 @@ container](https://hub.docker.com/r/quinoacomputing/quinoa). See also

For larger problems and computers, however, you should build from source.

@section mainpage_directory_layout Directory layout

- `cmake/` - CMake code shared between [external
packages](https://github.com/quinoacomputing/quinoa-tpl) (third-party
libraries) and `src/`.
- `doc/` - Documentation, rendered at https://quinoacomputing.github.io.
- `external/` - External packages (third-party libraries) pulled in as git
submodules.
- `src/` - Compilable sources. For a more detailed description of the contents
of the `src/` directory and its subdirectories, see
`docs/pages/directories.dox`, rendered at
https://quinoacomputing.github.io/files.html.
- `tests/` - Unit-, and regression tests.
- `tools/` - Development utilities and docker files.

- `LICENSE` - Copyright and license.
- `README.md` - This file, rendered at https://github.com/quinoacomputing/quinoa.

@section mainpage_build Build

- Install prerequisites: _Debian/Ubuntu linux_ (line 1: required, line 2: recommended)
Submodule external added at 3ef456
@@ -35,7 +35,7 @@ namespace tk {
//! and thus facilitates runtime polymorphism. This function works in conjunction
//! with boost::factory, i.e., uses reference semantics (works with storing
//! pointers of objects). For a simple example on how to use this function, see
//! UnitTest/tests/Base/Factory.h.
//! tests/unit/Base/Factory.h.
//! \param[in] f Factory to register to (std::map with value using reference
//! semantics)
//! \param[in] key Key used to identify the entry in the factory
@@ -62,7 +62,7 @@ void record( Factory& f, const Key& key, ConstructorArgs&&... args ) {
//! object instantiated is of type Child class. This function works in
//! conjunction with boost::factory, i.e., uses reference semantics (works with
//! storing pointers of objects). For a simple example on how to
//! use this function, see UnitTest/tests/Base/Factory.h.
//! use this function, see tests/unit//Base/Factory.h.
//! \param[in] f Factory to instantiate object from (std::map with value using
//! reference semantics)
//! \param[in] key Key used to identify the object to instantiate from factory
@@ -94,7 +94,7 @@ std::unique_ptr< Obj > instantiate( const Factory& f, const Key& key ) {
//! as the "derived" (or child) class. This wrapper function works in
//! conjunction with boost::value_factory, i.e., uses value semantics (works
//! with storing objects instead of object pointers). For a simple example on
//! how to use this function, see UnitTest/tests/Base/Factory.h.
//! how to use this function, see tests/unit//Base/Factory.h.
//! \param[in] f Factory to register to (std::map with value using value
//! semantics)
//! \param[in] key Key used to identify the entry in the factory
@@ -168,7 +168,7 @@ void recordModelLate( Factory& f, const Key& key, ModelConstrArg ) {
//! that is only called at a later point in time. This can then be used by those
//! constructors of hosts that invoke the model constructors' proxies' ckNew()
//! and ignore the std::function. See, e.g., rngtest::Battery() and the
//! associated unit tests in UnitTest/tests/Base/Factory.h.
//! associated unit tests in tests/unit//Base/Factory.h.
//! \param[in] f Factory to register to (std::map with value using value
//! semantics)
//! \param[in] key Key used to identify the entry in the factory
@@ -70,7 +70,7 @@ string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
# Set build type (will be exported to the source)
set(BUILD_TYPE ${CMAKE_BUILD_TYPE})
# Query regression tests directory (will be exported to the source)
set(REGRESSION_DIR "${PROJECT_SOURCE_DIR}/../regression")
set(REGRESSION_DIR "${PROJECT_SOURCE_DIR}/../tests/regression")

# Query target architecture
include(TargetArch)
@@ -92,7 +92,7 @@ endif()
# directory based on cmake-supplied compiler ID
if (NOT TPL_DIR)
string(TOLOWER "${CMAKE_CXX_COMPILER_ID}" COMP)
set(REL_TPL_DIR ${PROJECT_SOURCE_DIR}/../tpl/install/${COMP}-${ARCH})
set(REL_TPL_DIR ${PROJECT_SOURCE_DIR}/../external/install/${COMP}-${ARCH})
get_filename_component(ABS_TPL_DIR ${REL_TPL_DIR} ABSOLUTE)
set(TPL_DIR ${ABS_TPL_DIR} CACHE STRING "Third-party libraries directory.")
endif()
@@ -108,6 +108,11 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
include(DetectCompilerVersion)
endif()

set(ENABLE_TESTS true CACHE BOOL "Enable unit-, and regression tests, as well as building the unit test hardness.")
if (NOT ENABLE_TESTS)
message(STATUS "Tests disabled.")
endif()

# Include third-party libraries configuration
include(TPLs)

@@ -586,7 +591,7 @@ if (ENABLE_INCITER)
add_subdirectory(Inciter)
endif()

if (ENABLE_UNITTEST)
if (ENABLE_UNITTEST AND ENABLE_TESTS)
add_subdirectory(UnitTest)
endif()

@@ -633,12 +638,14 @@ include(CppCheck)
enable_testing()

# Include cmake code common to all regression tests
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../regression
${CMAKE_BINARY_DIR}/regression
EXCLUDE_FROM_ALL)
if (ENABLE_TESTS)
add_subdirectory(${REGRESSION_DIR}
${CMAKE_BINARY_DIR}/tests
EXCLUDE_FROM_ALL)
endif()

# Setup code coverage for unit tests
if(CODE_COVERAGE)
if(CODE_COVERAGE AND ENABLE_TESTS)
# Setup test coverage target. Make it dependend on all quinoa executables.
setup_target_for_coverage(unit doc/html unittest_coverage ${RUNNER}
TESTRUNNER_ARGS ${RUNNER_NCPUS_ARG}
@@ -650,7 +657,7 @@ if(CODE_COVERAGE)
endif()

# Setup code coverage for regression tests
if(CODE_COVERAGE)
if(CODE_COVERAGE AND ENABLE_TESTS)
# Setup test coverage target. Make it dependend on all quinoa executables.
setup_target_for_coverage(regression doc/html regression_coverage
${CMAKE_CTEST_COMMAND}
@@ -663,7 +670,7 @@ if(CODE_COVERAGE)
endif()

# Setup code coverage for all individual coverage targets included
if(CODE_COVERAGE)
if(CODE_COVERAGE AND ENABLE_TESTS)
setup_target_for_all_coverage(all doc/html test_coverage
${RUNNER} ${RUNNER_NCPUS_ARG}
DEPENDS ${NONTEST_EXECUTABLES}
@@ -1742,10 +1742,6 @@ namespace grm {
//! pool, walker::ctr::CmdLine::keywords, in
//! Control/Walker/CmdLine/CmdLine.h.
//! \see http://en.cppreference.com/w/cpp/types/conditional
//! \see http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/set.html
//! \see http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/has_key.html
//! \see http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/or.html
//! \see http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/limit-metafunction-arity.html
//! TODO It still would be nice to generate a more developer-friendly
//! compiler error if the keyword is not in the pool.
template< typename keyword, typename pool >
@@ -33,10 +33,8 @@
statistics and joint PDFs. This requires that each type of system
has a vector of integers storing the number of scalar variables.
_Solution:_ Looping through elements of a tuple is done via [Boost]
(http://www.boost.org)'s [MetaProgramming Library (MPL)]
(http://www.boost.org/doc/libs/release/libs/mpl)'s [for_each]
(http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/for-each.html).
_Solution:_ Looping through elements of a tuple is done via [Brigand]
(https://github.com/edouarda/brigand)'s [MetaProgramming Library].
Such operations on types happen at compile-time, i.e., the code runs inside
the compiler and only its result gets compiled into code to be run at
run-time. Advantages are abstraction and generic code that is independent
@@ -139,7 +139,7 @@ geomPartMesh( tk::ctr::PartitioningAlgorithmType algorithm,
// the application, i.e., quinoa, and Zoltan2 to represent global
// identifiers and global counts
// See also
// tpl/src/trilinos/packages/zoltan2/src/input/Zoltan2_InputTraits.hpp
// external/src/trilinos/packages/zoltan2/src/input/Zoltan2_InputTraits.hpp
using ZoltanTypes = Zoltan2::BasicUserTypes< tk::real, long, long >;

// Create mesh adapter for Zoltan for mesh element partitioning
@@ -62,14 +62,14 @@ if (HAS_OMEGA_H)
endif()

if (ENABLE_INCITER)
set(TestError "../UnitTest/tests/Inciter/AMR/TestError.C")
set(TestScheme "../UnitTest/tests/Inciter/TestScheme.C")
set(TestError "../../tests/unit/Inciter/AMR/TestError.C")
set(TestScheme "../../tests/unit/Inciter/TestScheme.C")
set(MESHREFINEMENT "MeshRefinement")
endif()

# Configure executable targets

if (ENABLE_UNITTEST)
if (ENABLE_UNITTEST AND ENABLE_TESTS)
include("UnitTest.cmake")
endif()

@@ -1,63 +1,63 @@
## UnitTest executable ########################################################

if (HAS_MKL)
set(TestMKLBetaMethod "tests/Control/Options/TestMKLBetaMethod.C")
set(TestMKLGammaMethod "tests/Control/Options/TestMKLGammaMethod.C")
set(TestMKLGaussianMethod "tests/Control/Options/TestMKLGaussianMethod.C")
set(TestMKLUniformMethod "tests/Control/Options/TestMKLUniformMethod.C")
set(TestMKLRNG "tests/RNG/TestMKLRNG.C")
set(TestMKLBetaMethod "Control/Options/TestMKLBetaMethod.C")
set(TestMKLGammaMethod "Control/Options/TestMKLGammaMethod.C")
set(TestMKLGaussianMethod "Control/Options/TestMKLGaussianMethod.C")
set(TestMKLUniformMethod "Control/Options/TestMKLUniformMethod.C")
set(TestMKLRNG "RNG/TestMKLRNG.C")
endif()

if(HAS_RNGSSE2)
set(TestRNGSSE "tests/RNG/TestRNGSSE.C")
set(TestRNGSSE "RNG/TestRNGSSE.C")
endif()

add_executable(${UNITTEST_EXECUTABLE}
UnitTestDriver.C
UnitTest.C
../UnitTest/tests/Base/TestContainerUtil.C
../UnitTest/tests/Base/TestData.C
../UnitTest/tests/Base/TestException.C
../UnitTest/tests/Base/TestExceptionMPI.C
../UnitTest/tests/Base/TestFactory.C
../UnitTest/tests/Base/TestFlip_map.C
../UnitTest/tests/Base/TestHas.C
../UnitTest/tests/Base/TestPrint.C
../UnitTest/tests/Base/TestProcessControl.C
../UnitTest/tests/Base/TestPUPUtil.C
../UnitTest/tests/Base/TestReader.C
../UnitTest/tests/Base/TestStrConvUtil.C
../UnitTest/tests/Base/TestTaggedTuple.C
../UnitTest/tests/Base/TestTimer.C
../UnitTest/tests/Base/TestVector.C
../UnitTest/tests/Base/TestWriter.C
../UnitTest/${TestMKLUniformMethod}
../UnitTest/${TestMKLGaussianMethod}
../UnitTest/${TestMKLBetaMethod}
../UnitTest/${TestMKLGammaMethod}
../UnitTest/tests/Control/Options/TestRNG.C
../UnitTest/tests/Control/TestControl.C
../UnitTest/tests/Control/TestFileParser.C
../UnitTest/tests/Control/TestStringParser.C
../UnitTest/tests/Control/TestSystemComponents.C
../UnitTest/tests/Control/TestToggle.C
../UnitTest/${TestScheme}
../UnitTest/${TestError}
../UnitTest/tests/IO/TestExodusIIMeshReader.C
../UnitTest/tests/IO/TestMesh.C
../UnitTest/tests/IO/TestMeshReader.C
../UnitTest/tests/LoadBalance/TestLinearMap.C
../UnitTest/tests/LoadBalance/TestLoadDistributor.C
../UnitTest/tests/LoadBalance/TestUnsMeshMap.C
../UnitTest/tests/Mesh/TestAround.C
../UnitTest/tests/Mesh/TestDerivedData.C
../UnitTest/tests/Mesh/TestDerivedData_MPISingle.C
../UnitTest/tests/Mesh/TestGradients.C
../UnitTest/tests/Mesh/TestReorder.C
../UnitTest/${TestMKLRNG}
../UnitTest/${TestRNGSSE}
../UnitTest/tests/RNG/TestRNG.C
../UnitTest/tests/RNG/TestRandom123.C)
../../tests/unit/Base/TestContainerUtil.C
../../tests/unit/Base/TestData.C
../../tests/unit/Base/TestException.C
../../tests/unit/Base/TestExceptionMPI.C
../../tests/unit/Base/TestFactory.C
../../tests/unit/Base/TestFlip_map.C
../../tests/unit/Base/TestHas.C
../../tests/unit/Base/TestPrint.C
../../tests/unit/Base/TestProcessControl.C
../../tests/unit/Base/TestPUPUtil.C
../../tests/unit/Base/TestReader.C
../../tests/unit/Base/TestStrConvUtil.C
../../tests/unit/Base/TestTaggedTuple.C
../../tests/unit/Base/TestTimer.C
../../tests/unit/Base/TestVector.C
../../tests/unit/Base/TestWriter.C
../../tests/unit/${TestMKLUniformMethod}
../../tests/unit/${TestMKLGaussianMethod}
../../tests/unit/${TestMKLBetaMethod}
../../tests/unit/${TestMKLGammaMethod}
../../tests/unit/Control/Options/TestRNG.C
../../tests/unit/Control/TestControl.C
../../tests/unit/Control/TestFileParser.C
../../tests/unit/Control/TestStringParser.C
../../tests/unit/Control/TestSystemComponents.C
../../tests/unit/Control/TestToggle.C
../../tests/unit/${TestScheme}
../../tests/unit/${TestError}
../../tests/unit/IO/TestExodusIIMeshReader.C
../../tests/unit/IO/TestMesh.C
../../tests/unit/IO/TestMeshReader.C
../../tests/unit/LoadBalance/TestLinearMap.C
../../tests/unit/LoadBalance/TestLoadDistributor.C
../../tests/unit/LoadBalance/TestUnsMeshMap.C
../../tests/unit/Mesh/TestAround.C
../../tests/unit/Mesh/TestDerivedData.C
../../tests/unit/Mesh/TestDerivedData_MPISingle.C
../../tests/unit/Mesh/TestGradients.C
../../tests/unit/Mesh/TestReorder.C
../../tests/unit/${TestMKLRNG}
../../tests/unit/${TestRNGSSE}
../../tests/unit/RNG/TestRNG.C
../../tests/unit/RNG/TestRandom123.C)

target_include_directories(${UNITTEST_EXECUTABLE} PUBLIC
${QUINOA_SOURCE_DIR}
Oops, something went wrong.

0 comments on commit 5f5f579

Please sign in to comment.
You can’t perform that action at this time.