From 589469dc44fb4f707383d3512c7bab2ec351e238 Mon Sep 17 00:00:00 2001 From: Dylan Harries Date: Thu, 19 Jan 2017 17:55:50 +1030 Subject: [PATCH] Fix some compilation errors --- meta/SemiAnalytic.m | 17 +++++++++-------- templates/semi_analytic_solutions.cpp.in | 9 +++++---- templates/semi_analytic_solutions.hpp.in | 22 ++++++++++++++-------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/meta/SemiAnalytic.m b/meta/SemiAnalytic.m index dbf0e27e3..27b433269 100644 --- a/meta/SemiAnalytic.m +++ b/meta/SemiAnalytic.m @@ -727,14 +727,14 @@ ]; CreateLinearSystemSolver[dataset_, solutions_List] := - Module[{idx, inputs, pars, parTypes, elementType, basisLengths, basisSize, + Module[{idx, inputs, pars, parTypes, matrixType, basisLengths, basisSize, solverName, evaluatorName, result = ""}, idx = ToString[dataset[[1]]]; pars = dataset[[2]]; parTypes = CConversion`GetScalarElementType[Parameters`GetType[#]]& /@ dataset[[2]]; If[MemberQ[parTypes, CConversion`ScalarType[CConversion`complexScalarCType]], - elementType = CConversion`CreateCType[CConversion`ScalarType[CConversion`complexScalarCType]], - elementType = CConversion`CreateCType[CConversion`ScalarType[CConversion`realScalarCType]] + matrixType = "Eigen::MatrixXcd", + matrixType = "Eigen::MatrixXd" ]; basisLengths = Length[GetBasis[#]]& /@ Select[solutions, MemberQ[pars, GetName[#]]&]; If[Length[DeleteDuplicates[basisLengths]] =!= 1, @@ -744,7 +744,7 @@ basisSize = ToString[First[basisLengths]]; solverName = "solver_" <> idx; evaluatorName = "basis_" <> idx; - "auto " <> solverName <> " = create_solver<" <> elementType + "auto " <> solverName <> " = create_solver<" <> matrixType <> "," <> basisSize <> ">(datasets[" <> idx <> "], " <> evaluatorName <> ");\n" ]; @@ -848,7 +848,7 @@ body = "const std::size_t n = data.size();\n" <> matrixType <> " rhs(n" <> If[numCols =!= 1, ", " <> ToString[numCols], ""] <> ");\n" <> body; - body = body <> "auto solution = solver.solve(rhs);\n"; + body = body <> matrixType <> " solution = solver.solve(rhs);\n"; coeffs = CConversion`ToValidCSymbolString[#]& /@ CreateCoefficients[solution]; @@ -867,12 +867,13 @@ body = body <> setCoeffs; name = "calculate_" <> parStr <> "_coefficients"; - prototype = "void " <> name <> "(const " <> solverType <> "&, const std::vector<" - <> FlexibleSUSY`FSModelName <> "_soft_parameters>&);\n"; + prototype = "void " <> name <> "(const " <> solverType <> "&, const Data_vector_t&);\n"; function = "void " <> FlexibleSUSY`FSModelName <> "_semi_analytic_solutions::" <> name <> "(\n" - <> IndentText["const " <> solverType <> "& solver, const Data_vector_t& data)\n"] <> "{\n"; + <> IndentText["const " <> solverType <> "& solver, const " + <> FlexibleSUSY`FSModelName + <> "_semi_analytic_solutions::Data_vector_t& data)\n"] <> "{\n"; function = function <> IndentText[body] <> "}\n"; {prototype, function} diff --git a/templates/semi_analytic_solutions.cpp.in b/templates/semi_analytic_solutions.cpp.in index ad4069133..d15867c16 100644 --- a/templates/semi_analytic_solutions.cpp.in +++ b/templates/semi_analytic_solutions.cpp.in @@ -57,7 +57,8 @@ void @ModelName@_semi_analytic_solutions::calculate_trial_data(const @ModelName@ } } -@ModelName@_soft_parameters run_to_output_scale(const @ModelName@_soft_parameters& model, const Boundary_values& values) +@ModelName@_soft_parameters @ModelName@_semi_analytic_solutions::run_to_output_scale( + const @ModelName@_soft_parameters& model, const Boundary_values& values) const { @ModelName@_soft_parameters result(model); set_to_boundary_values(result, values); @@ -70,7 +71,7 @@ void @ModelName@_semi_analytic_solutions::calculate_trial_data(const @ModelName@ std::map @ModelName@_semi_analytic_solutions::create_datasets() const { std::map datasets; - for (const auto& point: trial_data) { + for (auto& point: trial_data) { for (auto idx: point.basis_sets) { datasets[idx].push_back(&point); } @@ -78,7 +79,7 @@ std::map @ModelName@_sem return datasets; } -void @ModelName@_semi_analytic_solutions::calculate_coefficients(const @ModelName@_mass_eigenstates& model_) +void @ModelName@_semi_analytic_solutions::calculate_coefficients(const @ModelName@_soft_parameters& model_) { @ModelName@_soft_parameters model(model_); model.run_to(input_scale); @@ -92,7 +93,7 @@ void @ModelName@_semi_analytic_solutions::calculate_coefficients(const @ModelNam } void @ModelName@_semi_analytic_solutions::set_to_boundary_values( - @ModelName@_soft_parameters& model, const Boundary_values& values) const + @ModelName@_soft_parameters& model, const Boundary_values& boundary_values) const { @applyBoundaryConditions@ } diff --git a/templates/semi_analytic_solutions.hpp.in b/templates/semi_analytic_solutions.hpp.in index a6c0163ad..4729deb7b 100644 --- a/templates/semi_analytic_solutions.hpp.in +++ b/templates/semi_analytic_solutions.hpp.in @@ -29,8 +29,12 @@ #ifndef @ModelName@_SEMI_ANALYTIC_SOLUTIONS_H #define @ModelName@_SEMI_ANALYTIC_SOLUTIONS_H +#include "@ModelName@_soft_parameters.hpp" + #include +#include +#include #include namespace flexiblesusy { @@ -70,7 +74,7 @@ private: std::vector basis_sets{}; }; - using Data_vector_t = std::vector + using Data_vector_t = std::vector; double input_scale{0.}; ///< scale at which boundary conditions hold double output_scale{0.}; ///< scale at which coefficients are calculated @@ -82,25 +86,27 @@ private: void initialize_trial_values(); void calculate_trial_data(const @ModelName@_soft_parameters&); void set_to_boundary_values(@ModelName@_soft_parameters&, const Boundary_values&) const; + @ModelName@_soft_parameters run_to_output_scale( + const @ModelName@_soft_parameters&, const Boundary_values&) const; std::map create_datasets() const; - template - Eigen::JacobiSVD > create_solver( + template + Eigen::JacobiSVD create_solver( const Data_vector_t&, const BasisEvaluator&) const; @calculateCoefficientsPrototypes@ }; -template -Eigen::JacobiSVD > create_solver( - const Data_vector_t& data, const BasisEvaluator& ev) const +template +Eigen::JacobiSVD @ModelName@_semi_analytic_solutions::create_solver( + const @ModelName@_semi_analytic_solutions::Data_vector_t& data, const BasisEvaluator& ev) const { const std::size_t n = data.size(); - Eigen::Matrix lhs(n, BasisSize); + MatrixType lhs(n, BasisSize); for (std::size_t i = 0; i < n; ++i) { lhs.row(i) = ev(data[i]->boundary_values); } - return Eigen::JacobiSVD >( + return Eigen::JacobiSVD( lhs, Eigen::ComputeThinU | Eigen::ComputeThinV); }