From f4111ead1473a2c709f9f3fc5deb9442d7d35003 Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Tue, 16 Jan 2018 11:31:50 +0100 Subject: [PATCH] remove some generic utility classes moved to opm-common --- CMakeLists_files.cmake | 6 - opm/core/linalg/blas_lapack.h | 148 ---------- opm/core/utility/UniformTableLinear.hpp | 268 ------------------ .../utility/buildUniformMonotoneTable.hpp | 50 ---- tests/test_cubic.cpp | 73 ----- tests/test_sparsevector.cpp | 109 ------- tests/test_uniformtablelinear.cpp | 73 ----- 7 files changed, 727 deletions(-) delete mode 100644 opm/core/linalg/blas_lapack.h delete mode 100644 opm/core/utility/UniformTableLinear.hpp delete mode 100644 opm/core/utility/buildUniformMonotoneTable.hpp delete mode 100644 tests/test_cubic.cpp delete mode 100644 tests/test_sparsevector.cpp delete mode 100644 tests/test_uniformtablelinear.cpp diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index bfa99f3c..87e1ace2 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -94,12 +94,9 @@ list (APPEND MAIN_SOURCE_FILES list (APPEND TEST_SOURCE_FILES tests/test_compressedpropertyaccess.cpp tests/test_dgbasis.cpp - tests/test_cubic.cpp tests/test_flowdiagnostics.cpp tests/test_parallelistlinformation.cpp - tests/test_sparsevector.cpp tests/test_velocityinterpolation.cpp - tests/test_uniformtablelinear.cpp tests/test_wells.cpp tests/test_wachspresscoord.cpp tests/test_linearsolver.cpp @@ -191,7 +188,6 @@ list (APPEND PUBLIC_HEADER_FILES opm/core/linalg/LinearSolverPetsc.hpp opm/core/linalg/LinearSolverUmfpack.hpp opm/core/linalg/ParallelIstlInformation.hpp - opm/core/linalg/blas_lapack.h opm/core/linalg/call_umfpack.h opm/core/linalg/sparse_sys.h opm/core/pressure/CompressibleTpfa.hpp @@ -254,10 +250,8 @@ list (APPEND PUBLIC_HEADER_FILES opm/core/utility/CompressedPropertyAccess.hpp opm/core/utility/initHydroCarbonState.hpp opm/core/utility/RegionMapping.hpp - opm/core/utility/UniformTableLinear.hpp opm/core/utility/VelocityInterpolation.hpp opm/core/utility/WachspressCoord.hpp - opm/core/utility/buildUniformMonotoneTable.hpp opm/core/utility/compressedToCartesian.hpp opm/core/utility/extractPvtTableIndex.hpp opm/core/utility/miscUtilities.hpp diff --git a/opm/core/linalg/blas_lapack.h b/opm/core/linalg/blas_lapack.h deleted file mode 100644 index be2b956c..00000000 --- a/opm/core/linalg/blas_lapack.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_BLAS_LAPACK_HEADER_INCLUDED -#define OPM_BLAS_LAPACK_HEADER_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(MATLAB_MEX_FILE) && MATLAB_MEX_FILE -#include -#undef MAT_SIZE_T -#define MAT_SIZE_T mwSignedIndex -#endif - -#ifndef MAT_SIZE_T -#define MAT_SIZE_T int -#endif - - -/* C <- a1*op(A)*op(B) + a2*C where op(X) in {X, X.'} */ -void dgemm_(const char *transA , const char *transB , - const MAT_SIZE_T* m, const MAT_SIZE_T* n , const MAT_SIZE_T* k , - const double* a1, const double* A , const MAT_SIZE_T* ldA, - const double* B, const MAT_SIZE_T* ldB, - const double* a2, double* C , const MAT_SIZE_T* ldC); - - -/* C <- a1*A*A' + a2*C *or* C <- a1*A'*A + a2*C */ -void dsyrk_(const char *uplo, const char *trans, - const MAT_SIZE_T *n , const MAT_SIZE_T *k , - const double *a1 , const double *A , const MAT_SIZE_T *ldA, - const double *a2 , double *C , const MAT_SIZE_T *ldC); - - -void dgeqrf_(const MAT_SIZE_T *m , const MAT_SIZE_T *n , - double *A , const MAT_SIZE_T *ld , - double *tau , double *work, - const MAT_SIZE_T *lwork, MAT_SIZE_T *info); - - -void dorgqr_(const MAT_SIZE_T *m , const MAT_SIZE_T *n , const MAT_SIZE_T *k , - double *A , const MAT_SIZE_T *ld , const double *tau, - double *work, const MAT_SIZE_T *lwork, MAT_SIZE_T *info); - -/* A <- LU(A) */ -void dgetrf_(const MAT_SIZE_T *m , const MAT_SIZE_T *n , - double *A , const MAT_SIZE_T *ld, - MAT_SIZE_T *ipiv, MAT_SIZE_T *info); - -/* B <- A \ B, when A is LU(A) from dgetrf() */ -void dgetrs_(const char *trans, const MAT_SIZE_T *n, - const MAT_SIZE_T *nrhs , - const double *A , const MAT_SIZE_T *lda, - const MAT_SIZE_T *ipiv , double *B, - const MAT_SIZE_T *ldb , MAT_SIZE_T *info); - -/* B <- A \ B, tridiagonal A with bands DL, D, DU */ -void dgtsv_(const MAT_SIZE_T *n , - const MAT_SIZE_T *nrhs , - double *DL , - double *D , - double *DU , - double *B , - const MAT_SIZE_T *ldb , - MAT_SIZE_T *info); - -/* B <- A \ B, band matrix A stored in AB with kl subdiagonals, ku superdiagonals */ -void dgbsv_(const MAT_SIZE_T *n , - const MAT_SIZE_T *kl , - const MAT_SIZE_T *ku , - const MAT_SIZE_T *nrhs , - double *AB , - const MAT_SIZE_T *ldab , - MAT_SIZE_T *ipiv , - double *B , - const MAT_SIZE_T *ldb , - MAT_SIZE_T *info); - -/* B <- A \ B, general solver */ -void dgesv_(const MAT_SIZE_T *n, - const MAT_SIZE_T *nrhs , - double *A , - const MAT_SIZE_T *lda , - MAT_SIZE_T *piv , - double *B , - const MAT_SIZE_T *ldb , - MAT_SIZE_T *info); - -/* A <- chol(A) */ -void dpotrf_(const char *uplo, const MAT_SIZE_T *n, - double *A , const MAT_SIZE_T *lda, - MAT_SIZE_T *info); - -/* B <- (A \ (A' \ B)), when A=DPOTRF(A_orig) */ -void dpotrs_(const char *uplo, const MAT_SIZE_T *n , const MAT_SIZE_T *nrhs, - double *A , const MAT_SIZE_T *lda, - double *B , const MAT_SIZE_T *ldb, MAT_SIZE_T *info); - -/* A <- chol(A), packed format. */ -void dpptrf_(const char *uplo, const MAT_SIZE_T *n, - double *Ap , MAT_SIZE_T *info); - -/* A <- (A \ (A' \ eye(n)) when A=DPPTRF(A_orig) (packed format). */ -void dpptri_(const char *uplo, const MAT_SIZE_T *n, - double *Ap , MAT_SIZE_T *info); - -/* y <- a1*op(A)*x + a2*y */ -void dgemv_(const char *trans, - const MAT_SIZE_T *m , const MAT_SIZE_T *n, - const double *a1 , const double *A, const MAT_SIZE_T *ldA , - const double *x, const MAT_SIZE_T *incX, - const double *a2 , double *y, const MAT_SIZE_T *incY); - - -/* y <- a*x + y */ -void daxpy_(const MAT_SIZE_T *n, const double *a, - const double *x, const MAT_SIZE_T *incx, - double *y, const MAT_SIZE_T *incy); - -/* s <- x' * y */ -double ddot_(const MAT_SIZE_T *n, const double *x, const MAT_SIZE_T *incx, - const double *y, const MAT_SIZE_T *incy); - - - -#ifdef __cplusplus -} -#endif - -#endif /* OPM_BLAS_LAPACK_HEADER_INCLUDED */ diff --git a/opm/core/utility/UniformTableLinear.hpp b/opm/core/utility/UniformTableLinear.hpp deleted file mode 100644 index dc7f75e2..00000000 --- a/opm/core/utility/UniformTableLinear.hpp +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_UNIFORMTABLELINEAR_HEADER_INCLUDED -#define OPM_UNIFORMTABLELINEAR_HEADER_INCLUDED - -#include -#include -#include -#include -#include - -#include - -namespace Opm { - - /// @brief This class uses linear interpolation to compute the value - /// (and its derivative) of a function f sampled at uniform points. - /// @tparam T the range type of the function (should be an algebraic ring type) - template - class UniformTableLinear - { - public: - /// @brief Default constructor. - UniformTableLinear(); - - /// @brief Construct from vector of y-values. - /// @param xmin the x value corresponding to the first y value. - /// @param xmax the x value corresponding to the last y value. - /// @param y_values vector of range values. - UniformTableLinear(double xmin, - double xmax, - const std::vector& y_values); - - /// @brief Construct from array of y-values. - /// @param xmin the x value corresponding to the first y value. - /// @param xmax the x value corresponding to the last y value. - /// @param y_values array of range values. - /// @param num_y_values the number of values in y_values. - UniformTableLinear(double xmin, - double xmax, - const T* y_values, - int num_y_values); - - /// @brief Get the domain. - /// @return the domain as a pair of doubles. - std::pair domain(); - - /// @brief Rescale the domain. - /// @param new_domain the new domain as a pair of doubles. - void rescaleDomain(std::pair new_domain); - - /// @brief Evaluate the value at x. - /// @param x a domain value - /// @return f(x) - double operator()(const double x) const; - - /// @brief Evaluate the derivative at x. - /// @param x a domain value - /// @return f'(x) - double derivative(const double x) const; - - /// @brief Equality operator. - /// @param other another UniformTableLinear. - /// @return true if they are represented exactly alike. - bool operator==(const UniformTableLinear& other) const; - - /// @brief Policies for how to behave when trying to evaluate outside the domain. - enum RangePolicy {Throw = 0, ClosestValue = 1, Extrapolate = 2}; - - /// @brief Sets the behavioural policy for evaluation to the left of the domain. - /// @param rp the policy - void setLeftPolicy(RangePolicy rp); - - /// @brief Sets the behavioural policy for evaluation to the right of the domain. - /// @param rp the policy - void setRightPolicy(RangePolicy rp); - - protected: - double xmin_; - double xmax_; - double xdelta_; - std::vector y_values_; - RangePolicy left_; - RangePolicy right_; - template - friend std::ostream& operator<<(std::ostream& os, const UniformTableLinear& t); - }; - - - // Member implementations. - - template - inline - UniformTableLinear - ::UniformTableLinear() - : left_(ClosestValue), right_(ClosestValue) - { - } - - template - inline - UniformTableLinear - ::UniformTableLinear(double xmin, - double xmax, - const std::vector& y_values) - : xmin_(xmin), xmax_(xmax), y_values_(y_values), - left_(ClosestValue), right_(ClosestValue) - { - assert(xmax > xmin); - assert(y_values.size() > 1); - xdelta_ = (xmax - xmin)/(y_values.size() - 1); - } - - template - inline - UniformTableLinear - ::UniformTableLinear(double xmin, - double xmax, - const T* y_values, - int num_y_values) - : xmin_(xmin), xmax_(xmax), - y_values_(y_values, y_values + num_y_values), - left_(ClosestValue), right_(ClosestValue) - { - assert(xmax > xmin); - assert(y_values_.size() > 1); - xdelta_ = (xmax - xmin)/(y_values_.size() - 1); - } - - template - inline std::pair - UniformTableLinear - ::domain() - { - return std::make_pair(xmin_, xmax_); - } - - template - inline void - UniformTableLinear - ::rescaleDomain(std::pair new_domain) - { - xmin_ = new_domain.first; - xmax_ = new_domain.second; - xdelta_ = (xmax_ - xmin_)/(y_values_.size() - 1); - } - - template - inline double - UniformTableLinear - ::operator()(const double xparam) const - { - // Implements ClosestValue policy. - double x = std::min(xparam, xmax_); - x = std::max(x, xmin_); - - // Lookup is easy since we are uniform in x. - double pos = (x - xmin_)/xdelta_; - double posi = std::floor(pos); - int left = int(posi); - if (left == int(y_values_.size()) - 1) { - // We are at xmax_ - return y_values_.back(); - } - double w = pos - posi; - return (1.0 - w)*y_values_[left] + w*y_values_[left + 1]; - } - - template - inline double - UniformTableLinear - ::derivative(const double xparam) const - { - // Implements derivative consistent - // with ClosestValue policy for function - double value; - if (xparam > xmax_ || xparam < xmin_) { - value = 0.0; - } else { - double x = std::min(xparam, xmax_); - x = std::max(x, xmin_); - // Lookup is easy since we are uniform in x. - double pos = (x - xmin_)/xdelta_; - double posi = std::floor(pos); - int left = int(posi); - if (left == int(y_values_.size()) - 1) { - // We are at xmax_ - --left; - } - value = (y_values_[left + 1] - y_values_[left])/xdelta_; - } - return value; - } - - - template - inline bool - UniformTableLinear - ::operator==(const UniformTableLinear& other) const - { - return xmin_ == other.xmin_ - && xdelta_ == other.xdelta_ - && y_values_ == other.y_values_ - && left_ == other.left_ - && right_ == other.right_; - } - - template - inline void - UniformTableLinear - ::setLeftPolicy(RangePolicy rp) - { - if (rp != ClosestValue) { - OPM_THROW(std::runtime_error, "Only ClosestValue RangePolicy implemented."); - } - left_ = rp; - } - - template - inline void - UniformTableLinear - ::setRightPolicy(RangePolicy rp) - { - if (rp != ClosestValue) { - OPM_THROW(std::runtime_error, "Only ClosestValue RangePolicy implemented."); - } - right_ = rp; - } - - - template - inline std::ostream& operator<<(std::ostream& os, const UniformTableLinear& t) - { - int n = t.y_values_.size(); - for (int i = 0; i < n; ++i) { - double f = double(i)/double(n - 1); - os << (1.0 - f)*t.xmin_ + f*t.xmax_ - << " " << t.y_values_[i] << '\n'; - } - return os; - } - - namespace utils - { - using Opm::UniformTableLinear; - } - - -} // namespace Opm - -#endif // OPM_UNIFORMTABLELINEAR_HEADER_INCLUDED diff --git a/opm/core/utility/buildUniformMonotoneTable.hpp b/opm/core/utility/buildUniformMonotoneTable.hpp deleted file mode 100644 index 3ebad7c9..00000000 --- a/opm/core/utility/buildUniformMonotoneTable.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ - -#ifndef OPM_BUILDUNIFORMMONOTONETABLE_HEADER_INCLUDED -#define OPM_BUILDUNIFORMMONOTONETABLE_HEADER_INCLUDED - -#include -#include - -namespace Opm { - - template - void buildUniformMonotoneTable(const std::vector& xv, - const std::vector& yv, - const int samples, - UniformTableLinear& table) - { - MonotCubicInterpolator interp(xv, yv); - std::vector uniform_yv(samples); - double xmin = xv[0]; - double xmax = xv.back(); - for (int i = 0; i < samples; ++i) { - double w = double(i)/double(samples - 1); - double x = (1.0 - w)*xmin + w*xmax; - uniform_yv[i] = interp(x); - } - table = UniformTableLinear(xmin, xmax, uniform_yv); - } - -} // namespace Opm - - - -#endif // OPM_BUILDUNIFORMMONOTONETABLE_HEADER_INCLUDED diff --git a/tests/test_cubic.cpp b/tests/test_cubic.cpp deleted file mode 100644 index ecbb3f68..00000000 --- a/tests/test_cubic.cpp +++ /dev/null @@ -1,73 +0,0 @@ -//=========================================================================== -// -// File: monotcubicinterpolator_test.cpp -// -// Created: Tue Dec 8 12:25:30 2009 -// -// Author(s): Atgeirr F Rasmussen -// Bård Skaflestad -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - Portions Copyright 2013 Uni Research AS. - - This file is part of The Open Reservoir Simulator Project (OpenRS). - - OpenRS is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenRS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenRS. If not, see . -*/ - -#include "config.h" - -/* --- Boost.Test boilerplate --- */ -#if HAVE_DYNAMIC_BOOST_TEST -#define BOOST_TEST_DYN_LINK -#endif - -#define NVERBOSE // Suppress own messages when throw()ing - -#define BOOST_TEST_MODULE CubicTest -#include -#include - -/* --- our own headers --- */ -#include -using namespace Opm; - -BOOST_AUTO_TEST_SUITE () - -BOOST_AUTO_TEST_CASE (cubic) -{ - const int num_v = 3; - double xv[num_v] = {0.0, 1.0, 2.0}; - double fv[num_v] = {10.0, 21.0, 2.0}; - std::vector x(xv, xv + num_v); - std::vector f(fv, fv + num_v); - MonotCubicInterpolator interp(x, f); - BOOST_REQUIRE_CLOSE (interp.evaluate(-1.0), 10., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(0.0), 10., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(0.0001), 10.0011, 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(0.5), 17.375, 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(1.0), 21., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(2.0), 2., 0.00001); - BOOST_REQUIRE_CLOSE (interp.evaluate(4.0), 2., 0.00001); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_sparsevector.cpp b/tests/test_sparsevector.cpp deleted file mode 100644 index a6f89be0..00000000 --- a/tests/test_sparsevector.cpp +++ /dev/null @@ -1,109 +0,0 @@ -//=========================================================================== -// -// File: sparsevector_test.cpp -// -// Created: Mon Jun 29 21:00:53 2009 -// -// Author(s): Atgeirr F Rasmussen -// BÃ¥rd Skaflestad -// -// $Date$ -// -// $Revision$ -// -//=========================================================================== - -/* - Copyright 2009, 2010 SINTEF ICT, Applied Mathematics. - Copyright 2009, 2010 Statoil ASA. - - This file is part of The Open Reservoir Simulator Project (OpenRS). - - OpenRS is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenRS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenRS. If not, see . -*/ - -#include - -#if HAVE_DYNAMIC_BOOST_TEST -#define BOOST_TEST_DYN_LINK -#endif -#define NVERBOSE // to suppress our messages when throwing - -#define BOOST_TEST_MODULE SparseVectorTest -#include - -#include - -using namespace Opm; - -BOOST_AUTO_TEST_CASE(construction_and_queries) -{ - const SparseVector sv1; - BOOST_CHECK(sv1.empty()); - BOOST_CHECK_EQUAL(sv1.size(), 0); - BOOST_CHECK_EQUAL(sv1.nonzeroSize(), 0); - - const int size = 100; - const int num_elem = 9; - const int elem[num_elem] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 }; - const int indices[num_elem] = { 1, 2, 3, 5, 8, 13, 21, 34, 55 }; - const SparseVector sv2(size, elem, elem + num_elem, indices, indices + num_elem); - BOOST_CHECK(!sv2.empty()); - BOOST_CHECK_EQUAL(sv2.size(), size); - BOOST_CHECK_EQUAL(sv2.element(0), 0); - BOOST_CHECK_EQUAL(sv2.element(1), 9); - BOOST_CHECK_EQUAL(sv2.element(2), 8); - BOOST_CHECK_EQUAL(sv2.element(3), 7); - BOOST_CHECK_EQUAL(sv2.element(4), 0); - BOOST_CHECK_EQUAL(sv2.element(5), 6); - BOOST_CHECK_EQUAL(sv2.element(55), 1); - BOOST_CHECK_EQUAL(sv2.element(99), 0); - BOOST_CHECK_EQUAL(sv2.nonzeroSize(), num_elem); - for (int i = 0; i < num_elem; ++i) { - BOOST_CHECK_EQUAL(sv2.nonzeroElement(i), elem[i]); - } - const SparseVector sv2_again(size, elem, elem + num_elem, indices, indices + num_elem); - BOOST_CHECK(sv2 == sv2_again); - SparseVector sv2_append(size, elem, elem + num_elem - 1, indices, indices + num_elem - 1); - BOOST_CHECK_EQUAL(sv2_append.nonzeroSize(), num_elem - 1); - sv2_append.addElement(elem[num_elem - 1], indices[num_elem - 1]); - BOOST_CHECK(sv2 == sv2_append); - SparseVector sv2_append2(size); - for (int i = 0; i < num_elem; ++i) { - sv2_append2.addElement(elem[i], indices[i]); - } - BOOST_CHECK(sv2 == sv2_append2); - sv2_append2.clear(); - SparseVector sv_empty; - BOOST_CHECK(sv2_append2 == sv_empty); - - // Tests that only run in debug mode. -#ifndef NDEBUG - // One element too few. - BOOST_CHECK_THROW(const SparseVector sv3(size, elem, elem + num_elem - 1, indices, indices + num_elem), std::exception); - // One element too many. - BOOST_CHECK_THROW(const SparseVector sv4(size, elem, elem + num_elem, indices, indices + num_elem - 1), std::exception); - // Indices out of range. - BOOST_CHECK_THROW(const SparseVector sv5(4, elem, elem + num_elem, indices, indices + num_elem), std::exception); - // Indices not strictly increasing. Cheating by using the elements as indices. - BOOST_CHECK_THROW(const SparseVector sv5(size, elem, elem + num_elem, elem, elem + num_elem), std::exception); - - // Do not ask for out of range indices. - BOOST_CHECK_THROW(sv1.element(0), std::exception); - BOOST_CHECK_THROW(sv2.element(-1), std::exception); - BOOST_CHECK_THROW(sv2.element(sv2.size()), std::exception); - BOOST_CHECK_THROW(sv2.nonzeroElement(sv2.nonzeroSize()), std::exception); -#endif -} - diff --git a/tests/test_uniformtablelinear.cpp b/tests/test_uniformtablelinear.cpp deleted file mode 100644 index ed7d0ea4..00000000 --- a/tests/test_uniformtablelinear.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - Copyright 2010 SINTEF ICT, Applied Mathematics. - - This file is part of the Open Porous Media project (OPM). - - OPM is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OPM is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OPM. If not, see . -*/ -#include - -#if defined(HAVE_DYNAMIC_BOOST_TEST) -#define BOOST_TEST_DYN_LINK -#endif -#define NVERBOSE // to suppress our messages when throwing - - -#define BOOST_TEST_MODULE UniformTableLinearTests -#include -#include - - - -BOOST_AUTO_TEST_CASE(table_operations) -{ - // Make a simple table. - double yva[] = { 1.0, -1.0, 3.0, 4.0, 2.0 }; - const int numvals = sizeof(yva)/sizeof(yva[0]); - std::vector yv(yva, yva + numvals); - const double xmin = 1.0; - const double xdelta = 2.5; - const double xmax = xmin + (numvals - 1)*xdelta; - Opm::utils::UniformTableLinear t1(xmin, xmax, yv); - Opm::utils::UniformTableLinear t1_copy1(1.0, 11.0, yv); - Opm::utils::UniformTableLinear t1_copy2(t1); - - // Check equality. - BOOST_CHECK(t1 == t1_copy1); - BOOST_CHECK(t1 == t1_copy2); - - // Check some evaluations. - for (int i = 0; i < numvals; ++i) { - BOOST_CHECK_EQUAL(t1(xmin + i*xdelta), yv[i]); - } - BOOST_CHECK_EQUAL(t1(2.25), 0.0); - BOOST_CHECK_EQUAL(t1(9.75), 3.0); - BOOST_CHECK_EQUAL(t1.derivative(9.75), -2.0/xdelta); - // Until we implement anything but the ClosestValue end policy, we only test that. - BOOST_CHECK_EQUAL(t1(xmin - 1.0), yv[0]); - BOOST_CHECK_EQUAL(t1(xmax + 1.0), yv.back()); - - // Domains. - BOOST_CHECK_EQUAL(t1.domain().first, xmin); - BOOST_CHECK_EQUAL(t1.domain().second, xmin + (numvals-1)*xdelta); - std::pair new_domain(-100.0, 20.0); - t1.rescaleDomain(new_domain); - BOOST_CHECK_EQUAL(t1.domain().first, new_domain.first); - BOOST_CHECK_EQUAL(t1.domain().second, new_domain.second); - for (int i = 0; i < numvals; ++i) { - BOOST_CHECK_EQUAL(t1(-100.0 + i*120.0/(double(numvals - 1))), yv[i]); - } - BOOST_CHECK_EQUAL(t1(-85.0), 0.0); - BOOST_CHECK(std::fabs(t1.derivative(0.0) + 2.0/30.0) < 1e-14); -}