Changeset 748 for trunk/src/read_field.m


Ignore:
Timestamp:
Apr 23, 2014, 4:57:58 PM (10 years ago)
Author:
sommeria
Message:

update for 3D plots, panel Coordiantes introduces, while coordiantes now called Axes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/read_field.m

    r747 r748  
    2626
    2727function [Field,ParamOut,errormsg] = read_field(FileName,FileType,ParamIn,num)
     28%% default output and check input
    2829Field=[];
    2930if ~exist('num','var')
     
    5960%% distingush different input file types
    6061switch FileType
    61     case 'civdata'
     62    case 'civdata'% new format for civ results
    6263        [Field,ParamOut.VelType,errormsg]=read_civdata(FileName,InputField,ParamIn.VelType);
    6364        if ~isempty(errormsg),errormsg=['read_civdata / ' errormsg];return,end
    6465        ParamOut.CivStage=Field.CivStage;
    65     case 'civx'
     66    case 'civx'% old (obsolete) format for civ results
    6667        ParamOut.FieldName='velocity';%Civx data found, set .FieldName='velocity' by default
    6768        [Field,ParamOut.VelType,errormsg]=read_civxdata(FileName,InputField,ParamIn.VelType);
    6869        if ~isempty(errormsg),errormsg=['read_civxdata / ' errormsg];return,end
    6970        ParamOut.CivStage=Field.CivStage;
    70     case 'netcdf'
     71    case 'netcdf'% general netcdf file (not recognized as civ)
    7172        ListVar={};
    7273        Role={};
     
    7778        checkV=0;
    7879        for ilist=1:numel(InputField)
     80            % look for input variables to read
    7981            r=regexp(InputField{ilist},'(?<Operator>(^vec|^norm))\((?<UName>.+),(?<VName>.+)\)$','names');
    8082            if isempty(r)%  no operator used
     
    119121            end
    120122        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);
    121127        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]);
    123129        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]);
    127134        end
    128135        if ~isempty(errormsg)
    129136            return
    130137        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
    133141                Field.VarAttribute{1}.Role='coord_x';%unstructured coordinates
    134142                Field.VarAttribute{2}.Role='coord_y';
     143                if NbCoord>=3
     144                    Field.VarAttribute{3}.Role='coord_z';
     145                end
    135146                break
    136147            end
     
    140151        VName='';
    141152        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};
    144155            if isfield(ParamIn,'FieldName')
    145                 Field.VarAttribute{ilist+2}.FieldName=ListInputField{ilist};
     156                Field.VarAttribute{ilist+NbCoord}.FieldName=ListInputField{ilist};
    146157            end
    147158            r=regexp(ListInputField{ilist},'(?<Operator>(^vec|^norm))\((?<UName>.+),(?<VName>.+)\)$','names');
Note: See TracChangeset for help on using the changeset viewer.