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.
92 lines
2.5 KiB
92 lines
2.5 KiB
%--------------------------
|
|
% @Author: Jingqiao Hu
|
|
% @Date: 2022-05-02 20:28:27
|
|
% @LastEditTime: 2022-05-03 14:46:16
|
|
%--------------------------
|
|
% function pure_CVT()
|
|
nelx = 4;
|
|
nely = 2;
|
|
nelz = 1;
|
|
microx = 64;
|
|
dx = 1;
|
|
|
|
%% init
|
|
lx = dx * microx;
|
|
globalx = nelx * microx;
|
|
globaly = nely * microx;
|
|
globalz = nelz * microx;
|
|
maxx = globalx / 2; minx = -maxx;
|
|
maxy = globaly / 2; miny = -maxy;
|
|
maxz = globalz / 2; minz = -maxz;
|
|
|
|
% [gx, gy, gz] = meshgrid(linspace(minx,maxx,8), linspace(miny,maxy,4), linspace(miny,maxy,2));
|
|
gx = randi([minx, maxx],64,1);
|
|
gy = randi([miny, maxy],64,1);
|
|
gz = randi([minz, maxz],64,1);
|
|
seeds = [gx(:), gy(:), gz(:)];
|
|
|
|
npnts = size(seeds, 1);
|
|
T = repmat(8, npnts, 1);
|
|
[xval, xold1, xold2, xmin, xmax, low, upp, m_mma, c_mma, d_mma, a0_mma, ...
|
|
a_mma] = MMA_paras(seeds, maxx, minx, maxy, miny, maxz, minz);
|
|
|
|
loop = 0;
|
|
while loop < 100
|
|
loop = loop + 1;
|
|
|
|
indices = 1 : int32(npnts);
|
|
[c_edges, cenP, vedges, ~, c_nnbSeedIDX] = intersection_info(seeds, ...
|
|
indices, nelx, nely, nelz, microx, 'cantilever');
|
|
|
|
MMCs = update_MMCs(vedges, T, c_nnbSeedIDX);
|
|
plot_mmc(MMCs, minx, maxx, miny, maxy, minz, maxz);
|
|
|
|
[E, dE] = cvt_energy(seeds, cenP);
|
|
|
|
f0val= E;
|
|
df0dx= dE;
|
|
fval = 0;
|
|
dfdx = repmat(1, 1, size(seeds, 1)*3);
|
|
|
|
[xmma, ~, ~, ~, ~, ~, ~, ~, ~, low, upp] = mmasub_mmc(1, npnts * 3, ...
|
|
loop, xval, xmin, xmax, xold1, xold2, f0val, df0dx, fval, dfdx,...
|
|
low, upp, a0_mma, a_mma, c_mma, d_mma);
|
|
xold2 = xold1; xold1 = xval;
|
|
xval = xmma;
|
|
|
|
seeds = reshape(xmma, 3, [])';
|
|
end
|
|
|
|
write_cin(seeds, 'box');
|
|
% end
|
|
|
|
function [xval, xold1, xold2, xmin, xmax, low, upp, m_mma, c_mma, d_mma, a0_mma, ...
|
|
a_mma] = MMA_paras(seeds, maxx, minx, maxy, miny, maxz, minz)
|
|
|
|
np = size(seeds, 1);
|
|
|
|
xval = reshape([seeds]', [], 1);
|
|
xold1= xval; xold2 = xval;
|
|
|
|
xmin = repmat([minx, miny, minz], np, 1)';
|
|
xmax = repmat([maxx, maxy, maxz], np, 1)';
|
|
xmin = xmin(:);
|
|
xmax = xmax(:);
|
|
|
|
low = xmin; upp = xmax;
|
|
|
|
m_mma = 1; % number of constrain
|
|
c_mma = 1000*ones(m_mma,1); d_mma = zeros(m_mma,1); a0_mma = 1; a_mma = zeros(m_mma,1);
|
|
end
|
|
|
|
|
|
function [E, dE] = cvt_energy(seeds, cenP)
|
|
|
|
npnts = size(seeds, 1);
|
|
E0 = sum((seeds - cenP) .^ 2, 2); % [n,1]
|
|
dE0 = 2 * (seeds - cenP); % [n,2]
|
|
|
|
E = sum(E0);
|
|
dE = dE0;
|
|
dE = reshape(dE', [], 1);
|
|
end
|