Mercurial > forge
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