-
Notifications
You must be signed in to change notification settings - Fork 72
/
saveabaqus.m
108 lines (100 loc) · 2.63 KB
/
saveabaqus.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
function saveabaqus(node,face,elem,fname,heading)
%
% saveabaqus(node,fname)
% saveabaqus(node,face,fname)
% saveabaqus(node,face,elem,fname)
%
% save a tetrahedral and/or surface mesh as an ABAQUS input file
%
% author: Qianqian Fang, <q.fang at neu.edu>
% date: 2012/07/05
%
% input:
% node: input, surface node list, dimension (nn,3)
% face: input, surface face element list, dimension (be,3)
% elem: input, tetrahedral element list, dimension (ne,4)
% fname: output file name
% heading: optional, a descriptive string for the mesh
%
% -- this function is part of iso2mesh toolbox (http://iso2mesh.sf.net)
%
if(nargin==2)
fname=face;
face=[];
elem=[];
end
if(nargin==3)
fname=elem;
elem=[];
end
fid=fopen(fname,'wt');
if(fid==-1)
error('You do not have permission to save mesh files.');
end
fprintf(fid,'*HEADING\n');
if(exist('heading','var'))
fprintf(fid,'**%s\n',heading);
end
fprintf(fid,'*PREPRINT,MODEL=NO,HISTORY=NO,ECHO=NO\n');
if(~isempty(node))
node=[(1:size(node,1))' node(:,1:3)];
fprintf(fid,'*NODE, NSET=MeshNode\n');
fprintf(fid,'%d,\t%e,\t%e,\t%e\n',node');
end
if(~isempty(elem))
if(size(elem,2)==4)
elem(:,5)=0;
labels=0;
elseif(size(elem,2)<4)
error('elem must have at least 4 columns');
else
labels=unique(elem(:,5));
end
len=length(labels);
count=0;
elsetall='';
for i=1:len
idx=find(elem(:,5)==labels(i));
fprintf(fid,'*ELEMENT, ELSET=MeshTetra%d, TYPE=C3D4\n',labels(i));
fprintf(fid,'%d,\t%d,\t%d,\t%d,\t%d\n',[count+(1:length(idx))' elem(idx,1:4)]');
count=count+length(idx);
if(length(elsetall)==0)
elsetall=['MeshTetra' num2str(labels(i))];
else
elsetall=sprintf('%s,MeshTetra%d',elsetall,labels(i));
end
end
if(length(elsetall))
fprintf(fid,'*ELSET, ELSET=MeshTetraAll\n%s\n',elsetall);
end
end
if(~isempty(face))
if(size(face,2)==3)
face(:,4)=0;
labels=0;
elseif(size(face,2)<3)
error('face must have at least 3 columns');
else
labels=unique(face(:,4));
end
len=length(labels);
if(exist('count','var')==0)
count=0;
end
elsetall='';
for i=1:len
idx=find(face(:,4)==labels(i));
fprintf(fid,'*ELEMENT, ELSET=MeshTri%d, TYPE=S3R\n',labels(i));
fprintf(fid,'%d,\t%d,\t%d,\t%d\n',[count+(1:length(idx))' face(idx,1:3)]');
count=count+length(idx);
if(length(elsetall)==0)
elsetall=['MeshTetra' num2str(labels(i))];
else
elsetall=sprintf('%s,MeshTri%d',elsetall,labels(i));
end
end
if(length(elsetall))
fprintf(fid,'*ELSET, ELSET=MeshTriAll\n%s\n',elsetall);
end
end
fclose(fid);