def P1_solution(): plt.figure() from fe1D import mesh_uniform, u_glob N_e_values = [2, 4, 8] d = 1 legends = [] for N_e in N_e_values: vertices, cells, dof_map = mesh_uniform(N_e=N_e, d=d, Omega=[0, 2], symbolic=False) h = vertices[1] - vertices[0] Ae = 1. / h * np.array([[1, -1], [-1, 1]]) N = N_e + 1 A = np.zeros((N, N)) b = np.zeros(N) for e in range(N_e): if vertices[e] >= 1: be = -h / 2. * np.array([1, 1]) else: be = h / 2. * np.array([0, 0]) for r in range(d + 1): for s in range(d + 1): A[dof_map[e][r], dof_map[e][s]] += Ae[r, s] b[dof_map[e][r]] += be[r] # Enforce boundary conditions A[0, :] = 0 A[0, 0] = 1 b[0] = 0 A[-1, :] = 0 A[-1, -1] = 1 b[-1] = 0 c = np.linalg.solve(A, b) # Plot solution print(('c:', c)) print(('vertices:', vertices)) print(('cells:', cells)) print(('len(cells):', len(cells))) print(('dof_map:', dof_map)) xc, u, nodes = u_glob(c, vertices, cells, dof_map) plt.plot(xc, u) legends.append('$N_e=%d$' % N_e) plt.plot(xc, exact_solution(xc), '--') legends.append('exact') plt.legend(legends, loc='lower left') plt.savefig('tmp3.png') plt.savefig('tmp3.pdf')
def P1_solution(): plt.figure() from fe1D import mesh_uniform, u_glob N_e_values = [2, 4, 8] d = 1 legends = [] for N_e in N_e_values: vertices, cells, dof_map = mesh_uniform( N_e=N_e, d=d, Omega=[0,2], symbolic=False) h = vertices[1] - vertices[0] Ae = 1./h*np.array( [[1, -1], [-1, 1]]) N = N_e + 1 A = np.zeros((N, N)) b = np.zeros(N) for e in range(N_e): if vertices[e] >= 1: be = -h/2.*np.array( [1, 1]) else: be = h/2.*np.array( [0, 0]) for r in range(d+1): for s in range(d+1): A[dof_map[e][r], dof_map[e][s]] += Ae[r,s] b[dof_map[e][r]] += be[r] # Enforce boundary conditions A[0,:] = 0; A[0,0] = 1; b[0] = 0 A[-1,:] = 0; A[-1,-1] = 1; b[-1] = 0 c = np.linalg.solve(A, b) # Plot solution xc, u, nodes = u_glob(c, vertices, cells, dof_map) plt.plot(xc, u) legends.append('$N_e=%d$' % N_e) plt.plot(xc, exact_solution(xc), '--') legends.append('exact') plt.legend(legends, loc='lower left') plt.savefig('tmp3.png'); plt.savefig('tmp3.pdf')
from fe1D import finite_element1D, mesh_uniform, u_glob import matplotlib.pyplot as plt C = 5 D = 2 L = 4 m_values = [0, 1, 2, 3, 4] d_values = [1, 2, 3, 4] for m in m_values: u = model2(x**m, L, C, D) print('\nm=%d, u: %s' % (m, u)) u_exact = sym.lambdify([x], u) for d in d_values: vertices, cells, dof_map = mesh_uniform( N_e=2, d=d, Omega=[0,L], symbolic=False) vertices[1] = 3 # displace vertex essbc = {} essbc[dof_map[-1][-1]] = D c, A, b, timing = finite_element1D( vertices, cells, dof_map, essbc, ilhs=lambda e, phi, r, s, X, x, h: phi[1][r](X, h)*phi[1][s](X, h), irhs=lambda e, phi, r, X, x, h: x**m*phi[0][r](X), blhs=lambda e, phi, r, s, X, x, h: 0, brhs=lambda e, phi, r, X, x, h: -C*phi[0][r](-1) if e == 0 else 0, intrule='GaussLegendre')
m = 2 u = model2(x**m, L, C, D) print u #u_exact = lambda x: D + C*(x-L) + (1./6)*(L**3 - x**3) u_exact = sym.lambdify([x, C, D, L], u) import numpy as np from fe1D import finite_element1D_naive, mesh_uniform # Override C, D and L with numeric values C = 5 D = 2 L = 4 d = 1 vertices, cells, dof_map = mesh_uniform( N_e=2, d=d, Omega=[0,L], symbolic=False) vertices[1] = 3 essbc = {} essbc[dof_map[-1][-1]] = D c, A, b, timing = finite_element1D_naive( vertices, cells, dof_map, essbc, ilhs=lambda e, phi, r, s, X, x, h: phi[1][r](X, h)*phi[1][s](X, h), irhs=lambda e, phi, r, X, x, h: x**m*phi[0][r](X), blhs=lambda e, phi, r, s, X, x, h: 0, brhs=lambda e, phi, r, X, x, h: -C*phi[0][r](-1) if e == 0 else 0, intrule='GaussLegendre',