Changeset 21151


Ignore:
Timestamp:
08/22/16 00:45:40 (9 years ago)
Author:
agscott1
Message:

NEW: Replaced .nc files with custom binary .arch file to store test archives in. Added support for python and MATLABcalls that are similar to netcdf function calls.

Location:
issm/trunk-jpl
Files:
282 added
274 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/Makefile.am

    r21139 r21151  
    88if !DEVELOPMENT
    99bin_SCRIPTS += ${ISSM_DIR}/src/m/qmu/*.m \
     10                                        ${ISSM_DIR}/src/m/archive/*.m \
    1011                                        ${ISSM_DIR}/src/m/qmu/setupdesign/*.m \
    1112                                        ${ISSM_DIR}/src/m/qmu/plot/*.m \
     
    5051if PYTHON
    5152if !DEVELOPMENT
    52 bin_SCRIPTS += ${ISSM_DIR}/src/m/classes/*.py \
     53bin_SCRIPTS += ${ISSM_DIR}/src/m/archive/*.py \
     54                                        ${ISSM_DIR}/src/m/classes/*.py \
    5355                                        ${ISSM_DIR}/src/m/classes/clusters/*.py \
    5456                                        ${ISSM_DIR}/src/m/consistency/*.py \
  • issm/trunk-jpl/src/m/miscellaneous/netcdf2struct.m

    r13012 r21151  
    55%      S=netcdf2struct(File);
    66
    7 %Read netcdf file
    8 data=readnetcdf(File);
     7        %Read netcdf file
     8        data=readnetcdf(File);
    99
    10 %initialize output
    11 S=struct();
     10        %initialize output
     11        S=struct();
    1212
    13 %All the variables are in VarArray field
    14 variables=data.VarArray;
    15 for i=1:size(variables,2),
    16         fieldname=deblank(variables(i).Str);
    17         fieldvalue=double(squeeze(variables(i).Data));
    18         S.(fieldname)=fieldvalue;
    19 end
     13        %All the variables are in VarArray field
     14        variables=data.VarArray;
     15        for i=1:size(variables,2),
     16                fieldname=deblank(variables(i).Str);
     17                fieldvalue=double(squeeze(variables(i).Data));
     18                S.(fieldname)=fieldvalue;
     19        end
    2020
    21 %All the variables are in AttArray field
    22 variables=data.AttArray;
    23 for i=1:size(variables,2),
    24         fieldname=deblank(variables(i).Str);
    25         fieldvalue=double(variables(i).Val);
    26         S.(fieldname)=fieldvalue;
    27 end
     21        %All the variables are in AttArray field
     22        variables=data.AttArray;
     23        for i=1:size(variables,2),
     24                fieldname=deblank(variables(i).Str);
     25                fieldvalue=double(variables(i).Val);
     26                S.(fieldname)=fieldvalue;
     27        end
    2828end
    2929
     
    113113% Size of NetCDF data type, ID, in bytes
    114114   S = subsref([1,1,2,4,4,8],struct('type','()','subs',{{ID}}));
     115end
    115116
    116117function T = Type(ID)
    117118% Matlab string for CDF data type, ID
    118119   T = subsref({'int8','char','int16','int32','single','double'},...
    119                struct('type','{}','subs',{{ID}}));
     120                struct('type','{}','subs',{{ID}}));
     121end
    120122
    121123function N = Pad(Num,ID)
    122124% Number of elements to read after padding to 4 bytes for type ID
    123125   N = (double(Num) + mod(4-double(Num)*Size(ID),4)/Size(ID)).*(Num~=0);
     126end
    124127
    125128function S = String(fp)
    126129% Read a CDF string; Size,[String,[Padding]]
    127130   S = fread(fp,Pad(fread(fp,1,'uint32=>uint32'),1),'uint8=>char').';
     131end
    128132
    129133function A = ReOrder(A,S)
    130134% Rearrange CDF array A to size S with matlab ordering
    131135   A = permute(reshape(A,fliplr(S)),fliplr(1:length(S)));
     136end
    132137
    133138function S = DimArray(fp)
     
    139144      end
    140145   else fread(fp,1,'uint32=>uint32'); S = []; end
     146end
    141147
    142148function S = AttArray(fp)
     
    150156      end
    151157   else fread(fp,1,'uint32=>uint32'); S = []; end
     158end
    152159
    153160function S = VarArray(fp)
  • issm/trunk-jpl/test/NightlyRun/README

    r13143 r21151  
    3434To modify some characteristics, do it in the testxxx.m file.
    3535Specify the field_names the field_values and the tolerance at the end of the test file.
    36 Don't forget to commit the archive (Archivexxx.nc in ../Archives)
     36Don't forget to commit the archive (Archivexxx.arch in ../Archives)
  • issm/trunk-jpl/test/NightlyRun/runme.m

    r20182 r21151  
    140140                archive_name=['Archive' num2str(id) ];
    141141                if strcmpi(procedure,'update'),
    142                         delete(['../Archives/' archive_name '.nc'])
     142                        delete(['../Archives/' archive_name '.arch'])
    143143                        for k=1:length(field_names),
    144144                                field=field_values{k};
    145145                                % matlab writes the dimensions reversed and matrices transposed into netcdf, so compensate for that
    146                                 nccreate(['../Archives/' archive_name '.nc'],[archive_name '_field' num2str(k)],...
    147                                          'Dimensions',{[archive_name '_field' num2str(k) '_2'] size(field,2) [archive_name '_field' num2str(k) '_1'] size(field,1)},...
    148                                          'Format','classic');
    149                                 ncwrite(['../Archives/' archive_name '.nc'],[archive_name '_field' num2str(k)],transpose(field));
     146                                archwrite(['../Archives/' archive_name '.arch'],[archive_name '_field' num2str(k)], transpose(field));
    150147                        end
    151                         disp(sprintf(['File ./../Archives/' archive_name '.nc saved\n']));
     148                        disp(sprintf(['File ./../Archives/' archive_name '.arch saved\n']));
    152149
    153150                %CHECK for memory leaks?
     
    215212
    216213                                        %compare to archive
    217                                         % matlab reads the dimensions reversed and matrices transposed from netcdf, so compensate for that
    218                                         archive=transpose(ncread(['../Archives/' archive_name '.nc'],[archive_name '_field' num2str(k)]));
    219                                         error_diff=full(max(abs(archive(:)-field(:)))/(max(abs(archive))+eps));
     214                                        %our output is in the correct order (n,1) or (1,1), so we do not need to transpose again
     215                                        archive_cell=archread(['../Archives/' archive_name '.arch'],[archive_name '_field' num2str(k)]);
     216                                        archive=archive_cell{1};
     217                                        error_diff=full(max(abs(archive(:)-field(:)))/(max(abs(archive(:)))+eps));
    220218
    221219                                        %disp test result
  • issm/trunk-jpl/test/NightlyRun/runme.py

    r20914 r21151  
    44import socket
    55import numpy
    6 import netCDF4
    76import sys
    87import traceback
     
    4746        from MatlabFuncs import strcmpi
    4847        from MatlabFuncs import ismember
     48        from arch import archread
     49        from arch import archwrite
     50        from arch import archdisp
    4951
    5052        #Get ISSM_DIR variable
     
    140142                        archive_name='Archive'+str(id)
    141143                        if strcmpi(procedure,'update'):
    142                                 archive=os.path.join('..','Archives',archive_name+'.nc')
    143                                 if os.path.isfile(archive):
    144                                         os.remove(archive)
    145                                 f = netCDF4.Dataset(archive,'w',format='NETCDF3_CLASSIC')
     144                                archive_file=os.path.join('..','Archives',archive_name+'.arch')
     145                                if os.path.isfile(archive_file):
     146                                        os.remove(archive_file)
    146147                                for k,fieldname in enumerate(field_names):
    147148                                        field=numpy.array(field_values[k],dtype=float)
     
    154155                                                field=field.reshape(1,1)
    155156                                        # Matlab uses base 1, so use base 1 in labels
    156                                         f.createDimension(archive_name+'_field'+str(k+1)+'_1',numpy.size(field,0))
    157                                         f.createDimension(archive_name+'_field'+str(k+1)+'_2',numpy.size(field,1))
    158                                         v = f.createVariable(archive_name+'_field'+str(k+1),field.dtype,(archive_name+'_field'+str(k+1)+'_1',archive_name+'_field'+str(k+1)+'_2'))
    159                                         v[:] = field
    160                                 f.close()
    161                                 print "File '%s' saved.\n" % os.path.join('..','Archives',archive_name+'.nc')
     157                                        archwrite(archive_file,archive_name+'_field'+str(k+1),field)
     158                                print "File '%s' saved.\n" % os.path.join('..','Archives',archive_name+'.arch')
    162159
    163160                        #ELSE: CHECK TEST
     
    165162
    166163                                #load archive
    167                                 if os.path.exists(os.path.join('..','Archives',archive_name+'.nc')):
    168                                         f = netCDF4.Dataset(os.path.join('..','Archives',archive_name+'.nc'),'r')
     164                                if os.path.exists(os.path.join('..','Archives',archive_name+'.arch')):
     165                                        archive_file=os.path.join('..','Archives',archive_name+'.arch')
    169166                                else:
    170                                         raise IOError("Archive file '"+os.path.join('..','Archives',archive_name+'.nc')+"' does not exist.")
     167                                        raise IOError("Archive file '"+os.path.join('..','Archives',archive_name+'.arch')+"' does not exist.")
    171168
    172169                                for k,fieldname in enumerate(field_names):
     
    184181                                                #compare to archive
    185182                                                # Matlab uses base 1, so use base 1 in labels
    186                                                 if archive_name+'_field'+str(k+1) in f.variables:
    187                                                         archive=f.variables[archive_name+'_field'+str(k+1)][:]
    188                                                 else:
     183                                                archive=numpy.array(archread(archive_file,archive_name+'_field'+str(k+1)))
     184                                                if archive == None:
    189185                                                        raise NameError("Field name '"+archive_name+'_field'+str(k+1)+"' does not exist in archive file.")
    190186                                                error_diff=numpy.amax(numpy.abs(archive-field),axis=0)/ \
     
    214210                                                        raise RuntimeError(message)
    215211
    216                                 f.close()
    217212
    218213                except Exception as message:
Note: See TracChangeset for help on using the changeset viewer.