GithubHelp home page GithubHelp logo

Comments (8)

sathvikbhagavan avatar sathvikbhagavan commented on June 20, 2024

The boundary conditions are not continuous

from neurodiffeq.

ma-sadeghi avatar ma-sadeghi commented on June 20, 2024

You mean the 4 corners?

from neurodiffeq.

sathvikbhagavan avatar sathvikbhagavan commented on June 20, 2024

The boundary conditions you mention in:

x = 0 ; u = 1
x = 1 ; u = 0
y = 0 ; u = 0
y = 1 ; u = 0

It is not continuous at (0, 0) as it can be 0 or 1.

But the boundary conditions in your snippet of code:

BCs = [
    DirichletBVP2D(
        x_min=xmin, x_min_val=lambda y: 0,
        x_max=xmax, x_max_val=lambda y: 0,
        y_min=ymin, y_min_val=lambda x: 0,
        y_max=ymax, y_max_val=lambda x: 0,
    )
]

should work.

from neurodiffeq.

ma-sadeghi avatar ma-sadeghi commented on June 20, 2024

Thanks for your quick reply. I must have made a typo, the BCs in the snippet enforce u=0 everywhere, which I don't want. I want to enforce u=1 at x=0, and I understand this makes the corners discontinuous. Is there a way to ignore those two points, like would the following snippet work?

BCs = [
    DirichletBVP2D(
        x_min=xmin, x_min_val=lambda y: return 0 if y in [0, 1] else 1,
        x_max=xmax, x_max_val=lambda y: 0,
        y_min=ymin, y_min_val=lambda x: 0,
        y_max=ymax, y_max_val=lambda x: 0,
    )
]

from neurodiffeq.

sathvikbhagavan avatar sathvikbhagavan commented on June 20, 2024

I don't think that will work. Why not use some continuous and approximate step function like heaviside - https://en.wikipedia.org/wiki/Heaviside_step_function?

from neurodiffeq.

ma-sadeghi avatar ma-sadeghi commented on June 20, 2024

Ya, that's right, I didn't mean the exact snippet, but conceptually. So, using NumPy's heaviside (in a way that mimics lambda y: return 0 if y in [0, 1] else 1) would work? Thanks!

from neurodiffeq.

sathvikbhagavan avatar sathvikbhagavan commented on June 20, 2024

So, using NumPy's heaviside (in a way that mimics lambda y: return 0 if y in [0, 1] else 1) would work?

Directly using heaviside might not work with AD (in pytorch - https://pytorch.org/docs/stable/generated/torch.heaviside.html). But using an approximate continuous form should work.

from neurodiffeq.

ma-sadeghi avatar ma-sadeghi commented on June 20, 2024

Gotcha thanks!

from neurodiffeq.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.