Skip to content
This repository has been archived by the owner on Dec 5, 2023. It is now read-only.

comp-physics/bubble-dynamics-resnet

Repository files navigation

README

for bubble dynamics with multiscale residual neural networks

script_DTP.py

Calls the algorithms listed above in the following order:

D

Data is generated by calling gen_data.py

T

Trains ResNets by calling train_models.py

P

Plots results and errors for each ResNet by calling plot_models.py

gen_data.py

Numerically solves system of ODEs defined by the Rayleigh-Plesset equation using SciPy's solve_ivp(method='LSODA').

T = n * dt is the total time of the solution

dt = smallest time step

n = maximum number of time steps

Many solutions are created for a range of random initial conditions.

This data is saved as a tensor for training and validating various ResNets.

Parameters are adjusted in file parameters.yml (see below)

train_models.py

Trains ResNets with an adjustable architecture. Each ResNet is a time-stepper trained at different step-sizes.

Parameters are adjusted in file parameters.yml (see below)

plot_models.py

Visualizes predictions made by individual ResNets.

Determines which "combination" of ResNets produces the best mean-squared-error (MSE) by removing smallest time-steppers first.

Visualizes MSE of individual time-steppers and multi-scale time-steppers (the ensemble of ResNets).

Visualizes predictions made by multi-scale time-steppers (the ensemble of ResNets).

Final plot color codes the 3 largest time-steppers for predictions made by multi-scale ResNets.

parameters.yml

Adjust parameters for generating data and training your ResNets (time-steppers).

Read by algorithm as a Python dictionary.

(1) Parameters for both data and training time-steppers (ResNets)

system = 'RP' stands for Rayleigh-Plesset and is used in file names saved by python scripts
dt = smallest time step for data describing the Rayleigh-Plesset equation
k_max = determines the largest time step for a ResNet to make predictions, e.g. time_step = 2^k * dt
model_steps = number of steps allowed for ResNet to make predictions while training n_train = number of training data samples
n_val = number of validation data samples
n_test = number of test data samples
batch_size = number of samples in a batch, sampled from training data

(2) Parameters for ODE (the Rayleigh-Plesset equation)

u = (Pa * s) dynamic viscosity (u=0 means no viscosity)
R0 = (meters) physical diameter for bubble, before normalization (meters)
Pv = (Pa) vapor pressure inside bubble
exponent = number from interval [1...2] used in RP-equation ...R^(-3 * exponent) P0 = (Pa) external pressure of environment far from bubble
S = (N/m) don't remember
rho = (kg/m^3) density of fluid external to wall
abs_tol = absolute error tolerance for RK4 to generate data
rel_tol = relative error tolerance for RK4 to generate data

(3) Range of initial conditions for ODE data and test samples (the Rayleigh-Plesset equation)

P_min = minimum initial pressure (t=0) allowed for ODE data, RP-equation
P_max = maximum initial pressure (t=0) allowed for ODE data, RP-equation
R_min = minimum initial radius (t=0) allowed for ODE data, RP-equation
R_max = maximum initial radius (t=0) allowed for ODE data, RP-equation
R_test = initial radius (t=0) for test ODE data, RP-equation
Rdot_min = minimum initial velocity (t=0) allowed for ODE data, RP-equation
Rdot_max = maximum initial velocity (t=0) allowed for ODE data, RP-equation
Rdot_test = initial velocity (t=0) for test ODE data, RP-equation

(4) Parameters for ResNet architecture

width = number of nodes/weights in each ResNet layer
num_layers = number of ResNet layers, each of size 'layer_size'
num_inputs = number of ResNet inputs, (e.g. p, R, and Rdot) num_outputs = number of ResNet outputs (e.g. R and Rdot)

(5) Parameters for plots and figures

plot_x_dim: 30
plot_y_dim: 10
title_fontsize: 40
legend_fontsize: 30
x_label_fontsize: 30
y_label_fontsize: 30
axis_fontsize: 30
box_fontsize: 30