-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCreateShocks.mod
More file actions
189 lines (189 loc) · 13.6 KB
/
CreateShocks.mod
File metadata and controls
189 lines (189 loc) · 13.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
@#define NumShockProcesses = length( ShockProcesses ) / 6
@#for ShockIndex in 1 : NumShockProcesses
@#define IndexIntoShockProcesses = ShockIndex * 6 - 5
@#define VariableName = ShockProcesses[IndexIntoShockProcesses]
@#define Minimum = ShockProcesses[IndexIntoShockProcesses+1]
@#define Maximum = ShockProcesses[IndexIntoShockProcesses+2]
@#define SteadyState = ShockProcesses[IndexIntoShockProcesses+3]
@#define Rho = ShockProcesses[IndexIntoShockProcesses+4]
@#define Sigma = ShockProcesses[IndexIntoShockProcesses+5]
@#if UsingGrowthSyntax
@#define EndoVariables = EndoVariables + [ VariableName, Minimum, Maximum, "1" ]
@#else
@#define EndoVariables = EndoVariables + [ VariableName, Minimum, Maximum ]
@#endif
@#include "InternalClassifyDeclare.mod"
@#define ShockName = "epsilon_" + VariableName
@#define TransformedSteadyState = TransformationPrefix + SteadyState + TransformationSuffix
@#if Rho == "1"
@#define ExtraModelEquations = ExtraModelEquations + [ "[dynamic] " + FullVariableName + " = " + FullVariableName + "(-1)" + " + (" + Sigma + ") * " + ShockName + ";" ]
@#if IntroduceInitialParams
@#define ExtraModelEquations = ExtraModelEquations + [ "[static] " + FullVariableName + " = Initial_" + FullVariableName + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + "_ = " + InverseTransformationPrefix + "Initial_" + FullVariableName + InverseTransformationSuffix + ";" ]
parameters Initial_@{FullVariableName};
Initial_@{FullVariableName} = @{TransformedSteadyState};
@#else
@#define ExtraModelEquations = ExtraModelEquations + [ "[static] " + FullVariableName + " = " + TransformedSteadyState + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + "_ = " + SteadyState + ";" ]
@#endif
@#else
@#define ExtraModelEquations = ExtraModelEquations + [ FullVariableName + " = (1-(" + Rho + ")) * " + TransformedSteadyState + " + (" + Rho + ") * " + FullVariableName + "(-1)" + " + (" + Sigma + ") * " + ShockName + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + "_ = " + SteadyState + ";" ]
@#endif
varexo @{ShockName};
@#define ExtraShockBlockLines = ExtraShockBlockLines + [ "var " + ShockName + " = 1;" ]
@#endfor
@#define IndicesStringArray = EmptyStringArray
@#define IndicesArray = EmptyNumericArray
@#if SpatialDimensions > 0
@#define Indices = EmptyNumericArray
@#define Depth = 0
@#include "CreateIndicesArray.mod"
@#define SpatialNumPoints = length( IndicesStringArray )
@#for Point1 in 1 : SpatialNumPoints
@#define Indices1 = [ IndicesArray[ ((Point1-1)*SpatialDimensions+1):(Point1*SpatialDimensions) ] ]
@#if SpatialShape[1] == "P"
@#define Weight = "1"
@#for Dimension in 1 : SpatialDimensions
@#if ( Indices1[Dimension] == 1 ) || ( Indices1[Dimension] == SpatialPointsPerDimension )
@#define Weight = Weight + " * ( 1 / 2 / " + Numbers[SpatialPointsPerDimension] + " )"
@#else
@#define Weight = Weight + " * ( 1 / " + Numbers[SpatialPointsPerDimension] + " )"
@#endif
@#endfor
@#else
@#define Weight = "1 / ( " + Numbers[SpatialPointsPerDimension+1] + " ^ " + Numbers[SpatialDimensions+1] + " )"
@#endif
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ "Weight" + IndicesStringArray[Point1] + "_ = " + Weight + ";" ]
@#define ExtraModelEquations = ExtraModelEquations + [ "#Weight" + IndicesStringArray[Point1] + " = " + Weight + ";" ]
@#for Point2 in 1 : SpatialNumPoints
@#include "GetDistance.mod"
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ "Distance" + IndicesStringArray[Point1] + IndicesStringArray[Point2] + "_ = " + Distance + ";" ]
@#define ExtraModelEquations = ExtraModelEquations + [ "#Distance" + IndicesStringArray[Point1] + IndicesStringArray[Point2] + " = " + Distance + ";" ]
@#endfor
@#endfor
@#else
@#define SpatialNumPoints = 0
@#endif
@#define NumSpatialShockProcesses = length( SpatialShockProcesses ) / 7
@#for ShockIndex in 1 : NumSpatialShockProcesses
@#define IndexIntoShockProcesses = ShockIndex * 7 - 6
@#define VariableName = SpatialShockProcesses[IndexIntoShockProcesses]
@#define Minimum = SpatialShockProcesses[IndexIntoShockProcesses+1]
@#define Maximum = SpatialShockProcesses[IndexIntoShockProcesses+2]
@#define SteadyState = SpatialShockProcesses[IndexIntoShockProcesses+3]
@#define Rho = SpatialShockProcesses[IndexIntoShockProcesses+4]
@#define Sigma = SpatialShockProcesses[IndexIntoShockProcesses+5]
@#define ShockFunction = SpatialShockProcesses[IndexIntoShockProcesses+6]
@#if UsingGrowthSyntax
@#for Point in 1 : SpatialNumPoints
@#define EndoVariables = EndoVariables + [ VariableName + IndicesStringArray[Point], Minimum, Maximum, "1" ]
@#endfor
@#else
@#for Point in 1 : SpatialNumPoints
@#define EndoVariables = EndoVariables + [ VariableName + IndicesStringArray[Point], Minimum, Maximum ]
@#endfor
@#endif
@#include "InternalClassifyDeclare.mod"
@#define ShockName = "epsilon_" + VariableName
@#define TransformedSteadyState = TransformationPrefix + SteadyState + TransformationSuffix
@#for Point1 in 1 : SpatialNumPoints
@#for Point2 in ( Point1 + 1 ) : SpatialNumPoints
@#include "GetDistance.mod"
@#define InputString = ShockFunction
@#define ReplacementString = "( " + Distance + " )"
@#include "PerformReplacement.mod"
@#define ExtraShockBlockLines = ExtraShockBlockLines + [ "corr " + ShockName + IndicesStringArray[Point1] + ", " + ShockName + IndicesStringArray[Point2] + " = " + OutputString + ";" ]
@#endfor
@#if Rho == "1"
@#define ExtraModelEquations = ExtraModelEquations + [ "[dynamic] " + FullVariableName + IndicesStringArray[Point1] + " = " + FullVariableName + IndicesStringArray[Point1] + "(-1) + (" + Sigma + ") * " + ShockName + IndicesStringArray[Point1] + ";" ]
@#if IntroduceInitialParams
@#define ExtraModelEquations = ExtraModelEquations + [ "[static] " + FullVariableName + IndicesStringArray[Point1] + " = Initial_" + FullVariableName + IndicesStringArray[Point1] + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + "_ = " + InverseTransformationPrefix + "Initial_" + FullVariableName + IndicesStringArray[Point1] + InverseTransformationSuffix + ";" ]
parameters Initial_@{FullVariableName}@{IndicesStringArray[Point1]};
Initial_@{FullVariableName}@{IndicesStringArray[Point1]} = @{TransformedSteadyState};
@#else
@#define ExtraModelEquations = ExtraModelEquations + [ "[static] " + FullVariableName + IndicesStringArray[Point1] + " = " + TransformedSteadyState + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + IndicesStringArray[Point1] + "_ = " + SteadyState + ";" ]
@#endif
@#else
@#define ExtraModelEquations = ExtraModelEquations + [ FullVariableName + IndicesStringArray[Point1] + " = (1-(" + Rho + ")) * " + TransformedSteadyState + " + (" + Rho + ") * " + FullVariableName + IndicesStringArray[Point1] + "(-1) + (" + Sigma + ") * " + ShockName + IndicesStringArray[Point1] + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + IndicesStringArray[Point1] + "_ = " + SteadyState + ";" ]
@#endif
varexo @{ShockName + IndicesStringArray[Point1]};
@#define ExtraShockBlockLines = ExtraShockBlockLines + [ "var " + ShockName + IndicesStringArray[Point1] + " = 1;" ]
@#endfor
@#endfor
@#define NumSpatialDiffusionShockProcesses = length( SpatialDiffusionShockProcesses ) / 9
@#for ShockIndex in 1 : NumSpatialDiffusionShockProcesses
@#define IndexIntoShockProcesses = ShockIndex * 9 - 8
@#define VariableName = SpatialDiffusionShockProcesses[IndexIntoShockProcesses]
@#define Minimum = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+1]
@#define Maximum = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+2]
@#define SteadyState = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+3]
@#define Rho = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+4]
@#define Sigma = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+5]
@#define DiffusionAmount = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+6]
@#define DiffusionFunction = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+7]
@#define ShockFunction = SpatialDiffusionShockProcesses[IndexIntoShockProcesses+8]
@#if UsingGrowthSyntax
@#for Point in 1 : SpatialNumPoints
@#define EndoVariables = EndoVariables + [ VariableName + IndicesStringArray[Point], Minimum, Maximum, "1" ]
@#endfor
@#else
@#for Point in 1 : SpatialNumPoints
@#define EndoVariables = EndoVariables + [ VariableName + IndicesStringArray[Point], Minimum, Maximum ]
@#endfor
@#endif
@#include "InternalClassifyDeclare.mod"
@#define ShockName = "epsilon_" + VariableName
@#define TransformedSteadyState = TransformationPrefix + SteadyState + TransformationSuffix
@#for Point1 in 1 : SpatialNumPoints
@#define Integral = "( 0"
@#if ( SpatialShape[1] == "P" ) || ( Point1 == 1 )
@#define DefineKappa = 1
@#define KappaIndicesString = IndicesStringArray[Point1]
@#define NewModelEquation = "#kappa_" + FullVariableName + KappaIndicesString + " = ( 0"
@#else
@#define DefineKappa = 0
@#endif
@#for Point2 in 1 : SpatialNumPoints
@#define InputString = DiffusionFunction
@#define ReplacementString = "Distance" + IndicesStringArray[Point1] + IndicesStringArray[Point2]
@#include "PerformReplacement.mod"
@#define Integral = Integral + " + ( " + OutputString + " ) * " + FullVariableName + IndicesStringArray[Point2] + "(-1)"
@#if DefineKappa
@#define NewModelEquation = NewModelEquation + " + ( " + OutputString + " )"
@#endif
@#if Point1 < Point2
@#include "GetDistance.mod"
@#define InputString = ShockFunction
@#define ReplacementString = "( " + Distance + " )"
@#include "PerformReplacement.mod"
@#define ExtraShockBlockLines = ExtraShockBlockLines + [ "corr " + ShockName + IndicesStringArray[Point1] + ", " + ShockName + IndicesStringArray[Point2] + " = " + OutputString + ";" ]
@#endif
@#endfor
@#define Integral = Integral + " ) / ( " + Numbers[SpatialPointsPerDimension+1] + " ^ " + Numbers[SpatialDimensions+1] + " )"
@#if DefineKappa
@#define NewModelEquation = NewModelEquation + " ) / ( " + Numbers[SpatialPointsPerDimension+1] + " ^ " + Numbers[SpatialDimensions+1] + " );"
@#define ExtraModelEquations = ExtraModelEquations + [ NewModelEquation ]
@#endif
@#if Rho == "1"
@#define ExtraModelEquations = ExtraModelEquations + [ "[dynamic] " + FullVariableName + IndicesStringArray[Point1] + " = ( (1-(" + DiffusionAmount + ")) * " + FullVariableName + IndicesStringArray[Point1] + "(-1) + (" + DiffusionAmount + ") * ( " + Integral + " ) / kappa_" + FullVariableName + KappaIndicesString + " ) + (" + Sigma + ") * " + ShockName + IndicesStringArray[Point1] + ";" ]
@#if IntroduceInitialParams
@#define ExtraModelEquations = ExtraModelEquations + [ "[static] " + FullVariableName + IndicesStringArray[Point1] + " = Initial_" + FullVariableName + IndicesStringArray[Point1] + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + "_ = " + InverseTransformationPrefix + "Initial_" + FullVariableName + IndicesStringArray[Point1] + InverseTransformationSuffix + ";" ]
parameters Initial_@{FullVariableName}@{IndicesStringArray[Point1]};
Initial_@{FullVariableName}@{IndicesStringArray[Point1]} = @{TransformedSteadyState};
@#else
@#define ExtraModelEquations = ExtraModelEquations + [ "[static] " + FullVariableName + IndicesStringArray[Point1] + " = " + TransformedSteadyState + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + IndicesStringArray[Point1] + "_ = " + SteadyState + ";" ]
@#endif
@#else
@#define ExtraModelEquations = ExtraModelEquations + [ FullVariableName + IndicesStringArray[Point1] + " = (1-(" + Rho + ")) * " + TransformedSteadyState + " + (" + Rho + ") * ( (1-(" + DiffusionAmount + ")) * " + FullVariableName + IndicesStringArray[Point1] + "(-1) + (" + DiffusionAmount + ") * ( " + Integral + " ) / kappa_" + FullVariableName + KappaIndicesString + " ) " + " + (" + Sigma + ") * " + ShockName + IndicesStringArray[Point1] + ";" ]
@#define ExtraStartSteadyStateEquations = ExtraStartSteadyStateEquations + [ VariableName + IndicesStringArray[Point1] + "_ = " + SteadyState + ";" ]
@#endif
varexo @{ShockName + IndicesStringArray[Point1]};
@#define ExtraShockBlockLines = ExtraShockBlockLines + [ "var " + ShockName + IndicesStringArray[Point1] + " = 1;" ]
@#endfor
@#endfor