Warum zeigt sich der Divergenzwert am linken und rechten Grenzen als 1 anstelle der erwarteten 2?
Posted: 10 May 2025, 19:36
Ich habe zwei verschiedene Arten zur Berechnung der Divergenz eines Vektors unter Verwendung von FIPY ausprobiert: einen unter Verwendung des Gradienten seiner Komponenten und die andere unter Verwendung der Gesichtsdivergenz. In beiden Fällen unterscheidet sich der Wert der Divergenz am linken und rechten Rand vom erwarteten Wert. < /P>
Wie kann ich das verstehen und beheben? Unten finden Sie den Code für die Prüfung: < /p>
Wie kann ich das verstehen und beheben? Unten finden Sie den Code für die Prüfung: < /p>
Code: Select all
import matplotlib.pyplot as plt
from fipy import Grid2D, CellVariable, FaceVariable
# Define the mesh
nx, ny = 100, 100 # Number of cells
dx, dy = 0.1, 0.1 # Cell size
mesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)
# Get cell center coordinates
x, y = mesh.cellCenters
# Define constant field variables
C = 2 # Constant gradient of ux along x axis
D = 0 # Constant uy
ux = CellVariable(name="ux", mesh=mesh, value=C*x)
uy = CellVariable(name="uy", mesh=mesh, value=D)
# Define the vector field
uvec = (ux, uy)
# Compute divergence using gradient components
div_u = CellVariable(name="div(u)", mesh=mesh, value=(ux.grad[0] + uy.grad[1]))
# Compute divergence using face variable
ux_face = ux.arithmeticFaceValue
uy_face = uy.arithmeticFaceValue
u = FaceVariable(mesh=mesh, value=(ux_face, uy_face))
facediv_u = CellVariable(name="face_div(u)", mesh=mesh, value=u.divergence)
print(div_u, "gradcomponents")
print(facediv_u, "facedivergence")
< /code>
, was das folgende Ergebnis ergibt; < /p>
[1. 2. 2. ... 2. 2. 1.] gradcomponents
[1. 2. 2. ... 2. 2. 1.] facedivergence