Overview

This research focuses on implementing Physics-Informed Neural Networks (PINNs) and Mesh Graph Networks (MGNs) in MATLAB for solving partial differential equations (PDEs) related to fluid-solid interactions. We are also reviewing differentiable Graph Neural Network (GNN)-based PDE solvers as they relate to fluid-solid interactions. This work is conducted under the supervision of Professor Grace X. Gu at UC Berkeley.


Research Components

  • PINN Implementation in MATLAB: code
  • MGN Implementation: code
  • Differentiable GNN-based PDE Solvers: code
  • Fluid-Solid Interaction Datasets: data

Background

Physics-Informed Neural Networks combine the power of deep learning with the constraints of physical laws. By incorporating PDEs directly into the loss function, PINNs can learn solutions that satisfy both data and physics constraints. This approach is particularly valuable for fluid-solid interaction problems where traditional numerical methods can be computationally expensive.


Methodology

Setting up the PINN:

The Physics-Informed Neural Network architecture incorporates both data-driven and physics-driven loss terms.

% Initialize neural network
layers = [
    featureInputLayer(inputSize)
    fullyConnectedLayer(50)
    tanhLayer()
    fullyConnectedLayer(50)
    tanhLayer()
    fullyConnectedLayer(outputSize)
];
net = dlnetwork(layers);

Define physics loss:

The physics loss enforces the PDE constraints at collocation points throughout the domain.

function loss = physicsLoss(net, x_colloc, pde_params)
    % Evaluate network at collocation points
    u_pred = forward(net, x_colloc);
    
    % Compute PDE residuals
    residual = computePDEresidual(u_pred, x_colloc, pde_params);
    
    % Physics loss
    loss = mean(residual.^2);
end

Training the network:

The training process minimizes both data and physics losses simultaneously.

% Combined loss function
function totalLoss = combinedLoss(net, x_data, u_data, x_colloc, pde_params)
    % Data loss
    u_pred_data = forward(net, x_data);
    dataLoss = mean((u_pred_data - u_data).^2);
    
    % Physics loss
    physicsLoss = physicsLoss(net, x_colloc, pde_params);
    
    % Total loss
    totalLoss = dataLoss + lambda * physicsLoss;
end

Graph Neural Network PDE Solvers:

For differentiable GNN-based approaches, we construct graph representations of the computational domain.

% Build graph structure
function G = buildGraph(mesh)
    nodes = mesh.nodes;
    edges = mesh.edges;
    G = graph(edges(:,1), edges(:,2));
    G.Nodes.X = nodes;
end

Mesh Graph Networks:

MGNs operate on mesh-based representations, allowing for adaptive refinement and efficient computation.

% MGN forward pass
function u_pred = mgnForward(mesh, features, net)
    % Extract mesh features
    mesh_features = extractMeshFeatures(mesh);
    
    % Combine with input features
    combined_features = [features, mesh_features];
    
    % Forward through network
    u_pred = forward(net, combined_features);
end

Simulation Parameters

ParameterValueDomainApplicationDescription
$\lambda$$0.1$FluidPINN lossPhysics loss weight
$\nu$$10^{-6}$FluidNavier-StokesKinematic viscosity
$\rho$$1000$FluidNavier-StokesFluid density
$E$$2 \times 10^9$SolidElasticityYoung’s modulus
$\nu_s$$0.3$SolidElasticityPoisson’s ratio
$N_{colloc}$$10^4$DomainTrainingNumber of collocation points