Skip to content

Commit c428828

Browse files
authored
【hydra No.7】Adapt ldc2d_unsteady_Re10 to hydra (#580)
* add ldc2d_unsteady_Re10.yaml, modify ldc2d_unsteady_Re10.py ldc2d_unsteady.md to hydra style * fix ldc2d_unsteady.md、ldc2d_unsteady_Re10.yaml、ldc2d_unsteady_Re10.py * fix ldc2d_unsteady_Re10.py * fix ldc2d_unsteady_Re10.yaml、ldc2d_unsteady_Re10.py * fix 2 files * fix 2 files
1 parent 5ba6439 commit c428828

File tree

3 files changed

+217
-66
lines changed

3 files changed

+217
-66
lines changed

docs/zh/examples/ldc2d_unsteady.md

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
<a href="https://aistudio.baidu.com/aistudio/projectdetail/6160749?contributionType=1&sUid=438690&shared=1&ts=1683961132625" class="md-button md-button--primary" style>AI Studio快速体验</a>
44

5+
=== "模型训练命令"
6+
``` sh
7+
python ldc2d_unsteady_Re10.py
8+
```
9+
510
## 1. 背景简介
611

712
顶盖方腔驱动流LDC问题在许多领域中都有应用。例如,这个问题可以用于计算流体力学(CFD)领域中验证计算方法的有效性。虽然这个问题的边界条件相对简单,但是其流动特性却非常复杂。在顶盖驱动流LDC中,顶壁朝x方向以U=1的速度移动,而其他三个壁则被定义为无滑移边界条件,即速度为零。
@@ -201,28 +206,24 @@ examples/ldc/ldc2d_unsteady_Re10.py:36:44
201206

202207
``` py linenums="46"
203208
--8<--
204-
examples/ldc/ldc2d_unsteady_Re10.py:46:60
209+
examples/ldc/ldc2d_unsteady_Re10.py:46:58
205210
--8<--
206211
```
207212

208213
#### 3.4.1 内部点约束
209214

210215
以作用在矩形内部点上的 `InteriorConstraint` 为例,代码如下:
211216

212-
``` py linenums="62"
217+
``` py linenums="60"
213218
# set constraint
214-
pde_constraint = ppsci.constraint.InteriorConstraint(
219+
pde = ppsci.constraint.InteriorConstraint(
215220
equation["NavierStokes"].equations,
216221
{"continuity": 0, "momentum_x": 0, "momentum_y": 0},
217222
geom["time_rect"],
218223
{**train_dataloader_cfg, "batch_size": NPOINT_PDE * NTIME_PDE},
219224
ppsci.loss.MSELoss("sum"),
220225
evenly=True,
221-
weight_dict={
222-
"continuity": 0.0001, # (1)
223-
"momentum_x": 0.0001,
224-
"momentum_y": 0.0001,
225-
},
226+
weight_dict=cfg.TRAIN.weight.pde, # (1)
226227
name="EQ",
227228
)
228229
```
@@ -257,57 +258,57 @@ pde_constraint = ppsci.constraint.InteriorConstraint(
257258

258259
由于 `BoundaryConstraint` 默认会在所有边界上进行采样,而我们需要对四个边界分别施加约束,因此需通过设置 `criteria` 参数,进一步细化出四个边界,如上边界就是符合 $y = 0.05$ 的边界点集
259260

260-
``` py linenums="77"
261+
``` py linenums="71"
261262
--8<--
262-
examples/ldc/ldc2d_unsteady_Re10.py:77:112
263+
examples/ldc/ldc2d_unsteady_Re10.py:71:106
263264
--8<--
264265
```
265266

266267
#### 3.4.3 初值约束
267268

268269
最后我们还需要对 $t=t_0$ 时刻的矩形内部点施加 N-S 方程约束,代码如下:
269270

270-
``` py linenums="113"
271+
``` py linenums="107"
271272
--8<--
272-
examples/ldc/ldc2d_unsteady_Re10.py:113:121
273+
examples/ldc/ldc2d_unsteady_Re10.py:107:115
273274
--8<--
274275
```
275276

276277
在微分方程约束、边界约束、初值约束构建完毕之后,以我们刚才的命名为关键字,封装到一个字典中,方便后续访问。
277278

278-
``` py linenums="122"
279+
``` py linenums="116"
279280
--8<--
280-
examples/ldc/ldc2d_unsteady_Re10.py:122:130
281+
examples/ldc/ldc2d_unsteady_Re10.py:116:124
281282
--8<--
282283
```
283284

284285
### 3.5 超参数设定
285286

286-
接下来我们需要指定训练轮数和学习率,此处我们按实验经验,使用两万轮训练轮数和带有 warmup 的 Cosine 余弦衰减学习率。
287+
接下来需要在配置文件中指定训练轮数,此处我们按实验经验,使用两万轮训练轮数和带有 warmup 的 Cosine 余弦衰减学习率。
287288

288-
``` py linenums="132"
289+
``` py linenums="40"
289290
--8<--
290-
examples/ldc/ldc2d_unsteady_Re10.py:132:139
291+
examples/ldc/conf/ldc2d_unsteady_Re10.yaml:40:43
291292
--8<--
292293
```
293294

294295
### 3.6 优化器构建
295296

296297
训练过程会调用优化器来更新模型参数,此处选择较为常用的 `Adam` 优化器。
297298

298-
``` py linenums="141"
299+
``` py linenums="132"
299300
--8<--
300-
examples/ldc/ldc2d_unsteady_Re10.py:141:142
301+
examples/ldc/ldc2d_unsteady_Re10.py:132:133
301302
--8<--
302303
```
303304

304305
### 3.7 评估器构建
305306

306307
在训练过程中通常会按一定轮数间隔,用验证集(测试集)评估当前模型的训练情况,因此使用 `ppsci.validate.GeometryValidator` 构建评估器。
307308

308-
``` py linenums="144"
309+
``` py linenums="135"
309310
--8<--
310-
examples/ldc/ldc2d_unsteady_Re10.py:144:162
311+
examples/ldc/ldc2d_unsteady_Re10.py:135:153
311312
--8<--
312313
```
313314

@@ -329,19 +330,19 @@ examples/ldc/ldc2d_unsteady_Re10.py:144:162
329330

330331
本文中的输出数据是一个区域内的二维点集,每个时刻 $t$ 的坐标是 $(x^t_i,y^t_i)$,对应值是 $(u^t_i, v^t_i, p^t_i)$,因此我们只需要将评估的输出数据按时刻保存成 16 个 **vtu格式** 文件,最后用可视化软件打开查看即可。代码如下:
331332

332-
``` py linenums="164"
333+
``` py linenums="155"
333334
--8<--
334-
examples/ldc/ldc2d_unsteady_Re10.py:164:195
335+
examples/ldc/ldc2d_unsteady_Re10.py:155:186
335336
--8<--
336337
```
337338

338339
### 3.9 模型训练、评估与可视化
339340

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

342-
``` py linenums="197"
343+
``` py linenums="188"
343344
--8<--
344-
examples/ldc/ldc2d_unsteady_Re10.py:197:
345+
examples/ldc/ldc2d_unsteady_Re10.py:188:209
345346
--8<--
346347
```
347348

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
hydra:
2+
run:
3+
# dynamic output directory according to running time and override name
4+
dir: output_ldc2d_unsteady_Re10/${now:%Y-%m-%d}/${now:%H-%M-%S}/${hydra.job.override_dirname}
5+
job:
6+
name: ${mode} # name of logfile
7+
chdir: false # keep current working direcotry unchanged
8+
config:
9+
override_dirname:
10+
exclude_keys:
11+
- TRAIN.checkpoint_path
12+
- TRAIN.pretrained_model_path
13+
- EVAL.pretrained_model_path
14+
- mode
15+
- output_dir
16+
sweep:
17+
# output directory for multirun
18+
dir: ${hydra.run.dir}
19+
subdir: ./
20+
21+
# general settings
22+
mode: train # running mode: train/eval
23+
seed: 42
24+
output_dir: ${hydra:run.dir}
25+
26+
# set working condition
27+
NU: 0.01
28+
RHO: 1.0
29+
NTIME_ALL: 16
30+
31+
# model settings
32+
MODEL:
33+
model:
34+
input_keys: ["t", "x", "y"]
35+
output_keys: ["u", "v", "p"]
36+
num_layers: 9
37+
hidden_size: 50
38+
activation: "tanh"
39+
40+
# training settings
41+
TRAIN:
42+
epochs: 20000
43+
iters_per_epoch: 1
44+
eval_during_train: true
45+
eval_freq: 200
46+
lr_scheduler:
47+
epochs: ${TRAIN.epochs}
48+
iters_per_epoch: ${TRAIN.iters_per_epoch}
49+
learning_rate: 0.001
50+
weight:
51+
pde: {"continuity": 0.0001,"momentum_x": 0.0001,"momentum_y": 0.0001}
52+
pretrained_model_path: null
53+
checkpoint_path: null
54+
55+
# evaluation settings
56+
EVAL:
57+
pretrained_model_path: null
58+
batch_size:
59+
residual_validator: 8192

0 commit comments

Comments
 (0)