Skip to content

Commit 8d0ca82

Browse files
Merge pull request #298 from HydrogenSulfate/add_aistudio_run
update button for 'run on AIStudio'
2 parents 8bafb8b + e9ee98a commit 8d0ca82

File tree

2 files changed

+33
-39
lines changed

2 files changed

+33
-39
lines changed

docs/zh/examples/ldc2d_steady.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 2D-LDC(2D Lid Driven Cavity Flow)
22

3+
<a href="https://aistudio.baidu.com/aistudio/projectdetail/6137973" class="md-button md-button--primary" style>AI Studio快速体验</a>
4+
35
## 1. 问题简介
46

57
Lid Driven Cavity Flow,中文名称可译作“顶盖驱动方腔流”,一般指顶部平板以恒定速度驱动规则区域内封闭的不可压流体(例如水)的流动。在方腔流中可以观察到几乎所有可能发生在不可压流体中的流动现象,是一种典型的流体案例。
@@ -301,17 +303,17 @@ examples/ldc/ldc2d_steady_Re10.py:124:141
301303

302304
``` py linenums="143"
303305
--8<--
304-
examples/ldc/ldc2d_steady_Re10.py:143:162
306+
examples/ldc/ldc2d_steady_Re10.py:143:153
305307
--8<--
306308
```
307309

308310
### 3.9 模型训练、评估与可视化
309311

310312
完成上述设置之后,只需要将上述实例化的对象按顺序传递给 `ppsci.solver.Solver`,然后启动训练、评估、可视化。
311313

