Changeset 12605


Ignore:
Timestamp:
07/03/12 13:44:06 (13 years ago)
Author:
seroussi
Message:

added possibility to average on 1 layer for 3d meshes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/model/averaging.m

    r9734 r12605  
    1 function average=averaging(md,data,iterations)
     1function average=averaging(md,data,iterations,varargin)
    22%AVERAGING - smooths the input over the mesh
    33%
     
    88%   by taking the average of the element around a node weighted by the
    99%   elements volume
     10%   For 3d mesh, a last argument can be added to specify the layer to be averaged on.
    1011%
    1112%   Usage:
    1213%      smoothdata=averaging(md,data,iterations)
     14%      smoothdata=averaging(md,data,iterations,layer)
    1315%
    1416%   Examples:
    1517%      velsmoothed=averaging(md,md.initialization.vel,4);
    1618%      pressure=averaging(md,md.initialization.pressure,0);
     19%      temperature=averaging(md,md.initialization.temperature,1,1);
    1720
    18 if length(data)~=md.mesh.numberofelements & length(data)~=md.mesh.numberofvertices
     21if ((nargin~=4) & (nargin~=3)),
     22        error('averaging error message');
     23end
     24if (length(data)~=md.mesh.numberofelements & length(data)~=md.mesh.numberofvertices),
    1925        error('averaging error message: data not supported yet');
     26end
     27if md.mesh.dimension==3 & nargin==4,
     28        if varargin{1}<=0 | varargin{1}>md.mesh.numberoflayers,
     29                error('layer should be between 1 and md.mesh.numberoflayers');
     30        end
     31        layer=varargin{1};
     32else
     33        layer=0;
    2034end
    2135
    2236%initialization
    23 weights=zeros(md.mesh.numberofvertices,1);
    24 data=data(:);
     37if layer==0,
     38        weights=zeros(md.mesh.numberofvertices,1);
     39        data=data(:);
     40else
     41        weights=zeros(md.mesh.numberofvertices2d,1);
     42        data=data((layer-1)*md.mesh.numberofvertices2d+1:layer*md.mesh.numberofvertices2d,:);
     43end
    2544
    26 %load some variables (it is much faster if the variab;es are loaded from md once for all)
    27 index=md.mesh.elements;
    28 numberofnodes=md.mesh.numberofvertices;
    29 numberofelements=md.mesh.numberofelements;
     45%load some variables (it is much faster if the variabes are loaded from md once for all)
     46if layer==0,
     47        index=md.mesh.elements;
     48        numberofnodes=md.mesh.numberofvertices;
     49        numberofelements=md.mesh.numberofelements;
     50else
     51        index=md.mesh.elements2d;
     52        numberofnodes=md.mesh.numberofvertices2d;
     53        numberofelements=md.mesh.numberofelements2d;
     54end
    3055
    3156%build some variables
    3257line=index(:);
    33 if md.mesh.dimension==3
     58if md.mesh.dimension==3 & layer==0,
    3459        rep=6;
    3560        areas=GetAreas(index,md.mesh.x,md.mesh.y,md.mesh.z);
     61elseif md.mesh.dimension==2,
     62        rep=3;
     63        areas=GetAreas(index,md.mesh.x,md.mesh.y);
    3664else
    3765        rep=3;
    38         areas=GetAreas(index,md.mesh.x,md.mesh.y);
     66        areas=GetAreas(index,md.mesh.x2d,md.mesh.y2d);
    3967end
    4068summation=1/rep*ones(rep,1);
Note: See TracChangeset for help on using the changeset viewer.