|
12 | 12 | # See the License for the specific language governing permissions and
|
13 | 13 | # limitations under the License.
|
14 | 14 |
|
15 |
| -import paddle |
| 15 | +import numpy as np |
16 | 16 |
|
17 | 17 | import ppsci
|
18 | 18 | from ppsci.autodiff import hessian
|
|
22 | 22 |
|
23 | 23 | if __name__ == "__main__":
|
24 | 24 | args = config.parse_args()
|
25 |
| - # enable computation for fourth-order differentiation of matmul |
26 |
| - paddle.fluid.core.set_prim_eager_enabled(True) |
27 | 25 | # set random seed for reproducibility
|
28 | 26 | ppsci.utils.misc.set_random_seed(42)
|
29 | 27 | # set training hyper-parameters
|
|
58 | 56 | random="Hammersley",
|
59 | 57 | name="EQ",
|
60 | 58 | )
|
61 |
| - bc = ppsci.constraint.BoundaryConstraint( |
62 |
| - { |
63 |
| - "u0": lambda d: d["u"][0:1], |
64 |
| - "u__x": lambda d: jacobian(d["u"], d["x"])[1:2], |
65 |
| - "u__x__x": lambda d: hessian(d["u"], d["x"])[2:3], |
66 |
| - "u__x__x__x": lambda d: jacobian(hessian(d["u"], d["x"]), d["x"])[3:4], |
67 |
| - }, |
68 |
| - {"u0": 0, "u__x": 0, "u__x__x": 0, "u__x__x__x": 0}, |
| 59 | + bc1 = ppsci.constraint.BoundaryConstraint( |
| 60 | + {"u0": lambda d: d["u"]}, |
| 61 | + {"u0": 0}, |
69 | 62 | geom["interval"],
|
70 |
| - {**dataloader_cfg, "batch_size": 4}, |
| 63 | + {**dataloader_cfg, "batch_size": 1}, |
71 | 64 | ppsci.loss.MSELoss("sum"),
|
72 |
| - evenly=True, |
73 |
| - name="BC", |
| 65 | + criteria=lambda x: np.isclose(x, 0.0), |
| 66 | + name="BC1", |
| 67 | + ) |
| 68 | + bc2 = ppsci.constraint.BoundaryConstraint( |
| 69 | + {"u__x": lambda d: jacobian(d["u"], d["x"])}, |
| 70 | + {"u__x": 0}, |
| 71 | + geom["interval"], |
| 72 | + {**dataloader_cfg, "batch_size": 1}, |
| 73 | + ppsci.loss.MSELoss("sum"), |
| 74 | + criteria=lambda x: np.isclose(x, 0.0), |
| 75 | + name="BC2", |
| 76 | + ) |
| 77 | + bc3 = ppsci.constraint.BoundaryConstraint( |
| 78 | + {"u__x__x": lambda d: hessian(d["u"], d["x"])}, |
| 79 | + {"u__x__x": 0}, |
| 80 | + geom["interval"], |
| 81 | + {**dataloader_cfg, "batch_size": 1}, |
| 82 | + ppsci.loss.MSELoss("sum"), |
| 83 | + criteria=lambda x: np.isclose(x, 1.0), |
| 84 | + name="BC3", |
| 85 | + ) |
| 86 | + bc4 = ppsci.constraint.BoundaryConstraint( |
| 87 | + {"u__x__x__x": lambda d: jacobian(hessian(d["u"], d["x"]), d["x"])}, |
| 88 | + {"u__x__x__x": 0}, |
| 89 | + geom["interval"], |
| 90 | + {**dataloader_cfg, "batch_size": 1}, |
| 91 | + ppsci.loss.MSELoss("sum"), |
| 92 | + criteria=lambda x: np.isclose(x, 1.0), |
| 93 | + name="BC4", |
74 | 94 | )
|
75 | 95 | # wrap constraints together
|
76 | 96 | constraint = {
|
77 | 97 | pde_constraint.name: pde_constraint,
|
78 |
| - bc.name: bc, |
| 98 | + bc1.name: bc1, |
| 99 | + bc2.name: bc2, |
| 100 | + bc3.name: bc3, |
| 101 | + bc4.name: bc4, |
79 | 102 | }
|
80 | 103 |
|
81 | 104 | # set optimizer
|
|
0 commit comments