v0.16.0
Loading...
Searching...
No Matches
analytical_expr.py
Go to the documentation of this file.
1import math
2import numpy as np
3
4# Analytical displacement wrapper for MoFEM
5def analytical_disp(delta_t, t, x, y, z, tx, ty, tz, block_name):
6 x = np.asarray(x)
7 z = np.asarray(z)
8
9 if block_name == "ANALYTICAL_DISPLACEMENT_1":
10 c_val_dx = 0.1 * x
11 else:
12 c_val_dx = np.zeros_like(x)
13
14 c_val_dy = np.zeros_like(x)
15 c_val_dz = np.zeros_like(z)
16
17 return np.hstack([
18 c_val_dx.reshape((-1, 1)),
19 c_val_dy.reshape((-1, 1)),
20 c_val_dz.reshape((-1, 1))
21 ])
22
23# Analytical traction wrapper for MoFEM
24def analytical_traction(delta_t, t, x, y, z, tx, ty, tz, block_name):
25 x = np.asarray(x)
26 z = np.asarray(z)
27
28 # _1 is the legacy block name; _3 is the JSON-applied name for this mesh.
29 if block_name in ("ANALYTICAL_TRACTION_1", "ANALYTICAL_TRACTION_3"):
30 c_val_dx = np.full_like(x, 0.1)
31 elif block_name == "ANALYTICAL_TRACTION_2":
32 c_val_dx = np.full_like(x, -0.2)
33 else:
34 c_val_dx = np.zeros_like(x)
35
36 c_val_dy = np.zeros_like(x)
37 c_val_dz = np.zeros_like(z)
38
39 return np.hstack([
40 c_val_dx.reshape((-1, 1)),
41 c_val_dy.reshape((-1, 1)),
42 c_val_dz.reshape((-1, 1))
43 ])
44
45def analytical_external_strain(delta_t,t, x, y, z, block_name):
46 # ext_strain_val = np.exp(2*x)
47 ext_strain_val = t * y * 0.1
48 ext_strain = np.hstack([ext_strain_val.reshape((-1,1)) ])
49 return ext_strain
50
51def analytical_elastic(delta_t, t, x, y, z, block_name):
52 # Default modulus at the center (x=0)
53 E0 = 1000
54 x = np.asarray(x)
55 youngs_modulus = 1000 * np.exp(0.1 * x)
56 # youngs_modulus = 1000 * np.ones_like(x)
57 return np.hstack([youngs_modulus.reshape((-1, 1))])
analytical_traction(delta_t, t, x, y, z, tx, ty, tz, block_name)
analytical_external_strain(delta_t, t, x, y, z, block_name)
analytical_disp(delta_t, t, x, y, z, tx, ty, tz, block_name)
analytical_elastic(delta_t, t, x, y, z, block_name)