Skip to content

Commit 21e5ec1

Browse files
Merge branch 'develop' into okok
2 parents fa08659 + d1033d5 commit 21e5ec1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+519
-772
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ PaddleScience 是一个基于深度学习框架 PaddlePaddle 开发的科学计
5858

5959
## 快速开始
6060

61-
参考 [**快速开始**](https://paddlescience-docs.readthedocs.io/zh/latest/zh/quickstart/)
61+
请参考 [**快速开始**](https://paddlescience-docs.readthedocs.io/zh/latest/zh/quickstart/)
6262

6363
## 经典案例
6464

docs/zh/api/data/dataset.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
members:
77
- IterableNamedArrayDataset
88
- NamedArrayDataset
9-
- CylinderDataset
10-
- LorenzDataset
11-
- RosslerDataset
129
- CSVDataset
13-
- MatDataset
10+
- IterableCSVDataset
1411
- ERA5Dataset
1512
- ERA5SampledDataset
13+
- IterableMatDataset
14+
- MatDataset
15+
- CylinderDataset
16+
- LorenzDataset
17+
- RosslerDataset
18+
- VtuDataset
1619
show_root_heading: false

docs/zh/api/equation.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
- NavierStokes
1111
- NormalDotVec
1212
- Poisson
13+
- Vibration
1314
show_root_heading: false
1415
heading_level: 3

docs/zh/api/geometry.md

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,3 @@
2020
- TimeXGeometry
2121
show_root_heading: false
2222
heading_level: 3
23-
24-
<!-- # Geometry
25-
26-
::: ppsci.arch
27-
28-
This is on a separate line
29-
30-
$$
31-
\operatorname{ker} f=\{g\in G:f(g)=e_{H}\}{\mbox{.}}
32-
$$
33-
34-
The homomorphism $f$ is injective if and only if its kernel is only the
35-
singleton set $e_G$, because otherwise $\exists a,b\in G$ with $a\neq b$ such
36-
that $f(a)=f(b)$.
37-
38-
```python
39-
40-
--8<--
41-
./ppsci/data/dataset/array_dataset.py:16:49
42-
--8<--
43-
44-
``` -->

docs/zh/api/lr_scheduler.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
handler: python
55
options:
66
members:
7-
- ConstLR
87
- Linear
98
- Cosine
109
- Step

docs/zh/api/metric.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
handler: python
55
options:
66
members:
7+
- Metric
78
- MAE
89
- MSE
910
- RMSE

docs/zh/api/utils.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
- initializer
88
- logger
99
- misc
10-
- reader
10+
- load_csv_file
11+
- load_mat_file
12+
- load_vtk_file
1113
- run_check
1214
- AttrDict
1315
- ExpressionSolver

docs/zh/examples/cylinder2d_unsteady.md

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ $$
104104

105105
上式中 $f$ 即为 MLP 模型本身,用 PaddleScience 代码表示如下
106106

107-
``` py linenums="32"
107+
``` py linenums="33"
108108
--8<--
109-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:32:35
109+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:33:36
110110
--8<--
111111
```
112112

@@ -118,9 +118,9 @@ examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:32:35
118118

119119
由于 2D-Cylinder 使用的是 Navier-Stokes 方程的2维瞬态形式,因此可以直接使用 PaddleScience 内置的 `NavierStokes`
120120

121-
``` py linenums="36"
121+
``` py linenums="37"
122122
--8<--
123-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:36:37
123+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:37:38
124124
--8<--
125125
```
126126

@@ -130,7 +130,7 @@ examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:36:37
130130

131131
本文中 2D-Cylinder 的计算域由 CSV 文件储存的点云构成,因此可以直接使用 PaddleScience 内置的点云几何 `PointCloud` 和时间域 `TimeDomain`,组合成时间-空间的 `TimeXGeometry` 计算域。
132132

133-
``` py linenums="39"
133+
``` py linenums="40"
134134
# set timestamps
135135
TIME_START, TIME_END = 1, 50
136136
NUM_TIMESTAMPS = 50
@@ -159,15 +159,20 @@ geom = {
159159
timestamps=np.concatenate((t0, train_timestamps), axis=0),
160160
),
161161
ppsci.geometry.PointCloud(
162-
"./datasets/domain_train.csv",
163-
("Points:0", "Points:1"),
164-
alias_dict={"Points:0": "x", "Points:1": "y"},
162+
reader.load_csv_file(
163+
"./datasets/domain_train.csv",
164+
("x", "y"),
165+
alias_dict={"x": "Points:0", "y": "Points:1"},
166+
),
167+
("x", "y"),
165168
),
166169
),
167-
"time_rect_eval": ppsci.geometry.PointCloud( # (1)
168-
"./datasets/domain_eval.csv",
170+
"time_rect_eval": ppsci.geometry.PointCloud(
171+
reader.load_csv_file(
172+
"./datasets/domain_eval.csv",
173+
("t", "x", "y"),
174+
),
169175
("t", "x", "y"),
170-
alias_dict={},
171176
),
172177
}
173178
```
@@ -232,19 +237,19 @@ geom = {
232237

233238
在定义约束之前,需要给每一种约束指定采样点个数,表示每一种约束在其对应计算域内采样数据的数量,以及通用的采样配置。
234239

235-
``` py linenums="79"
240+
``` py linenums="85"
236241
--8<--
237-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:79:86
242+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:85:92
238243
--8<--
239244
```
240245

241246
#### 3.4.1 内部点约束
242247

243248
以作用在流体域内部点上的 `InteriorConstraint` 为例,代码如下:
244249

245-
``` py linenums="88"
250+
``` py linenums="94"
246251
--8<--
247-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:88:100
252+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:94:106
248253
--8<--
249254
```
250255

@@ -262,87 +267,91 @@ examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:88:100
262267

263268
#### 3.4.2 边界约束
264269

265-
同理,我们还需要构建流体域的流入边界、流出边界、圆周边界共三个边界的 Dirichlet 边界约束。以 `bc_inlet_cylinder` 边界约束为例,由于作用区域是边界且边界上的数据由 CSV 文件记录,因此我们使用 `SupervisedConstraint` 类,并指定第一个参数为 CSV 文件的路径 `./datasets/domain_inlet_cylinder.csv`
270+
同理,我们还需要构建流体域的流入边界、流出边界、圆周边界共三个边界的 Dirichlet 边界约束。以 `bc_inlet_cylinder` 边界约束为例,由于作用区域是边界且边界上的数据由 CSV 文件记录,因此我们使用 `SupervisedConstraint` 类,并按照如下规则指定第一个参数 `dataloader_cfg` 配置字典:
271+
272+
- 该配置字典的第一个参数为包含 CSV 文件的路径 `./datasets/domain_inlet_cylinder.csv` 在内的配置字典;
273+
274+
- 该配置字典的第一个参数指定数据加载方式,此处我们使用 `IterableCSVDataset` 作为全量数据加载器;
266275

267-
第二个参数指定数据输入 $x$ 和 $y$ 在 CSV 文件中的字段名,分别为 `"Points:0"``"Points:1"`
276+
- 该配置字典的第二个参数指定数据的加载路径,此处填写 `./datasets/domain_inlet_cylinder.csv`
268277

269-
第三个参数指定约束目标值 $u$ 和 $v$ 在 CSV 文件中的字段名,分别为 `"U:0"``"U:1"`
278+
- 该配置字典的第三个参数指定要从文件中读取的输入列,对应转换后关键字,此处填写为 `("x", "y")`
270279

271-
考虑到同一个变量在不同 CSV 文件中可能具有不同的字段名,而且有的字段名过长在编写代码时容易写错,因此第四个参数用于指定字段别名,此处为 `{"Points:0": "x", "Points:1": "y", "U:0": "u", "U:1": "v"}`,表示读取数据后,将 `"Points:0"` 关键字重新命名为 `"x"`,将 `"Points:1"` 关键字重新命名为 `"y"`,将 `"U:0"` 关键字重新命名为 `"u"`,将 `"U:1"` 关键字重新命名为 `"v"`
280+
- 该配置字典的第四个参数指定要从文件中读取的标签列,对应转换后关键字,此处填写为 `("u", "v")`
272281

273-
第五个参数是在计算域上的采样配置,此处我们使用全量数据点训练,因此 `dataset` 字段设置为 "IterableNamedArrayDataset" 且 `iters_per_epoch` 也设置为 1,采样点数 `batch_size` 设为 161 * 30(表示一个时刻产生 161 个数据点,共有 30 个时刻)
282+
- 考虑到同一个变量在不同 CSV 文件中可能具有不同的字段名,而且有的字段名过长在编写代码时容易写错,因此该配置字典的第五个参数用于指定字段列的别名,此处填写为 `{"x": "Points:0", "y": "Points:1", "u": "U:0", "v": "U:1"}`
274283

275-
第六个参数是损失函数,此处我们选用常用的MSE函数,且 `reduction` 设置为 `"mean"`,即我们会将参与计算的所有数据点产生的损失项求和取平均
284+
- 该配置字典的第六个参数指定每个标签在计算损失时的权重,此处我们放大 "u" 和 "v" 的权重至 10,填写 `{"u": 10, "v": 10}`
276285

277-
第七个参数是权重系数,该配置可以精确调整每一个变量参与损失计算时的权重
286+
- 该配置字典的第七个参数指定数据读取是否涉及时间信息,此处我们设定为训练时间戳,即填写 `train_timestamps`
278287

279-
第八个参数是指定 CSV 文件的时刻信息,此处我们传入表示训练 30 个时刻的 `train_timestamps`
288+
第二个参数是损失函数,此处我们选用常用的MSE函数,且 `reduction` 设置为 `"mean"`,即我们会将参与计算的所有数据点产生的损失项求和取平均
280289

281-
第九个参数是约束条件的名字,我们需要给每一个约束条件命名,方便后续对其索引。此处我们命名为 "BC_inlet_cylinder" 即可。
290+
第三个参数是约束条件的名字,我们需要给每一个约束条件命名,方便后续对其索引。此处我们命名为 "BC_inlet_cylinder" 即可。
282291

283292
剩下的 `bc_outlet` 按照相同原理构建,代码如下所示:
284293

285-
``` py linenums="101"
294+
``` py linenums="107"
286295
--8<--
287-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:101:129
296+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:107:135
288297
--8<--
289298
```
290299

291300
#### 3.4.3 初值约束
292301

293302
对于 $t=t_0$ 时刻的流体域内的点,我们还需要对 $u$, $v$, $p$ 施加初值约束,代码如下:
294303

295-
``` py linenums="130"
304+
``` py linenums="136"
296305
--8<--
297-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:130:144
306+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:136:150
298307
--8<--
299308
```
300309

301310
#### 3.4.4 监督约束
302311

303312
本案例在流体域内部加入了一定数量的监督点来保证模型最终的收敛情况,因此最后还需要加入一个监督约束,数据同样来自 CSV 文件,代码如下:
304313

305-
``` py linenums="145"
314+
``` py linenums="151"
306315
--8<--
307-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:145:159
316+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:151:165
308317
--8<--
309318
```
310319

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

313-
``` py linenums="160"
322+
``` py linenums="166"
314323
--8<--
315-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:160:167
324+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:166:173
316325
--8<--
317326
```
318327

319328
### 3.5 超参数设定
320329

321330
接下来我们需要指定训练轮数和学习率,此处我们按实验经验,使用两万轮训练轮数,评估间隔为四百轮,学习率设为 0.001。
322331

323-
``` py linenums="169"
332+
``` py linenums="175"
324333
--8<--
325-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:169:171
334+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:175:177
326335
--8<--
327336
```
328337

329338
### 3.6 优化器构建
330339

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

333-
``` py linenums="173"
342+
``` py linenums="179"
334343
--8<--
335-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:173:174
344+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:179:180
336345
--8<--
337346
```
338347

339348
### 3.7 评估器构建
340349

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

343-
``` py linenums="176"
352+
``` py linenums="182"
344353
--8<--
345-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:176:192
354+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:182:198
346355
--8<--
347356
```
348357

@@ -364,19 +373,19 @@ examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:176:192
364373

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

367-
``` py linenums="194"
376+
``` py linenums="200"
368377
--8<--
369-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:194:205
378+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:200:212
370379
--8<--
371380
```
372381

373382
### 3.9 模型训练、评估与可视化
374383

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

377-
``` py linenums="207"
386+
``` py linenums="214"
378387
--8<--
379-
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:207:
388+
examples/cylinder/2d_unsteady/cylinder2d_unsteady_Re100.py:214:
380389
--8<--
381390
```
382391

docs/zh/examples/cylinder2d_unsteady_transformer_physx.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 2D-Cylinder(2D Flow Around a Cylinder)
22

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

57
2D Flow Around a Cylinder,中文名称可译作“2维圆柱绕流”,是指二维圆柱低速定常绕流的流型只与 $Re$ 数有关。在 $Re \le 1$ 时,流场中的惯性力与粘性力相比居次要地位,圆柱上下游的流线前后对称,阻力系数近似与 $Re$ 成反比(阻力系数为 10~60),此 $Re$ 数范围的绕流称为斯托克斯区;随着 $Re$ 的增大,圆柱上下游的流线逐渐失去对称性。

docs/zh/examples/darcy2d.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# 2D-Darcy
22

3+
<a href="https://aistudio.baidu.com/aistudio/projectdetail/6184070?contributionType=1&sUid=438690&shared=1&ts=1684239806160" class="md-button md-button--primary" style>AI Studio快速体验</a>
4+
35
## 1. 问题简介
46

57
2D-Darcy,达西渗流(Darcy flow)的一种,流体在多孔介质中流动时,渗流速度小,流动服从达西定律,渗流速度和压力梯度之间呈线性关系,这种流动称为线性渗流。
@@ -107,7 +109,7 @@ examples/darcy/darcy2d.py:52:69
107109

108110
``` py linenums="70"
109111
--8<--
110-
examples/darcy/darcy2d.py:70:81
112+
examples/darcy/darcy2d.py:70:117
111113
--8<--
112114
```
113115

@@ -121,6 +123,14 @@ lambda _in: np.sin(2.0 * np.pi * _in["x"]) * np.cos(2.0 * np.pi * _in["y"])
121123

122124
`BoundaryConstraint` 类其他参数的含义与 `InteriorConstraint` 基本一致,这里不再介绍。
123125

126+
在微分方程约束、边界约束、初值约束构建完毕之后,以我们刚才的命名为关键字,封装到一个字典中,方便后续访问。
127+
128+
``` py linenums="118"
129+
--8<--
130+
examples/ldc/ldc2d_steady_Re10.py:118:125
131+
--8<--
132+
```
133+
124134
### 3.5 超参数设定
125135

126136
接下来我们需要指定训练轮数和学习率,此处我们按实验经验,使用一万轮训练轮数。

0 commit comments

Comments
 (0)