source: trunk/src/calc_field_interp.m @ 517

Last change on this file since 517 was 517, checked in by sommeria, 12 years ago

various bugs corrected. get_field now used in a passive way from uvmat: variable names are transferred from get_field to uvmat.

File size: 3.8 KB
Line 
1
2%'calc_field': defines fields (velocity, vort, div...) from civ data and calculate them
3%---------------------------------------------------------------------
4% [DataOut,VarAttribute,errormsg]=calc_field_interp(Coord_tps,NbSites,SubRange,FieldVar,Operation,Coord_interp)
5%
6% OUTPUT:
7% DataOut: structure representing the output fields
8%
9% INPUT:
10% Coord_tps:
11% NbSites
12% SubRange
13% FieldVar
14% Operation: cell array representing the list of operations (eg div, rot..)
15% Coord_interp: coordiantes of sites on which the fields need to be calculated
16
17function [VarVal,ListVarName,VarAttribute,errormsg]=calc_field_interp(Coord,Data,Operation,XI,YI)
18
19VarVal=[];
20ListVarName={};
21VarAttribute={};
22errormsg='';
23InputVarList={};
24if ischar(Operation),Operation={Operation};end
25for ilist=1:numel(Operation)
26    r=regexp(Operation{ilist},'(?<Operator>(^vec|^norm))\((?<UName>.+),(?<VName>.+)\)$','names');
27    if isempty(r) % the operation is the variable
28        if isempty(find(strcmp(Operation{ilist},InputVarList)));
29            InputVarList=[InputVarList Operation{ilist}];
30        end
31        Operator{ilist}='';
32    else
33        UName{ilist}=r.UName;
34        VName{ilist}=r.VName;
35        if isempty(find(strcmp(r.UName,InputVarList)));
36            InputVarList=[InputVarList UName{ilist}];
37        end
38        if isempty(find(strcmp(r.VName,InputVarList)));
39            InputVarList=[InputVarList VName{ilist}];
40        end
41        Operator{ilist}=r.Operator;
42    end
43end
44%create interpolator for linear interpolation
45if exist('XI','var')
46    for ilist=1:numel(InputVarList)
47        F.(InputVarList{ilist})=TriScatteredInterp(Coord,Data.(InputVarList{ilist}),'linear');
48    end
49end
50for ilist=1:numel(Operation)
51    nbvar=numel(ListVarName);
52    switch Operator{ilist}
53        case 'vec'
54            if exist('XI','var')
55                VarVal{nbvar+1}=F.(UName{ilist})(XI,YI);
56                VarVal{nbvar+2}=F.(VName{ilist})(XI,YI);
57            else
58                VarVal{nbvar+1}=Data.(UName{ilist});
59                VarVal{nbvar+2}=Data.(VName{ilist});
60            end
61            ListVarName{nbvar+1}=UName{ilist};
62            ListVarName{nbvar+2}=VName{ilist};
63            VarAttribute{nbvar+1}.Role='vector_x';
64            VarAttribute{nbvar+2}.Role='vector_y';
65            %         case 'U'
66            %             VarVal{nbvar+1}=F_u(XI,YI);
67            %             ListVarName{nbvar+1}='U';
68            %             VarAttribute{nbvar+1}.Role='scalar';
69            %         case 'V'
70            %             VarVal{nbvar+1}=F_v(XI,YI);
71            %             ListVarName{nbvar+1}='V';
72            %             VarAttribute{nbvar+1}.Role='scalar';
73        case 'norm'
74            if exist('XI','var')
75                U2=F.(UName{ilist})(XI,YI).*F.(UName{ilist})(XI,YI);
76                V2=F.(VName{ilist})(XI,YI).*F.(VName{ilist})(XI,YI);
77            else
78                U2=Data.(UName{ilist}).*Data.(UName{ilist});
79                V2=Data.(VName{ilist}).*Data.(VName{ilist});
80            end
81            VarVal{nbvar+1}=sqrt(U2+V2);
82            ListVarName{nbvar+1}='norm';
83            VarAttribute{nbvar+1}.Role='scalar';
84        otherwise
85            if ~isempty(Operation{ilist})
86                if exist('XI','var')
87                    VarVal{nbvar+1}=F.(Operation{ilist})(XI,YI);
88                else
89                    VarVal{nbvar+1}= Data.(Operation{ilist});
90                end
91                ListVarName{nbvar+1}=Operation{ilist};
92                VarAttribute{nbvar+1}.Role='scalar';
93            end
94    end
95end
96% put an error flag to indicate NaN data
97if exist('XI','var')
98nbvar=numel(ListVarName);
99ListVarName{nbvar+1}='FF';
100VarVal{nbvar+1}=isnan(VarVal{nbvar});
101VarAttribute{nbvar+1}.Role='errorflag';
102end
103
104% Attr_FF.Role='errorflag';
105% VarAttribute=[VarAttribute {Attr_FF}];
106
107
108
109
110
Note: See TracBrowser for help on using the repository browser.