Changeset 406 for trunk/src/calc_field.m


Ignore:
Timestamp:
May 3, 2012, 7:30:05 PM (12 years ago)
Author:
sommeria
Message:

bugs corrected in civ_matlab and object projection

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/calc_field.m

    r405 r406  
    9393%% interpolation with new civ data
    9494if isfield(DataIn,'SubRange') && isfield(DataIn,'Coord_tps') && (exist('Coord_interp','var') || check_grid ||check_der)
    95    
    96     DataOut.ListGlobalAttribute=DataIn.ListGlobalAttribute; %reproduce global attribute
     95    %reproduce global attributes
     96    DataOut.ListGlobalAttribute=DataIn.ListGlobalAttribute;
    9797    for ilist=1:numel(DataOut.ListGlobalAttribute)
    9898        DataOut.(DataOut.ListGlobalAttribute{ilist})=DataIn.(DataIn.ListGlobalAttribute{ilist});
    9999    end
    100     DataOut.ListVarName={'coord_y','coord_x','FF'};
    101     DataOut.VarDimName{1}='coord_y';
    102     DataOut.VarDimName{2}='coord_x';
    103     XMax=max(max(DataIn.SubRange(1,:,:)));% extrema of the coordinates
    104     YMax=max(max(DataIn.SubRange(2,:,:)));
    105     XMin=min(min(DataIn.SubRange(1,:,:)));
    106     YMin=min(min(DataIn.SubRange(2,:,:)));
     100
    107101    %create a default grid if needed
    108102    if  ~exist('Coord_interp','var')
     103            XMax=max(max(DataIn.SubRange(1,:,:)));% extrema of the coordinates
     104            YMax=max(max(DataIn.SubRange(2,:,:)));
     105            XMin=min(min(DataIn.SubRange(1,:,:)));
     106            YMin=min(min(DataIn.SubRange(2,:,:)));
    109107        if ~isfield(DataIn,'Mesh')
    110108            DataIn.Mesh=sqrt(2*(XMax-XMin)*(YMax-YMin)/numel(DataIn.Coord_tps));
     
    121119        coord_x=XMin:DataIn.Mesh:XMax;
    122120        coord_y=YMin:DataIn.Mesh:YMax;
     121        npx=length(coord_x);
     122        npy=length(coord_y);
     123        DataOut.coord_x=[XMin XMax];
     124        DataOut.coord_y=[YMin YMax];
    123125        [XI,YI]=meshgrid(coord_x,coord_y);
    124126        XI=reshape(XI,[],1);
     
    126128        Coord_interp=[XI YI];
    127129    end
     130   
     131    %initialise output
    128132    nb_sites=size(Coord_interp,1);
    129133    nb_coord=size(Coord_interp,2);
    130     %initialise output
     134    nbval=zeros(nb_sites,1);
     135    NbSubDomain=size(DataIn.SubRange,3);
     136    DataOut.ListVarName={'coord_y','coord_x'};
     137    DataOut.VarDimName={{'coord_y'},{'coord_x'}};
     138    DataOut.VarAttribute{1}=[];
     139    DataOut.VarAttribute{2}=[];
    131140    for ilist=1:length(FieldList)
    132141        switch FieldList{ilist}
     
    135144                DataOut.V=zeros(nb_sites,1);
    136145            otherwise
    137                 %          case{'vort','div','strain'}% case of spatial derivatives
    138146                DataOut.(FieldList{ilist})=zeros(nb_sites,1);
    139                 %                 otherwise % case of a scalar
    140                 %                     check_val=1;
    141                 %                     DataOut.(FieldList{ilist})=zeros(size(Coord_interp,1));
    142         end
    143     end
    144     nbval=zeros(nb_sites,1);
    145     NbSubDomain=size(DataIn.SubRange,3);
    146     %DataIn.Coord_tps=DataIn.Coord_tps(1:end-3,:,:);% suppress the 3 zeros used to fit with the dimensions of variables
     147        end
     148    end
     149   
     150    % interpolate data in each subdomain
    147151    for isub=1:NbSubDomain
    148152        nbvec_sub=DataIn.NbSites(isub);
     
    159163            [EMDX,EMDY] = tps_eval_dxy(Coord_interp(ind_sel,:),DataIn.Coord_tps(1:nbvec_sub,:,isub));%kernels for calculating the spatial derivatives from tps 'sources'
    160164        end
     165        var_count=0;
    161166        for ilist=1:length(FieldList)
    162167            switch FieldList{ilist}
    163168                case 'velocity'
    164169                    ListFields={'U', 'V'};
    165                     VarAttributes{1}.Role='vector_x';
    166                     VarAttributes{2}.Role='vector_y';
     170                    VarAttributes{var_count+1}.Role='vector_x';
     171                    VarAttributes{var_count+2}.Role='vector_y';
    167172                    DataOut.U(ind_sel)=DataOut.U(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub);
    168173                    DataOut.V(ind_sel)=DataOut.V(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub);
    169174                case 'u'
    170                     ListFields={'U'};
    171                     VarAttributes{1}.Role='scalar';
    172                     DataOut.U(ind_sel)=DataOut.U(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub);
     175                    ListFields={'u'};
     176                    VarAttributes{var_count+1}.Role='scalar';
     177                    DataOut.u(ind_sel)=DataOut.u(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub);
    173178                case 'v'
    174                     ListFields={'V'};
    175                     VarAttributes{1}.Role='scalar';
    176                     DataOut.V(ind_sel)=DataOut.V(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub);
     179                    ListFields={'v'};
     180                    VarAttributes{var_count+1}.Role='scalar';
     181                    DataOut.v(ind_sel)=DataOut.v(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub);
    177182                case 'norm_vel'
    178183                    ListFields={'norm_vel'};
    179                     VarAttributes{1}.Role='scalar';
     184                    VarAttributes{var_count+1}.Role='scalar';
    180185                    V=DataOut.U(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub);
    181186                    V=DataOut.V(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub);
     
    183188                case 'vort'
    184189                    ListFields={'vort'};
    185                     VarAttributes{1}.Role='scalar';
     190                    VarAttributes{var_count+1}.Role='scalar';
    186191                    DataOut.vort(ind_sel)=DataOut.vort(ind_sel)+EMDY *DataIn.U_tps(1:nbvec_sub+3,isub)-EMDX *DataIn.V_tps(1:nbvec_sub+3,isub);
    187192                case 'div'
    188193                    ListFields={'div'};
    189                     VarAttributes{1}.Role='scalar';
     194                    VarAttributes{var_count+1}.Role='scalar';
    190195                    DataOut.div(ind_sel)=DataOut.div(ind_sel)+EMDX*DataIn.U_tps(1:nbvec_sub+3,isub)+EMDY *DataIn.V_tps(1:nbvec_sub+3,isub);
    191196                case 'strain'
    192197                    ListFields={'strain'};
    193                     VarAttributes{1}.Role='scalar';
     198                    VarAttributes{var_count+1}.Role='scalar';
    194199                    DataOut.strain(ind_sel)=DataOut.strain(ind_sel)+EMDY*DataIn.U_tps(1:nbvec_sub+3,isub)+EMDX *DataIn.V_tps(1:nbvec_sub+3,isub);
    195200            end
    196         end
    197         DataOut.FF=nbval==0; %put errorflag to 1 for points outside the interpolation rang
    198         nbval(nbval==0)=1;
    199         DataOut.ListVarName=[DataOut.ListVarName ListFields];
    200         for ilist=3:numel(DataOut.ListVarName)
    201             DataOut.VarDimName{ilist}={'coord_y','coord_x'};
    202         end
    203         DataOut.VarAttribute={[],[]};
    204         DataOut.VarAttribute{3}.Role='errorflag';
    205         DataOut.VarAttribute=[DataOut.VarAttribute VarAttributes];
     201            DataOut.FF=nbval==0; %put errorflag to 1 for points outside the interpolation rang
     202            nbval(nbval==0)=1;
     203            DataOut.ListVarName=[DataOut.ListVarName ListFields {'FF'}];
     204            for ilist=1:numel(ListFields)
     205                VarDimName{ilist}={'coord_y','coord_x'};
     206                DataOut.(ListFields{ilist})=reshape(DataOut.(ListFields{ilist}),npy,npx);
     207            end
     208            DataOut.FF=reshape(DataOut.FF,npy,npx);
     209            DataOut.VarDimName=[DataOut.VarDimName VarDimName {{'coord_y','coord_x'}}] ;
     210            VarAttributes{length(ListFields)+1}.Role='errorflag';
     211            DataOut.VarAttribute=[DataOut.VarAttribute VarAttributes];
     212        end
    206213    end
    207214else
Note: See TracChangeset for help on using the changeset viewer.