def _set_boundary(self, mesh): bd_u = Ofpp.parse_boundary_field(self.path_dir + self.path_bd_u) bd_p = Ofpp.parse_boundary_field(self.path_dir + self.path_bd_p) # mesh = Ofpp.FoamMesh(self.path_dir) def make_bd_tuple(bd_key): source_dic = mesh.boundary[bd_key] if b'value' in bd_u[bd_key]: u_val = bd_u[bd_key][b'value'] else: u_val = None if b'value' in bd_p[bd_key]: p_val = bd_p[bd_key][b'value'] else: p_val = None bd_tuple = self._bd_tuple(bd_key.decode(), source_dic.type.decode(), source_dic.id, source_dic.start, source_dic.num, u_val, p_val) return bd_tuple bd = [make_bd_tuple(key) for key in mesh.boundary.keys()] owner = np.array(mesh.owner) self.boundary = bd self.bd_nums = [bd[i].num for i in range(len(bd))] self.bd_faces = [ np.arange(bd[i].i_start, bd[i].i_start + bd[i].num) for i in range(len(bd)) ] self.bd_cells = [owner[self.bd_faces[i]] for i in range(len(bd))]
import torch.optim as optim import pdb from torch.utils.data import DataLoader import time from scipy.interpolate import interp1d import tikzplotlib sys.path.insert(0, '../source') from dataset import VaryGeoDataset from pyMesh import hcubeMesh, visualize2D, plotBC, plotMesh,setAxisLabel,\ np2cuda,to4DTensor from model import USCNN from readOF import convertOFMeshToImage,convertOFMeshToImage_StructuredMesh from sklearn.metrics import mean_squared_error as calMSE import Ofpp h=0.01 OFBCCoord=Ofpp.parse_boundary_field('TemplateCase/30/C') OFLOWC=OFBCCoord[b'low'][b'value'] OFUPC=OFBCCoord[b'up'][b'value'] OFLEFTC=OFBCCoord[b'left'][b'value'] OFRIGHTC=OFBCCoord[b'right'][b'value'] leftX=OFLEFTC[:,0];leftY=OFLEFTC[:,1] lowX=OFLOWC[:,0];lowY=OFLOWC[:,1] rightX=OFRIGHTC[:,0];rightY=OFRIGHTC[:,1] upX=OFUPC[:,0];upY=OFUPC[:,1] ny=len(leftX);nx=len(lowX) myMesh=hcubeMesh(leftX,leftY,rightX,rightY, lowX,lowY,upX,upY,h,True,True, tolMesh=1e-10,tolJoint=1) batchSize=1 NvarInput=2 NvarOutput=1
dfdeta=torch.cat((dfdeta_low[:,:,0:2,:],dfdeta_internal,dfdeta_up[:,:,-2:,:]),2) dfdx=Jinv*(dfdxi*dydeta-dfdeta*dydxi) return dfdx def dfdy(f,dxdxi,dxdeta,Jinv): dfdxi_internal=(-f[:,:,:,4:]+8*f[:,:,:,3:-1]-8*f[:,:,:,1:-3]+f[:,:,:,0:-4])/12/h dfdxi_left=(-11*f[:,:,:,0:-3]+18*f[:,:,:,1:-2]-9*f[:,:,:,2:-1]+2*f[:,:,:,3:])/6/h dfdxi_right=(11*f[:,:,:,3:]-18*f[:,:,:,2:-1]+9*f[:,:,:,1:-2]-2*f[:,:,:,0:-3])/6/h dfdxi=torch.cat((dfdxi_left[:,:,:,0:2],dfdxi_internal,dfdxi_right[:,:,:,-2:]),3) dfdeta_internal=(-f[:,:,4:,:]+8*f[:,:,3:-1,:]-8*f[:,:,1:-3,:]+f[:,:,0:-4,:])/12/h dfdeta_low=(-11*f[:,:,0:-3,:]+18*f[:,:,1:-2,:]-9*f[:,:,2:-1,:]+2*f[:,:,3:,:])/6/h dfdeta_up=(11*f[:,:,3:,:]-18*f[:,:,2:-1,:]+9*f[:,:,1:-2,:]-2*f[:,:,0:-3,:])/6/h dfdeta=torch.cat((dfdeta_low[:,:,0:2,:],dfdeta_internal,dfdeta_up[:,:,-2:,:]),2) dfdy=Jinv*(dfdeta*dxdxi-dfdxi*dxdeta) return dfdy os.system('mkdir test') OFBCCoord=Ofpp.parse_boundary_field('TemplateCase_4side/1/C') OFLOWC=OFBCCoord[b'low'][b'value'] OFUPC=OFBCCoord[b'up'][b'value'] OFLEFTC=OFBCCoord[b'left'][b'value'] OFRIGHTC=OFBCCoord[b'right'][b'value'] leftX=OFLEFTC[:,0];leftY=OFLEFTC[:,1] lowX=OFLOWC[:,0];lowY=OFLOWC[:,1] rightX=OFRIGHTC[:,0];rightY=OFRIGHTC[:,1] upX=OFUPC[:,0];upY=OFUPC[:,1] ny=len(leftX);nx=len(lowX) myMesh=hcubeMesh(leftX,leftY,rightX,rightY, lowX,lowY,upX,upY,h,True,True, tolMesh=1e-10,tolJoint=0.2) OFPic=convertOFMeshToImage_StructuredMesh(nx,ny,'TemplateCase_4side/1/C', ['TemplateCase_4side/1/f'], [0,1,0,1],0.0,False)
import pdb from torch.utils.data import DataLoader import time from scipy.interpolate import interp1d import tikzplotlib sys.path.insert(0, '../source') from dataset import VaryGeoDataset from pyMesh import hcubeMesh, visualize2D, plotBC, plotMesh,setAxisLabel,\ np2cuda,to4DTensor from model import USCNN, USCNNSepPhi, USCNNSep, DDBasic from readOF import convertOFMeshToImage, convertOFMeshToImage_StructuredMesh from sklearn.metrics import mean_squared_error as calMSE import Ofpp h = 0.01 OFBCCoord = Ofpp.parse_boundary_field('TemplateCase_simpleVessel/3200/C') OFLOWC = OFBCCoord[b'low'][b'value'] OFUPC = OFBCCoord[b'up'][b'value'] OFLEFTC = OFBCCoord[b'left'][b'value'] OFRIGHTC = OFBCCoord[b'rifht'][b'value'] leftX = OFLEFTC[:, 0] leftY = OFLEFTC[:, 1] lowX = OFLOWC[:, 0] lowY = OFLOWC[:, 1] rightX = OFRIGHTC[:, 0] rightY = OFRIGHTC[:, 1] upX = OFUPC[:, 0] upY = OFUPC[:, 1] ny = len(leftX) nx = len(lowX)