Skip to content

Commit

Permalink
Check user defined EWSB initial guess and substitutions
Browse files Browse the repository at this point in the history
  • Loading branch information
Dylan Harries committed Dec 7, 2016
1 parent 9cb28c6 commit 24ee182
Showing 1 changed file with 41 additions and 4 deletions.
45 changes: 41 additions & 4 deletions meta/EWSB.m
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@
CreateEWSBParametersInitialization::usage="Creates initialization
of EWSB output parameters";

GetValidEWSBInitialGuesses::usage="Remove invalid initial guess settings";

GetValidEWSBSubstitutions::usage="Remove invalid EWSB substitutions";

Begin["`Private`"];

DebugPrint[msg___] :=
Expand Down Expand Up @@ -172,14 +176,47 @@
Return[result];
];

InitialGuessFor[par_] :=
If[Parameters`IsRealParameter[par], par, Abs[par]];
GetValidEWSBInitialGuesses[initialGuess_List] :=
Module[{i},
For[i = 1, i <= Length[initialGuess], i++,
If[!MatchQ[initialGuess[[i]], {_,_}],
Print["Warning: ignoring invalid initial guess: ", initialGuess[[i]]];
];
];
Cases[initialGuess, {_,_}]
];

GetValidEWSBSubstitutions[substitutions_List] :=
Module[{i},
For[i = 1, i <= Length[substitutions], i++,
If[!MatchQ[substitutions[[i]], {_,_}],
Print["Warning: ignoring invalid EWSB substitution: ", substitutions[[i]]];
];
];
Cases[substitutions, {_,_}]
];

InitialGuessFor[par_, initialGuesses_List:{}] :=
Module[{guess},
If[initialGuesses === {} || !MemberQ[#[[1]]& /@ initialGuesses, par],
If[Parameters`IsRealParameter[par], guess = par, guess = Abs[par]];,
guess = Cases[initialGuesses, {p_ /; p === par, val_} :> val];
If[Length[guess] > 1,
Print["Warning: multiple initial guesses given for ", par];
];
guess = First[guess];
];
guess
];

FillInitialGuessArray[parametersFixedByEWSB_List, arrayName_String:"x_init"] :=
FillInitialGuessArray[parametersFixedByEWSB_List, initialGuessValues_List:{}, arrayName_String:"x_init"] :=
Module[{i, result = ""},
If[initialGuessValues =!= {},
result = result <> Parameters`CreateLocalConstRefsForInputParameters[initialGuessValues, "LOCALINPUT"];
];
For[i = 1, i <= Length[parametersFixedByEWSB], i++,
result = result <> arrayName <> "[" <> ToString[i-1] <> "] = " <>
CConversion`RValueToCFormString[InitialGuessFor[parametersFixedByEWSB[[i]]]] <>
CConversion`RValueToCFormString[InitialGuessFor[parametersFixedByEWSB[[i]], initialGuessValues]] <>
";\n";
];
Return[result];
Expand Down

0 comments on commit 24ee182

Please sign in to comment.