Ignore:
Timestamp:
Aug 27, 2013, 11:25:21 PM (11 years ago)
Author:
sommeria
Message:

various bugs corrected

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/calc_field_tps.m

    r651 r675  
    66% OUTPUT:
    77% DataOut: structure representing the output fields
     8% VarAttribute: cell array of structures coontaining the variable attributes
     9% errormsg: error msg , = '' by default
    810%
    911% INPUT:
     
    1416% NbCentre: nbre of tps centres for each subdomain, of dimension nb_subdomain
    1517% SubRange: coordinate range for each subdomain, of dimensions [nb_coord,2,nb_subdomain]
    16 % FieldVar: cell array of list of variables needed to calculate the requested fields
     18% FieldVar: array representing the input fields as tps weights with dimension (nbvec_sub+3,NbSubDomain,nb_dim)
     19%              nbvec_sub= max nbre of vectors in a subdomain 
     20%             NbSubDomain =nbre of subdomains
     21%             nb_dim: nbre of dimensions for vector components (x-> 1, y->2)
    1722% FieldName: cell array representing the list of operations (eg div(U,V), rot(U,V))
    1823% Coord_interp: coordinates of sites on which the fields need to be calculated of dimensions
     
    4954check_grid=0;
    5055check_der=0;
     56check_vec=0;
     57check_remove=false(size(FieldName));
     58VarAttribute={};
    5159for ilist=1:length(FieldName)
    52     FieldNameType=regexprep(FieldName{ilist},'(.+','');
     60    FieldNameType=regexprep(FieldName{ilist},'(.+','');% detect the char string before the parenthesis
     61    VarAttributeNew={};
    5362    switch FieldNameType
    5463        case 'vec'
     
    5665            DataOut.U=zeros(nb_sites,1);
    5766            DataOut.V=zeros(nb_sites,1);
    58             VarAttribute{1}.Role='vector_x';
    59             VarAttribute{2}.Role='vector_y';
    60         case {'U','V','norm'}
     67            VarAttributeNew{1}.Role='vector_x';
     68            VarAttributeNew{2}.Role='vector_y';
     69            check_vec=1;
     70        case {'U','V'}
     71            if check_vec% no new data needed
     72                check_remove(ilist)=1;
     73            else
    6174            check_grid=1;
    6275            DataOut.(FieldNameType)=zeros(nb_sites,1);
    63             VarAttribute{1}.Role='scalar';
     76            VarAttributeNew{1}.Role='scalar';
     77            end
     78        case 'norm'
     79            check_grid=1;
     80            DataOut.(FieldNameType)=zeros(nb_sites,1);
     81            VarAttributeNew{1}.Role='scalar';
    6482        case {'curl','div','strain'}
    6583            check_der=1;
    6684            DataOut.(FieldNameType)=zeros(nb_sites,1);
    67             VarAttribute{1}.Role='scalar';
     85            VarAttributeNew{1}.Role='scalar';
    6886    end
     87    VarAttribute=[VarAttribute VarAttributeNew];
    6988end
    7089Attr_FF.Role='errorflag';
    7190VarAttribute=[VarAttribute {Attr_FF}];
     91FieldName(check_remove)=[];
    7292
    7393%% loop on subdomains
     
    83103        [EMDX,EMDY] = tps_eval_dxy(Coord_interp(ind_sel,:),Coord_tps(1:nbvec_sub,:,isub));%kernels for calculating the spatial derivatives from tps 'sources'
    84104    end
    85     ListVar={};
     105%     ListVar={};
    86106    for ilist=1:length(FieldName)
    87         var_count=numel(ListVar);
     107%         var_count=numel(ListVar);
    88108        switch FieldName{ilist}
    89109            case 'vec(U,V)'
    90                 ListVar=[ListVar {'U', 'V'}];
    91                 VarAttribute{var_count+1}.Role='vector_x';
    92                 VarAttribute{var_count+2}.Role='vector_y';
     110%                 ListVar=[ListVar {'U', 'V'}];
     111%                 VarAttribute{var_count+1}.Role='vector_x';
     112%                 VarAttribute{var_count+2}.Role='vector_y';
    93113                DataOut.U(ind_sel)=DataOut.U(ind_sel)+EM *FieldVar(1:nbvec_sub+3,isub,1);
    94114                DataOut.V(ind_sel)=DataOut.V(ind_sel)+EM *FieldVar(1:nbvec_sub+3,isub,2);
    95115            case 'U'
    96                 ListVar=[ListVar {'U'}];
    97                 VarAttribute{var_count+1}.Role='scalar';
     116%                 ListVar=[ListVar {'U'}];
     117%                 VarAttribute{var_count+1}.Role='scalar';
    98118                DataOut.U(ind_sel)=DataOut.U(ind_sel)+EM *FieldVar(1:nbvec_sub+3,isub,1);
    99119            case 'V'
    100                 ListVar=[ListVar {'V'}];
    101                 VarAttribute{var_count+1}.Role='scalar';
     120%                 ListVar=[ListVar {'V'}];
     121%                 VarAttribute{var_count+1}.Role='scalar';
    102122                DataOut.V(ind_sel)=DataOut.V(ind_sel)+EM *FieldVar(1:nbvec_sub+3,isub,2);
    103123            case 'norm(U,V)'
    104                 ListVar=[ListVar {'norm'}];
    105                 VarAttribute{var_count+1}.Role='scalar';
     124%                 ListVar=[ListVar {'norm'}];
     125%                 VarAttribute{var_count+1}.Role='scalar';
    106126                U=DataOut.U(ind_sel)+EM *FieldVar(1:nbvec_sub+3,isub,1);
    107127                V=DataOut.V(ind_sel)+EM *FieldVar(1:nbvec_sub+3,isub,2);
    108128                DataOut.norm(ind_sel)=sqrt(U.*U+V.*V);
    109129            case 'curl(U,V)'
    110                 ListVar=[ListVar {'curl'}];
    111                 VarAttribute{var_count+1}.Role='scalar';
     130%                 ListVar=[ListVar {'curl'}];
     131%                 VarAttribute{var_count+1}.Role='scalar';
    112132                DataOut.curl(ind_sel)=DataOut.curl(ind_sel)-EMDY *FieldVar(1:nbvec_sub+3,isub,1)+EMDX *FieldVar(1:nbvec_sub+3,isub,2);
    113133            case 'div(U,V)'
    114                 ListVar=[ListVar {'div'}];
    115                 VarAttribute{var_count+1}.Role='scalar';
     134%                 ListVar=[ListVar {'div'}];
     135%                 VarAttribute{var_count+1}.Role='scalar';
    116136                DataOut.div(ind_sel)=DataOut.div(ind_sel)+EMDX*FieldVar(1:nbvec_sub+3,isub,1)+EMDY *FieldVar(1:nbvec_sub+3,isub,2);
    117137            case 'strain(U,V)'
    118                 ListVar=[ListVar {'strain'}];
    119                 VarAttribute{var_count+1}.Role='scalar';
     138%                 ListVar=[ListVar {'strain'}];
     139%                 VarAttribute{var_count+1}.Role='scalar';
    120140                DataOut.strain(ind_sel)=DataOut.strain(ind_sel)+EMDY*FieldVar(1:nbvec_sub+3,isub,1)+EMDX *FieldVar(1:nbvec_sub+3,isub,2);
    121141        end
Note: See TracChangeset for help on using the changeset viewer.