|
23 | 23 | # set random seed for reproducibility
|
24 | 24 | ppsci.utils.misc.set_random_seed(42)
|
25 | 25 | # 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 |
27 | 27 | # initialize logger
|
28 |
| - logger.init_logger("ppsci", f"{output_dir}/train.log", "info") |
| 28 | + logger.init_logger("ppsci", f"{OUTPUT_DIR}/train.log", "info") |
29 | 29 |
|
30 | 30 | # set model
|
31 | 31 | model = ppsci.arch.MLP(("x", "y"), ("u", "v", "p"), 9, 50, "tanh", False, False)
|
|
37 | 37 | geom = {"rect": ppsci.geometry.Rectangle((-0.05, -0.05), (0.05, 0.05))}
|
38 | 38 |
|
39 | 39 | # set dataloader config
|
40 |
| - iters_per_epoch = 1 |
| 40 | + ITERS_PER_EPOCH = 1 |
41 | 41 | train_dataloader_cfg = {
|
42 | 42 | "dataset": "IterableNamedArrayDataset",
|
43 |
| - "iters_per_epoch": iters_per_epoch, |
| 43 | + "iters_per_epoch": ITERS_PER_EPOCH, |
44 | 44 | }
|
45 | 45 |
|
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 |
51 | 51 |
|
52 | 52 | # set constraint
|
53 | 53 | pde_constraint = ppsci.constraint.InteriorConstraint(
|
54 | 54 | equation["NavierStokes"].equations,
|
55 | 55 | {"continuity": 0, "momentum_x": 0, "momentum_y": 0},
|
56 | 56 | geom["rect"],
|
57 |
| - {**train_dataloader_cfg, "batch_size": npoint_pde}, |
| 57 | + {**train_dataloader_cfg, "batch_size": NPOINT_PDE}, |
58 | 58 | ppsci.loss.MSELoss("sum"),
|
59 | 59 | evenly=True,
|
60 | 60 | weight_dict={
|
|
68 | 68 | {"u": lambda out: out["u"], "v": lambda out: out["v"]},
|
69 | 69 | {"u": 1, "v": 0},
|
70 | 70 | geom["rect"],
|
71 |
| - {**train_dataloader_cfg, "batch_size": npoint_top}, |
| 71 | + {**train_dataloader_cfg, "batch_size": NPOINT_TOP}, |
72 | 72 | ppsci.loss.MSELoss("sum"),
|
73 | 73 | criteria=lambda x, y: np.isclose(y, 0.05),
|
74 | 74 | name="BC_top",
|
|
77 | 77 | {"u": lambda out: out["u"], "v": lambda out: out["v"]},
|
78 | 78 | {"u": 0, "v": 0},
|
79 | 79 | geom["rect"],
|
80 |
| - {**train_dataloader_cfg, "batch_size": npoint_bottom}, |
| 80 | + {**train_dataloader_cfg, "batch_size": NPOINT_BOTTOM}, |
81 | 81 | ppsci.loss.MSELoss("sum"),
|
82 | 82 | criteria=lambda x, y: np.isclose(y, -0.05),
|
83 | 83 | name="BC_bottom",
|
|
86 | 86 | {"u": lambda out: out["u"], "v": lambda out: out["v"]},
|
87 | 87 | {"u": 0, "v": 0},
|
88 | 88 | geom["rect"],
|
89 |
| - {**train_dataloader_cfg, "batch_size": npoint_left}, |
| 89 | + {**train_dataloader_cfg, "batch_size": NPOINT_LEFT}, |
90 | 90 | ppsci.loss.MSELoss("sum"),
|
91 | 91 | criteria=lambda x, y: np.isclose(x, -0.05),
|
92 | 92 | name="BC_left",
|
|
95 | 95 | {"u": lambda out: out["u"], "v": lambda out: out["v"]},
|
96 | 96 | {"u": 0, "v": 0},
|
97 | 97 | geom["rect"],
|
98 |
| - {**train_dataloader_cfg, "batch_size": npoint_right}, |
| 98 | + {**train_dataloader_cfg, "batch_size": NPOINT_RIGHT}, |
99 | 99 | ppsci.loss.MSELoss("sum"),
|
100 | 100 | criteria=lambda x, y: np.isclose(x, 0.05),
|
101 | 101 | name="BC_right",
|
|
110 | 110 | }
|
111 | 111 |
|
112 | 112 | # set training hyper-parameters
|
113 |
| - epochs = 20000 if not args.epochs else args.epochs |
| 113 | + EPOCHS = 20000 if not args.epochs else args.epochs |
114 | 114 | lr_scheduler = ppsci.optimizer.lr_scheduler.Cosine(
|
115 |
| - epochs, |
116 |
| - iters_per_epoch, |
| 115 | + EPOCHS, |
| 116 | + ITERS_PER_EPOCH, |
117 | 117 | 0.001,
|
118 |
| - warmup_epoch=int(0.05 * epochs), |
| 118 | + warmup_epoch=int(0.05 * EPOCHS), |
119 | 119 | )()
|
120 | 120 |
|
121 | 121 | # set optimizer
|
122 | 122 | optimizer = ppsci.optimizer.Adam(lr_scheduler)((model,))
|
123 | 123 |
|
124 | 124 | # set validator
|
125 |
| - npoints_eval = npoint_pde |
| 125 | + NPOINTS_EVAL = NPOINT_PDE |
126 | 126 | residual_validator = ppsci.validate.GeometryValidator(
|
127 | 127 | equation["NavierStokes"].equations,
|
128 | 128 | {"momentum_x": 0, "continuity": 0, "momentum_y": 0},
|
129 | 129 | geom["rect"],
|
130 | 130 | {
|
131 | 131 | "dataset": "NamedArrayDataset",
|
132 |
| - "total_size": npoints_eval, |
| 132 | + "total_size": NPOINTS_EVAL, |
133 | 133 | "batch_size": 8192,
|
134 | 134 | "sampler": {"name": "BatchSampler"},
|
135 | 135 | },
|
|
141 | 141 | validator = {residual_validator.name: residual_validator}
|
142 | 142 |
|
143 | 143 | # 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 |
| - |
148 | 144 | # 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) |
156 | 147 | visualizer = {
|
157 | 148 | "visulzie_u_v": ppsci.visualize.VisualizerVtu(
|
158 | 149 | vis_points,
|
|
165 | 156 | solver = ppsci.solver.Solver(
|
166 | 157 | model,
|
167 | 158 | constraint,
|
168 |
| - output_dir, |
| 159 | + OUTPUT_DIR, |
169 | 160 | optimizer,
|
170 | 161 | lr_scheduler,
|
171 |
| - epochs, |
172 |
| - iters_per_epoch, |
| 162 | + EPOCHS, |
| 163 | + ITERS_PER_EPOCH, |
173 | 164 | eval_during_train=True,
|
174 | 165 | eval_freq=200,
|
175 | 166 | equation=equation,
|
|
185 | 176 | solver.visualize()
|
186 | 177 |
|
187 | 178 | # directly evaluate pretrained model(optional)
|
| 179 | + logger.init_logger("ppsci", f"{OUTPUT_DIR}/eval.log", "info") |
188 | 180 | solver = ppsci.solver.Solver(
|
189 | 181 | model,
|
190 | 182 | constraint,
|
191 |
| - output_dir, |
| 183 | + OUTPUT_DIR, |
192 | 184 | equation=equation,
|
193 | 185 | geom=geom,
|
194 | 186 | validator=validator,
|
195 | 187 | visualizer=visualizer,
|
196 |
| - pretrained_model_path=f"{output_dir}/checkpoints/latest", |
| 188 | + pretrained_model_path=f"{OUTPUT_DIR}/checkpoints/latest", |
197 | 189 | )
|
198 | 190 | solver.eval()
|
199 | 191 | # visualize prediction for pretrained model(optional)
|
|
0 commit comments