我写了一个基于pinn求解二维传热反问题,传热模型是一个三角形,现在不知道那里有bug,运行不了
# 调包
import matplotlib.pyplot as plt
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import numpy as np
import deepxde as dde
import numpy as np
import math
import scipy.io as io
# 定义参数
LENGTH_OF_DOMAIN = 1
TIME = 5
INITIAL_CONC = 10
D = 0.4
J = 1
c_bar = 10
TriangleDomain = dde.geometry.geometry_2d.Triangle([0, 0], [8, 0], [4, 4])
#建立二维模型
TimeDomain = dde.geometry.TimeDomain(0, TIME)#时间范围
CombinedDomain = dde.geometry.GeometryXTime(TriangleDomain, TimeDomain)
#划定边界范围
def on_boundary_1(X, on_boundary):
return on_boundary and np.isclose(X[0]-X[1], 0)
def on_boundary_2(X, on_boundary):
return on_boundary and np.isclose(X[1], 0)
def on_boundary_3(X, on_boundary):
return on_boundary and np.isclose(X[1]+X[0], 8)
#定义逆问题需要计算的参数
C = dde.Variable(1.0)
#导入真实数据
xytT = io.loadmat('chushizhi.mat')
xyt = xytT['data'][:, 0:3]
T = xytT['data'][:, 3:4]
l_bc_1 = dde.icbc.DirichletBC(CombinedDomain, lambda X: C, on_boundary_1)
l_bc_2 = dde.icbc.DirichletBC(CombinedDomain, lambda X: C, on_boundary_2)
l_bc_3 = dde.icbc.DirichletBC(CombinedDomain, lambda X: C, on_boundary_3)#边界条件
initial_bc = dde.icbc.IC(CombinedDomain, lambda X: INITIAL_CONC, lambda _, on_initial: on_initial) #初始条件
ob_x = dde.icbc.PointSetBC(xyt, T, component=0)#数据点
#二维热传导方程
def pde(A, u):
du_dt = dde.grad.jacobian(u, A, i=0, j=2)
ddu_dxx = dde.grad.hessian(u, A, i=0, j=0)
ddu_dyy = dde.grad.hessian(u, A, i=1, j=1)
return du_dt - D * (ddu_dxx + ddu_dyy)
# 组合模型
module = dde.data.TimePDE(
CombinedDomain,
pde,
[l_bc_1, l_bc_2, l_bc_3, initial_bc, ob_x],
num_domain = 5000,
num_boundary = 1200,
num_initial = 1200,
num_test = 5000,
)
# 定义神经网络模型
net = dde.nn.FNN([3] + [100] * 4 + [1], "tanh", "Glorot normal")#网络层和激活函数
model = dde.Model(module, net)
model.compile("adam", lr = 0.0001, external_trainable_variables=C)#优化器、学习率、需要计算的参数
#保存计算的参数
fnamevar = "10_4dian.dat"
variable = dde.callbacks.VariableValue([C], period=100, filename=fnamevar)
# 训练模型
LossHistory, TrainState = model.train(iterations = 150000, callbacks=[variable])
dde.saveplot(LossHistory, TrainState, issave = True, isplot = True)
这个是报错
return _C_ops.linear(x, weight, bias)
ValueError: (InvalidArgument) The type of data we are trying to retrieve (float32) does not match the type of data (float64) currently contained in the container.
[Hint: Expected dtype() == phi::CppTypeToDataType<T>::Type(), but received dtype():11 != phi::CppTypeToDataType<T>::Type():10.] (at ..\paddle\phi\core\dense_tensor.cc:171)
[operator < linear > error]
我想问一下