-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFreeStream.m
164 lines (146 loc) · 5 KB
/
FreeStream.m
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
classdef FreeStream
%FREESTREAM Freestream conditions
% Parameters
% ----------
% Uinf: Float
% Free stream velocity
% alpha: Float
% Angle of attack in degrees
% u: Float
% Free stream velocity X component
% v: Float
% Free stream velocity Y component
% psi: Float
% Stream function
% phi: Float
% Scalar potential
properties
Uinf
alpha
u
v
psi
phi
end
methods
function obj = FreeStream(Uinf, alpha)
%FREESTREAM Construct an instance of FreeStream
%
% Arguments
% ----------
% Uinf: Float
% Velocity of free stream.
% alpha: Float
% Angle of attack in degrees.
%
% Returns
% -------
% obj: FreeStream object
% Object of type FreeStream.
arguments
Uinf {mustBeFloat, mustBeNonzero}
alpha {mustBeFloat}
end
obj.Uinf = Uinf;
obj.alpha = alpha;
obj.u = Uinf * cos(deg2rad(obj.alpha));
obj.v = Uinf * sin(deg2rad(obj.alpha));
end
function obj = setstreamfunction(obj, X, Y)
%SETSTREAMFUNCTION Computes the stream function generated from
% freestream.
%
% Arguments
% ----------
% obj: FreeStream object
% A free stream object.
% X: 2D Array of floats
% x-coordinate of the mesh points.
% Y: 2D Array of floats
% y-coordinate of the mesh points.
%
% Returns
% -------
% obj.psi: 2D Array of floats
% Stream function.
arguments
obj {mustBeNonempty}
X {mustBeFloat}
Y {mustBeFloat}
end
obj.psi = obj.Uinf * ( (-1) * sin(deg2rad(obj.alpha)) * X + cos(deg2rad(obj.alpha)) * Y);
end
function obj = setscalarpotential(obj, X, Y)
%SETSCALARPOTENTIAL Computes the scalar potential generated from
% freestream.
%
% Arguments
% ----------
% obj: FreeStream object
% A free stream object.
% X: 2D Array of floats
% x-coordinate of the mesh points.
% Y: 2D Array of floats
% y-coordinate of the mesh points.
%
% Returns
% -------
% obj.phi: 2D Array of floats
% Scalar potential.
arguments
obj {mustBeNonempty}
X {mustBeFloat}
Y {mustBeFloat}
end
obj.phi = obj.Uinf * (cos(deg2rad(obj.alpha)) * X + sin(deg2rad(obj.alpha)) * Y);
end
function [streamFunction] = getstreamfunction(obj, X, Y)
%GETSTREAMFUNCTION Gets the stream function without changing
% the input object.
%
% Arguments
% ----------
% obj: FreeStream object
% A free stream object.
% X: 2D Array of floats
% x-coordinate of the mesh points.
% Y: 2D Array of floats
% y-coordinate of the mesh points.
%
% Returns
% -------
% streamFunction: 2D Array of floats
% Stream function.
arguments
obj {mustBeNonempty}
X {mustBeFloat}
Y {mustBeFloat}
end
streamFunction = obj.Uinf * ( (-1) * sin(deg2rad(obj.alpha)) * X + cos(deg2rad(obj.alpha)) * Y);
end
function [scalarPotential] = getscalarpotential(obj, X, Y)
%GETSCALARPOTENTIAL Gets the scalar potential without changing
% the input object.
%
% Arguments
% ----------
% obj: FreeStream object
% A free stream object.
% X: 2D Array of floats
% x-coordinate of the mesh points.
% Y: 2D Array of floats
% y-coordinate of the mesh points.
%
% Returns
% -------
% scalarPotential: type = 2D Array of floats
% Scalar potential.
arguments
obj {mustBeNonempty}
X {mustBeFloat}
Y {mustBeFloat}
end
scalarPotential = obj.Uinf * (cos(deg2rad(obj.alpha)) * X + sin(deg2rad(obj.alpha)) * Y);
end
end
end