Changeset 19096
- Timestamp:
- 02/11/15 09:08:20 (10 years ago)
- Location:
- issm/trunk-jpl/src/m/contrib/netCDF
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/contrib/netCDF/export_netCDF.m
r19080 r19096 29 29 30 30 %define netcdf dimensions 31 DimSize(1).index=netcdf.defDim(ncid,' EltNum',md.mesh.numberofelements);32 DimSize(2).index=netcdf.defDim(ncid,' VertNum',md.mesh.numberofvertices);33 DimSize(3).index=netcdf.defDim(ncid,' VertperElt',size(md.mesh.elements,2));34 DimSize(4).index=netcdf.defDim(ncid,' Time',StepNum);35 DimSize(5).index=netcdf.defDim(ncid,' StringLength',20);36 DimSize(6).index=netcdf.defDim(ncid,' StructLength',2);31 DimSize(1).index=netcdf.defDim(ncid,'Dimension1',md.mesh.numberofelements); 32 DimSize(2).index=netcdf.defDim(ncid,'Dimension2',md.mesh.numberofvertices); 33 DimSize(3).index=netcdf.defDim(ncid,'Dimension3',size(md.mesh.elements,2)); 34 DimSize(4).index=netcdf.defDim(ncid,'Dimension4',StepNum); 35 DimSize(5).index=netcdf.defDim(ncid,'Dimension5',40); 36 DimSize(6).index=netcdf.defDim(ncid,'Dimension6',2); 37 37 38 38 for i=1:length(DimSize), … … 53 53 %Special treatment for the results 54 54 if strcmp(groups(i),'results'), 55 for j=1:length(groupfields)%looping on the different solutions 56 %disp(sprintf('=====Field name in tree %s ',groupfields{j})); 55 for j=1:length(groupfields)%looping on the differents solutions 56 netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype','results'); 57 subgroupID=netcdf.defGrp(groupID,groupfields{j}); 58 netcdf.putAtt(subgroupID,netcdf.getConstant('NC_GLOBAL'),'classtype',groupfields{j}); 59 %disp(sprintf('=====Field name in tree %s ',groupfields{j})); 57 60 if length(md.results.(groupfields{j}))>1, 58 61 %the solution have several timestep get last timesteps and output frequency … … 61 64 subfields=fields(md.results.(groupfields{j})(1)); 62 65 for k=1:length(subfields), 63 netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype','results');64 66 if ~strcmp(subfields(k),'errlog') && ~strcmp(subfields(k),'outlog') && ~strcmp(subfields(k),'SolutionType'), 65 67 %disp(sprintf('==========SubField name in tree %s ',subfields{k})); 66 68 Var=md.results.(groupfields{j})(1).(subfields{k}); 67 [DimSize,DimValue]=DefCreateVar(ncid,Var, groupID,subfields{k},DimSize,DimValue,true,last_step,md,groupfields{j});69 [DimSize,DimValue]=DefCreateVar(ncid,Var,subgroupID,subfields{k},DimSize,DimValue,true,last_step,md,groupfields{j}); 68 70 end 69 71 end … … 73 75 for k=1:length(subfields), 74 76 %disp(sprintf('==========SubField name in tree %s ',subfields{k})); 75 netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype','results');76 77 if ~strcmp(subfields(k),'errlog') && ~strcmp(subfields(k),'outlog') && ~strcmp(subfields(k),'SolutionType'), 77 78 Var=md.results.(groupfields{1})(1).(subfields{k}); … … 85 86 else 86 87 for j=1:length(groupfields), 87 %disp(sprintf('=====Field name in tree %s ',groupfields{j}));88 disp(sprintf('=====Field name in tree %s ',groupfields{j})); 88 89 netcdf.putAtt(groupID,netcdf.getConstant('NC_GLOBAL'),'classtype',class(md.(groups{i}))); 89 90 Var=md.(groups{i}).(groupfields{j}); … … 129 130 %dirty hack to be able to pass strings 130 131 varid = netcdf.defVar(groupID,field,'NC_CHAR',dims); 131 for i=1:length(Var), 132 startpoint=zeros(size(Var)); 133 startpoint(:,i)=i-1; 134 if length(Var)>1, 135 endpoint=[min(length(Var{i}),20) 1]; 136 else 137 endpoint=min(length(Var{i}),20); 138 end 139 if length(Var{i})>20, 140 netcdf.putVar(groupID,varid,startpoint,endpoint,Var{i}(1:20)) 141 else 142 netcdf.putVar(groupID,varid,startpoint,endpoint,Var{i}) 132 if length(Var)==0, 133 netcdf.putVar(groupID,varid,0,9,'emptycell') 134 else 135 for i=1:length(Var), 136 startpoint=zeros(size(Var)); 137 startpoint(:,i)=i-1; 138 if length(Var)>1, 139 endpoint=[min(length(Var{i}),40) 1]; 140 else 141 endpoint=min(length(Var{i}),40); 142 end 143 if length(Var{i})>40, 144 netcdf.putVar(groupID,varid,startpoint,endpoint,Var{i}(1:40)) 145 disp(sprintf('some variable have been truncated')); 146 else 147 netcdf.putVar(groupID,varid,startpoint,endpoint,Var{i}) 148 end 143 149 end 144 150 end … … 148 154 [dims,DimSize,DimValue]=GetDims(ncid,Var,groupID,locfields,DimSize,DimValue,istime); 149 155 varid = netcdf.defVar(groupID,field,'NC_CHAR',dims); 150 for i=1:length(locfields), 151 for j=1:2, 152 if j==1, 153 startpoint=[0,0,i-1]; 154 CharVar=locfields{i}; 155 else 156 startpoint=[0,1,i-1]; 157 if isa(Var.(locfields{i}),'char'), 158 CharVar=Var.(locfields{i}); 156 if length(locfields)==0, 157 netcdf.putVar(groupID,varid,[0,0],[11,1],'emptystruct') 158 else 159 for i=1:length(locfields), 160 for j=1:2, 161 if j==1, 162 startpoint=[0,0,i-1]; 163 CharVar=locfields{i}; 159 164 else 160 CharVar=num2str(Var.(locfields{i})); 161 end 162 end 163 endpoint=[min(length(CharVar),20),1,1]; 164 if length(CharVar)>20, 165 netcdf.putVar(groupID,varid,startpoint,endpoint,CharVar(1:20)) 166 else 167 netcdf.putVar(groupID,varid,startpoint,endpoint,CharVar) 168 end 169 end 170 end 165 startpoint=[0,1,i-1]; 166 if isa(Var.(locfields{i}),'char'), 167 CharVar=Var.(locfields{i}); 168 else 169 CharVar=num2str(Var.(locfields{i})); 170 end 171 end 172 endpoint=[min(length(CharVar),40),1,1]; 173 if length(CharVar)>40, 174 netcdf.putVar(groupID,varid,startpoint,endpoint,CharVar(1:40)) 175 disp(sprintf('some variable have been truncated')); 176 else 177 netcdf.putVar(groupID,varid,startpoint,endpoint,CharVar) 178 end 179 end 180 end 181 end 171 182 else 172 183 disp(sprintf('no support for class %s of field %s',varclass,field)); … … 185 196 dimexist=DimValue==currentdim; 186 197 if sum(dimexist)==0, %dimension is new to us, need to create it 187 dimname=strcat( field{1},int2str(i));198 dimname=strcat('Dimension',int2str(length(DimValue)+1)); 188 199 dimindex=length(DimSize)+1; 189 200 DimSize(dimindex).index=netcdf.defDim(ncid,dimname,currentdim); … … 212 223 dimexist=DimValue==currentdim; 213 224 if sum(dimexist)==0, %dimension is new to us, need to create it 214 dimname=strcat( field,int2str(i));225 dimname=strcat('Dimension',int2str(length(DimValue)+1)); 215 226 dimindex=length(DimSize)+1; 216 227 DimSize(dimindex).index=netcdf.defDim(ncid,dimname,currentdim); … … 232 243 %if we have a cell variable we need to add a stringlength dimension 233 244 if isa(Var,'cell') || isa(Var,'struct'), 234 dims=[DimSize(5).index dims] ;245 dims=[DimSize(5).index dims] 235 246 end 236 247 end -
issm/trunk-jpl/src/m/contrib/netCDF/export_netCDF.py
r19080 r19096 20 20 except KeyError: #if not create it 21 21 if (shape[dim])>1: 22 NewDim=NCData.createDimension(str(field)+str(dim),(shape[dim])) 23 DimDict[len(NewDim)]=str(field)+str(dim) 22 index=len(DimDict)+1 23 NewDim=NCData.createDimension('Dimension'+str(index),(shape[dim])) 24 DimDict[len(NewDim)]='Dimension'+str(index) 24 25 output=output+[str(DimDict[shape[dim]])] 25 26 print 'Defining dimension ' +str(shape[dim]) +' for '+str(field)+str(dim) … … 28 29 output=[str(DimDict[numpy.shape(shape)[0]])]+['DictDim'] 29 30 except KeyError: 30 NewDim=NCData.createDimension(str(field),numpy.shape(shape)[0]) 31 DimDict[len(NewDim)]=str(field) 32 output=[str(DimDict[numpy.shape(dict.keys(var))[0]])]+['DictDim'] 31 index=len(DimDict)+1 32 NewDim=NCData.createDimension('Dimension'+str(index),numpy.shape(shape)[0]) 33 DimDict[len(NewDim)]='Dimension'+str(index) 34 output=[str(DimDict[numpy.shape(dict.keys(var))[0]])]+['Dimension5'] 33 35 print 'Defining dimension ' +str(numpy.shape(shape)[0]) +' for '+str(field) 34 36 break 35 37 if istime: 36 output=output+[' Time']38 output=output+['Dimension4'] 37 39 return tuple(output) 38 40 #============================================================================ 39 41 40 42 #Define the variables 41 def CreateVar(var, istime,*step_args):43 def CreateVar(var,Group,istime,*step_args): 42 44 #grab type 43 45 try: … … 56 58 #treating scalar string or bool as atribute 57 59 if val_type==str or val_type==bool: 58 NCgroup.__setattr__(str(field), str(var))60 Group.__setattr__(str(field), str(var)) 59 61 60 62 #treating list as string table 61 63 elif val_type==list: 62 ncvar = NCgroup.createVariable(str(field),str,GetDim(var,val_shape,val_dim,istime),zlib=True)64 ncvar = Group.createVariable(str(field),str,GetDim(var,val_shape,val_dim,istime),zlib=True) 63 65 for elt in range(0,val_dim): 64 66 try: … … 68 70 #treating bool tables as string tables 69 71 elif val_type=='bool': 70 ncvar = NCgroup.createVariable(str(field),str,GetDim(var,val_shape,val_dim,istime),zlib=True)72 ncvar = Group.createVariable(str(field),str,GetDim(var,val_shape,val_dim,istime),zlib=True) 71 73 for elt in range(0,val_shape[0]): 72 74 ncvar[elt] = str(var[elt]) 73 75 #treating dictionaries as string tables of dim 2 74 76 elif val_type==collections.OrderedDict: 75 ncvar = NCgroup.createVariable(str(field),str,GetDim(var,val_shape,val_dim,istime),zlib=True)77 ncvar = Group.createVariable(str(field),str,GetDim(var,val_shape,val_dim,istime),zlib=True) 76 78 for elt in range(0,val_dim): 77 79 ncvar[elt,0]=dict.keys(var)[elt] … … 79 81 #Now dealing with numeric variables 80 82 else: 81 ncvar = NCgroup.createVariable(str(field),TypeDict[val_type],GetDim(var,val_shape,val_dim,istime),zlib=True)83 ncvar = Group.createVariable(str(field),TypeDict[val_type],GetDim(var,val_shape,val_dim,istime),zlib=True) 82 84 83 85 if istime: … … 127 129 StepNum=1 128 130 129 EltNum=NCData.createDimension('EltNum',md.mesh.numberofelements)130 VertNum=NCData.createDimension('VertNum',md.mesh.numberofvertices)131 VertperElt=NCData.createDimension('VertperElt',numpy.shape(md.mesh.elements)[1])132 Time=NCData.createDimension('Time',StepNum)133 Di ctDim=NCData.createDimension('DictDim',2)131 Dimension1=NCData.createDimension('Dimension1',md.mesh.numberofelements) 132 Dimension2=NCData.createDimension('Dimension2',md.mesh.numberofvertices) 133 Dimension3=NCData.createDimension('Dimension3',numpy.shape(md.mesh.elements)[1]) 134 Dimension4=NCData.createDimension('Dimension4',StepNum) 135 Dimension5=NCData.createDimension('Dimension5',2) 134 136 135 DimDict = {len( EltNum):'EltNum',136 len( VertNum):'VertNum',137 len( VertperElt):'VertperElt',138 len( Time):'Time',139 len(Di ctDim):'DictDim'}137 DimDict = {len(Dimension1):'Dimension1', 138 len(Dimension2):'Dimension2', 139 len(Dimension3):'Dimension3', 140 len(Dimension4):'Dimension4', 141 len(Dimension5):'Dimension5'} 140 142 141 143 TypeDict = {float:'f8', … … 154 156 if str(group)=='results': 155 157 for supfield in fields:#looping on the different solutions 158 NCgroup.__setattr__('classtype', "results") 159 Subgroup=NCgroup.createGroup(str(supfield)) 160 Subgroup.__setattr__('classtype',str(supfield)) 156 161 if type(md.results.__dict__[supfield])==list:#the solution have several timestep 157 162 #get last timesteps and output frequency … … 161 166 subfields=dict.keys(md.results.__dict__[supfield].__getitem__(0).__dict__) 162 167 for field in subfields: 163 NCgroup.__setattr__('classtype', "results")164 168 if str(field)!='errlog' and str(field)!='outlog' and str(field)!='SolutionType': 165 169 Var=md.results.__dict__[supfield].__getitem__(0).__dict__[field] 166 CreateVar(Var, True,last_step,step_freq)170 CreateVar(Var,Subgroup,True,last_step,step_freq) 167 171 168 172 elif type(md.results.__dict__[supfield])==results:#only one timestep 169 173 subfields=dict.keys(md.results.__dict__[supfield].__dict__) 170 174 for field in subfields: 171 NCgroup.__setattr__('classtype', "results")172 175 if str(field)!='errlog' and str(field)!='outlog' and str(field)!='SolutionType': 173 176 # print 'Treating '+str(group)+'.'+str(supfield)+'.'+str(field) 174 177 Var=md.results.__dict__[supfield].__dict__[field] 175 CreateVar(Var, False)178 CreateVar(Var,Subgroup,False) 176 179 else: 177 180 print 'Result format not suported' … … 182 185 NCgroup.__setattr__('classtype', md.__dict__[group].__class__.__name__) 183 186 Var=md.__dict__[group].__dict__[field] 184 CreateVar(Var, False)187 CreateVar(Var,NCgroup,False) 185 188 NCData.close() 186 189
Note:
See TracChangeset
for help on using the changeset viewer.