你已经派生过 em3d-mt
镜像自地址
https://gitee.com/sduem/em3d-mt.git
已同步 2025-08-03 11:26:50 +08:00
78
bin/RMT3d/Create_VTK.m
普通文件
78
bin/RMT3d/Create_VTK.m
普通文件
@@ -0,0 +1,78 @@
|
|||||||
|
function []=Create_VTK(x,y,z,value,VTK_file_name,type,cells)
|
||||||
|
fid=fopen(VTK_file_name,'w');
|
||||||
|
|
||||||
|
%% header
|
||||||
|
header{1}='# vtk DataFile Version 3.0';
|
||||||
|
header{2}=['VTK_3D_Pseudo test'];
|
||||||
|
header{3}='ASCII';
|
||||||
|
if strcmp(type,'Line')|| strcmp(type,'line')|| strcmp(type,'LINE')
|
||||||
|
header{4}='DATASET POLYDATA';
|
||||||
|
else
|
||||||
|
header{4}='DATASET UNSTRUCTURED_GRID';
|
||||||
|
end
|
||||||
|
header{5}=['POINTS ',num2str(size(x,1)),' double'];
|
||||||
|
for i=1:5
|
||||||
|
fprintf(fid,'%s\n',header{i});
|
||||||
|
end
|
||||||
|
%% point positions
|
||||||
|
% for i=1:size(x,1)
|
||||||
|
% fprintf(fid,'%f %f %f\n',x(i),y(i),z(i));
|
||||||
|
% end
|
||||||
|
disp('writing positions')
|
||||||
|
fprintf(fid,'%6.2f %6.2f %6.2f\n',[x,y,z]');
|
||||||
|
% dlmwrite(VTK_file_name,[x y z],'-append','delimiter','\t','precision','%.1f')
|
||||||
|
|
||||||
|
%% cells or lines
|
||||||
|
fid=fopen(VTK_file_name,'a');
|
||||||
|
if strcmp(type,'Line')|| strcmp(type,'line')|| strcmp(type,'LINE')
|
||||||
|
header{6}=['LINES ','1',' ',num2str(size(x,1)+1)];
|
||||||
|
else
|
||||||
|
header{6}=['CELLS ',num2str(size(cells,1)),' ',num2str(5*size(cells,1))];
|
||||||
|
end
|
||||||
|
fprintf(fid,'%s\n',header{6});
|
||||||
|
|
||||||
|
% cells(:,2)=[0:1:size(x,1)-1];
|
||||||
|
Line_data=[size(x,1) 0:1:size(x,1)-1];
|
||||||
|
if strcmp(type,'Line')|| strcmp(type,'line')|| strcmp(type,'LINE')
|
||||||
|
for i=1:size(x,1)+1
|
||||||
|
fprintf(fid,'%d\t',Line_data(i));
|
||||||
|
end
|
||||||
|
else
|
||||||
|
% for i=1:size(x,1)
|
||||||
|
% fprintf(fid,'%d %d\n',cells(i,1),cells(i,2));
|
||||||
|
% end
|
||||||
|
disp('writting cells')
|
||||||
|
cells=[4*ones(size(cells,1),1),cells];
|
||||||
|
fprintf(fid,'%i %i %i %i %i\n',cells');
|
||||||
|
% dlmwrite(VTK_file_name,cells,'-append','delimiter','\t','precision','%i')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
%% cells types
|
||||||
|
if strcmp(type,'Line')||strcmp(type,'line')||strcmp(type,'LINE')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
fid=fopen(VTK_file_name,'a');
|
||||||
|
header{7}=['CELL_TYPES ',num2str(size(cells,1))];
|
||||||
|
fprintf(fid,'%s\n',header{7});
|
||||||
|
cells=10*ones(size(cells,1),1);
|
||||||
|
% for i=1:size(x,1)
|
||||||
|
disp('writting cells type')
|
||||||
|
% fprintf(fid,'%d\n',cells(i,1));
|
||||||
|
fprintf(fid,'%i\n',cells');
|
||||||
|
% dlmwrite(VTK_file_name,cells,'-append','delimiter','\t')
|
||||||
|
% end
|
||||||
|
|
||||||
|
%% values
|
||||||
|
fid=fopen(VTK_file_name,'a');
|
||||||
|
header{8}=['CELL_DATA ',num2str(size(cells,1))];
|
||||||
|
header{9}='SCALARS value double 1';
|
||||||
|
header{10}='LOOKUP_TABLE default';
|
||||||
|
for i=8:10
|
||||||
|
fprintf(fid,'%s\n',header{i});
|
||||||
|
end
|
||||||
|
disp('writting cell data')
|
||||||
|
fprintf(fid,'%i\n',value');
|
||||||
|
% dlmwrite(VTK_file_name,value,'-append','delimiter','\t')
|
||||||
|
fclose all;
|
||||||
|
disp('done')
|
6
bin/RMT3d/calculate_layers.m
普通文件
6
bin/RMT3d/calculate_layers.m
普通文件
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
function t=calculate_layers(n,t1,z)
|
||||||
|
%% calculate layer thicknesses given nlayers and top and bottom
|
||||||
|
exp_sum = @(x) ( x.^(n-1)-1)./(x-1)-z/t1;
|
||||||
|
f = fzero(exp_sum,[1.0001 2]);
|
||||||
|
t = t1*f.^(0:(n-2));
|
二进制
bin/RMT3d/em3d_MT_main.mlx
普通文件
二进制
bin/RMT3d/em3d_MT_main.mlx
普通文件
二进制文件未显示。
二进制
bin/RMT3d/get_Boundary1DModel.mlx
普通文件
二进制
bin/RMT3d/get_Boundary1DModel.mlx
普通文件
二进制文件未显示。
二进制文件未显示。
二进制
bin/RMT3d/get_K_v2.mlx
普通文件
二进制
bin/RMT3d/get_K_v2.mlx
普通文件
二进制文件未显示。
二进制
bin/RMT3d/get_M_v2.mlx
普通文件
二进制
bin/RMT3d/get_M_v2.mlx
普通文件
二进制文件未显示。
二进制
bin/RMT3d/get_abcd_volume.mlx
普通文件
二进制
bin/RMT3d/get_abcd_volume.mlx
普通文件
二进制文件未显示。
二进制
bin/RMT3d/get_boundary.mlx
普通文件
二进制
bin/RMT3d/get_boundary.mlx
普通文件
二进制文件未显示。
二进制
bin/RMT3d/get_data_MT.mlx
普通文件
二进制
bin/RMT3d/get_data_MT.mlx
普通文件
二进制文件未显示。
74
bin/RMT3d/get_edges.m
普通文件
74
bin/RMT3d/get_edges.m
普通文件
@@ -0,0 +1,74 @@
|
|||||||
|
function [elems2edges, edges2nodes]=get_edges(elems2nodes)
|
||||||
|
%function: [element2edges, edge2nodes]=get_edges(elems2nodes)
|
||||||
|
%requires: deleterepeatedrows
|
||||||
|
%generates edges of (triangular) triangulation defined in elems2nodes
|
||||||
|
%elems2nodes is matrix, whose rows contain numbers of its element nodes
|
||||||
|
%element2edges returns edges numbers of each triangular element
|
||||||
|
%edge2nodes returns two node numbers of each edge
|
||||||
|
%example in 2D: [element2edges, edge2nodes]=get_edges([1 2 3; 2 4 3])
|
||||||
|
%example in 3D: [element2edges, edge2nodes]=get_edges([1 2 3 4; 1 2 3 5; 1 2 4 6])
|
||||||
|
% Liu minghong 20221026
|
||||||
|
%2D case
|
||||||
|
if (size(elems2nodes,2)==3)
|
||||||
|
%extracts sets of edges
|
||||||
|
edges1=elems2nodes(:,[2 3]);
|
||||||
|
edges2=elems2nodes(:,[3 1]);
|
||||||
|
edges3=elems2nodes(:,[1 2]);
|
||||||
|
|
||||||
|
%as sets of their nodes (vertices)
|
||||||
|
vertices=zeros(size(elems2nodes,1)*3,2);
|
||||||
|
vertices(1:3:end,:)=edges1;
|
||||||
|
vertices(2:3:end,:)=edges2;
|
||||||
|
vertices(3:3:end,:)=edges3;
|
||||||
|
|
||||||
|
%repeated sets of nodes (joint edges) are eliminated
|
||||||
|
[edges2nodes,elems2edges]=deleterepeatedrows(vertices);
|
||||||
|
elems2edges=reshape(elems2edges,3,size(elems2nodes,1))';
|
||||||
|
end
|
||||||
|
|
||||||
|
%3D case
|
||||||
|
if (size(elems2nodes,2)==4)
|
||||||
|
%extracts sets of edges
|
||||||
|
edges1=elems2nodes(:,[1 2]);
|
||||||
|
edges2=elems2nodes(:,[1 3]);
|
||||||
|
edges3=elems2nodes(:,[1 4]);
|
||||||
|
edges4=elems2nodes(:,[2 3]);
|
||||||
|
% edges5=elems2nodes(:,[3 4]);
|
||||||
|
% edges6=elems2nodes(:,[4 2]);
|
||||||
|
% Liu minghong 20221026
|
||||||
|
edges5=elems2nodes(:,[4 2]);
|
||||||
|
edges6=elems2nodes(:,[3 4]);
|
||||||
|
|
||||||
|
%as sets of their nodes (vertices)
|
||||||
|
vertices=zeros(size(elems2nodes,1)*6,2);
|
||||||
|
vertices(1:6:end,:)=edges1;
|
||||||
|
vertices(2:6:end,:)=edges2;
|
||||||
|
vertices(3:6:end,:)=edges3;
|
||||||
|
vertices(4:6:end,:)=edges4;
|
||||||
|
vertices(5:6:end,:)=edges5;
|
||||||
|
vertices(6:6:end,:)=edges6;
|
||||||
|
|
||||||
|
%repeated sets of nodes (joint edges) are eliminated
|
||||||
|
[edges2nodes,elems2edges]=deleterepeatedrows(vertices);
|
||||||
|
elems2edges=reshape(elems2edges,6,size(elems2nodes,1))';
|
||||||
|
% *** 20221026
|
||||||
|
edges2nodes=sort(edges2nodes,2);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function [matrix,I]=deleterepeatedrows(matrix)
|
||||||
|
%function: [element2edges, edge2nodes]=edge_numbering(elements)
|
||||||
|
%requires: deleterepeatedrows
|
||||||
|
%generates edges of (triangular) triangulation defined in elements
|
||||||
|
%elements is matrix, whose rows contain numbers of its element nodes
|
||||||
|
%element2edges returns edges numbers of each triangular element
|
||||||
|
%edge2nodes returns two node numbers of each edge
|
||||||
|
%example: [element2edges, edge2nodes]=edge_numbering([1 2 3; 2 4 3])
|
||||||
|
|
||||||
|
|
||||||
|
%fast and short way suggested by John D'Ericco working in both 2D and 3D
|
||||||
|
matrixs=sort(matrix,2);
|
||||||
|
[dummy,J,I] = unique(matrixs,'rows');
|
||||||
|
%I=reshape(I,size(matrixs,2),size(I,1)/size(matrixs,2));
|
||||||
|
matrix=matrix(J,:);
|
在新工单中引用
屏蔽一个用户