Warum zeigt sich der Divergenzwert am linken und rechten Grenzen als 1 anstelle der erwarteten 2?Python

Python-Programme
Anonymous
 Warum zeigt sich der Divergenzwert am linken und rechten Grenzen als 1 anstelle der erwarteten 2?

Post by Anonymous »

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>

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post