1

I have a function which generates yout_new(5000,1) at every iteration and I want to store this data to a netcdf file and append the new data generated at every iteration into this existing file . At the 2nd iteration the stored variable size should be yout_new(5000,2) . Here is my try which doesn't work. Is there is any nice way to do it ?

            neq=5000;
            filename='thrust.nc';
            if ~exist(filename, 'file')
                %% create file
                ncid=netcdf.create(filename,'NC_WRITE');

                %%define dimension
                tdimID = netcdf.defDim(ncid,'t',...
                            netcdf.getConstant('NC_UNLIMITED'));
                ydimID = netcdf.defDim(ncid,'y',neq);
                %%define varibale
                varid = netcdf.defVar(ncid,'yout','NC_DOUBLE',[ydimID tdimID]);
                netcdf.endDef(ncid);

                %%put variables from workspace ( i is the iteration)

                netcdf.putVar(ncid,varid,[ 0 0 ],[ neq 0],yout_new);

                %%close the file
                netcdf.close(ncid);

            else 
                %% open the existing file
                ncid=netcdf.open(filename,'NC_WRITE');

                %Inquire variables
                [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,0);
                varid = netcdf.inqVarID(ncid,varname);

                %Enquire current dimension length
                [dimname, dimlen] = netcdf.inqDim(ncid,0);

                % Append new data to existing variable.

            netcdf.putVar(ncid,varid,dimlen,numel(yout_new),yout_new);
                netcdf.close(ncid);

1 Answer 1

1

There are more easy functions in MATLAB, to deal with netCDF. You read about ncdisp, ncinfo,nccreate,ncread,ncwrite. Coming to the question, you said you have to write two columns, I will take number of columns as variable (infinity), every time you can append the columns. Check the below code:

N = 3 ;   % number of columns 
rows = 5000 ;   % number of rows 
ncfile = 'myfile.nc' ;  % my ncfile name 
nccreate(ncfile,'yout_new','Dimensions',{'row',rows,'col',Inf},'DeflateLevel',5) ;  % creat nc file 
% generate your data in loop and write to nc file 
for i = 1:N
    yout_new = rand(rows,1) ;
    ncwrite(ncfile,'yout_new',yout_new,[1,i]) ;
end

Please not that, it is not mandatory to make number of columns as unlimited, you can fix it to your desired number instead of inf.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks mate !...working fine...Is there any extra option in nccreate which lets you overwrite the existing file...currently I am using if exist() test and delete the file..

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.