该项目是《Problem-independent machine learning (PIML)-based topology optimization—A universal approach》的python复现
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

50 lines
2.1 KiB

import numpy as np
def data_loader(density_load_path, displace_load_path):
# Load datasets
global_density = np.load(density_load_path)
global_displace = np.load(displace_load_path)
global_displace = global_displace.reshape(181,61,2)
global_displace = np.dstack((global_displace[:,:,0].T, global_displace[:,:,1].T))
print(global_displace.shape)
print(global_density.shape)
m=5
N=(m+1)**2
global_nely=global_density.shape[0]
global_nelx=global_density.shape[1]
coarse_nely = int(global_nely/m)
coarse_nelx = int(global_nelx/m)
# Generate coarse mesh density
coarse_density=np.zeros(shape=(coarse_nely*coarse_nelx,m*m))
for ely in range(coarse_nely):
for elx in range(coarse_nelx):
coarse_density[elx + ely * m] = global_density[ely * m : (ely + 1) * m, elx * m : (elx + 1) * m].flatten()
print(coarse_density.shape)
# Generate coarse mesh displacement
coarse_displace=np.zeros(shape=(coarse_nely*coarse_nelx,4,2))
for ely in range(coarse_nely):
for elx in range(coarse_nelx):
coarse_displace[elx + ely * m][0] = global_displace[ely * m, elx * m, :]
coarse_displace[elx + ely * m][1] = global_displace[ely * m, (elx+1) * m, :]
coarse_displace[elx + ely * m][2] = global_displace[(ely+1) * m, elx * m, :]
coarse_displace[elx + ely * m][3] = global_displace[(ely+1) * m, (elx+1) * m, :]
print(coarse_displace.shape)
# Generate fine mesh displacement
fine_displace=np.zeros(shape=(coarse_nely*coarse_nelx, ((m+1)**2) * 2))
for ely in range(coarse_nely):
for elx in range(coarse_nelx):
fine_displace[elx + ely * m] = global_displace[ely*m : (ely+1)*m+1, elx*m : (elx+1)*m+1, :].flatten()
print(fine_displace.shape)
return global_density, global_displace, coarse_density, coarse_displace, fine_displace
if __name__=='__main__':
dataload_mod='mod1' # opt: mod1 mod2 mod3
dst_path='datasets/top88_'+ dataload_mod + '_xPhys_180_60.npy'
U_path='datasets/top88_'+ dataload_mod + '_u_180_60.npy'
data_loader(dst_path,U_path)