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 if block_name == "ANALYTICAL_TRACTION_1":
29 c_val_dx = np.full_like(x, 0.1)
30 else:
31 c_val_dx = np.zeros_like(x)
32
33 c_val_dy = np.zeros_like(x)
34 c_val_dz = np.zeros_like(z)
35
36 return np.hstack([
37 c_val_dx.reshape((-1, 1)),
38 c_val_dy.reshape((-1, 1)),
39 c_val_dz.reshape((-1, 1))
40 ])
41
42def analytical_external_strain(delta_t,t, x, y, z, block_name):
43 # ext_strain_val = np.exp(2*x)
44 ext_strain_val = t * y * 0.1
45 ext_strain = np.hstack([ext_strain_val.reshape((-1,1)) ])
46 return ext_strain
47
48def analytical_elastic(delta_t, t, x, y, z, block_name):
49 # Default modulus at the center (x=0)
50 E0 = 1000
51 x = np.asarray(x)
52 youngs_modulus = 1000 * np.exp(0.1 * x)
53 # youngs_modulus = 1000 * np.ones_like(x)
54 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)