source: trunk/src/uvmat_doc/FUNCTIONS_DOC/struct2nc_toolbox.html @ 37

Last change on this file since 37 was 37, checked in by sommeria, 14 years ago

create_grid.fig ,
uvmat_doc and all the included files added

File size: 15.3 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2                "http://www.w3.org/TR/REC-html40/loose.dtd">
3<html>
4<head>
5  <title>Description of struct2nc_toolbox</title>
6  <meta name="keywords" content="struct2nc_toolbox">
7  <meta name="description" content="'struct2nc_toolbox': create a netcdf file from a Matlab structure: use of netcdf toolbox">
8  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
9  <meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
10  <meta name="robots" content="index, follow">
11  <link type="text/css" rel="stylesheet" href="../m2html.css">
12</head>
13<body>
14<a name="_top"></a>
15<div><a href="../index.html">Home</a> &gt;  <a href="index.html">.</a> &gt; struct2nc_toolbox.m</div>
16
17<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
18<td align="right"><a href="index.html">Index for .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
19
20<h1>struct2nc_toolbox
21</h1>
22
23<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
24<div class="box"><strong>'struct2nc_toolbox': create a netcdf file from a Matlab structure: use of netcdf toolbox</strong></div>
25
26<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
27<div class="box"><strong>function errormsg=struct2nc_toolbox(flname,Data) </strong></div>
28
29<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
30<div class="fragment"><pre class="comment">'struct2nc_toolbox': create a netcdf file from a Matlab structure: use of netcdf toolbox
31---------------------------------------------------------------------
32 errormsg=struct2nc_toolbox(flname,Data)
33
34OUPUT:
35errormsg=error message, =0: default, no error
36INPUT:
37flname: name of the netcdf file to create (must end with the extension '.nc')
38  Data: structure containing all the information of the netcdf file (or netcdf object)
39           with fields:
40    .ListGlobalAttribute: cell listing the names of the global attributes (note that a global atribute with the same name as a variable is excluded)
41        .Att_1,Att_2... : values of the global attributes
42            .ListDimName: cell listing the names of the array dimensions
43               .DimValue: array dimension values (Matlab vector with the same length as .ListDimName
44            .ListVarName: cell listing the names of the variables
45            .VarDimIndex: cell containing the set of dimension indices (in list .ListDimName) for each variable of .ListVarName
46           .VarAttribute: cell of structures s containing names and values of variable attributes (s.name=value) for each variable of .ListVarName
47        .Var1, .Var2....: variables (Matlab arrays) with names listed in .ListVarName
48
49AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
50  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.
51AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
52     This file is part of the toolbox UVMAT.
53 
54     UVMAT is free software; you can redistribute it and/or modify
55     it under the terms of the GNU General Public License as published by
56     the Free Software Foundation; either version 2 of the License, or
57     (at your option) any later version.
58 
59     UVMAT is distributed in the hope that it will be useful,
60     but WITHOUT ANY WARRANTY; without even the implied warranty of
61     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
62     GNU General Public License (file UVMAT/COPYING.txt) for more details.
63AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</pre></div>
64
65<!-- crossreference -->
66<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
67This function calls:
68<ul style="list-style-image:url(../matlabicon.gif)">
69<li><a href="check_field_structure.html" class="code" title="function [DataOut,errormsg]=check_field_structure(Data)">check_field_structure</a> 'check_field_structure': check the representation of fields by a Matlab structure</li></ul>
70This function is called by:
71<ul style="list-style-image:url(../matlabicon.gif)">
72<li><a href="struct2nc.html" class="code" title="function errormsg=struct2nc(flname,Data)">struct2nc</a>        'struct2nc': create a netcdf file from a Matlab structure</li></ul>
73<!-- crossreference -->
74
75
76<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
77<div class="fragment"><pre>0001 <span class="comment">%'struct2nc_toolbox': create a netcdf file from a Matlab structure: use of netcdf toolbox</span>
780002 <span class="comment">%---------------------------------------------------------------------</span>
790003 <span class="comment">% errormsg=struct2nc_toolbox(flname,Data)</span>
800004 <span class="comment">%</span>
810005 <span class="comment">%OUPUT:</span>
820006 <span class="comment">%errormsg=error message, =0: default, no error</span>
830007 <span class="comment">%INPUT:</span>
840008 <span class="comment">%flname: name of the netcdf file to create (must end with the extension '.nc')</span>
850009 <span class="comment">%  Data: structure containing all the information of the netcdf file (or netcdf object)</span>
860010 <span class="comment">%           with fields:</span>
870011 <span class="comment">%    .ListGlobalAttribute: cell listing the names of the global attributes (note that a global atribute with the same name as a variable is excluded)</span>
880012 <span class="comment">%        .Att_1,Att_2... : values of the global attributes</span>
890013 <span class="comment">%            .ListDimName: cell listing the names of the array dimensions</span>
900014 <span class="comment">%               .DimValue: array dimension values (Matlab vector with the same length as .ListDimName</span>
910015 <span class="comment">%            .ListVarName: cell listing the names of the variables</span>
920016 <span class="comment">%            .VarDimIndex: cell containing the set of dimension indices (in list .ListDimName) for each variable of .ListVarName</span>
930017 <span class="comment">%           .VarAttribute: cell of structures s containing names and values of variable attributes (s.name=value) for each variable of .ListVarName</span>
940018 <span class="comment">%        .Var1, .Var2....: variables (Matlab arrays) with names listed in .ListVarName</span>
950019 <span class="comment">%</span>
960020 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
970021 <span class="comment">%  Copyright Joel Sommeria, 2008, LEGI / CNRS-UJF-INPG, sommeria@coriolis-legi.org.</span>
980022 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
990023 <span class="comment">%     This file is part of the toolbox UVMAT.</span>
1000024 <span class="comment">%</span>
1010025 <span class="comment">%     UVMAT is free software; you can redistribute it and/or modify</span>
1020026 <span class="comment">%     it under the terms of the GNU General Public License as published by</span>
1030027 <span class="comment">%     the Free Software Foundation; either version 2 of the License, or</span>
1040028 <span class="comment">%     (at your option) any later version.</span>
1050029 <span class="comment">%</span>
1060030 <span class="comment">%     UVMAT is distributed in the hope that it will be useful,</span>
1070031 <span class="comment">%     but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
1080032 <span class="comment">%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
1090033 <span class="comment">%     GNU General Public License (file UVMAT/COPYING.txt) for more details.</span>
1100034 <span class="comment">%AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</span>
1110035
1120036 <a name="_sub0" href="#_subfunctions" class="code">function errormsg=struct2nc_toolbox(flname,Data)</a>
1130037
1140038 FilePath=fileparts(flname);
1150039 <span class="keyword">if</span> ~exist(FilePath,<span class="string">'dir'</span>)
1160040     errormsg=[<span class="string">'directory '</span> FilePath <span class="string">' needs to be created'</span>];
1170041     <span class="keyword">return</span>
1180042 <span class="keyword">end</span>
1190043 [Data,errormsg]=<a href="check_field_structure.html" class="code" title="function [DataOut,errormsg]=check_field_structure(Data)">check_field_structure</a>(Data);
1200044 <span class="keyword">if</span> ~isempty(errormsg)
1210045     <span class="keyword">return</span>
1220046 <span class="keyword">end</span>
1230047 ListVarName=Data.ListVarName;
1240048 nc=netcdf(flname,<span class="string">'clobber'</span>); <span class="comment">%create the netcdf file with name flname</span>
1250049 <span class="comment">%write global constants</span>
1260050 <span class="keyword">if</span> isfield(Data,<span class="string">'ListGlobalAttribute'</span>)
1270051     keys=Data.ListGlobalAttribute;
1280052     <span class="keyword">for</span> iattr=1:length(keys)
1290053         <span class="keyword">if</span> isfield(Data,keys{iattr})
1300054              testvar=0;
1310055             <span class="keyword">for</span> ivar=1:length(ListVarName)<span class="comment">% eliminate possible global attributes with the same name as a variable</span>
1320056                 <span class="keyword">if</span> isequal(ListVarName{ivar}, keys{iattr})
1330057                     testvar=1;
1340058                     <span class="keyword">break</span>
1350059                 <span class="keyword">end</span>
1360060             <span class="keyword">end</span>
1370061             <span class="keyword">if</span> ~testvar               
1380062                 eval([<span class="string">'cte=Data.'</span> keys{iattr} <span class="string">';'</span>])
1390063                 <span class="keyword">if</span> ischar(cte) &amp;&amp; ~isequal(cte,<span class="string">''</span>)
1400064                     eval([<span class="string">'nc.'</span> keys{iattr} <span class="string">'='''</span> cte <span class="string">''';'</span>]);
1410065                 <span class="keyword">elseif</span> isnumeric(cte)&amp;&amp; ~isempty(cte)
1420066                     eval([<span class="string">'nc.'</span> keys{iattr} <span class="string">'= cte; '</span>]);
1430067                 <span class="keyword">else</span>
1440068                     errormsg=<span class="string">'global attributes must be characters or numbers'</span>;
1450069                     <span class="keyword">return</span>
1460070                 <span class="keyword">end</span>
1470071             <span class="keyword">end</span>
1480072         <span class="keyword">end</span>
1490073     <span class="keyword">end</span>
1500074 <span class="keyword">end</span>
1510075 <span class="keyword">for</span> idim=1:length(Data.ListDimName)
1520076     nc(Data.ListDimName{idim})=Data.DimValue(idim);<span class="comment">%create dimensions</span>
1530077 <span class="keyword">end</span>
1540078
1550079 VarAttribute={}; <span class="comment">%default</span>
1560080 testattr=0;
1570081 <span class="keyword">if</span> isfield(Data,<span class="string">'VarAttribute'</span>)
1580082     VarAttribute=Data.VarAttribute;
1590083     testattr=1;
1600084 <span class="keyword">end</span>
1610085 <span class="keyword">for</span> ivar=1:length(ListVarName)
1620086     <span class="keyword">if</span> isfield(Data,ListVarName{ivar})
1630087         eval([<span class="string">'VarVal=Data.'</span> ListVarName{ivar} <span class="string">';'</span>])<span class="comment">%varval=values of the current variable</span>
1640088         siz=size(VarVal);
1650089         VarDimIndex=Data.VarDimIndex{ivar}; <span class="comment">%indices of the variable dimensions in the list of dimensions</span>
1660090         VarDimName=Data.VarDimName{ivar};<span class="comment">%NEW</span>
1670091         <span class="keyword">if</span> ischar(VarDimName)<span class="comment">%NEW</span>
1680092             VarDimName={VarDimName};<span class="comment">%NEW</span>
1690093         <span class="keyword">end</span><span class="comment">%NEW</span>
1700094         testrange=(numel(VarDimName)==1 &amp;&amp; strcmp(VarDimName{1},ListVarName{ivar}) &amp;&amp; numel(VarVal)==2); <span class="comment">%NEW</span>
1710095         testline=isequal(length(siz),2) &amp; isequal(siz(1),1)&amp; isequal(siz(2), Data.DimValue(VarDimIndex));
1720096         testcolumn=isequal(length(siz),2) &amp; isequal(siz(1), Data.DimValue(VarDimIndex))&amp; isequal(siz(2),1);
1730097         <span class="keyword">if</span> ~testrange &amp;&amp; ~testline &amp;&amp; ~testcolumn &amp;&amp; ~isequal(siz,Data.DimValue(VarDimIndex))
1740098             errormsg=[<span class="string">'wrong dimensions declared for '</span> ListVarName{ivar} <span class="string">' in struct2nc.m'</span>];
1750099             <span class="keyword">break</span>
1760100         <span class="keyword">end</span> 
1770101         <span class="keyword">if</span> testline || testrange<span class="comment">%NEW</span>
1780102            dimname=Data.ListDimName{VarDimIndex};
1790103            <span class="keyword">if</span> testrange<span class="comment">%NEW</span>
1800104                VarVal=linspace(VarVal(1),VarVal(2),Data.DimValue(VarDimIndex));<span class="comment">%NEW</span>
1810105            <span class="keyword">end</span><span class="comment">%NEW</span>
1820106            nc{ListVarName{ivar}}=ncfloat(dimname);<span class="comment">%vector of x coordinates</span>
1830107            nc{ListVarName{ivar}}(:) = VarVal'; 
1840108         <span class="keyword">else</span>
1850109             nc{ListVarName{ivar}}=ncfloat(Data.ListDimName(VarDimIndex));<span class="comment">%vector of x coordinates</span>
1860110             nc{ListVarName{ivar}}(:) = VarVal;
1870111         <span class="keyword">end</span>
1880112         <span class="comment">%write variable attributes</span>
1890113         <span class="keyword">if</span> testattr
1900114             <span class="keyword">for</span> ivar=1:length(VarAttribute) 
1910115                 <span class="keyword">if</span> isstruct(VarAttribute{ivar})
1920116                     attr_names=fields(VarAttribute{ivar});
1930117                     <span class="keyword">for</span> iattr=1:length(attr_names)
1940118                         eval([<span class="string">'attr_val=VarAttribute{ivar}.'</span> attr_names{iattr} <span class="string">';'</span>]);
1950119                         <span class="keyword">if</span> ischar(attr_val) &amp;&amp; ~isequal(attr_val,<span class="string">''</span>)
1960120                             eval([<span class="string">'nc{'''</span> ListVarName{ivar} <span class="string">'''}.'</span> attr_names{iattr} <span class="string">'='''</span> attr_val <span class="string">''';'</span>])
1970121                         <span class="keyword">elseif</span> isnumeric(attr_val)&amp;&amp; ~isempty(attr_val)
1980122                              eval([<span class="string">'nc{'''</span> ListVarName{ivar} <span class="string">'''}.'</span> attr_names{iattr} <span class="string">'=attr_val ;'</span>])
1990123                         <span class="keyword">end</span>
2000124                     <span class="keyword">end</span>
2010125                 <span class="keyword">end</span>
2020126             <span class="keyword">end</span>
2030127          <span class="keyword">end</span>
2040128     <span class="keyword">end</span>
2050129 <span class="keyword">end</span>
2060130
2070131 close(nc);</pre></div>
208<hr><address>Generated on Fri 13-Nov-2009 11:17:03 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
209</body>
210</html>
Note: See TracBrowser for help on using the repository browser.