Skip to content

Commit

Permalink
Fix some compilation errors
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Jan 19, 2017
1 parent 55c445a commit 589469d
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 20 deletions.
17 changes: 9 additions & 8 deletions meta/SemiAnalytic.m
Expand Up @@ -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,
Expand All @@ -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"
];

Expand Down Expand Up @@ -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];

Expand All @@ -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}
Expand Down
9 changes: 5 additions & 4 deletions templates/semi_analytic_solutions.cpp.in
Expand Up @@ -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);
Expand All @@ -70,15 +71,15 @@ void @ModelName@_semi_analytic_solutions::calculate_trial_data(const @ModelName@
std::map<int,@ModelName@_semi_analytic_solutions::Data_vector_t> @ModelName@_semi_analytic_solutions::create_datasets() const
{
std::map<int,Data_vector_t> datasets;
for (const auto& point: trial_data) {
for (auto& point: trial_data) {
for (auto idx: point.basis_sets) {
datasets[idx].push_back(&point);
}
}
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);
Expand All @@ -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@
}
Expand Down
22 changes: 14 additions & 8 deletions templates/semi_analytic_solutions.hpp.in
Expand Up @@ -29,8 +29,12 @@
#ifndef @ModelName@_SEMI_ANALYTIC_SOLUTIONS_H
#define @ModelName@_SEMI_ANALYTIC_SOLUTIONS_H

#include "@ModelName@_soft_parameters.hpp"

#include <Eigen/Core>
#include <Eigen/SVD>

#include <map>
#include <vector>

namespace flexiblesusy {
Expand Down Expand Up @@ -70,7 +74,7 @@ private:
std::vector<int> basis_sets{};
};

using Data_vector_t = std::vector<Model_data*>
using Data_vector_t = std::vector<Model_data*>;

double input_scale{0.}; ///< scale at which boundary conditions hold
double output_scale{0.}; ///< scale at which coefficients are calculated
Expand All @@ -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<int,Data_vector_t> create_datasets() const;

template <class Scalar, int BasisSize, class BasisEvaluator>
Eigen::JacobiSVD<Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> > create_solver(
template <class MatrixType, int BasisSize, class BasisEvaluator>
Eigen::JacobiSVD<MatrixType> create_solver(
const Data_vector_t&, const BasisEvaluator&) const;

@calculateCoefficientsPrototypes@
};

template <class Scalar, int BasisSize, class BasisEvaluator>
Eigen::JacobiSVD<Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> > create_solver(
const Data_vector_t& data, const BasisEvaluator& ev) const
template <class MatrixType, int BasisSize, class BasisEvaluator>
Eigen::JacobiSVD<MatrixType> @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<Scalar,Eigen::Dynamic,Eigen::Dynamic> 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<Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic> >(
return Eigen::JacobiSVD<MatrixType>(
lhs, Eigen::ComputeThinU | Eigen::ComputeThinV);
}

Expand Down

0 comments on commit 589469d

Please sign in to comment.