[15393] | 1 | Index: ../trunk-jpl/src/m/classes/model/model.m
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/m/classes/model/model.m (revision 14610)
|
---|
| 4 | +++ ../trunk-jpl/src/m/classes/model/model.m (revision 14611)
|
---|
| 5 | @@ -1138,7 +1138,7 @@
|
---|
| 6 | end % }}}
|
---|
| 7 | function memory(obj) % {{{
|
---|
| 8 |
|
---|
| 9 | - disp(sprintf('\nMemory imprint: '));
|
---|
| 10 | + disp(sprintf('\nMemory imprint:\n'));
|
---|
| 11 |
|
---|
| 12 | fields=properties('model');
|
---|
| 13 | mem=0;
|
---|
| 14 | @@ -1147,7 +1147,7 @@
|
---|
| 15 | field=obj.(fields{i});
|
---|
| 16 | s=whos('field');
|
---|
| 17 | mem=mem+s.bytes/1e6;
|
---|
| 18 | - disp(sprintf('%19s: %g Mb',fields{i},s.bytes/1e6));
|
---|
| 19 | + disp(sprintf('%19s: %6.2f Mb',fields{i},s.bytes/1e6));
|
---|
| 20 | end
|
---|
| 21 | disp(sprintf('%19s--%10s','--------------','--------------'));
|
---|
| 22 | disp(sprintf('%19s: %g Mb','Total',mem));
|
---|
| 23 | @@ -1165,67 +1165,19 @@
|
---|
| 24 | %1. Create NetCDF file
|
---|
| 25 | ncid=netcdf.create(filename,'CLOBBER');
|
---|
| 26 | netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Conventions','CF-1.4');
|
---|
| 27 | - netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model' obj.miscellaneous.name]);
|
---|
| 28 | + netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' obj.miscellaneous.name ')']);
|
---|
| 29 | netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Author',getenv('USER'));
|
---|
| 30 | netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Date',datestr(now));
|
---|
| 31 |
|
---|
| 32 | - %2. prepare some simple dimensions
|
---|
| 33 | + %Preallocate variable id, needed to write variables in netcdf file
|
---|
| 34 | var_id=zeros(300,1);%preallocate
|
---|
| 35 |
|
---|
| 36 | - %2. First round: define variables (step=1), put variable (step=2)
|
---|
| 37 | - fields1=properties('model');
|
---|
| 38 | -
|
---|
| 39 | for step=1:2,
|
---|
| 40 | counter=0;
|
---|
| 41 | - for i=1:length(fields1),
|
---|
| 42 | - fields2=fields(obj.(fields1{i}));
|
---|
| 43 | - for j=1:length(fields2)
|
---|
| 44 | - counter = counter+1;
|
---|
| 45 | - fieldname = [fields1{i} '.' fields2{j}];
|
---|
| 46 | - field = obj.(fields1{i}).(fields2{j});
|
---|
| 47 | - if isa(field,'double') & numel(field)==1,
|
---|
| 48 | - if step==1,
|
---|
| 49 | - var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
|
---|
| 50 | - else
|
---|
| 51 | - netcdf.putVar(ncid,var_id(counter),field);
|
---|
| 52 | - end
|
---|
| 53 | - elseif isa(field,'double') & size(field,2)==1,
|
---|
| 54 | - if step==1,
|
---|
| 55 | - dim_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
|
---|
| 56 | - var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
|
---|
| 57 | - else
|
---|
| 58 | - netcdf.putVar(ncid,var_id(counter),field);
|
---|
| 59 | - end
|
---|
| 60 | - elseif isa(field,'double') & size(field,2)>1,
|
---|
| 61 | - if step==1,
|
---|
| 62 | - dim1_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
|
---|
| 63 | - dim2_id = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
|
---|
| 64 | - var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
|
---|
| 65 | - else
|
---|
| 66 | - netcdf.putVar(ncid,var_id(counter),transpose(field));
|
---|
| 67 | - end
|
---|
| 68 | - elseif isa(field,'char') & ~isempty(field),
|
---|
| 69 | - if step==1,
|
---|
| 70 | - dim_id = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
|
---|
| 71 | - var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
|
---|
| 72 | - else
|
---|
| 73 | - netcdf.putVar(ncid,var_id(counter),transpose(field));
|
---|
| 74 | - end
|
---|
| 75 | - elseif isa(field,'logical') & numel(field)==1,
|
---|
| 76 | - if step==1,
|
---|
| 77 | - var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
|
---|
| 78 | - else
|
---|
| 79 | - netcdf.putVar(ncid,var_id(counter),int8(field));
|
---|
| 80 | - end
|
---|
| 81 | - else
|
---|
| 82 | - disp(['skipping ' fieldname '...']);
|
---|
| 83 | - end
|
---|
| 84 | - end
|
---|
| 85 | -
|
---|
| 86 | - end
|
---|
| 87 | -
|
---|
| 88 | + var_id=structtonc(ncid,'md',obj,0,var_id,counter,step);
|
---|
| 89 | if step==1, netcdf.endDef(ncid); end
|
---|
| 90 | end
|
---|
| 91 | +
|
---|
| 92 | if counter>300,
|
---|
| 93 | warning('preallocation of var_id need to be updated');
|
---|
| 94 | end
|
---|
| 95 | Index: ../trunk-jpl/src/m/io/structtonc.m
|
---|
| 96 | ===================================================================
|
---|
| 97 | --- ../trunk-jpl/src/m/io/structtonc.m (revision 0)
|
---|
| 98 | +++ ../trunk-jpl/src/m/io/structtonc.m (revision 14611)
|
---|
| 99 | @@ -0,0 +1,58 @@
|
---|
| 100 | +function [var_id,counter] = structtonc(ncid,fieldname,field,depth,var_id,counter,step);
|
---|
| 101 | +%STRUCTTONC- fill nc file with structure fields
|
---|
| 102 | +%
|
---|
| 103 | +% WARNING: Do not use this function, this function is called
|
---|
| 104 | +% by netcdf(model);
|
---|
| 105 | +%
|
---|
| 106 | +
|
---|
| 107 | +%update counter
|
---|
| 108 | +counter = counter+1;
|
---|
| 109 | +
|
---|
| 110 | +%Datatype dependent switch
|
---|
| 111 | +if isa(field,'double') & numel(field)==1,
|
---|
| 112 | + if step==1,
|
---|
| 113 | + var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[]);
|
---|
| 114 | + else
|
---|
| 115 | + netcdf.putVar(ncid,var_id(counter),field);
|
---|
| 116 | + end
|
---|
| 117 | +elseif isa(field,'double') & size(field,2)==1,
|
---|
| 118 | + if step==1,
|
---|
| 119 | + dim_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
|
---|
| 120 | + var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',dim_id);
|
---|
| 121 | + else
|
---|
| 122 | + netcdf.putVar(ncid,var_id(counter),field);
|
---|
| 123 | + end
|
---|
| 124 | +elseif isa(field,'double') & size(field,2)>1,
|
---|
| 125 | + if step==1,
|
---|
| 126 | + dim1_id = netcdf.defDim(ncid,[fieldname '_size1'],size(field,1));
|
---|
| 127 | + dim2_id = netcdf.defDim(ncid,[fieldname '_size2'],size(field,2));
|
---|
| 128 | + var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_DOUBLE',[dim2_id dim1_id]);
|
---|
| 129 | + else
|
---|
| 130 | + netcdf.putVar(ncid,var_id(counter),transpose(field));
|
---|
| 131 | + end
|
---|
| 132 | +elseif isa(field,'char') & ~isempty(field),
|
---|
| 133 | + if step==1,
|
---|
| 134 | + dim_id = netcdf.defDim(ncid,[fieldname '_size1'],numel(field));
|
---|
| 135 | + var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_CHAR',dim_id);
|
---|
| 136 | + else
|
---|
| 137 | + netcdf.putVar(ncid,var_id(counter),transpose(field));
|
---|
| 138 | + end
|
---|
| 139 | +elseif isa(field,'logical') & numel(field)==1,
|
---|
| 140 | + if step==1,
|
---|
| 141 | + var_id(counter) = netcdf.defVar(ncid,fieldname,'NC_BYTE',[]);
|
---|
| 142 | + else
|
---|
| 143 | + netcdf.putVar(ncid,var_id(counter),int8(field));
|
---|
| 144 | + end
|
---|
| 145 | +elseif isa(field,'struct'),
|
---|
| 146 | + subfields = fields(field);
|
---|
| 147 | + for i=1:length(subfields),
|
---|
| 148 | + [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
|
---|
| 149 | + end
|
---|
| 150 | +elseif isobject(field),
|
---|
| 151 | + subfields = fields(field);
|
---|
| 152 | + for i=1:length(subfields),
|
---|
| 153 | + [var_id,counter] = structtonc(ncid,[fieldname '.' subfields{i}],field.(subfields{i}),depth+1,var_id,counter,step);
|
---|
| 154 | + end
|
---|
| 155 | +else
|
---|
| 156 | + disp(['skipping ' fieldname '...']);
|
---|
| 157 | +end
|
---|