Skip to content

Commit

Permalink
Introduce separate class for calculating semi-analytic solutions
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Jan 13, 2017
1 parent c50cda8 commit e106774
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 2 deletions.
20 changes: 18 additions & 2 deletions meta/FlexibleSUSY.m
Expand Up @@ -1457,14 +1457,24 @@ corresponding tadpole is real or imaginary (only in models with CP
WriteTwoScaleModelClass[files_List] :=
WriteOut`ReplaceInFiles[files, { Sequence @@ GeneralReplacementRules[] }];

WriteSemiAnalyticSolutionsClass[semiAnalyticSolns_List, files_List] :=
Module[{semiAnalyticSolutionsDefs = "", boundaryValuesDefs = "",
coefficientGetters = ""},
semiAnalyticSolutionsDefs = SemiAnalytic`CreateSemiAnalyticSolutionsDefinitions[semiAnalyticSolns];
boundaryValuesDefs = SemiAnalytic`CreateBoundaryValuesDefinitions[semiAnalyticSolns];
coefficientGetters = SemiAnalytic`CreateSemiAnalyticCoefficientGetters[semiAnalyticSolns];
WriteOut`ReplaceInFiles[files, { "@semiAnalyticSolutionsDefs@" -> IndentText[WrapLines[semiAnalyticSolutionsDefs]],
"@boundaryValuesDefs@" -> IndentText[WrapLines[boundaryValuesDefs]],
"@coefficientGetters@" -> IndentText[WrapLines[coefficientGetters]],
Sequence @@ GeneralReplacementRules[] }];
];

WriteSemiAnalyticModelClass[semiAnalyticBCs_List, semiAnalyticSolns_List, files_List] :=
Module[{semiAnalyticSolutionsDefs = "", boundaryValuesDefs = "",
applySemiAnalyticBCs = "", calculateParameterValues = "", calculateCoeffFunctions = "",
setBoundaryValueParameters = ""},
semiAnalyticSolutionsDefs = SemiAnalytic`CreateSemiAnalyticSolutionsDefinitions[semiAnalyticSolns];
semiAnalyticSolutionsInit = SemiAnalytic`CreateSemiAnalyticSolutionsInitialization[semiAnalyticSolns];
boundaryValuesDefs = SemiAnalytic`CreateBoundaryValuesDefinitions[semiAnalyticSolns];
boundaryValuesInit = SemiAnalytic`CreateBoundaryValuesInitialization[semiAnalyticSolns];
applySemiAnalyticBCs = SemiAnalytic`ApplySemiAnalyticBoundaryConditions[semiAnalyticBCs, semiAnalyticSolns];
calculateParameterValues = SemiAnalytic`EvaluateSemiAnalyticSolutions[semiAnalyticSolns];
setBoundaryValueParameters = SemiAnalytic`SetBoundaryValueParameters[semiAnalyticSolns];
Expand Down Expand Up @@ -3149,6 +3159,12 @@ corresponding tadpole is real or imaginary (only in models with CP
FileNameJoin[{FSOutputDir, FlexibleSUSY`FSModelName <> "_semi_analytic_soft_parameters_constraint.cpp"}]}
}];

Print["Creating class for semi-analytic solutions ..."];
WriteSemiAnalyticSolutionsClass[semiAnalyticSolns,
{{FileNameJoin[{$flexiblesusyTemplateDir, "semi_analytic_solutions.hpp.in"}],
FileNameJoin[{FSOutputDir, FlexibleSUSY`FSModelName <> "_semi_analytic_solutions.hpp"}]}}
];

Print["Creating class for semi-analytic model ..."];
WriteSemiAnalyticModelClass[semiAnalyticBCs, semiAnalyticSolns,
{{FileNameJoin[{$flexiblesusyTemplateDir, "semi_analytic_model.hpp.in"}],
Expand Down
14 changes: 14 additions & 0 deletions meta/SemiAnalytic.m
Expand Up @@ -33,6 +33,7 @@
CreateBoundaryValuesDefinitions::usage="";
CreateBoundaryValuesInitialization::usage="";
SetBoundaryValueParameters::usage="";
CreateSemiAnalyticCoefficientGetters::usage="";

ApplySemiAnalyticBoundaryConditions::usage="";
EvaluateSemiAnalyticSolutions::usage="";
Expand Down Expand Up @@ -529,6 +530,19 @@
Return[def];
];

CreateSemiAnalyticCoefficientGetters[solution_SemiAnalyticSolution] :=
Module[{getters = "", coeffs},
coeffs = CreateCoefficientParameters[solution];
getters = (CConversion`CreateInlineGetters[CConversion`ToValidCSymbolString[#[[1]]], #[[2]]])& /@ coeffs;
StringJoin[getters]
];

CreateSemiAnalyticCoefficientGetters[solutions_List] :=
Module[{getter = ""},
(getter = getter <> CreateSemiAnalyticCoefficientGetters[#])& /@ solutions;
Return[getter];
];

CreateBoundaryValuesDefinitions[solutions_List] :=
Module[{boundaryValues, defns},
boundaryValues = CreateBoundaryValueParameters[solutions];
Expand Down
1 change: 1 addition & 0 deletions templates/module.mk
Expand Up @@ -95,6 +95,7 @@ SEMI_ANALYTIC_TEMPLATES := \
$(DIR)/semi_analytic_model.cpp.in \
$(DIR)/semi_analytic_soft_parameters_constraint.hpp.in \
$(DIR)/semi_analytic_soft_parameters_constraint.cpp.in \
$(DIR)/semi_analytic_solutions.hpp.in \
$(DIR)/semi_analytic_susy_convergence_tester.hpp.in \
$(DIR)/semi_analytic_susy_convergence_tester.cpp.in \
$(DIR)/semi_analytic_susy_scale_constraint.hpp.in \
Expand Down
52 changes: 52 additions & 0 deletions templates/semi_analytic_solutions.hpp.in
@@ -0,0 +1,52 @@
// ====================================================================
// This file is part of FlexibleSUSY.
//
// FlexibleSUSY 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.
//
// FlexibleSUSY 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 FlexibleSUSY. If not, see
// <http://www.gnu.org/licenses/>.
// ====================================================================

// File generated at @DateAndTime@

/**
* @file @ModelName@_semi_analytic_solutions.hpp
* @brief contains class for computing the semi-analytic solutions
*
* This file was generated at @DateAndTime@ with FlexibleSUSY
* @FlexibleSUSYVersion@ (git commit: @FlexibleSUSYGitCommit@) and SARAH @SARAHVersion@ .
*/

#ifndef @ModelName@_SEMI_ANALYTIC_SOLUTIONS_H
#define @ModelName@_SEMI_ANALYTIC_SOLUTIONS_H

namespace flexiblesusy {

/**
* @class @ModelName@_semi_analytic_solutions
* @brief class with routines for computing the semi-analytic solutions
*/
class @ModelName@_semi_analytic_solutions {
public:
@coefficientGetters@
void calculate_coefficients(double);

private:
// semi-analytic solution coefficients
@semiAnalyticSolutionsDefs@
// boundary values
@boundaryValuesDefs@
};

} // namespace flexiblesusy

#endif

0 comments on commit e106774

Please sign in to comment.