Peano
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
3 from .equation import Equation
4 
5 
7  def __init__(self, dimensions):
8  self.dimensionsdimensionsdimensions = dimensions
9  self.num_unknownsnum_unknownsnum_unknowns = 5 if dimensions == 2 else 9
10  self.num_auxiliary_variablesnum_auxiliary_variablesnum_auxiliary_variables = 3
11  self.is_linearis_linearis_linear = True
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::fmax(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.dimensionsdimensionsdimensions == 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  )
def __init__(self, dimensions)
Definition: elastic.py:7