Skip to content

Commit c108931

Browse files
update code and doc
1 parent c20e766 commit c108931

File tree

2 files changed

+39
-24
lines changed

2 files changed

+39
-24
lines changed

docs/zh/examples/spinn.md

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,35 @@
3535
Helmholtz方程是一个重要的偏微分方程,广泛应用于物理学和工程学中,特别是在波动理论和振动问题中。它以德国物理学家赫尔曼·冯·亥姆霍兹(Hermann von Helmholtz)的名字命名。Helmholtz方程的标准形式如下:
3636

3737
$$
38-
\nabla^2 \psi + k^2 \psi = f
38+
\nabla^2 u + k^2 u = q
3939
$$
4040

4141
这里:
4242

4343
- $\nabla^2$ 是拉普拉斯算子(也称为拉普拉斯算符),在三维直角坐标系下,它的形式是:$\nabla^2 = \frac{\partial^2 }{\partial x^2} + \frac{\partial^2 }{\partial y^2} + \frac{\partial^2 }{\partial z^2}$
44-
- $\psi$ 是待求解的函数,通常表示物理量的幅度,如电磁场、声压或量子波函数等。
44+
- $u$ 是待求解的函数,通常表示物理量的幅度,如电磁场、声压或量子波函数等。
4545
- $k$ 是波数,定义为 $k = \frac{2\pi}{\lambda}$,其中 $\lambda$ 是波长。
46-
- $f$ 是源项,通常表示物理量与时间、空间导数之间的相互作用。
46+
- $q$ 是源项,通常表示物理量与时间、空间导数之间的相互作用。
4747

4848
本案例解决以下三维 Helmholtz 方程:
4949

5050
$$
5151
\begin{aligned}
52-
\nabla^2 \psi + k^2 \psi &= \nabla^2 f + k^2 \\
53-
f &= \sin(a_1 * \pi * x) * \sin(a_2 * \pi * y) * \sin(a_3 * \pi * z)
52+
& \nabla^2 u + k^2 u = q, x \in \Omega^3 \\
53+
& u(x) = 0, x \in \partial \Omega \\
54+
\end{aligned}
55+
$$
56+
57+
$$
58+
\begin{aligned}
59+
& \text{source term } q = -(a_1 \pi)^2 u -(a_2 \pi)^2 u -(a_3 \pi)^2 u + k^2 u \\
60+
& \text{where }k=1, a_1=4, a_2=4, a_3=3
5461
\end{aligned}
5562
$$
5663

5764
## 2. 问题定义
5865

59-
本问题的计算域在 $[-1, 1] ^3$ 一个单位正方体内,对于计算域内部点,要求满足上述 Helmholtz 方程,对于计算域边界点,要求满足 $\psi = 0$。
66+
本问题的计算域在 $[-1, 1] ^3$ 一个单位正方体内,对于计算域内部点,要求满足上述 Helmholtz 方程,对于计算域边界点,要求满足 $u = 0$。
6067

6168
## 3. 问题求解
6269

@@ -69,7 +76,7 @@ SPINN 的模型结构设计如下:
6976

7077
![SPINN_structure](https://paddle-org.bj.bcebos.com/paddlescience/docs/spinn/spinn_structure.png)
7178

72-
在 Helmholtz 问题中,每一个已知的坐标点 $(x, y, z)$ 都有对应的待求解的未知量 $\psi$(此处我们用 $u$代替),在这里使用 SPINN 来表示 $(x, y, z)$ 到 $(u)$ 的映射函数 $f: \mathbb{R}^3 \to \mathbb{R}^1$ ,即:
79+
在 Helmholtz 问题中,每一个已知的坐标点 $(x, y, z)$ 都有对应的待求解的未知量 $u$(此处我们用 $u$代替),在这里使用 SPINN 来表示 $(x, y, z)$ 到 $(u)$ 的映射函数 $f: \mathbb{R}^3 \to \mathbb{R}^1$ ,即:
7380

7481
$$
7582
u = m(x, y, z)
@@ -109,11 +116,19 @@ examples/spinn/helmholtz3d.py:102:104
109116

110117
#### 3.3.1 内部点约束
111118

112-
以作用在内部点上的 `SupervisedConstraint` 为例,代码如下:
119+
以作用在内部点上的 `SupervisedConstraint` 为例,用于生成内部点训练数据的代码如下:
120+
121+
``` py linenums="39"
122+
--8<--
123+
examples/spinn/helmholtz3d.py:39:83
124+
--8<--
125+
```
126+
127+
用于构建内部点约束的代码如下:
113128

114129
``` py linenums="106"
115130
--8<--
116-
examples/spinn/helmholtz3d.py:106:140
131+
examples/spinn/helmholtz3d.py:106:156
117132
--8<--
118133
```
119134

@@ -129,9 +144,9 @@ examples/spinn/helmholtz3d.py:106:140
129144

130145
第三个约束条件是边值约束,代码如下:
131146

132-
``` py linenums="166"
147+
``` py linenums="158"
133148
--8<--
134-
examples/spinn/helmholtz3d.py:166:190
149+
examples/spinn/helmholtz3d.py:158:190
135150
--8<--
136151
```
137152

examples/spinn/helmholtz3d.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -138,19 +138,6 @@ def __call__(self):
138138
def gen_label_batch(input_batch):
139139
return {"helmholtz": input_batch["uc"]}
140140

141-
class BCDataGenerator:
142-
def __init__(self, idx: int):
143-
self.idx = idx
144-
145-
def __call__(self):
146-
global xb, yb, zb
147-
tmp = {
148-
"x": xb[self.idx],
149-
"y": yb[self.idx],
150-
"z": zb[self.idx],
151-
}
152-
return tmp
153-
154141
pde_constraint = ppsci.constraint.SupervisedConstraint(
155142
{
156143
"dataset": {
@@ -168,6 +155,19 @@ def __call__(self):
168155
pde_constraint.name: pde_constraint,
169156
}
170157

158+
class BCDataGenerator:
159+
def __init__(self, idx: int):
160+
self.idx = idx
161+
162+
def __call__(self):
163+
global xb, yb, zb
164+
tmp = {
165+
"x": xb[self.idx],
166+
"y": yb[self.idx],
167+
"z": zb[self.idx],
168+
}
169+
return tmp
170+
171171
def gen_bc_label(data_dict):
172172
nx = len(data_dict["x"])
173173
ny = len(data_dict["y"])

0 commit comments

Comments
 (0)