示例#1
0
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)
示例#2
0
# 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
]
示例#3
0
def div(a):
    return divergence(a, R)
示例#4
0
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("")
示例#5
0
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]"))
示例#6
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))))
示例#7
0
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]