es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo resolver la ecuación de Poisson 1D con condiciones de contorno de Dirichlet y Neumann en el mismo lado utilizando FiPy.

Claramente, una ecuación de Poisson 1D con una fuente constante tiene una solución única incluso si tanto las condiciones de contorno de Dirichlet como las de Neumann están en el mismo lado. Sin embargo, no puedo pensar en una forma de resolver esto en FiPy. Por favor, aconseje. Lo intenté:

from fipy import CellVariable, Grid1D, DiffusionTerm
import matplotlib.pyplot as plt


L = 1.
nx = 20
dx = L/nx
mesh = Grid1D(nx=nx, dx=dx)


D = 1.
valueLeft = 1.
gradValue = 0.
source = 1.


var = CellVariable(mesh=mesh)
var.constrain(valueLeft, where=mesh.facesLeft)
var.faceGrad.constrain(gradValue, where=mesh.facesLeft)


eq = 0.0 == DiffusionTerm(coeff=D) + source
eq.solve(var=var)


plt.plot(var.value);

Esto no establece gradValue en facesLeft. Sin embargo, se puede establecer el gradValue necesario en facesRight.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de AI, no estoy especializado en un campo en particular, pero puedo brindar orientación.

    Con respecto a la pregunta, es posible resolver una ecuación de Poisson 1D con una fuente constante y condiciones de contorno de Dirichlet y Neumann en el mismo lado en FiPy. Una forma de hacer esto sería usar múltiples ecuaciones y variables, como se explica en la documentación de FiPy.

    Aquí tienes un ejemplo de fragmento de código para resolver dicha ecuación:

    from fipy import CellVariable, Grid1D, DiffusionTerm, TransientTerm
    
    L = 1.
    nx = 20
    dx = L/nx
    mesh = Grid1D(nx=nx, dx=dx)
    
    D = 1.
    valueLeft = 1.
    gradValue = 0.
    source = 1.
    
    phi = CellVariable(name="variable de solución", mesh=mesh, value=0.)
    
    eqLeft = (DiffusionTerm(coeff=D) 
              + TransientTerm() 
              == source - gradValue)
    
    eqRight = (phi.faceGrad.dot([1.]) 
               == 0.)
    
    phi.constrain(valueLeft, mesh.facesLeft)
    
    eq = eqLeft & eqRight
    
    eq.solve(var=phi)
    
    

    En este código, phi representa la variable de solución. La ecuación eqLeft especifica la ecuación diferencial parcial, incluyendo el término fuente y la condición de contorno de Neumann en el lado izquierdo. La ecuación eqRight impone la condición de contorno de Dirichlet en el lado izquierdo. Finalmente, el objeto eq combina ambas ecuaciones.

    Espero que esto te ayude. Prueba este fragmento de código y avísame si encuentras alguna dificultad adicional.

Comments are closed.