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.

151 lines
4.5 KiB

3 years ago
%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-07-12 09:23:41
% @LastEditTime: 2021-08-30 19:19:49
%--------------------------
dbstop if error
feature accel on
addpath util util_simulation util_bezier util_micro util_mtimesx util_output
%% adjustable parameters
K0 = 7e6; G0 = 3.2e6;
K1 = 1.86e7; G1 = 9e6;
K2 = 1.38e8; G2 = 5.96e7;
K3 = 6.3e8; G3 = 3.86e8;
nelx = 42;
nely = 20;
nelz = 30;
microx = 30;
lx = 1;
num_add = 0; % additional macro dofs on the border
optDesign = 'bending2'; vF = 1e5; offset = 2;
opt_load_edofmat = 0;
opt_load_rho = 0;
%% init
dx = lx / microx;
[~, ~, edofMat_mi] = prepare_assemble(microx, microx, microx);
[boundarys, inner] = micro_boundary(microx);
newdofs = [boundarys(:); inner(:)];
dofid = reorder_dofs(newdofs);
if opt_load_rho==1
globaly = nely * microx;
globalx = nelx * microx;
globalz = nelz * microx;
data_path = ['data\dizhi_rho2_', num2str(globalx),'&', num2str(globaly),'&', num2str(globalz),'.mat'];
load(data_path);
end
%% reconstruction
% data_path = ['data/U2_',optDesign,'_F',num2str(vF),'_offset',num2str(offset),'.mat'];
% load(data_path);
%
% if opt_load_edofmat==1
% load('dizhi_edofMat.mat', 'edofMat_ma');
% end
%
globaly = 3 * microx;
% globalx = nelx * microx;
% globalz = nelz * microx;
% uglobal = zeros(globalx*globaly*globalz, 3);
%
[gridx, gridy, gridz] = meshgrid(dx:dx:nelx, dx:dx:3, dx:dx:nelz);
gridy = fliplr(gridy);
% for i = 1:nelx
% for j = 1:3
% data_path2 = ['output_data/sK_new2/R/', num2str(nelx),'&', num2str(nely),'&', num2str(nelz),'_', ...
% num2str(microx),'m_',num2str(num_add),'pnts_',num2str(i),'_',num2str(j),'.mat'];
% load(data_path2); % load regulated_matrix
%
% for k = 1:nelz
% ele = (k-1)*nelx*nely + (i-1)*nely + j;
% edof = edofMat_ma(ele, :);
% ue = U(edof);
% he = regulated_tmp{k} * ue; % he order: [4-borders; inner]
% u0 = he(dofid);
% u1 = u0(edofMat_mi); % [microx^3, 24];
%
% umicro(:,1) = mean(u1(:,1:3:end), 2);
% umicro(:,2) = mean(u1(:,2:3:end), 2);
% umicro(:,3) = mean(u1(:,3:3:end), 2);
%
% for ii = 1:microx
% for jj = 1:microx
% for kk = 1:microx
% % which micro element in full domain
% fulli = (i-1)*microx + ii;
% fullj = (j-1)*microx + jj;
% fullk = (k-1)*microx + kk;
% global_ele = (fullk-1)*globalx*globaly + (fulli-1)*globaly + fullj;
%
% % which micro element in this macro-ele
% local_ele = (kk-1)*microx^2 + (ii-1)*microx + jj;
%
% uglobal(global_ele, :) = umicro(local_ele, :);
% end
% end
% end
% end
% end
% end
%
% defx = reshape(uglobal(:,1), globaly, globalx, globalz) + gridx;
% defy = reshape(uglobal(:,2), globaly, globalx, globalz) + gridy;
% defz = reshape(uglobal(:,3), globaly, globalx, globalz) + gridz;
% clear gridx gridy gridz uglobal
load def
% defy0 = defy - gridy;
gridy0 = flipud(gridy);
% defy = defy0 + gridy0;
% recover deformation
uglobal = zeros(globaly, globalx, globalz, 3);
uglobal(:, :, :, 1) = defx - gridx;
uglobal(:, :, :, 2) = defy - gridy;
uglobal(:, :, :, 3) = defz - gridz;
step = 10;
for it = 1:8
uglobal_it = uglobal / 10 * it;
defx = uglobal_it(:,:,:,1) + gridx;
defy = uglobal_it(:,:,:,2) + gridy0;
defz = uglobal_it(:,:,:,3) + gridz;
for i = 1 : (3 * microx / step)
xi = x((i-1)*step+1 : i*step, :, :);
coorx = defx((i-1)*step+1 : i*step, :, :);
coory = defy((i-1)*step+1 : i*step, :, :);
coorz = defz((i-1)*step+1 : i*step, :, :);
for mat = 1:4
idx = find(xi==mat);
if ~isempty(idx)
cx = coorx(idx);
cy = coory(idx);
cz = coorz(idx);
[f,v] = isosurface(X,Y,Z,V,isovalue);
coor = [cx(:), cy(:), cz(:)];
% figure; scatter3(coor(:,1), coor(:,2), coor(:,3));
data_path = ['data/point-clouds/def/iteration/',num2str(it),'/def_', num2str(i),'_', num2str(mat),'.xyz'];
fid = fopen(data_path, 'wt') ;
fprintf(fid, '%i\n', size(coor, 1)) ;
fprintf(fid, '%f %f %f\n', coor.') ;
fclose(fid);
end
end
end
end