43 std::string BetaPressureArea::className =
45 "Beta", BetaPressureArea::create,
46 "Beta law pressure area relationship for the arterial system");
48 BetaPressureArea::BetaPressureArea(
66 gamma * dAUdx /
sqrt(
A);
131 const std::string &type)
142 if (type ==
"Bifurcation")
148 for (
int i = 0; i < 3; ++i)
150 GetC(c[i],
beta[i], Au[i], A0[i], alpha[i]);
153 k = c[0] * Au[1] * c[2] + Au[0] * c[2] * c[1] + Au[2] * c[0] * c[1];
154 K[0] = (c[0] - uu[0]) * k;
155 K[1] = (c[1] + uu[1]) * k;
156 K[2] = (c[2] + uu[2]) * k;
159 (-c[1] * uu[0] * c[2] * Au[0] +
160 Au[2] * c[1] * c[0] * c[0] +
161 Au[1] * c[0] * c[0] * c[2]) /
163 invJ.SetValue(0, 1, Au[1] * (c[1] - uu[1]) * c[0] * c[2] / K[0]);
164 invJ.SetValue(0, 2, Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[0]);
165 invJ.SetValue(0, 3, c[0] * c[1] * c[2] / K[0]);
166 invJ.SetValue(0, 4, -0.5 * c[0] * Au[1] * c[2] / K[0]);
167 invJ.SetValue(0, 5, -0.5 * Au[2] * c[0] * c[1] / K[0]);
169 invJ.SetValue(1, 0, Au[0] * (c[0] + uu[0]) * c[1] * c[2] / K[1]);
171 (c[0] * uu[1] * c[2] * Au[1] +
172 Au[2] * c[0] * c[1] * c[1] +
173 c[2] * c[1] * c[1] * Au[0]) /
175 invJ.SetValue(1, 2, -Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[1]);
176 invJ.SetValue(1, 3, -c[0] * c[1] * c[2] / K[1]);
177 invJ.SetValue(1, 4, -0.5 * (c[0] * Au[2] + Au[0] * c[2]) * c[1] / K[1]);
178 invJ.SetValue(1, 5, 0.5 * Au[2] * c[0] * c[1] / K[1]);
180 invJ.SetValue(2, 0, Au[0] * (c[0] + uu[0]) * c[1] * c[2] / K[2]);
181 invJ.SetValue(2, 1, -Au[1] * (c[1] - uu[1]) * c[0] * c[2] / K[2]);
183 (c[0] * c[1] * uu[2] * Au[2] +
184 c[0] * Au[1] * c[2] * c[2] +
185 c[1] * c[2] * c[2] * Au[0]) /
187 invJ.SetValue(2, 3, -c[0] * c[1] * c[2] / K[2]);
188 invJ.SetValue(2, 4, 0.5 * c[0] * Au[1] * c[2] / K[2]);
189 invJ.SetValue(2, 5, -0.5 * (Au[1] * c[0] + c[1] * Au[0]) * c[2] / K[2]);
193 (Au[0] * c[2] * c[1] - uu[0] * c[2] * Au[1] -
194 uu[0] * c[1] * Au[2]) /
196 invJ.SetValue(3, 1, -Au[0] * Au[1] * (c[1] - uu[1]) * c[2] / K[0]);
197 invJ.SetValue(3, 2, -Au[0] * Au[2] * (c[2] - uu[2]) * c[1] / K[0]);
198 invJ.SetValue(3, 3, -Au[0] * c[2] * c[1] / K[0]);
199 invJ.SetValue(3, 4, 0.5 * Au[0] * Au[1] * c[2] / K[0]);
200 invJ.SetValue(3, 5, 0.5 * Au[0] * c[1] * Au[2] / K[0]);
202 invJ.SetValue(4, 0, Au[0] * Au[1] * (c[0] + uu[0]) * c[2] / K[1]);
205 (c[0] * Au[1] * c[2] + c[0] * uu[1] * Au[2] +
206 c[2] * uu[1] * Au[0]) /
208 invJ.SetValue(4, 2, -Au[2] * Au[1] * (c[2] - uu[2]) * c[0] / K[1]);
209 invJ.SetValue(4, 3, -c[0] * Au[1] * c[2] / K[1]);
211 -0.5 * Au[1] * (c[0] * Au[2] + Au[0] * c[2]) / K[1]);
212 invJ.SetValue(4, 5, 0.5 * Au[2] * Au[1] * c[0] / K[1]);
214 invJ.SetValue(5, 0, Au[0] * Au[2] * (c[0] + uu[0]) * c[1] / K[2]);
215 invJ.SetValue(5, 1, -Au[2] * Au[1] * (c[1] - uu[1]) * c[0] / K[2]);
218 (Au[2] * c[0] * c[1] + c[0] * uu[2] * Au[1] +
219 c[1] * uu[2] * Au[0]) /
221 invJ.SetValue(5, 3, -Au[2] * c[0] * c[1] / K[2]);
222 invJ.SetValue(5, 4, 0.5 * Au[2] * Au[1] * c[0] / K[2]);
224 -0.5 * Au[2] * (Au[1] * c[0] + c[1] * Au[0]) / K[2]);
226 else if (type ==
"Merge")
232 for (
int i = 0; i < 3; ++i)
234 GetC(c[i],
beta[i], Au[i], A0[i], alpha[i]);
237 k = c[0] * Au[1] * c[2] + Au[0] * c[2] * c[1] + Au[2] * c[0] * c[1];
238 K[0] = (c[0] - uu[0]) * k;
239 K[1] = (c[1] + uu[1]) * k;
240 K[2] = (c[2] + uu[2]) * k;
243 (-c[1] * uu[0] * c[2] * Au[0] +
244 Au[2] * c[1] * c[0] * c[0] +
245 Au[1] * c[0] * c[0] * c[2]) /
247 invJ.SetValue(0, 1, Au[1] * (c[1] - uu[1]) * c[0] * c[2] / K[0]);
248 invJ.SetValue(0, 2, Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[0]);
249 invJ.SetValue(0, 3, c[0] * c[1] * c[2] / K[0]);
250 invJ.SetValue(0, 4, -0.5 * c[0] * Au[1] * c[2] / K[0]);
251 invJ.SetValue(0, 5, -0.5 * Au[2] * c[0] * c[1] / K[0]);
253 invJ.SetValue(1, 0, Au[0] * (c[0] + uu[0]) * c[1] * c[2] / K[1]);
255 (c[0] * uu[1] * c[2] * Au[1] +
256 Au[2] * c[0] * c[1] * c[1] +
257 c[2] * c[1] * c[1] * Au[0]) /
259 invJ.SetValue(1, 2, -Au[2] * (c[2] - uu[2]) * c[0] * c[1] / K[1]);
260 invJ.SetValue(1, 3, -c[0] * c[1] * c[2] / K[1]);
261 invJ.SetValue(1, 4, -0.5 * (c[0] * Au[2] + Au[0] * c[2]) * c[1] / K[1]);
262 invJ.SetValue(1, 5, 0.5 * Au[2] * c[0] * c[1] / K[1]);
264 invJ.SetValue(2, 0, Au[0] * (c[0] - uu[0]) * c[1] * c[2] / K[2]);
265 invJ.SetValue(2, 1, -Au[1] * (c[1] + uu[1]) * c[0] * c[2] / K[2]);
267 -(c[0] * uu[2] * c[1] * Au[2] -
268 Au[1] * c[0] * c[2] * c[2] -
269 c[1] * c[2] * c[2] * Au[0]) /
271 invJ.SetValue(2, 3, -c[0] * c[1] * c[2] / K[2]);
272 invJ.SetValue(2, 4, -0.5 * Au[1] * c[0] * c[2] / K[2]);
273 invJ.SetValue(2, 5, 0.5 * (Au[1] * c[0] + Au[0] * c[1]) * c[2] / K[2]);
277 (Au[0] * c[2] * c[1] + uu[0] * c[2] * Au[1] +
278 uu[0] * c[1] * Au[2]) /
280 invJ.SetValue(3, 1, Au[0] * Au[1] * (c[1] + uu[1]) * c[2] / K[0]);
282 invJ.SetValue(3, 2, -Au[0] * Au[2] * (c[2] - uu[2]) * c[1] / K[0]);
283 invJ.SetValue(3, 3, -Au[0] * c[2] * c[1] / K[0]);
284 invJ.SetValue(3, 4, 0.5 * Au[0] * Au[1] * c[2] / K[0]);
285 invJ.SetValue(3, 5, 0.5 * Au[0] * c[1] * Au[2] / K[0]);
287 invJ.SetValue(4, 0, Au[0] * Au[1] * (c[0] + uu[0]) * c[2] / K[1]);
290 (c[0] * Au[1] * c[2] + c[0] * uu[1] * Au[2] +
291 c[2] * uu[1] * Au[0]) /
293 invJ.SetValue(4, 2, -Au[2] * Au[1] * (c[2] - uu[2]) * c[0] / K[1]);
294 invJ.SetValue(4, 3, -c[0] * Au[1] * c[2] / K[1]);
296 -0.5 * Au[1] * (c[0] * Au[2] + Au[0] * c[2]) / K[1]);
297 invJ.SetValue(4, 5, 0.5 * Au[2] * Au[1] * c[0] / K[1]);
299 invJ.SetValue(5, 0, Au[0] * Au[2] * (c[0] + uu[0]) * c[1] / K[2]);
300 invJ.SetValue(5, 1, -Au[2] * Au[1] * (c[1] - uu[1]) * c[0] / K[2]);
303 (Au[2] * c[0] * c[1] + c[0] * uu[2] * Au[1] +
304 c[1] * uu[2] * Au[0]) /
306 invJ.SetValue(5, 3, -Au[2] * c[0] * c[1] / K[2]);
307 invJ.SetValue(5, 4, 0.5 * Au[2] * Au[1] * c[0] / K[2]);
309 -0.5 * Au[2] * (Au[1] * c[0] + c[1] * Au[0]) / K[2]);
311 else if (type ==
"Interface")
317 for (
int i = 0; i < 2; ++i)
319 GetC(c[i],
beta[i], Au[i], A0[i], alpha[i]);
322 k = (c[0] * Au[1] + Au[0] * c[1]);
323 K[0] = (c[0] + uu[0]) * k;
324 K[1] = (c[1] + uu[1]) * k;
327 (Au[1] * c[0] * c[0] - c[1] * uu[0] * Au[0]) / K[0]);
328 invJ.SetValue(0, 1, Au[1] * (c[1] - uu[1]) * c[0] / K[0]);
329 invJ.SetValue(0, 2, c[0] * c[1] / K[0]);
330 invJ.SetValue(0, 3, -0.5 * c[0] * Au[1] / K[0]);
332 invJ.SetValue(1, 0, Au[0] * (c[0] + uu[0]) * c[1] / K[1]);
334 (c[0] * uu[1] * Au[1] + c[1] * c[1] * Au[0]) / K[1]);
335 invJ.SetValue(1, 2, -c[0] * c[1] / K[1]);
336 invJ.SetValue(1, 3, -0.5 * Au[0] * c[1] / K[1]);
338 invJ.SetValue(2, 0, Au[0] * (Au[0] * c[1] - uu[0] * Au[1]) / K[0]);
339 invJ.SetValue(2, 1, -Au[0] * Au[1] * (c[1] - uu[1]) / K[0]);
340 invJ.SetValue(2, 2, -Au[0] * c[1] / K[0]);
341 invJ.SetValue(2, 3, 0.5 * Au[1] * Au[0] / K[0]);
343 invJ.SetValue(3, 0, Au[0] * Au[1] * (c[0] + uu[0]) / K[1]);
344 invJ.SetValue(3, 1, -Au[1] * (c[0] * Au[1] + uu[1] * Au[0]) / K[1]);
345 invJ.SetValue(3, 2, -c[0] * Au[1] / K[1]);
346 invJ.SetValue(3, 3, -0.5 * Au[1] * Au[0] / K[1]);
virtual void v_GetW1(NekDouble &W1, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
virtual ~BetaPressureArea()
virtual void v_GetC(NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
virtual void v_GetW2(NekDouble &W2, const NekDouble &u, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
virtual void v_GetCharIntegral(NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
virtual void v_GetUFromChars(NekDouble &u, const NekDouble &W1, const NekDouble &W2)
virtual void v_GetAFromChars(NekDouble &A, const NekDouble &W1, const NekDouble &W2, const NekDouble &beta, const NekDouble &A0, const NekDouble &alpha=0.5)
virtual void v_GetJacobianInverse(NekMatrix< NekDouble > &invJ, const Array< OneD, NekDouble > &Au, const Array< OneD, NekDouble > &uu, const Array< OneD, NekDouble > &beta, const Array< OneD, NekDouble > &A0, const Array< OneD, NekDouble > &alpha, const std::string &type)
virtual void v_GetPressure(NekDouble &P, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &dAUdx, const NekDouble &gamma=0, const NekDouble &alpha=0.5)
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
void GetCharIntegral(NekDouble &I, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
void GetC(NekDouble &c, const NekDouble &beta, const NekDouble &A, const NekDouble &A0, const NekDouble &alpha=0.5)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ beta
Gauss Radau pinned at x=-1,.
The above copyright notice and this permission notice shall be included.
PressureAreaFactory & GetPressureAreaFactory()
scalarT< T > sqrt(scalarT< T > in)