def derive_exprs(): R = ReferenceFrame('N') x, y = R[0], R[1] w = x**2 * (1 - x)**2 / 10 c = gradient(w, R) * sympy.exp(-w) f = divergence(c, R) return dict(quantities=dict(w=w, c=c, f=f), R=R)
# alpha = symbols('a') A1, A2 = symbols('A1 A2') B1, B2 = symbols('B1 B2') C2 = symbols('C2') # Define interface offset (alpha) alpha = 0.25 + A1 * t * sin(B1 * N[0]) + A2 * sin(B2 * N[0] + C2 * t) # Define the solution equation (eta) xi = (N[1] - alpha) / sqrt(2 * kappa) eta_sol = (1 - tanh(xi)) / 2 eq_sol = simplify( time_derivative(eta_sol, N) + 4 * eta_sol * (eta_sol - 1) * (eta_sol - 0.5) - divergence(kappa * gradient(eta_sol, N), N)) # substitute coefficient values parameters = ((kappa, params['kappa']), (A1, 0.0075), (B1, 8.0 * pi), (A2, 0.03), (B2, 22.0 * pi), (C2, 0.0625 * pi)) subs = [sub.subs(parameters) for sub in (eq_sol, eta_sol)] # generate FiPy lambda functions from sympy.utilities.lambdify import lambdify (eq_fp, eta_fp) = [ lambdify((N[0], N[1], t), sub, modules=fp.numerix) for sub in subs ]
def div(a): return divergence(a, R)
y = R[1] a=-0.5 b=1.5 visc=1e-1 lambda_=(1/(2*visc)-sqrt(1/(4*visc**2)+4*pi**2)) print(" visc=%f" % visc) u=[0,0] u[0]=1-exp(lambda_*x)*cos(2*pi*y) u[1]=lambda_/(2*pi)*exp(lambda_*x)*sin(2*pi*y) p=(exp(3*lambda_)-exp(-lambda_))/(8*lambda_)-exp(2*lambda_*x)/2 p=p - integrate(p, (x,a,b)) grad_p = gradient(p, R).to_matrix(R) f0 = -divergence(visc*gradient(u[0], R), R) + grad_p[0] f1 = -divergence(visc*gradient(u[1], R), R) + grad_p[1] f2 = divergence(u[0]*R.x + u[1]*R.y, R) print("\n * RHS:") print(ccode(f0, assign_to = "values[0]")) print(ccode(f1, assign_to = "values[1]")) print(ccode(f2, assign_to = "values[2]")) print("\n * ExactSolution:") print(ccode(u[0], assign_to = "values[0]")) print(ccode(u[1], assign_to = "values[1]")) print(ccode(p, assign_to = "values[2]")) print("")
R = ReferenceFrame('R') x = R[0] y = R[1] visc = Symbol("nu") # visc=1e-1; # print(" visc=%f" % visc) u = [0, 0] u[0] = pi * sin(pi * x) * sin(pi * x) * sin(2 * pi * y) u[1] = -pi * sin(2 * pi * x) * sin(pi * y) * sin(pi * y) p = cos(pi * x) * sin(pi * y) # p=p - integrate(p, (x,a,b)); grad_p = gradient(p, R).to_matrix(R) f0 = simplify(-divergence(visc * gradient(u[0], R), R)) + grad_p[0] f1 = simplify(-divergence(visc * gradient(u[1], R), R)) + grad_p[1] f2 = simplify(divergence(u[0] * R.x + u[1] * R.y, R)) print("f:") print(f0) print(f1) print(f2) print("\n * RHS:") print(ccode(f0, assign_to="values[0]")) print(ccode(f1, assign_to="values[1]")) print(ccode(f2, assign_to="values[2]")) print("\n * ExactSolution:") print(ccode(u[0], assign_to="values[0]"))
a = -0.5 b = 1.5 visc = 1e-1 lambda_ = (1 / (2 * visc) - sqrt(1 / (4 * visc**2) + 4 * pi**2)) print(" visc=%f" % visc) u = [0, 0] u[0] = 1 - exp(lambda_ * x) * cos(2 * pi * y) u[1] = lambda_ / (2 * pi) * exp(lambda_ * x) * sin(2 * pi * y) p = (exp(3 * lambda_) - exp(-lambda_)) / (8 * lambda_) - exp( 2 * lambda_ * x) / 2 p = p - integrate(p, (x, a, b)) grad_p = gradient(p, R).to_matrix(R) f0 = -divergence(visc * gradient(u[0], R), R) + grad_p[0] f1 = -divergence(visc * gradient(u[1], R), R) + grad_p[1] f2 = divergence(u[0] * R.x + u[1] * R.y, R) print("\n * RHS:") print(ccode(f0, assign_to="values[0]")) print(ccode(f1, assign_to="values[1]")) print(ccode(f2, assign_to="values[2]")) print("\n * ExactSolution:") print(ccode(u[0], assign_to="values[0]")) print(ccode(u[1], assign_to="values[1]")) print(ccode(p, assign_to="values[2]")) print("") print("pressure mean:", N(integrate(p, (x, a, b))))
du = 0. * R.x for x in (R[0], R[1], R[2]): for vect in (R.x, R.y, R.z): du += diff(u.dot(vect), x, x) * vect D_visc = 0.0 D_therm = 0.0 D_comp = 0.0 B_therm = Symbol("B_therm") B_comp = Symbol("B_comp") S_therm = Symbol("S_therm") S_comp = Symbol("S_comp") # Construct the equations continuity = divergence(u, R) momentum = I * ang * u + gradient(p, R) - B_therm * temp * R.z + B_comp * chem * R.z - D_visc * du temperature = I * ang * temp + S_therm * u.dot(R.z) - D_therm * divergence(gradient(temp, R), R) composition = I * ang * chem + S_comp * u.dot(R.z) - D_comp * divergence(gradient(chem, R), R) # Solve the equations # print(solve(temperature, "T")) subT = solve(temperature, "T")[0] # print(solve(composition, "C")) subC = solve(composition, "C")[0] # print(solve(momentum.dot(R.z).subs(Temp, subT).subs(Chem, subC), "P")) subP = solve(momentum.dot(R.z).subs(Temp, subT).subs(Chem, subC), "P")[0] # print(solve(momentum.dot(R.x).subs(P, subP), "Ux")) subUx = solve(momentum.dot(R.x).subs(P, subP), "Ux")[0]