changeset 11812:35593745a664 octave-forge

low-level group support
author abarth93
date Mon, 17 Jun 2013 13:05:27 +0000
parents 1a28cb60f1c2
children 2747c3cad27d
files main/netcdf/src/PKG_ADD.sh main/netcdf/src/ncinfo.m main/netcdf/src/ncwriteschema.m main/netcdf/src/netcdf_package.cc main/netcdf/src/test_netcdf_hl.m main/netcdf/src/test_netcdf_ncwriteschema_chunking.m main/netcdf/src/test_netcdf_package.m
diffstat 7 files changed, 110 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/main/netcdf/src/PKG_ADD.sh	Mon Jun 17 12:13:17 2013 +0000
+++ b/main/netcdf/src/PKG_ADD.sh	Mon Jun 17 13:05:27 2013 +0000
@@ -4,7 +4,7 @@
 
 outfile=PKG_ADD
 
-rm -f $outfile
+rm -f $outfile import_netcdf.m
 
 for i in $netcdf_functions; do
     echo ${i#netcdf_}
--- a/main/netcdf/src/ncinfo.m	Mon Jun 17 12:13:17 2013 +0000
+++ b/main/netcdf/src/ncinfo.m	Mon Jun 17 13:05:27 2013 +0000
@@ -133,6 +133,7 @@
 % chunking, fillvalue, compression
 
 [storage,vinfo.ChunkSize] = netcdf_inqVarChunking(ncid,varid);
+
 [nofill,vinfo.FillValue] = netcdf_inqVarFill(ncid,varid);
 if nofill
   vinfo.FillValue = [];
--- a/main/netcdf/src/ncwriteschema.m	Mon Jun 17 12:13:17 2013 +0000
+++ b/main/netcdf/src/ncwriteschema.m	Mon Jun 17 13:05:27 2013 +0000
@@ -74,7 +74,7 @@
   
   if isfield(v,'ChunkSize')
     if ~isempty(v.ChunkSize)
-      
+      netcdf_defVarChunking(ncid,varid,'chunked',v.ChunkSize);
     end
   end
   
--- a/main/netcdf/src/netcdf_package.cc	Mon Jun 17 12:13:17 2013 +0000
+++ b/main/netcdf/src/netcdf_package.cc	Mon Jun 17 13:05:27 2013 +0000
@@ -561,6 +561,8 @@
   int storage;
 
   if (! error_state) {
+    std::transform(storagestr.begin(), storagestr.end(),storagestr.begin(), ::toupper);
+
     if (storagestr == "CHUNKED") {
       storage = NC_CHUNKED;
     }
@@ -1128,6 +1130,61 @@
 }
 
 
+// groups
+
+//int nc_def_grp(int parent_ncid, const char *name, int *new_ncid);
+
+DEFUN_DLD(netcdf_defGrp, args,, 
+"")
+{
+
+  if (args.length() != 2) {
+      print_usage ();
+      return octave_value();
+    }
+
+  int parent_ncid = args(0).scalar_value();
+  std::string name = args(1).string_value();
+  int new_ncid;
+
+  check_err(nc_def_grp(parent_ncid, name.c_str(), &new_ncid));
+  return octave_value(new_ncid);
+}
 
 
+// int nc_inq_grps(int ncid, int *numgrps, int *ncids);
+DEFUN_DLD(netcdf_inqGrps, args,, 
+"")
+{
+  if (args.length() != 1) {
+      print_usage ();
+      return octave_value();
+    }
 
+  int ncid = args(0).scalar_value();
+  int numgrps;
+
+  check_err(nc_inq_grps(ncid, &numgrps, NULL));
+  Array<int> ncids = Array<int>(dim_vector(1,numgrps));
+  check_err(nc_inq_grps(ncid, NULL, ncids.fortran_vec()));
+    
+  return octave_value(ncids);
+}
+
+
+// int nc_inq_ncid(int ncid, const char *name, int *grp_ncid);
+DEFUN_DLD(netcdf_inqNcid, args,, 
+"")
+{
+  if (args.length() != 2) {
+      print_usage ();
+      return octave_value();
+    }
+
+  int ncid = args(0).scalar_value();
+  std::string name = args(1).string_value();
+  int grp_ncid;
+
+  check_err(nc_inq_ncid(ncid, name.c_str(), &grp_ncid));    
+  return octave_value(grp_ncid);
+}
--- a/main/netcdf/src/test_netcdf_hl.m	Mon Jun 17 12:13:17 2013 +0000
+++ b/main/netcdf/src/test_netcdf_hl.m	Mon Jun 17 13:05:27 2013 +0000
@@ -34,8 +34,8 @@
 
 
 nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','64bit');
+delete(fname);
 
-delete(fname);
 nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','classic');
 info = ncinfo(fname);
 assert(strcmp(info.Format,'classic'));
@@ -62,8 +62,8 @@
 delete(fname)
 
 test_netcdf_ncwriteschema
-%fails in matlab
-%test_netcdf_ncwriteschema_unlim
+test_netcdf_ncwriteschema_unlim
+test_netcdf_ncwriteschema_chunking
 
 % test unlimited dimension with nccreate
 fname = [tempname '-octave-netcdf.nc'];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/netcdf/src/test_netcdf_ncwriteschema_chunking.m	Mon Jun 17 13:05:27 2013 +0000
@@ -0,0 +1,29 @@
+
+fname = [tempname '-octave-netcdf-scheme-chunk.nc'];
+
+clear s
+s.Name   = '/';
+s.Format = 'netcdf4';
+s.Dimensions(1).Name   = 'lon';
+s.Dimensions(1).Length = 20;
+s.Dimensions(2).Name   = 'lat';
+s.Dimensions(2).Length = 10;
+
+s.Attributes(1).Name = 'institution';
+s.Attributes(1).Value = 'GHER, ULg';
+
+s.Variables(1).Name = 'temp';
+s.Variables(1).Dimensions = s.Dimensions;
+s.Variables(1).Datatype = 'double';
+s.Variables(1).Attributes(1).Name = 'long_name';
+s.Variables(1).Attributes(1).Value = 'temperature';
+s.Variables(1).ChunkSize = [2 3];
+
+ncwriteschema(fname,s);
+
+info = ncinfo(fname);
+assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name))
+assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value))
+assert(isequal(info.Variables(1).ChunkSize,s.Variables(1).ChunkSize));
+
+delete(fname);
--- a/main/netcdf/src/test_netcdf_package.m	Mon Jun 17 12:13:17 2013 +0000
+++ b/main/netcdf/src/test_netcdf_package.m	Mon Jun 17 13:05:27 2013 +0000
@@ -195,7 +195,7 @@
 ncid = netcdf.create(fname,'NC_NETCDF4');
 dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)];
 varid = netcdf.defVar(ncid,'double_var','double',dimids);
