function nrbexport (nurbs, filename)

%
% NRBEXPORT: export NURBS geometries to a format compatible with the one used in GeoPDEs (version 0.6).
% 
% Calling Sequence:
% 
%   nrbexport (nurbs, filename);
% 
% INPUT:
% 
%   nurbs    : NURBS curve, surface or volume, see nrbmak.
%   filename : name of the output file.
% 
% 
% Description:
% 
%   The data of the nurbs structure is written in the file, in a format 
%     that can be read by GeoPDEs.
%
%    Copyright (C) 2011 Rafael Vazquez
%
%    This program is free software: you can redistribute it and/or modify
%    it under the terms of the GNU General Public License as published by
%    the Free Software Foundation, either version 3 of the License, or
%    (at your option) any later version.

%    This program is distributed in the hope that it will be useful,
%    but WITHOUT ANY WARRANTY; without even the implied warranty of
%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%    GNU General Public License for more details.
%
%    You should have received a copy of the GNU General Public License
%    along with this program.  If not, see <http://www.gnu.org/licenses/>.

fid = fopen (filename, 'w');
if (fid < 0)
  error ('nrbexport: cannot open file %s', filename);
end

ndim = numel (nurbs(1).order);
npatch = numel (nurbs);
fprintf (fid, '%s\n', '# nurbs mesh v.0.7');
fprintf (fid, '%s\n', '#');
fprintf (fid, '%s\n', ['# ' date]);
fprintf (fid, '%s\n', '#');

fprintf (fid, '%4i', ndim, npatch);
fprintf (fid, '\n');
for iptc = 1:npatch
  fprintf (fid, '%s %i', 'PATCH', iptc);
  fprintf (fid, '\n');
  fprintf (fid, '%4i', nurbs(iptc).order-1);
  fprintf (fid, '\n');
  fprintf (fid, '%4i', nurbs(iptc).number);
  fprintf (fid, '\n');
  for ii = 1:ndim
    fprintf (fid, '%1.7f   ', nurbs(iptc).knots{ii});
    fprintf (fid, '\n');
  end

  if (ndim == 2)
    for ii = 1:ndim
      fprintf (fid, '%1.15f   ', nurbs(iptc).coefs(ii,:,:));
      fprintf (fid, '\n');
    end
    fprintf (fid, '%1.15f   ', nurbs(iptc).coefs(4,:,:));
    fprintf (fid, '\n');
  elseif (ndim == 3)
    for ii = 1:ndim
      fprintf (fid, '%1.15f   ', nurbs(iptc).coefs(ii,:,:,:));
      fprintf (fid, '\n');
    end
    fprintf (fid, '%1.15f   ', nurbs(iptc).coefs(4,:,:,:));
    fprintf (fid, '\n');
  end
end

fclose (fid);
end