312-
``` py linenums="164"
314+
``` py linenums="155"
313315
--8<--
314-
examples/ldc/ldc2d_steady_Re10.py:164:
316+
examples/ldc/ldc2d_steady_Re10.py:155:
315317
--8<--
316318
```
317319

examples/ldc/ldc2d_steady_Re10.py

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
# set random seed for reproducibility
2424
ppsci.utils.misc.set_random_seed(42)
2525
# set output directory
26-
output_dir = "./ldc2d_steady_Re10" if not args.output_dir else args.output_dir
26+
OUTPUT_DIR = "./ldc2d_steady_Re10" if not args.output_dir else args.output_dir
2727
# initialize logger
28-
logger.init_logger("ppsci", f"{output_dir}/train.log", "info")
28+
logger.init_logger("ppsci", f"{OUTPUT_DIR}/train.log", "info")
2929

3030
# set model
3131
model = ppsci.arch.MLP(("x", "y"), ("u", "v", "p"), 9, 50, "tanh", False, False)
@@ -37,24 +37,24 @@
3737
geom = {"rect": ppsci.geometry.Rectangle((-0.05, -0.05), (0.05, 0.05))}
3838

3939
# set dataloader config
40-
iters_per_epoch = 1
40+
ITERS_PER_EPOCH = 1
4141
train_dataloader_cfg = {
4242
"dataset": "IterableNamedArrayDataset",
43-
"iters_per_epoch": iters_per_epoch,
43+
"iters_per_epoch": ITERS_PER_EPOCH,
4444
}
4545

46-
npoint_pde = 99**2
47-
npoint_top = 101
48-
npoint_bottom = 101
49-
npoint_left = 99
50-
npoint_right = 99
46+
NPOINT_PDE = 99**2
47+
NPOINT_TOP = 101
48+
NPOINT_BOTTOM = 101
49+
NPOINT_LEFT = 99
50+
NPOINT_RIGHT = 99
5151

5252
# set constraint
5353
pde_constraint = ppsci.constraint.InteriorConstraint(
5454
equation["NavierStokes"].equations,
5555
{"continuity": 0, "momentum_x": 0, "momentum_y": 0},
5656
geom["rect"],
57-
{**train_dataloader_cfg, "batch_size": npoint_pde},
57+
{**train_dataloader_cfg, "batch_size": NPOINT_PDE},
5858
ppsci.loss.MSELoss("sum"),
5959
evenly=True,
6060
weight_dict={
@@ -68,7 +68,7 @@
6868
{"u": lambda out: out["u"], "v": lambda out: out["v"]},
6969
{"u": 1, "v": 0},
7070
geom["rect"],
71-
{**train_dataloader_cfg, "batch_size": npoint_top},
71+
{**train_dataloader_cfg, "batch_size": NPOINT_TOP},
7272
ppsci.loss.MSELoss("sum"),
7373
criteria=lambda x, y: np.isclose(y, 0.05),
7474
name="BC_top",
@@ -77,7 +77,7 @@
7777
{"u": lambda out: out["u"], "v": lambda out: out["v"]},
7878
{"u": 0, "v": 0},
7979
geom["rect"],
80-
{**train_dataloader_cfg, "batch_size": npoint_bottom},
80+
{**train_dataloader_cfg, "batch_size": NPOINT_BOTTOM},
8181
ppsci.loss.MSELoss("sum"),
8282
criteria=lambda x, y: np.isclose(y, -0.05),
8383
name="BC_bottom",
@@ -86,7 +86,7 @@
8686
{"u": lambda out: out["u"], "v": lambda out: out["v"]},
8787
{"u": 0, "v": 0},
8888
geom["rect"],
89-
{**train_dataloader_cfg, "batch_size": npoint_left},
89+
{**train_dataloader_cfg, "batch_size": NPOINT_LEFT},
9090
ppsci.loss.MSELoss("sum"),
9191
criteria=lambda x, y: np.isclose(x, -0.05),
9292
name="BC_left",
@@ -95,7 +95,7 @@
9595
{"u": lambda out: out["u"], "v": lambda out: out["v"]},
9696
{"u": 0, "v": 0},
9797
geom["rect"],
98-
{**train_dataloader_cfg, "batch_size": npoint_right},
98+
{**train_dataloader_cfg, "batch_size": NPOINT_RIGHT},
9999
ppsci.loss.MSELoss("sum"),
100100
criteria=lambda x, y: np.isclose(x, 0.05),
101101
name="BC_right",
@@ -110,26 +110,26 @@
110110
}
111111

112112
# set training hyper-parameters
113-
epochs = 20000 if not args.epochs else args.epochs
113+
EPOCHS = 20000 if not args.epochs else args.epochs
114114
lr_scheduler = ppsci.optimizer.lr_scheduler.Cosine(
115-
epochs,
116-
iters_per_epoch,
115+
EPOCHS,
116+
ITERS_PER_EPOCH,
117117
0.001,
118-
warmup_epoch=int(0.05 * epochs),
118+
warmup_epoch=int(0.05 * EPOCHS),
119119
)()
120120

121121
# set optimizer
122122
optimizer = ppsci.optimizer.Adam(lr_scheduler)((model,))
123123

124124
# set validator
125-
npoints_eval = npoint_pde
125+
NPOINTS_EVAL = NPOINT_PDE
126126
residual_validator = ppsci.validate.GeometryValidator(
127127
equation["NavierStokes"].equations,
128128
{"momentum_x": 0, "continuity": 0, "momentum_y": 0},
129129
geom["rect"],
130130
{
131131
"dataset": "NamedArrayDataset",
132-
"total_size": npoints_eval,
132+
"total_size": NPOINTS_EVAL,
133133
"batch_size": 8192,
134134
"sampler": {"name": "BatchSampler"},
135135
},
@@ -141,18 +141,9 @@
141141
validator = {residual_validator.name: residual_validator}
142142

143143
# set visualizer(optional)
144-
npoint_bc = npoint_top + npoint_bottom + npoint_left + npoint_right
145-
vis_interior_points = geom["rect"].sample_interior(npoint_pde, evenly=True)
146-
vis_boundary_points = geom["rect"].sample_boundary(npoint_bc, evenly=True)
147-
148144
# manually collate input data for visualization,
149-
# interior+boundary
150-
vis_points = {}
151-
for key in vis_interior_points:
152-
vis_points[key] = np.concatenate(
153-
(vis_interior_points[key], vis_boundary_points[key])
154-
)
155-
145+
NPOINT_BC = NPOINT_TOP + NPOINT_BOTTOM + NPOINT_LEFT + NPOINT_RIGHT
146+
vis_points = geom["rect"].sample_interior(NPOINT_PDE + NPOINT_BC, evenly=True)
156147
visualizer = {
157148
"visulzie_u_v": ppsci.visualize.VisualizerVtu(
158149
vis_points,
@@ -165,11 +156,11 @@
165156
solver = ppsci.solver.Solver(
166157
model,
167158
constraint,
168-
output_dir,
159+
OUTPUT_DIR,
169160
optimizer,
170161
lr_scheduler,
171-
epochs,
172-
iters_per_epoch,
162+
EPOCHS,
163+
ITERS_PER_EPOCH,
173164
eval_during_train=True,
174165
eval_freq=200,
175166
equation=equation,
@@ -185,15 +176,16 @@
185176
solver.visualize()
186177

187178
# directly evaluate pretrained model(optional)
179+
logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info")
188180
solver = ppsci.solver.Solver(
189181
model,
190182
constraint,
191-
output_dir,
183+
OUTPUT_DIR,
192184
equation=equation,
193185
geom=geom,
194186
validator=validator,
195187
visualizer=visualizer,
196-
pretrained_model_path=f"{output_dir}/checkpoints/latest",
188+
pretrained_model_path=f"{OUTPUT_DIR}/checkpoints/latest",
197189
)
198190
solver.eval()
199191
# visualize prediction for pretrained model(optional)

0 commit comments

Comments
 (0)