# set random seed(42) for reproducibilityppsci.utils.misc.set_random_seed(42)# set output directoryOUTPUT_DIR="./output_quick_start_case1"# initialize logger while create output directorylogger.init_logger("ppsci",f"{OUTPUT_DIR}/train.log","info")
# standard solution of sin(x)defsin_compute_func(data:dict):returnnp.sin(data["x"])# set constraint on 1D-geometry([-π, π])ITERS_PER_EPOCH=100# use 100 iterations per training epochinterior_constraint=ppsci.constraint.InteriorConstraint(output_expr={"u":lambdaout:out["u"]},label_dict={"u":sin_compute_func},geom=x_domain,dataloader_cfg={"dataset":"NamedArrayDataset","iters_per_epoch":ITERS_PER_EPOCH,"sampler":{"name":"BatchSampler","shuffle":True,},"batch_size":32,# use 32 samples(points) per iteration for interior constraint},loss=ppsci.loss.MSELoss(),)# wrap constraint(s) into one dictconstraint={interior_constraint.name:interior_constraint,}
# set training hyper-parametersEPOCHS=10# set optimizeroptimizer=ppsci.optimizer.Adam(2e-3)(model)# set visualizervisual_input_dict={"x":np.linspace(l_limit,r_limit,1000,dtype="float32").reshape(1000,1)}visual_input_dict["u_ref"]=np.sin(visual_input_dict["x"])visualizer={"visualize_u":ppsci.visualize.VisualizerScatter1D(visual_input_dict,("x",),{"u_pred":lambdaout:out["u"],"u_ref":lambdaout:out["u_ref"]},prefix="u=sin(x)",),}
importnumpyasnpimportppscifromppsci.utilsimportlogger# set random seed(42) for reproducibilityppsci.utils.misc.set_random_seed(42)# set output directoryOUTPUT_DIR="./output_quick_start_case1"# initialize logger while create output directorylogger.init_logger("ppsci",f"{OUTPUT_DIR}/train.log","info")# set 1D-geometry domain([-π, π])l_limit,r_limit=-np.pi,np.pix_domain=ppsci.geometry.Interval(l_limit,r_limit)# set model to 3-layer MLPmodel=ppsci.arch.MLP(("x",),("u",),3,64)# standard solution of sin(x)defsin_compute_func(data:dict):returnnp.sin(data["x"])# set constraint on 1D-geometry([-π, π])ITERS_PER_EPOCH=100# use 100 iterations per training epochinterior_constraint=ppsci.constraint.InteriorConstraint(output_expr={"u":lambdaout:out["u"]},label_dict={"u":sin_compute_func},geom=x_domain,dataloader_cfg={"dataset":"NamedArrayDataset","iters_per_epoch":ITERS_PER_EPOCH,"sampler":{"name":"BatchSampler","shuffle":True,},"batch_size":32,# use 32 samples(points) per iteration for interior constraint},loss=ppsci.loss.MSELoss(),)# wrap constraint(s) into one dictconstraint={interior_constraint.name:interior_constraint,}# set training hyper-parametersEPOCHS=10# set optimizeroptimizer=ppsci.optimizer.Adam(2e-3)(model)# set visualizervisual_input_dict={"x":np.linspace(l_limit,r_limit,1000,dtype="float32").reshape(1000,1)}visual_input_dict["u_ref"]=np.sin(visual_input_dict["x"])visualizer={"visualize_u":ppsci.visualize.VisualizerScatter1D(visual_input_dict,("x",),{"u_pred":lambdaout:out["u"],"u_ref":lambdaout:out["u_ref"]},prefix="u=sin(x)",),}# initialize solversolver=ppsci.solver.Solver(model,constraint,OUTPUT_DIR,optimizer,epochs=EPOCHS,iters_per_epoch=ITERS_PER_EPOCH,visualizer=visualizer,)# train modelsolver.train()# compute l2-relative error of trained modelpred_u=solver.predict(visual_input_dict,return_numpy=True)["u"]l2_rel=np.linalg.norm(pred_u-visual_input_dict["u_ref"])/np.linalg.norm(visual_input_dict["u_ref"])logger.info(f"l2_rel = {l2_rel:.5f}")# visualize prediction after finished trainingsolver.visualize()
# set constraint on 1D-geometry([-π, π])ITERS_PER_EPOCH=100# use 100 iterations per training epochinterior_constraint=ppsci.constraint.InteriorConstraint(output_expr={"du_dx":lambdaout:jacobian(out["u"],out["x"])},label_dict={"du_dx":cos_compute_func},geom=x_domain,dataloader_cfg={"dataset":"NamedArrayDataset","iters_per_epoch":ITERS_PER_EPOCH,"sampler":{"name":"BatchSampler","shuffle":True,},"batch_size":32,# use 32 samples(points) per iteration for interior constraint},loss=ppsci.loss.MSELoss(),)
bc_constraint=ppsci.constraint.BoundaryConstraint({"u":lambdad:d["u"]},{"u":lambdad:sin_compute_func(d)+2},# (1)x_domain,dataloader_cfg={"dataset":"NamedArrayDataset","iters_per_epoch":ITERS_PER_EPOCH,"sampler":{"name":"BatchSampler","shuffle":True,},"batch_size":1,# use 1 sample(point) per iteration for boundary constraint},loss=ppsci.loss.MSELoss(),criteria=lambdax:np.isclose(x,l_limit),)
# set visualizervisual_input_dict={"x":np.linspace(l_limit,r_limit,1000,dtype="float32").reshape(1000,1)}visual_input_dict["u_ref"]=np.sin(visual_input_dict["x"])+2.0visualizer={"visualize_u":ppsci.visualize.VisualizerScatter1D(visual_input_dict,("x",),{"u_pred":lambdaout:out["u"],"u_ref":lambdaout:out["u_ref"]},prefix="u=sin(x)",),}
importnumpyasnpimportppscifromppsci.autodiffimportjacobianfromppsci.utilsimportlogger# set random seed(42) for reproducibilityppsci.utils.misc.set_random_seed(42)# set output directoryOUTPUT_DIR="./output_quick_start_case2"# initialize logger while create output directorylogger.init_logger("ppsci",f"{OUTPUT_DIR}/train.log","info")# set 1D-geometry domain([-π, π])l_limit,r_limit=-np.pi,np.pix_domain=ppsci.geometry.Interval(l_limit,r_limit)# set model to 3-layer MLPmodel=ppsci.arch.MLP(("x",),("u",),3,64)# standard solution of sin(x)defsin_compute_func(data:dict):returnnp.sin(data["x"])# standard solution of cos(x)defcos_compute_func(data:dict):returnnp.cos(data["x"])# set constraint on 1D-geometry([-π, π])ITERS_PER_EPOCH=100# use 100 iterations per training epochinterior_constraint=ppsci.constraint.InteriorConstraint(output_expr={"du_dx":lambdaout:jacobian(out["u"],out["x"])},label_dict={"du_dx":cos_compute_func},geom=x_domain,dataloader_cfg={"dataset":"NamedArrayDataset","iters_per_epoch":ITERS_PER_EPOCH,"sampler":{"name":"BatchSampler","shuffle":True,},"batch_size":32,# use 32 samples(points) per iteration for interior constraint},loss=ppsci.loss.MSELoss(),)bc_constraint=ppsci.constraint.BoundaryConstraint({"u":lambdad:d["u"]},{"u":lambdad:sin_compute_func(d)+2},# (1)x_domain,dataloader_cfg={"dataset":"NamedArrayDataset","iters_per_epoch":ITERS_PER_EPOCH,"sampler":{"name":"BatchSampler","shuffle":True,},"batch_size":1,# use 1 sample(point) per iteration for boundary constraint},loss=ppsci.loss.MSELoss(),criteria=lambdax:np.isclose(x,l_limit),)# wrap constraint(s) into one dictconstraint={interior_constraint.name:interior_constraint,bc_constraint.name:bc_constraint,}# set training hyper-parametersEPOCHS=10# set optimizeroptimizer=ppsci.optimizer.Adam(2e-3)(model)# set visualizervisual_input_dict={"x":np.linspace(l_limit,r_limit,1000,dtype="float32").reshape(1000,1)}visual_input_dict["u_ref"]=np.sin(visual_input_dict["x"])+2.0visualizer={"visualize_u":ppsci.visualize.VisualizerScatter1D(visual_input_dict,("x",),{"u_pred":lambdaout:out["u"],"u_ref":lambdaout:out["u_ref"]},prefix="u=sin(x)",),}# initialize solversolver=ppsci.solver.Solver(model,constraint,OUTPUT_DIR,optimizer,epochs=EPOCHS,iters_per_epoch=ITERS_PER_EPOCH,visualizer=visualizer,)# train modelsolver.train()# compute l2-relative error of trained modelpred_u=solver.predict(visual_input_dict,return_numpy=True)["u"]l2_rel=np.linalg.norm(pred_u-visual_input_dict["u_ref"])/np.linalg.norm(visual_input_dict["u_ref"])logger.info(f"l2_rel = {l2_rel:.5f}")# visualize prediction after finished trainingsolver.visualize()