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

【Hackathon 5th No.53】NSFnets (Navier-Stokes Flow nets): Physics-informed neural networks for the incompressible Navier-Stokes equations #613

Closed
wants to merge 77 commits into from
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
b752c68
Create readme.md
DUCH714 Oct 30, 2023
fb740b2
Add files via upload
DUCH714 Oct 30, 2023
553e4d1
Update VP_NSFNet1.py
DUCH714 Oct 30, 2023
73e8af5
Update VP_NSFNet1.py
DUCH714 Oct 30, 2023
9709e26
Add files via upload
DUCH714 Oct 30, 2023
153ce32
Add files via upload
DUCH714 Oct 30, 2023
93a16ea
Add files via upload
DUCH714 Oct 30, 2023
cdc0e4a
Update VP_NSFNet1.py
DUCH714 Oct 30, 2023
d7592f2
Update VP_NSFNet1.py
DUCH714 Oct 30, 2023
0f9a145
Update VP_NSFNet1.yaml
DUCH714 Oct 30, 2023
5585e50
Update VP_NSFNet1.yaml
DUCH714 Oct 30, 2023
68e96c3
Update VP_NSFNet1.yaml
DUCH714 Oct 30, 2023
f327816
Update VP_NSFNet1.py
DUCH714 Oct 30, 2023
12f99a3
Update VP_NSFNet1.py
DUCH714 Oct 30, 2023
f2fcb45
Create readme.md
DUCH714 Nov 2, 2023
636837f
Add files via upload
DUCH714 Nov 2, 2023
bef1473
Add files via upload
DUCH714 Nov 2, 2023
25dcf9f
Add files via upload
DUCH714 Nov 3, 2023
e21a498
Update VP_NSFNet2.py
DUCH714 Nov 5, 2023
2259c3e
Add files via upload
DUCH714 Nov 5, 2023
4feffda
Create NSFNet.md
DUCH714 Nov 5, 2023
56ecdcb
Update NSFNet.md
DUCH714 Nov 5, 2023
f51b678
Update NSFNet.md
DUCH714 Nov 5, 2023
e8e8848
Update NSFNet.md
DUCH714 Nov 5, 2023
fdc8cb7
Update NSFNet.md
DUCH714 Nov 5, 2023
95e5f56
Update NSFNet.md
DUCH714 Nov 5, 2023
330fe31
Update NSFNet.md
DUCH714 Nov 5, 2023
729d660
Update NSFNet.md
DUCH714 Nov 5, 2023
0d2bf1e
Update VP_NSFNet2.py
DUCH714 Nov 5, 2023
8137968
Update VP_NSFNet2.yaml
DUCH714 Nov 5, 2023
a889e90
Update VP_NSFNet2.py
DUCH714 Nov 5, 2023
1c16650
Update NSFNet.md
DUCH714 Nov 5, 2023
500ec9d
Update NSFNet.md
DUCH714 Nov 5, 2023
ac401aa
Update NSFNet.md
DUCH714 Nov 5, 2023
0c6be9f
Add files via upload
DUCH714 Nov 6, 2023
9988434
Update VP_NSFNet2.yaml
DUCH714 Nov 6, 2023
f554a4b
Add files via upload
DUCH714 Nov 6, 2023
23388f8
Update NSFNet.md
DUCH714 Nov 6, 2023
68e9883
Update NSFNet.md
DUCH714 Nov 6, 2023
c99d74b
Update NSFNet.md
DUCH714 Nov 6, 2023
62dab54
Update NSFNet.md
DUCH714 Nov 6, 2023
1399046
Add files via upload
DUCH714 Nov 7, 2023
4488ae9
Update VP_NSFNet4.py
DUCH714 Nov 7, 2023
11c056b
Delete examples/NSFNet/VP_NSFNet4.py
DUCH714 Nov 9, 2023
565764e
Delete examples/NSFNet/VP_NSFNet4.yaml
DUCH714 Nov 9, 2023
aafdc05
Update NSFNet.md
DUCH714 Nov 9, 2023
6622d6d
Add files via upload
DUCH714 Nov 9, 2023
63f73d4
Add files via upload
DUCH714 Nov 9, 2023
fe07437
Update NSFNet.md
DUCH714 Nov 9, 2023
e843fdb
Update NSFNet.md
DUCH714 Nov 9, 2023
3e18fe7
Delete examples/NSFNet/readme.md
DUCH714 Nov 13, 2023
8daec9e
Delete examples/NSFNet/fig/u.png
DUCH714 Nov 13, 2023
9594482
Delete examples/NSFNet/fig/v.png
DUCH714 Nov 13, 2023
b341f21
Delete examples/NSFNet/fig/readme.md
DUCH714 Nov 13, 2023
360b3d6
Delete examples/NSFNet/fig/movie.gif
DUCH714 Nov 13, 2023
912a1fe
Delete VP_NSFNet1.yaml
DUCH714 Nov 13, 2023
b59dacc
add
DUCH714 Nov 13, 2023
adc0fdd
add
DUCH714 Nov 13, 2023
ade38ce
add
DUCH714 Nov 13, 2023
a90587f
add
DUCH714 Nov 13, 2023
a524c88
add
DUCH714 Nov 13, 2023
d58ad36
add
DUCH714 Nov 13, 2023
9459bb7
add
DUCH714 Nov 13, 2023
f2dd537
add
DUCH714 Nov 15, 2023
235ce0a
add
DUCH714 Nov 15, 2023
8064b8a
Update NSFNet.md
DUCH714 Nov 15, 2023
7667c28
Update NSFNet.md
DUCH714 Nov 15, 2023
9708659
add
DUCH714 Nov 15, 2023
bd616d8
add
DUCH714 Nov 15, 2023
73719d3
add
DUCH714 Nov 15, 2023
be9dac9
add
DUCH714 Dec 4, 2023
ab5ce2c
'm'
DUCH714 Dec 11, 2023
9209c55
add
DUCH714 Dec 11, 2023
5dcc2a4
add
DUCH714 Dec 11, 2023
304c954
add
DUCH714 Dec 11, 2023
93f527b
Update NSFNet.md
DUCH714 Dec 11, 2023
6af969d
Update NSFNet.md
DUCH714 Dec 11, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
285 changes: 285 additions & 0 deletions examples/NSFNet/VP_NSFNet1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,285 @@
import ppsci
import paddle
paddle.set_default_dtype("float32")
import numpy as np
from ppsci.utils import logger

