Changeset 748 for trunk/src/read_field.m
- Timestamp:
- Apr 23, 2014, 4:57:58 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/read_field.m
r747 r748 26 26 27 27 function [Field,ParamOut,errormsg] = read_field(FileName,FileType,ParamIn,num) 28 %% default output and check input 28 29 Field=[]; 29 30 if ~exist('num','var') … … 59 60 %% distingush different input file types 60 61 switch FileType 61 case 'civdata' 62 case 'civdata'% new format for civ results 62 63 [Field,ParamOut.VelType,errormsg]=read_civdata(FileName,InputField,ParamIn.VelType); 63 64 if ~isempty(errormsg),errormsg=['read_civdata / ' errormsg];return,end 64 65 ParamOut.CivStage=Field.CivStage; 65 case 'civx' 66 case 'civx'% old (obsolete) format for civ results 66 67 ParamOut.FieldName='velocity';%Civx data found, set .FieldName='velocity' by default 67 68 [Field,ParamOut.VelType,errormsg]=read_civxdata(FileName,InputField,ParamIn.VelType); 68 69 if ~isempty(errormsg),errormsg=['read_civxdata / ' errormsg];return,end 69 70 ParamOut.CivStage=Field.CivStage; 70 case 'netcdf' 71 case 'netcdf'% general netcdf file (not recognized as civ) 71 72 ListVar={}; 72 73 Role={}; … … 77 78 checkV=0; 78 79 for ilist=1:numel(InputField) 80 % look for input variables to read 79 81 r=regexp(InputField{ilist},'(?<Operator>(^vec|^norm))\((?<UName>.+),(?<VName>.+)\)$','names'); 80 82 if isempty(r)% no operator used … … 119 121 end 120 122 end 123 if ~isfield(ParamIn,'Coord_z') 124 ParamIn.Coord_z=[]; 125 end 126 NbCoord=~isempty(ParamIn.Coord_x)+~isempty(ParamIn.Coord_y)+~isempty(ParamIn.Coord_z); 121 127 if isfield(ParamIn,'TimeDimName')% case of reading of a single time index in a multidimensional array 122 [Field,var_detect,ichoice,errormsg]=nc2struct(FileName,'TimeDimName',ParamIn.TimeDimName,num,[ParamIn.Coord_x (ParamIn.Coord_y)ListVar]);128 [Field,var_detect,ichoice,errormsg]=nc2struct(FileName,'TimeDimName',ParamIn.TimeDimName,num,[ParamIn.Coord_x ParamIn.Coord_y ParamIn.Coord_z ListVar]); 123 129 elseif isfield(ParamIn,'TimeVarName')% case of reading of a single time in a multidimensional array 124 [Field,var_detect,ichoice,errormsg]=nc2struct(FileName,'TimeVarName',ParamIn.TimeVarName,num,[ParamIn.Coord_x (ParamIn.Coord_y) ListVar]); 125 else 126 [Field,var_detect,ichoice,errormsg]=nc2struct(FileName,[ParamIn.Coord_x (ParamIn.Coord_y) (ParamIn.Coord_z) ListVar]); 130 [Field,var_detect,ichoice,errormsg]=nc2struct(FileName,'TimeVarName',ParamIn.TimeVarName,num,[ParamIn.Coord_x ParamIn.Coord_y ParamIn.Coord_z ListVar]); 131 NbCoord=NbCoord+1;% adds time coordinate 132 else 133 [Field,var_detect,ichoice,errormsg]=nc2struct(FileName,[ParamIn.Coord_x ParamIn.Coord_y ParamIn.Coord_z ListVar]); 127 134 end 128 135 if ~isempty(errormsg) 129 136 return 130 137 end 131 for ilist=3:numel(Field.VarDimName) 132 if isequal(Field.VarDimName{1},Field.VarDimName{ilist}) 138 %scan all the variables beyond the two first ones, ParamIn.Coord_x and ParamIn.Coord_y. 139 for ilist=NbCoord+1:numel(Field.VarDimName) 140 if isequal(Field.VarDimName{1},Field.VarDimName{ilist}) % if a variable has the same dimension as the coordinate, it denotes a field with unstructured coordinates 133 141 Field.VarAttribute{1}.Role='coord_x';%unstructured coordinates 134 142 Field.VarAttribute{2}.Role='coord_y'; 143 if NbCoord>=3 144 Field.VarAttribute{3}.Role='coord_z'; 145 end 135 146 break 136 147 end … … 140 151 VName=''; 141 152 for ilist=1:numel(ListVar) 142 Field.VarAttribute{ilist+ 2}.Role=Role{ilist};143 Field.VarAttribute{ilist+ 2}.ProjModeRequest=ProjModeRequest{ilist};153 Field.VarAttribute{ilist+NbCoord}.Role=Role{ilist}; 154 Field.VarAttribute{ilist+NbCoord}.ProjModeRequest=ProjModeRequest{ilist}; 144 155 if isfield(ParamIn,'FieldName') 145 Field.VarAttribute{ilist+ 2}.FieldName=ListInputField{ilist};156 Field.VarAttribute{ilist+NbCoord}.FieldName=ListInputField{ilist}; 146 157 end 147 158 r=regexp(ListInputField{ilist},'(?<Operator>(^vec|^norm))\((?<UName>.+),(?<VName>.+)\)$','names');
Note: See TracChangeset
for help on using the changeset viewer.