Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can Deepxde handle inputs in the form of x, y, z, t, U, I? #1899

Open
Gracealexx opened this issue Nov 29, 2024 · 4 comments
Open

Can Deepxde handle inputs in the form of x, y, z, t, U, I? #1899

Gracealexx opened this issue Nov 29, 2024 · 4 comments

Comments

@Gracealexx
Copy link

Dear Lu Lu,

I have a question. When we use Physics Informed Neural Networks (PINN) to solve Partial Differential Equations (PDEs), the input for the geometric domain is x, y, z, and for the time domain, it's t. Now, I have constructed a three-dimensional flow field database with different inflow velocities (U) and turbulent intensities (I) using Computational Fluid Dynamics (CFD). I want to use data supervision and PINN to predict the flow field. Therefore, I need to modify the input to x, y, z, t, U, I, and the output to U, V, P. Can Deepxde handle inputs in the form of x, y, z, t, U, I?

Best regards.

@chaoming0625
Copy link

Hello everyone, I am pleased to introduce our recent rewrite of the DeepXDE framework: the PINNx framework. We have just successfully tested all the examples. In these examples, problems can be defined as explicit variables, and derivatives can be more intuitive to obtain. Below is a simple example:

def pde(x, y):
    jacobian = net.jacobian(x)
    hessian = net.hessian(x)

    u_vel, v_vel, p = y['u_vel'], y['v_vel'], y['p']
    u_vel_x = jacobian['u_vel']['x']
    u_vel_y = jacobian['u_vel']['y']
    u_vel_xx = hessian['u_vel']['x']['x']
    u_vel_yy = hessian['u_vel']['y']['y']

    v_vel_x = jacobian['v_vel']['x']
    v_vel_y = jacobian['v_vel']['y']
    v_vel_xx = hessian['v_vel']['x']['x']
    v_vel_yy = hessian['v_vel']['y']['y']

    p_x = jacobian['p']['x']
    p_y = jacobian['p']['y']

    momentum_x = u_vel * u_vel_x + v_vel * u_vel_y + p_x - 1 / Re * (u_vel_xx + u_vel_yy)
    momentum_y = u_vel * v_vel_x + v_vel * v_vel_y + p_y - 1 / Re * (v_vel_xx + v_vel_yy)
    continuity = u_vel_x + v_vel_y

    return momentum_x, momentum_y, continuity

For more examples, please refer to https://github.com/chaobrain/pinnx/tree/main/examples.

We have just completed testing all the examples in PINNx, and most examples in DeepXDE are now supported. However, since the framework was developed in a relatively short period, there may still be some issues. We welcome feedback from the DeepXDE community.

Best

@YoungBaeChoi
Copy link

This can be implemented using DeepONet or hypercubes. Collocation points for the 6-dimensional domain (4D spatiotemporal input with an additional 2D) need to be generated. Alternatively, the function space for the branch input can be arbitrarily generated, though modifications to the class for data loss definition are required.

If you aim for model generalization across various input boundaries, the ZCS example (examples/operator/stokes_aligned_zcs_pideeponet.py) can be a helpful reference. However, based on my experience, developing a digital twin model for real-time velocity prediction under different turbulent conditions of RANS models required more than a week of training.

@chaoming0625
Copy link

Thanks for your feedback. Currently, the best example of pinnx is forward/inverse problem. For example, https://github.com/chaobrain/pinnx/blob/main/docs/examples-pinn-forward/Allen_Cahn_unitless.py

For the operator learning, we indeed need to optimize the interface to make it more intuitive and customizable. Maybe this can be improved in the future.

@Gracealexx
Copy link
Author

This can be implemented using DeepONet or hypercubes. Collocation points for the 6-dimensional domain (4D spatiotemporal input with an additional 2D) need to be generated. Alternatively, the function space for the branch input can be arbitrarily generated, though modifications to the class for data loss definition are required.

If you aim for model generalization across various input boundaries, the ZCS example (examples/operator/stokes_aligned_zcs_pideeponet.py) can be a helpful reference. However, based on my experience, developing a digital twin model for real-time velocity prediction under different turbulent conditions of RANS models required more than a week of training.

Thank you for your response, I will study the example you mentioned carefully. Also, you mentioned that the training time of over a week is based on CPU or GPU?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants