Changeset 12605
- Timestamp:
- 07/03/12 13:44:06 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/model/averaging.m
r9734 r12605 1 function average=averaging(md,data,iterations )1 function average=averaging(md,data,iterations,varargin) 2 2 %AVERAGING - smooths the input over the mesh 3 3 % … … 8 8 % by taking the average of the element around a node weighted by the 9 9 % elements volume 10 % For 3d mesh, a last argument can be added to specify the layer to be averaged on. 10 11 % 11 12 % Usage: 12 13 % smoothdata=averaging(md,data,iterations) 14 % smoothdata=averaging(md,data,iterations,layer) 13 15 % 14 16 % Examples: 15 17 % velsmoothed=averaging(md,md.initialization.vel,4); 16 18 % pressure=averaging(md,md.initialization.pressure,0); 19 % temperature=averaging(md,md.initialization.temperature,1,1); 17 20 18 if length(data)~=md.mesh.numberofelements & length(data)~=md.mesh.numberofvertices 21 if ((nargin~=4) & (nargin~=3)), 22 error('averaging error message'); 23 end 24 if (length(data)~=md.mesh.numberofelements & length(data)~=md.mesh.numberofvertices), 19 25 error('averaging error message: data not supported yet'); 26 end 27 if 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}; 32 else 33 layer=0; 20 34 end 21 35 22 36 %initialization 23 weights=zeros(md.mesh.numberofvertices,1); 24 data=data(:); 37 if layer==0, 38 weights=zeros(md.mesh.numberofvertices,1); 39 data=data(:); 40 else 41 weights=zeros(md.mesh.numberofvertices2d,1); 42 data=data((layer-1)*md.mesh.numberofvertices2d+1:layer*md.mesh.numberofvertices2d,:); 43 end 25 44 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) 46 if layer==0, 47 index=md.mesh.elements; 48 numberofnodes=md.mesh.numberofvertices; 49 numberofelements=md.mesh.numberofelements; 50 else 51 index=md.mesh.elements2d; 52 numberofnodes=md.mesh.numberofvertices2d; 53 numberofelements=md.mesh.numberofelements2d; 54 end 30 55 31 56 %build some variables 32 57 line=index(:); 33 if md.mesh.dimension==3 58 if md.mesh.dimension==3 & layer==0, 34 59 rep=6; 35 60 areas=GetAreas(index,md.mesh.x,md.mesh.y,md.mesh.z); 61 elseif md.mesh.dimension==2, 62 rep=3; 63 areas=GetAreas(index,md.mesh.x,md.mesh.y); 36 64 else 37 65 rep=3; 38 areas=GetAreas(index,md.mesh.x ,md.mesh.y);66 areas=GetAreas(index,md.mesh.x2d,md.mesh.y2d); 39 67 end 40 68 summation=1/rep*ones(rep,1);
Note:
See TracChangeset
for help on using the changeset viewer.