OUTPUT_DIR = "./output"
import ppsci
import paddle
paddle.set_default_dtype("float32")
import numpy as np
from ppsci.utils import logger

DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
OUTPUT_DIR = "./output"
logger.init_logger("ppsci", f"{OUTPUT_DIR}/train.log", "info")
# set random seed for reproducibility
SEED = 1234
ppsci.utils.misc.set_random_seed(SEED)

ITERS_PER_EPOCH=1
# set model
input_key=("x", "y")
output_key=("u","v","p")
model = ppsci.arch.MLP(
input_key, output_key, 4, 50, "tanh", input_dim=len(input_key),output_dim=len(output_key),Xavier=True
)


N_train = 2601
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
Nb_train = 400


# Load Data
Re = 40
lam = 0.5 * Re - np.sqrt(0.25 * (Re ** 2) + 4 * (np.pi ** 2))
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved

x = np.linspace(-0.5, 1.0, 101)
y = np.linspace(-0.5, 1.5, 101)

yb1 = np.array([-0.5] * 100)
yb2 = np.array([1] * 100)
xb1 = np.array([-0.5] * 100)
xb2 = np.array([1.5] * 100)

y_train1 = np.concatenate([y[1:101], y[0:100], xb1, xb2], 0).astype('float32')
x_train1 = np.concatenate([yb1, yb2, x[0:100], x[1:101]], 0).astype('float32')

xb_train = x_train1.reshape(x_train1.shape[0], 1).astype('float32')
yb_train = y_train1.reshape(y_train1.shape[0], 1).astype('float32')
ub_train = 1 - np.exp(lam * xb_train) * np.cos(2 * np.pi * yb_train)
vb_train = lam / (2 * np.pi) * np.exp(lam * xb_train) * np.sin(2 * np.pi * yb_train)

x_train = ((np.random.rand(N_train, 1) - 1 / 3) * 3 / 2)
y_train = ((np.random.rand(N_train, 1) - 1 / 4) * 2)

# Test Data
np.random.seed(SEED)
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
x_star = ((np.random.rand(1000, 1) - 1 / 3) * 3 / 2).astype('float32')
y_star = ((np.random.rand(1000, 1) - 1 / 4) * 2).astype('float32')

u_star = 1 - np.exp(lam * x_star) * np.cos(2 * np.pi * y_star)
v_star = (lam / (2 * np.pi)) * np.exp(lam * x_star) * np.sin(2 * np.pi * y_star)
p_star = 0.5 * (1 - np.exp(2 * lam * x_star))


input_train = {"x": xb_train,"y":yb_train}
label_train = {"u": ub_train,"v":vb_train}

train_dataloader_cfg = {
"dataset": {
"name": "NamedArrayDataset",
"input":input_train,
"label":label_train
},
"batch_size": Nb_train,
'iters_per_epoch':ITERS_PER_EPOCH,
"sampler": {
"name": "BatchSampler",
"drop_last": False,
"shuffle": False,
},
}
input_test = {"x": x_star,"y":y_star}
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
label_test = {"u": u_star,"v":v_star,"p":p_star}
valida_dataloader_cfg = {
"dataset": {
"name": "NamedArrayDataset",
"input":input_test,
"label":label_test},
'total_size':u_star.shape[0],
"batch_size": u_star.shape[0],
"sampler": {
"name": "BatchSampler",
"drop_last": False,
"shuffle": False,
},
}

