Loading [MathJax]/extensions/tex2jax.js
Peano
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
elastic.py
Go to the documentation of this file.
1# This file is part of the ExaHyPE2 project. For conditions of distribution and
2# use, please see the copyright notice at www.peano-framework.org
3from .equation import Equation
4
5
7 def __init__(self, dimensions):
8 self.dimensionsdimensions = dimensions
9 self.num_unknownsnum_unknowns = 5 if dimensions == 2 else 9
12
13 def eigenvalues(self):
14 return """
15#if Dimensions==2
16 const double cp = Q[6];
17 const double cs = Q[7];
18#else
19 const double cp = Q[10];
20 const double cs = Q[11];
21#endif
22 return std::max(std::abs(cp), std::abs(cs));
23"""
24
25 def flux(self):
26 return (
27 """
28 // Lamé parameters
29 const double iRho = 1.0/Q[5];
30 const double Mu = Q[5] * Q[7] * Q[7]; // rho*cs*cs
31 const double Lambda = Q[5] * Q[6] * Q[6] - 2.0 * Mu; // rho*cp*cp-2*Mu
32
33 switch (normal) {
34 case 0:
35 F[0] = -iRho * Q[2];
36 F[1] = -iRho * Q[4];
37 F[2] = -(2.0 * Mu + Lambda) * Q[0];
38 F[3] = -Lambda * Q[0];
39 F[4] = -Mu * Q[1];
40 break;
41 case 1:
42 F[0] = -iRho * Q[4];
43 F[1] = -iRho * Q[3];
44 F[2] = -Lambda * Q[1];
45 F[3] = -(2.0 * Mu + Lambda) * Q[1];
46 F[4] = -Mu * Q[0];
47 break;
48 }
49"""
50 if self.dimensionsdimensions == 2
51 else """
52 // Lamé parameters
53 const double iRho = 1.0/Q[9];
54 const double Mu = Q[9] * Q[11] * Q[11]; //rho*cs*cs
55 const double Lambda = Q[9] * Q[10] * Q[10] - 2.0 * Mu; //rho*cp*cp - 2 Mu
56
57 /*
58 vars in order are:
59 vx, vy, vz, sxx, syy, szz, sxy, sxz, syz, rho, cp, cs
60 */
61 switch(normal) {
62 case 0:
63 F[0] = - iRho*Q[3]; // -sigma_xx/rho
64 F[1] = - iRho*Q[6]; // -sigma_xy/rho
65 F[2] = - iRho*Q[7]; // -sigma_xz/rho
66 F[3] = -(Lambda + 2*Mu) * Q[0]; // -vx * (l+2m)
67 F[4] = - Lambda * Q[0]; // -vy * l
68 F[5] = - Lambda * Q[0]; // -vz * l
69 F[6] = - Mu * Q[1]; // -vy * m
70 F[7] = - Mu * Q[2]; // -vz * m
71 F[8] = 0.0; // 0.
72 break;
73 case 1:
74 F[0] = - iRho*Q[6]; // -sigma_xy/rho
75 F[1] = - iRho*Q[4]; // -sigma_yy/rho
76 F[2] = - iRho*Q[8]; // -sigma_yz/rho
77 F[3] = - Lambda * Q[1]; // -vx * l
78 F[4] = -(Lambda + 2*Mu) * Q[1]; // -vy * (l+2m)
79 F[5] = - Lambda * Q[1]; // -vz * l
80 F[6] = - Mu * Q[0]; // -vx * m
81 F[7] = 0.0; // 0.
82 F[8] = - Mu * Q[2]; // -vz * m
83 break;
84 case 2:
85 F[0] = - iRho*Q[7]; // -sigma_xz/rho
86 F[1] = - iRho*Q[8]; // -sigma_yz/rho
87 F[2] = - iRho*Q[5]; // -sigma_zz/rho
88 F[3] = - Lambda * Q[2]; // -vx * l
89 F[4] = - Lambda * Q[2]; // -vy * l
90 F[5] = -(Lambda + 2*Mu) * Q[2]; // -vz * (l+2m)
91 F[6] = 0.0; // 0.
92 F[7] = - Mu * Q[0]; // -vx * m
93 F[8] = - Mu * Q[1]; // -vy * m
94 }
95"""
96 )
__init__(self, dimensions)
Definition elastic.py:7