-netcdf.defVarChunking(ncid,varid,'CONTIGUOUS');
+netcdf.defVarChunking(ncid,varid,'contiguous');
 [storage,chunksize] = netcdf.inqVarChunking(ncid,varid);
 assert(strcmp(storage,'contiguous'))
 assert(isempty(chunksize))
@@ -209,7 +209,7 @@
 ncid = netcdf.create(fname,'NC_NETCDF4');
 dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)];
 varid = netcdf.defVar(ncid,'double_var','double',dimids);
-netcdf.defVarChunking(ncid,varid,'CHUNKED',[3 4]);
+netcdf.defVarChunking(ncid,varid,'chunked',[3 4]);
 [storage,chunksize] = netcdf.inqVarChunking(ncid,varid);
 assert(strcmp(storage,'chunked'))
 assert(isequal(chunksize,[3 4]))
@@ -271,5 +271,21 @@
 delete(fname);
 
 
+% create groups
+fname = [tempname '-octave-netcdf-groups.nc'];
+ncid = netcdf.create(fname,'NC_NETCDF4');
+id1 = netcdf.defGrp(ncid,'group1');
+id2 = netcdf.defGrp(ncid,'group2');
+id3 = netcdf.defGrp(id1,'subgroup');
+ids = netcdf.inqGrps(ncid);
+assert(isequal(sort([id1,id2]),sort(ids)));
+
+id4 = netcdf.inqNcid(ncid,'group1');
+assert(id1 == id4)
+netcdf.close(ncid);
+%system(['ncdump -h ' fname])
+delete(fname);
+
+
 test_netcdf_hl