Changeset 382 for trunk/src/calc_field.m


Ignore:
Timestamp:
Feb 6, 2012, 11:46:39 PM (12 years ago)
Author:
sommeria
Message:

several bugs corrected
function filter_tps introduced (spline thin shell)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/calc_field.m

    r380 r382  
    2323% file, depending on the scalar
    2424
    25 function [DataOut,errormsg]=calc_field(FieldName,DataIn)
     25function [DataOut,errormsg]=calc_field(FieldName,DataIn,VelType,XI,YI)
    2626
    2727%list of defined scalars to display in menus (in addition to 'ima_cor').
     
    6666   
    6767    %% interpolation with new civ data
    68     if isfield(DataIn,'X_SubRange')
    69         XMax=max(max(DataIn.X_SubRange));
    70         YMax=max(max(DataIn.Y_SubRange));
    71         XMin=min(min(DataIn.X_SubRange));
    72         YMin=min(min(DataIn.Y_SubRange));
    73         Mesh=sqrt((YMax-YMin)*(XMax-XMin)/numel(DataIn.X_tps));%2D
    74         xI=XMin:Mesh:XMax;
    75         yI=YMin:Mesh:YMax;
    76         [XI,YI]=meshgrid(xI,yI);
    77         XI=reshape(XI,[],1);
    78         YI=reshape(YI,[],1);
     68    %if isfield(DataIn,'X_SubRange')
     69    if strcmp(VelType,'filter1')||strcmp(VelType,'filter2')
     70        XMax=max(max(DataIn.SubRange(1,:,:)));
     71        YMax=max(max(DataIn.SubRange(2,:,:)));
     72        XMin=min(min(DataIn.SubRange(1,:,:)));
     73        YMin=min(min(DataIn.SubRange(2,:,:)));
     74        if ~(exist('XI','var')&&exist('YI','var'))
     75            Mesh=sqrt((YMax-YMin)*(XMax-XMin)/numel(DataIn.Coord_tps(:,1,:)));%2D
     76            xI=XMin:Mesh:XMax;
     77            yI=YMin:Mesh:YMax;
     78            [XI,YI]=meshgrid(xI,yI);
     79            XI=reshape(XI,[],1);
     80            YI=reshape(YI,[],1);
     81        end
    7982        DataOut.ListGlobalAttribute=DataIn.ListGlobalAttribute; %reproduce global attribute
    8083        for ilist=1:numel(DataOut.ListGlobalAttribute)
     
    8891        DataOut.U=zeros(size(XI));
    8992        DataOut.V=zeros(size(XI));
    90         DataOut.vort=zeros(size(XI));
    91        
     93        DataOut.vort=zeros(size(XI));       
    9294        DataOut.div=zeros(size(XI));
    9395        nbval=zeros(size(XI));
    94         [NbSubDomain,xx]=size(DataIn.X_SubRange);
     96        NbSubDomain=size(DataIn.SubRange,3);
    9597        for isub=1:NbSubDomain
    96             nbvec_sub=DataIn.NbSites(isub);         
    97                 ind_sel=find(XI>=DataIn.X_SubRange(isub,1) & XI<=DataIn.X_SubRange(isub,2) & YI>=DataIn.Y_SubRange(isub,1) & YI<=DataIn.Y_SubRange(isub,2));
     98            if isfield(DataIn,'NbSites')
     99                nbvec_sub=DataIn.NbSites(isub);
     100            else
     101                nbvec_sub=numel(find(DataIn.Indices_tps(:,isub)));
     102            end
     103                ind_sel=find(XI>=DataIn.SubRange(1,1,isub) & XI<=DataIn.SubRange(1,2,isub) & YI>=DataIn.SubRange(2,1,isub) & YI<=DataIn.SubRange(2,2,isub));
    98104                %rho smoothing parameter
    99105                epoints = [XI(ind_sel) YI(ind_sel)];% coordinates of interpolation sites
    100                 ctrs=[DataIn.X_tps(1:nbvec_sub,isub) DataIn.Y_tps(1:nbvec_sub,isub)];%(=initial points) ctrs
     106                ctrs=DataIn.Coord_tps(1:nbvec_sub,:,isub);%(=initial points) ctrs
    101107                nbval(ind_sel)=nbval(ind_sel)+1;% records the number of values for eacn interpolation point (in case of subdomain overlap)
    102108%                 PM = [ones(size(epoints,1),1) epoints];
Note: See TracChangeset for help on using the changeset viewer.