我想定义或访问循环外的八个变量J1L,J2L,J3L,J4L和J1R,J2R,J3R,J4R。为了说清楚,在代码中,我在循环中定义了这八个量,有没有办法在外面定义它们?或者,因为它们已经在这里定义,我如何在循环外使用它们。以下是代码的相关部分:
import numpy as np
def sweep():
num_cells = 10
phi = np.ones(num_cells)
psi = np.zeros((num_cells + 1, 4))
cur = np.ones(num_cells)
mu = np.array([-0.8611363115, -0.3399810435, 0.3399810435, 0.8611363115])
w = np.array([0.3478548451, 0.6521451549, 0.6521451549, 0.3478548451])
tolerance = 1e-6
max_it = 100
err_phi = 1
it = 0
A = np.zeros((num_cells, 4))
B = np.zeros((num_cells, 4))
S = np.ones((num_cells, 4)) * 0.5
Q = np.copy(S)
L = 10.0
sigma_s = 1.0
sigma_t = 2.0
dx = L / num_cells
for i in range(0, num_cells):
for n in range(0, 4):
smu = np.sign(mu[n])
denom = 2.0 * mu[n] + smu * sigma_t * dx
A[i, n] = (2.0 * mu[n] - smu * sigma_t * dx) / denom
B[i, n] = smu * 2.0 * dx / denom
while err_phi > tolerance and it <= max_it:
phi_old = np.zeros(num_cells)
for i in range(num_cells):
phi_old[i] = phi[i]
for i in range(num_cells):
Q[i, :] = S[i, :] + 0.5 * phi[i] * sigma_s
#Boundary Condition
for i in range(0, num_cells):
psi[i, :] = 0.0
# Right to left
for i in range(num_cells - 1, -1, -1):
psi[i, 0:2] = A[i, 0:2] * psi[i + 1, 0:2] + B[i, 0:2] * Q[i, 0:2]
J1L = psi[9, 0:2] * mu[0:2]
J2L = psi[6, 0:2] * mu[0:2]
J3L = psi[3, 0:2] * mu[0:2]
J4L = psi[0, 0:2] * mu[0:2]
print J1L, J2L, J3L, J4L
# Left to right
for i in range(0, num_cells):
psi[i + 1, 2:4] = A[i, 2:4] * psi[i, 2:4] + B[i, 2:4] * Q[i, 2:4]
J1R = psi[0, 0:2] * mu[0:2]
J2R = psi[3, 0:2] * mu[0:2]
J3R = psi[6, 0:2] * mu[0:2]
J4R = psi[9, 0:2] * mu[0:2]
print J1L, J2L, J3L, J4L
# Update phi
for i in range(num_cells):
tot = 0.0
for n in range(0, 4):
tot = tot + w[n] * 0.5 * (psi[i, n] + psi[i + 1, n])
phi[i] = tot
err_phi = np.amax(np.absolute(((phi - phi_old) / phi_old)))
it = it + 1
if it <= max_it:
print(("converged in", it, "iterations"))
return phi
答案 0 :(得分:0)
您可以通过将每个变量设置为零来在方法的顶部定义它们。这些值会在循环中发生变化,然后在循环结束时,值将保持最后的值。