annotate extra/nurbs/inst/nrbexport.m @ 12602:b679174c0450 octave-forge

Added empty subdomain
author rafavzqz
date Wed, 22 Apr 2015 14:41:02 +0000
parents fed0de8c335a
children 8d2bdadecce4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
1 function nrbexport (varargin)
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
2
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
3 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
4 % NRBEXPORT: export NURBS geometries to a format compatible with the one used in GeoPDEs (version 0.6).
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
5 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
6 % Calling Sequence:
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
7 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
8 % nrbexport (nurbs, filename);
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
9 % nrbexport (nurbs, interfaces, boundaries, filename);
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
10 % nrbexport (nurbs, interfaces, boundaries, subdomains, filename);
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
11 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
12 % INPUT:
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
13 %
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
14 % nurbs : NURBS curve, surface or volume, see nrbmak.
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
15 % interfaces: interface information for GeoPDEs (see nrbmultipatch)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
16 % boundaries: boundary information for GeoPDEs (see nrbmultipatch)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
17 % filename : name of the output file.
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
18 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
19 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
20 % Description:
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
21 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
22 % The data of the nurbs structure is written in the file, in a format
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
23 % that can be read by GeoPDEs.
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
24 %
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
25 % Copyright (C) 2011, 2014, 2015 Rafael Vazquez
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
26 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
27 % This program is free software: you can redistribute it and/or modify
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
28 % it under the terms of the GNU General Public License as published by
11634
37d08939bb7b apply changes requested by David
cdf
parents: 10777
diff changeset
29 % the Free Software Foundation, either version 3 of the License, or
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
30 % (at your option) any later version.
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
31
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
32 % This program is distributed in the hope that it will be useful,
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
33 % but WITHOUT ANY WARRANTY; without even the implied warranty of
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
34 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
35 % GNU General Public License for more details.
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
36 %
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
37 % You should have received a copy of the GNU General Public License
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
38 % along with this program. If not, see <http://www.gnu.org/licenses/>.
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
39
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
40 if (nargin == 2)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
41 nurbs = varargin{1};
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
42 filename = varargin{2};
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
43 if (numel (nurbs) > 1)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
44 warning ('Automatically creating the interface information with nrbmultipatch')
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
45 [interfaces, boundaries] = nrbmultipatch (nurbs);
12602
b679174c0450 Added empty subdomain
rafavzqz
parents: 12578
diff changeset
46 subdomains = [];
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
47 else
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
48 interfaces = []; boundaries = []; subdomains = [];
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
49 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
50 elseif (nargin == 4)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
51 nurbs = varargin{1};
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
52 interfaces = varargin{2};
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
53 boundaries = varargin{3};
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
54 filename = varargin{4};
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
55 subdomains = [];
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
56 elseif (nargin == 5)
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
57 nurbs = varargin{1};
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
58 interfaces = varargin{2};
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
59 boundaries = varargin{3};
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
60 subdomains = varargin{4};
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
61 filename = varargin{5};
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
62 else
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
63 error ('nrbexport: wrong number of input arguments')
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
64 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
65
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
66 fid = fopen (filename, 'w');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
67 if (fid < 0)
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
68 error ('nrbexport: cannot open file %s', filename);
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
69 end
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
70
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
71 ndim = numel (nurbs(1).order);
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
72 npatch = numel (nurbs);
12576
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
73 rdim = 1;
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
74 for iptc = 1:npatch
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
75 if (any (abs(nurbs(iptc).coefs(3,:)) > 1e-12))
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
76 rdim = 3;
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
77 break
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
78 elseif (any (abs(nurbs(iptc).coefs(2,:)) > 1e-12))
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
79 rdim = 2;
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
80 end
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
81 end
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
82
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
83 fprintf (fid, '%s\n', '# nurbs mesh v.1.0');
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
84 fprintf (fid, '%s\n', '#');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
85 fprintf (fid, '%s\n', ['# ' date]);
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
86 fprintf (fid, '%s\n', '#');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
87
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
88 fprintf (fid, '%2i', ndim, rdim, npatch, numel(interfaces), numel(subdomains));
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
89 fprintf (fid, '\n');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
90 for iptc = 1:npatch
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
91 fprintf (fid, '%s %i \n', 'PATCH', iptc);
10777
7277ff03a3d7 Small changes
rafavzqz
parents: 10111
diff changeset
92 fprintf (fid, '%4i', nurbs(iptc).order-1);
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
93 fprintf (fid, '\n');
10777
7277ff03a3d7 Small changes
rafavzqz
parents: 10111
diff changeset
94 fprintf (fid, '%4i', nurbs(iptc).number);
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
95 fprintf (fid, '\n');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
96 for ii = 1:ndim
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
97 fprintf (fid, '%1.7f ', nurbs(iptc).knots{ii});
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
98 fprintf (fid, '\n');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
99 end
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
100
12576
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
101 for ii = 1:rdim
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
102 fprintf (fid, '%1.15f ', nurbs(iptc).coefs(ii,:,:));
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
103 fprintf (fid, '\n');
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
104 end
12576
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
105 fprintf (fid, '%1.15f ', nurbs(iptc).coefs(4,:,:));
d59dc59f64bd Removed repeated output
rafavzqz
parents: 12528
diff changeset
106 fprintf (fid, '\n');
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
107 end
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
108
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
109 for intrfc = 1:numel(interfaces)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
110 if (isfield (interfaces, 'ref'))
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
111 fprintf (fid, '%s \n', interfaces(intrfc).ref);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
112 else
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
113 fprintf (fid, '%s %i \n', 'INTERFACE', intrfc);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
114 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
115 fprintf (fid, '%i %i \n', interfaces(intrfc).patch1, interfaces(intrfc).side1);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
116 fprintf (fid, '%i %i \n', interfaces(intrfc).patch2, interfaces(intrfc).side2);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
117 if (ndim == 2)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
118 fprintf (fid, '%i \n', interfaces(intrfc).ornt);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
119 elseif (ndim == 3)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
120 fprintf (fid, '%i %i %i \n', interfaces(intrfc).flag, interfaces(intrfc).ornt1, interfaces(intrfc).ornt2);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
121 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
122 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
123
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
124 for isubd = 1:numel(subdomains)
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
125 % The subdomain part should be fixed
12578
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
126 fprintf (fid, '%s \n', subdomains(isubd).name);
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
127 fprintf (fid, '%i ', subdomains(isubd).patches);
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
128 fprintf (fid, '\n');
fed0de8c335a This should be the new format
rafavzqz
parents: 12577
diff changeset
129 end
12528
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
130
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
131
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
132 for ibnd = 1:numel (boundaries)
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
133 if (isfield (boundaries, 'name'))
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
134 fprintf (fid, '%s \n', boundaries(ibnd).name);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
135 else
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
136 fprintf (fid, '%s %i \n', 'BOUNDARY', ibnd);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
137 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
138 fprintf (fid, '%i \n', boundaries(ibnd).nsides);
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
139 for ii = 1:boundaries(ibnd).nsides
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
140 fprintf (fid, '%i %i \n', boundaries(ibnd).patches(ii), boundaries(ibnd).faces(ii));
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
141 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
142 end
4c0fd7569091 Export multipatch geometries
rafavzqz
parents: 11634
diff changeset
143
9436
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
144 fclose (fid);
784e9ddd0b57 bug fixed
cdf
parents: 7961
diff changeset
145 end