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.
 
 
 
 

60 lines
1.6 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2022-01-18 19:50:49
% @LastEditTime: 2022-01-26 20:57:19
%--------------------------
function [seeds, rho, cpnts] = generateCVT(opt_load_rho, optDesign, volfrac, ...
vF, nelx, nely, nelz, lx, microx)
microx_tmp = 20;
globalx = nelx * microx;
globaly = nely * microx;
globalz = nelz * microx;
maxx = globalx / 2; minx = -maxx;
maxy = globaly / 2; miny = -maxy;
maxz = globalz / 2; minz = -maxz;
if strcmp(optDesign, 'cantilever_hole')
optDesign = 'cantilever';
end
datapath = "data/mat/rho_"+optDesign+".mat";
if opt_load_rho==0
globalx = nelx * microx_tmp;
globaly = nely * microx_tmp;
globalz = nelz * microx_tmp;
rho = top3d(globalx, globaly, globalz, volfrac, vF,optDesign);
save(datapath, "rho");
else
load(datapath);
end
% if strcmp(optDesign, 'cantilever')
rho = flipud(rho);
% end
dx = lx / microx_tmp;
[gx, gy, gz] = meshgrid(minx+dx/2 : dx : maxx-dx/2, miny+dx/2 : dx : maxy-dx/2, ...
minz+dx/2 : dx : maxz-dx/2);
% gy = flipud(gy);
cpnts = [gx(:), gy(:), gz(:)];
eps = 0.35;
rho1 = rho .^ 2;
if strcmp(optDesign, 'Lshape')
eps = volfrac;
min_size = microx / 4;
max_size = microx / 2;
end
seeds = quadtree_nonregular(rho1, cpnts, maxx, minx, maxy, miny, maxz, minz, microx, eps);
% figure; scatter3(seeds(:,1), seeds(:,2), seeds(:,3), 'filled'); axis equal;
% view([10 25]);
% xlabel('x axis');
% ylabel('y axis');
% zlabel('z axis');
end