diff --git a/.gitmodules b/.gitmodules index 442ac76345bc8676ac9ff97ebddd226b829c9542..1ae3a515ca97c782c0ffddb7421022274bd84a3a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "externals/fmt"] - path = externals/fmt +[submodule "libs/fmt"] + path = libs/fmt url = https://github.com/fmtlib/fmt.git diff --git a/CMakeLists.txt b/CMakeLists.txt index a6705c673cfca97564c2ab2ddd891ca48526dcc8..cf9f42f0c15e2b700a53af215bee80758d04a8c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.1) -project(amdis CXX) +project(amdis LANGUAGES CXX VERSION 0.2) #find dune-common and set the module path find_package(dune-common REQUIRED) @@ -17,16 +17,18 @@ dune_enable_all_packages(MODULE_LIBRARIES amdis fmt) add_subdirectory("bin") add_subdirectory("cmake/modules") add_subdirectory("doc") -add_subdirectory("externals") +add_subdirectory("examples" EXCLUDE_FROM_ALL) +add_subdirectory("libs") add_subdirectory("src") add_subdirectory("test") -add_subdirectory("examples" EXCLUDE_FROM_ALL) target_link_libraries(amdis fmt) option(ENABLE_ALL_WARNINGS "enable all meaningful warnings" OFF) if (ENABLE_ALL_WARNINGS) - target_compile_options(amdis PUBLIC "-Wall" "-Wextra" "-pedantic" "-Wnon-virtual-dtor" "-Wold-style-cast" "-Wcast-align" "-Woverloaded-virtual" "-Wpedantic" "-Wconversion") + target_compile_options(amdis PUBLIC "-Wall" "-Wextra" "-pedantic" "-Wnon-virtual-dtor" + "-Wold-style-cast" "-Wcast-align" "-Woverloaded-virtual" + "-Wpedantic" "-Wconversion") endif (ENABLE_ALL_WARNINGS) # finalize the dune project, e.g. generating config.h etc. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 36efd13485251cdd625f3a3be4ce6125e7c15916..b12dfa6d5c9d46b8c2073f718ab417ce084b80a1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,14 +1,13 @@ # GIT Workflow -Follow the ideas of [a-successful-git-branching-model](http://nvie.com/posts/a-successful-git-branching-model), -especially +Follow the git workflow: - Create a new branch for all new features, following the naming convention `feature/XYZ` -- Merge features in the `develop` branch only - Correct Bugs in issue branches, following the naming convention `issue/XYZ` -- Merge issues in the `develop` branch, except when it is a hotfix, then merge - to `master` and `develop` -- For all merges create a meaningful *Merge Request* in GitLab +- For features and issues *Merge Request* into the master branch should be created in GitLab +- Do not push into `master` directly +- Releases are created in a new branch `release/VERSION` that is not deleted after merged into master. + After the merge, a tag with name `vVERSION` should be created. # Code Style-Guide @@ -44,24 +43,6 @@ files, such as `math.h` (remember that windows files-systems are case insensitiv thus, there is no difference between `math.h` and `Math.H`.) ## Generale file structure -Every header file should start with a copyright notice and an include guard `#pragma once`, -where the text of the copyright notice is given in the file `tools/license.templ.txt` -and can automatically by added, using the script files in the `tools` directory: - -``` c++ -// Software License for AMDiS -// -// Copyright (c) 2015 Institute for Scientific Computing, Technische Universitaet Dresden -// All rights reserved. -// Authors: Simon Praetorius -// -// This file is part of the AMDiS Library -// see also the LICENSE file in the distribution. - -#pragma once -``` - -After the include guard a list of include files can be added, see *Names and Order of Includes*. ### Names and Order of Includes @@ -84,9 +65,7 @@ For example, the includes in `io/VtkWriter.cpp` might look like this: #include "io/VtkWriter.hpp" // [open]mpi header -#ifdef HAVE_PARALLEL_DOMAIN_AMDIS #include <mpi.h> -#endif // std c++ headers #include <cmath> @@ -141,7 +120,7 @@ double const& d_ref = d; ### Functions Try to put all parameters in the line of the function declaration until it exceeds -the maximum line length. Then list remaining arguments aligned with the first +the maximum line length. Then list remaining arguments aligned with the first function argument. Follow the style of the brackets, like ```c++ @@ -166,7 +145,7 @@ public: : member1_(arg1) , member2_(arg2) {} - + private: Arg1 member1_; Arg2 member2_; diff --git a/LICENSE b/LICENSE index 0abd3507f63bfb8dc5be8d32d2b222b4dd626625..e32b9fc379b26e8c7b478091c9d1eb7a6b43b598 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ The MIT License (MIT) -Copyright (c) 2016-2018 Simon Praetorius - 2018 Felix Müller +Copyright (c) 2016-2019 Simon Praetorius + 2019 Felix Müller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 85344c1e21a3baf4d8e44780b662025afe21e4d7..e5970dde6f5db8622a4ea50ba057674ca07360ed 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,14 @@ The `dunecontrol` script searches for the required (See the file `dune.module` for an up-to-date list of dependencies). The dune modules can be obtained from https://gitlab.dune-project.org and need to be found in a subdirectory of `DUNE_CONTROL_PATH`. See also https://dune-project.org/doc/installation -for details about the installation of dune modules. +for details about the installation of dune modules. You can use the script + +``` +bin/install_all_dune_modules.sh DOWNLOAD_DIR +``` + +to clone all dune repositories into `DOWNLOAD_DIR` and provide a simple way using `dunecontrol` +to install all of them at once. Additionally the following optional libraries can be used: - [MTL4](https://gitlab.math.tu-dresden.de/spraetor/mtl4) (use this fork to get up-to-date changes) diff --git a/amdis.pc.in b/amdis.pc.in index c41ceecce7b6d78dbf18a6e44596979726328989..69e6642e19dc316c611b19b7867ee072276f625f 100644 --- a/amdis.pc.in +++ b/amdis.pc.in @@ -9,8 +9,8 @@ DEPENDENCIES=@REQUIRES@ Name: @PACKAGE_NAME@ Version: @VERSION@ Description: AMDiS dune-module -URL: https://gitlab.math.tu-dresden.de/spraetor/dune-amdis +URL: https://gitlab.mn.tu-dresden.de/amdis/amdis-core Requires: dune-common dune-geometry dune-localfunctions dune-typetree dune-grid dune-functions -Suggests: dune-uggrid dune-alugrid dune-foamgrid +Suggests: dune-uggrid dune-alugrid dune-foamgrid dune-spgrid dune-ist Libs: -L${libdir} Cflags: -I${includedir} diff --git a/bin/amdisproject b/bin/amdisproject index 6c0e11bed29952416ab8c4d0ca3b9202206ba6d5..6985c88c59cfb75aca4435fcd466ba8bc07a0f7e 100644 --- a/bin/amdisproject +++ b/bin/amdisproject @@ -523,10 +523,6 @@ M_DELIM ################## PROJECT.CC ################## echo "- $PROJECT/src/$MODULE.cpp" cat> "$PROJECT/src/$MODULE.cpp" << CC_DELIM -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - #include <amdis/AMDiS.hpp> using namespace AMDiS; @@ -684,7 +680,7 @@ mesh->global refinements: 0 $NAME->mesh: mesh $NAME->solver->name: default -$NAME->solver->tolerance: 1.e-8 +$NAME->solver->relative tolerance: 1.e-6 $NAME->solver->info: 1 $NAME->output[0]->filename: $NAME_ @@ -801,4 +797,5 @@ echo echo "done." echo "------------------------------------------" echo "For further details read the Dune build system documentation at" -echo "https://www.dune-project.org/buildsystem/" +echo "https://www.dune-project.org/buildsystem/ or in the file" +echo "dune-common/doc/buildsystem/dune-common.rst" diff --git a/bin/install_all_dune_modules.sh b/bin/install_all_dune_modules.sh new file mode 100755 index 0000000000000000000000000000000000000000..c28675ab4964b616b61d5c9a57733a23feaf6356 --- /dev/null +++ b/bin/install_all_dune_modules.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +if [ $# -lt 1 ]; then + echo "usage: $0 DOWNLOAD_DIR" + exit 1 +fi + +DOWNLOAD_DIR="$1" + +mkdir -p ${DOWNLOAD_DIR}/dune +cd ${DOWNLOAD_DIR}/dune + +CORE_MODULES=("dune-common" "dune-geometry" "dune-grid" "dune-istl" "dune-localfunctions") +STAGING_MODULES=("dune-functions" "dune-typetree" "dune-uggrid") +EXTENSIONS_MODULES=("dune-alugrid" "dune-spgrid" "dune-foamgrid") + +for MOD in ${CORE_MODULES[*]}; do + git clone https://gitlab.dune-project.org/core/${MOD}.git --branch releases/2.6 --single-branch +done + +for MOD in ${STAGING_MODULES[*]}; do + git clone https://gitlab.dune-project.org/staging/${MOD}.git --branch releases/2.6 --single-branch +done + +for MOD in ${EXTENSIONS_MODULES[*]}; do + git clone https://gitlab.dune-project.org/extensions/${MOD}.git --branch releases/2.6 --single-branch +done + +echo "" +echo "==============================================================" +echo "To build all dune modules run the commands... " +echo " DUNE_CONTROL_PATH=${DOWNLOAD_DIR}/dune dunecontrol configure" +echo " DUNE_CONTROL_PATH=${DOWNLOAD_DIR}/dune dunecontrol make -j4 " +echo "==============================================================" \ No newline at end of file diff --git a/dune.module b/dune.module index bd22ba1dd5e77e68e84713eeb8d7624f062f645a..fecc62715f734a0be199526ab67863e9a35061e4 100644 --- a/dune.module +++ b/dune.module @@ -3,7 +3,7 @@ ################################ Module: amdis -Version: 0.1 +Version: 0.2 Maintainer: simon.praetorius@tu-dresden.de Depends: dune-common (>= 2.6) dune-geometry (>= 2.6) dune-localfunctions (>= 2.6) dune-typetree (>= 2.6) dune-grid (>= 2.6) dune-functions (>= 2.6) -Suggests: dune-uggrid dune-alugrid dune-foamgrid dune-spgrid +Suggests: dune-uggrid dune-alugrid dune-foamgrid dune-spgrid dune-istl diff --git a/externals/CMakeLists.txt b/libs/CMakeLists.txt similarity index 89% rename from externals/CMakeLists.txt rename to libs/CMakeLists.txt index 119453ecae6e0574354ce7d9dee84b652323e5ba..2234cb005fafbb9ce33921fbf96a5fcc3b808505 100644 --- a/externals/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -12,7 +12,7 @@ if (GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") endif() endif() -if (NOT EXISTS "${PROJECT_SOURCE_DIR}/externals/fmt/CMakeLists.txt") +if (NOT EXISTS "${PROJECT_SOURCE_DIR}/libs/fmt/CMakeLists.txt") message(FATAL_ERROR "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.") endif() @@ -23,7 +23,7 @@ dune_library_add_sources(fmt SOURCES ) target_include_directories(fmt PUBLIC - $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/externals/fmt/include>) + $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/libs/fmt/include>) install(FILES fmt/include/fmt/core.h diff --git a/externals/fmt b/libs/fmt similarity index 100% rename from externals/fmt rename to libs/fmt diff --git a/src/amdis/BoundaryCondition.hpp b/src/amdis/BoundaryCondition.hpp index e3a231aad23b6a1244480d7309019133baf73d3d..1b10038ff0f401860ecfcb0529d8ba88f034ee48 100644 --- a/src/amdis/BoundaryCondition.hpp +++ b/src/amdis/BoundaryCondition.hpp @@ -26,8 +26,8 @@ namespace AMDiS template <class RowBasis, class ColBasis> void init(RowBasis const& rowBasis, ColBasis const& colBasis) { /* do nothing */ } - template <class Matrix, class X, class B, class RN, class CN> - void fillBoundaryCondition(Matrix& A, X& x, B& b, RN const& rowNode, CN const& colNode) { /* do nothing */ } + template <class Matrix, class X, class B, class RN, class RTP, class CN, class CTP> + void fillBoundaryCondition(Matrix& A, X& x, B& b, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath) { /* do nothing */ } protected: std::shared_ptr<BoundaryManagerBase const> boundaryManager_{nullptr}; diff --git a/src/amdis/CMakeLists.txt b/src/amdis/CMakeLists.txt index cde9be08724e21a1ceb68249b8df7a5863d31b1b..706ce91d9481db4232090b5ad6295ae0645adc1c 100644 --- a/src/amdis/CMakeLists.txt +++ b/src/amdis/CMakeLists.txt @@ -30,6 +30,7 @@ install(FILES DataTransfer.hpp DataTransfer.inc.hpp DirichletBC.hpp + DirichletBC.inc.hpp FileWriter.hpp FileWriterInterface.hpp Flag.hpp diff --git a/src/amdis/DirichletBC.hpp b/src/amdis/DirichletBC.hpp index df1947d1d6e057b90ea4401d1f8008755f924c9c..c097c9bd4fa21d6269e0d7c2b1800119c0445739 100644 --- a/src/amdis/DirichletBC.hpp +++ b/src/amdis/DirichletBC.hpp @@ -73,8 +73,8 @@ namespace AMDiS * \tparam RN RowNode * \tparam CN ColNode **/ - template <class Mat, class Sol, class Rhs, class RN, class CN> - void fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode); + template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP> + void fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath); private: Dune::Std::optional<std::function<bool(Domain)>> predicate_; diff --git a/src/amdis/DirichletBC.inc.hpp b/src/amdis/DirichletBC.inc.hpp index 69f873ccb63a5a74514371ea0dd7a14295189f00..af7e85ff71bd893088c45604ccf9834650a16951 100644 --- a/src/amdis/DirichletBC.inc.hpp +++ b/src/amdis/DirichletBC.inc.hpp @@ -28,15 +28,15 @@ init(RB const& rowBasis, CB const& colBasis) template <class D, class R> - template <class Mat, class Sol, class Rhs, class RN, class CN> + template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP> void DirichletBC<D,R>:: -fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode) +fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath) { auto columns = Constraints<Mat>::dirichletBC(matrix, dirichletNodes_); Dune::Hybrid::ifElse(std::is_same<RangeType_t<RN>, R>{}, [&](auto id) { - auto subBasis = Dune::Functions::subspaceBasis(rhs.basis(), rowNode.treePath()); + auto subBasis = Dune::Functions::subspaceBasis(rhs.basis(), rowTreePath); Dune::Functions::interpolate(subBasis, rhs, values_, dirichletNodes_); }); @@ -46,7 +46,7 @@ fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, C Dune::Hybrid::ifElse(std::is_same<RangeType_t<CN>, R>{}, [&](auto id) { - auto subBasis = Dune::Functions::subspaceBasis(solution.basis(), colNode.treePath()); + auto subBasis = Dune::Functions::subspaceBasis(solution.basis(), colTreePath); Dune::Functions::interpolate(subBasis, solution, values_, dirichletNodes_); }); } diff --git a/src/amdis/PeriodicBC.hpp b/src/amdis/PeriodicBC.hpp index 4b8229e52a7ea384fcc6cb005caed50c2320550e..c4253a2f9b34b861a7c35546f5f22bbc590d0871 100644 --- a/src/amdis/PeriodicBC.hpp +++ b/src/amdis/PeriodicBC.hpp @@ -65,8 +65,8 @@ namespace AMDiS template <class RB, class CB> void init(RB const& rowBasis, CB const& colBasis); - template <class Mat, class Sol, class Rhs, class RN, class CN> - void fillBoundaryCondition(Mat& A, Sol& x, Rhs& b, RN const& rowNode, CN const& colNode); + template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP> + void fillBoundaryCondition(Mat& A, Sol& x, Rhs& b, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath); auto const& associations() const { diff --git a/src/amdis/PeriodicBC.inc.hpp b/src/amdis/PeriodicBC.inc.hpp index 7c5ebbf139a2ebf1a6b178a82a05edd62e416663..104b47f338a93c20fc6c3a94c27a327cf06105c3 100644 --- a/src/amdis/PeriodicBC.inc.hpp +++ b/src/amdis/PeriodicBC.inc.hpp @@ -231,9 +231,9 @@ coords(Node const& tree, std::vector<std::size_t> const& localIndices) const template <class D, class MI> - template <class Mat, class Sol, class Rhs, class RN, class CN> + template <class Mat, class Sol, class Rhs, class RN, class RTP, class CN, class CTP> void PeriodicBC<D,MI>:: -fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, CN const& colNode) +fillBoundaryCondition(Mat& matrix, Sol& solution, Rhs& rhs, RN const& rowNode, RTP rowTreePath, CN const& colNode, CTP colTreePath) { Constraints<Mat>::periodicBC(matrix, periodicNodes_, associations_); diff --git a/src/amdis/ProblemStat.inc.hpp b/src/amdis/ProblemStat.inc.hpp index a7786ad972be1eca17ba386ac7887ea3919a3feb..4e4f89bbd8f78d234bb16ce40d558518e17e6606 100644 --- a/src/amdis/ProblemStat.inc.hpp +++ b/src/amdis/ProblemStat.inc.hpp @@ -456,13 +456,13 @@ buildAfterAdapt(AdaptInfo& /*adaptInfo*/, Flag /*flag*/, bool asmMatrix, bool as systemMatrix_->finish(asmMatrix); rhs_->finish(asmVector); - for_each_node(localView.tree(), [&,this](auto const& rowNode, auto) { - for_each_node(localView.tree(), [&,this](auto const& colNode, auto) { + for_each_node(localView.tree(), [&,this](auto const& rowNode, auto row_tp) { + for_each_node(localView.tree(), [&,this](auto const& colNode, auto col_tp) { // finish boundary condition for (auto bc : dirichletBCs_[rowNode][colNode]) - bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, colNode); + bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, row_tp, colNode, col_tp); for (auto bc : periodicBCs_[rowNode][colNode]) - bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, colNode); + bc->fillBoundaryCondition(*systemMatrix_, *solution_, *rhs_, rowNode, row_tp, colNode, col_tp); }); }); diff --git a/src/amdis/ProblemStatTraits.hpp b/src/amdis/ProblemStatTraits.hpp index 27a4610dafce018344467bb502a27228f5194b7f..432be6f05bbe6e5bfe1a0e293666bcf3fa094238 100644 --- a/src/amdis/ProblemStatTraits.hpp +++ b/src/amdis/ProblemStatTraits.hpp @@ -4,7 +4,6 @@ #include <dune/functions/functionspacebases/compositebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> #include <dune/functions/functionspacebases/powerbasis.hh> -#include <dune/functions/functionspacebases/pqknodalbasis.hh> #include <dune/grid/yaspgrid.hh> #include <amdis/common/Logical.hpp> diff --git a/src/amdis/common/CMakeLists.txt b/src/amdis/common/CMakeLists.txt index 1eec42e568a6e7b63a9135be22071466aae8f489..ebf8a782466ce7b9fa2fd0c71dc86059bc87272a 100644 --- a/src/amdis/common/CMakeLists.txt +++ b/src/amdis/common/CMakeLists.txt @@ -16,7 +16,6 @@ install(FILES Index.hpp Literals.hpp Logical.hpp - Loops.hpp Math.hpp MultiTypeMatrix.hpp MultiTypeVector.hpp diff --git a/src/amdis/linearalgebra/eigen/SolverConfig.hpp b/src/amdis/linearalgebra/eigen/SolverConfig.hpp index 3296aba7e354c08842bc4724430db41a47f410ab..cbc1b43e56c4a5e2844b56034daba65c4bae67b5 100644 --- a/src/amdis/linearalgebra/eigen/SolverConfig.hpp +++ b/src/amdis/linearalgebra/eigen/SolverConfig.hpp @@ -72,7 +72,7 @@ namespace AMDiS static void init(std::string const& prefix, Eigen::UmfPackLU<M>& solver) { DUNE_UNUSED auto& control = solver.umfpackControl(); - // here, umfpack parameters could be initialized + // TODO: initialized umfpack parameters } }; #endif diff --git a/src/amdis/linearalgebra/eigen/SolverCreator.hpp b/src/amdis/linearalgebra/eigen/SolverCreator.hpp index 1e92827c5f392eab919f85996217a329b34096ae..4110f9efd959db502d73224fe6ae3b8292af8135 100644 --- a/src/amdis/linearalgebra/eigen/SolverCreator.hpp +++ b/src/amdis/linearalgebra/eigen/SolverCreator.hpp @@ -30,7 +30,7 @@ namespace AMDiS using SolverBase = LinearSolverInterface<Matrix, VectorX, VectorB>; using Scalar = typename Matrix::Scalar; - std::unique_ptr<SolverBase> createWithString(std::string const& prefix) override + std::unique_ptr<SolverBase> createWithString(std::string prefix) override { // get creator string for preconditioner std::string precon = "no"; @@ -40,12 +40,12 @@ namespace AMDiS precon == "jacobi") { auto creator = SolverCreator<Eigen::DiagonalPreconditioner<Scalar>>{}; - return creator.create(prefix); + return creator.createWithString(prefix); } else if (precon == "ilu") { auto creator = SolverCreator<Eigen::IncompleteLUT<Scalar>>{}; - return creator.create(prefix); + return creator.createWithString(prefix); } else if (precon == "ic") { @@ -53,7 +53,7 @@ namespace AMDiS } else { auto creator = SolverCreator<Eigen::IdentityPreconditioner>{}; - return creator.create(prefix); + return creator.createWithString(prefix); } } @@ -62,18 +62,18 @@ namespace AMDiS using IncompleteCholesky = SolverCreator<Eigen::IncompleteCholesky<Scalar, Eigen::Lower|Eigen::Upper, Ordering>>; - std::unique_ptr<SolverBase> createIncompleteCholesky(std::string const& prefix) const + std::unique_ptr<SolverBase> createIncompleteCholesky(std::string prefix) const { std::string ordering = "amd"; Parameters::get(prefix + "->precon->ordering", ordering); if (ordering == "amd") { using AMD = Eigen::AMDOrdering<typename Matrix::StorageIndex>; - return IncompleteCholesky<AMD>{}.create(prefix); + return IncompleteCholesky<AMD>{}.createWithString(prefix); } else { using NATURAL = Eigen::NaturalOrdering<typename Matrix::StorageIndex>; - return IncompleteCholesky<NATURAL>{}.create(prefix); + return IncompleteCholesky<NATURAL>{}.createWithString(prefix); } } };