geom = ppsci.geometry.PointCloud({"x": x_train,"y":y_train}, ("x","y"))

## supervised constraint s.t ||u-u_0||
sup_constraint = ppsci.constraint.SupervisedConstraint(
train_dataloader_cfg,
ppsci.loss.MSELoss("mean"),
name="Sup",
)

# set equation constarint s.t. ||F(u)||

DUCH714 marked this conversation as resolved.
Show resolved Hide resolved

equation = {
"NavierStokes": ppsci.equation.NavierStokes(nu=1.0/Re, rho=1.0, dim=2, time=False),
}



pde_constraint = ppsci.constraint.InteriorConstraint(
equation["NavierStokes"].equations,
{"continuity": 0, "momentum_x": 0, "momentum_y": 0},
geom,
{
"dataset": {"name":"IterableNamedArrayDataset"},
"batch_size": N_train,
"iters_per_epoch": ITERS_PER_EPOCH,
},
ppsci.loss.MSELoss("mean"),
name="EQ2",
)

constraint={sup_constraint.name:sup_constraint,pde_constraint.name:pde_constraint}

residual_validator = ppsci.validate.SupervisedValidator(
valida_dataloader_cfg,
ppsci.loss.L2RelLoss(),
metric={"L2R": ppsci.metric.L2Rel()},
name="Residual",
)
residual_validator_mse = ppsci.validate.SupervisedValidator(
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
valida_dataloader_cfg,
ppsci.loss.MSELoss("mean"),
metric={"MSE": ppsci.metric.MSE()},
name="Residual",
)

# Wrap validator
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
validator = {residual_validator.name: residual_validator}

# set optimizer
EPOCHS=5000
optimizer = ppsci.optimizer.Adam(1e-3)(model)

logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info")
# initialize solver
solver = ppsci.solver.Solver(
model=model,
constraint=constraint,
optimizer=optimizer,
epochs=EPOCHS,
iters_per_epoch=ITERS_PER_EPOCH,
eval_during_train=False,
log_freq=5000,
eval_freq=1000,
seed=SEED,
equation=equation,
geom=geom,
validator=validator,
visualizer=None,
eval_with_no_grad=False,
output_dir='/home/aistudio/'
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
)
# train model
solver.train()
solver.eval()
solver.plot_loss_history()

# set optimizer

optimizer = ppsci.optimizer.Adam(1e-4)(model)

logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info")
# initialize solver
solver = ppsci.solver.Solver(
model=model,
constraint=constraint,
optimizer=optimizer,
epochs=EPOCHS,
iters_per_epoch=ITERS_PER_EPOCH,
eval_during_train=False,
log_freq=2000,
eval_freq=2000,
seed=SEED,
equation=equation,
geom=geom,
validator=validator,
visualizer=None,
eval_with_no_grad=False,
output_dir='/home/aistudio/'
)
# train model
solver.train()
solver.eval()

#set optimizer
EPOCHS=50000
optimizer = ppsci.optimizer.Adam(1e-5)(model)

logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info")
# initialize solver
solver = ppsci.solver.Solver(
model=model,
constraint=constraint,
optimizer=optimizer,
epochs=EPOCHS,
iters_per_epoch=ITERS_PER_EPOCH,
eval_during_train=False,
log_freq=2000,
eval_freq=2000,
seed=SEED,
equation=equation,
geom=geom,
validator=validator,
visualizer=None,
eval_with_no_grad=False,
output_dir='/home/aistudio/'
)
# train model
solver.train()
solver.eval()

#set optimizer
EPOCHS=50000
optimizer = ppsci.optimizer.Adam(1e-6)(model)

logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info")
# initialize solver
solver = ppsci.solver.Solver(
model=model,
constraint=constraint,
optimizer=optimizer,
epochs=EPOCHS,
iters_per_epoch=ITERS_PER_EPOCH,
eval_during_train=False,
log_freq=2000,
eval_freq=2000,
seed=SEED,
equation=equation,
geom=geom,
validator=validator,
visualizer=None,
eval_with_no_grad=False,
output_dir='/home/aistudio/'
)
# train model
solver.train()
solver.eval()


# set optimizer
EPOCHS=5000
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
optimizer = ppsci.optimizer.LBFGS(max_iter=50000,tolerance_change=np.finfo(float).eps,history_size=50)(model)

logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info")
# initialize solver
solver = ppsci.solver.Solver(
model=model,
constraint=constraint,
optimizer=optimizer,
epochs=EPOCHS,
iters_per_epoch=ITERS_PER_EPOCH,
eval_during_train=False,
log_freq=2000,
eval_freq=2000,
seed=SEED,
equation=equation,
geom=geom,
validator=validator,
visualizer=None,
eval_with_no_grad=False,
output_dir='/home/aistudio/'
)
# train model
solver.train()

# evaluate after finished training
solver.eval()
1 change: 1 addition & 0 deletions examples/NSFNet/readme.md
DUCH714 marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[hackthon5th53]+[hackthon5th54]