rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
get_volume.m
1 function vols = get_volume(grid,gids)
2 % function vols = get_volume(grid,gids)
3 % method determining the volumes of a set of elements
4 %
5 % A simple product of edge-lengths is computed, i.e. the edges are assumed to
6 % be axis-parallel.
7 %
8 % Parameters:
9 % gids: Global indices
10 %
11 % Return values:
12 % vols: The volumes for the elements given by 'gids'.
13 %
14 % @note The computation for multiple gids is trivially performed by a loop.
15 % Vectorization must be done sometime!!
16 
17 % Bernard Haasdonk 27.3.2007
18 
19  vols = ones(size(gids));
20  dim = grid.dimension;
21 
22  % determine edge indices, which are to be used:
23  % 0D: eid(0) = [] of ne(0) = 0 edges
24  % 1D. eid = [1] of ne(1) = 1 edges
25  % 2D. eid = [1, 3] of ne(2) = 4 edges
26  % 3D. eid = [1, 3, 9] of ne(3) = 12 edges
27  % ND: eid(N) = [eid(N-1), 2* ne(N-1)+1] of ne(N) = 2*ne(N-1) + 2^(N-1) edges
28 
29  eid = [];
30  ne = 0;
31  for i = 1:dim
32  eid = [eid, 2*ne+1];
33  ne = 2* ne + 2^(i-1);
34  end;
35 
36  for gid = 1:length(gids);
37  [p0,p1] = get_edges(grid,gids(gid));
38  diff = p0(:,eid)-p1(:,eid);
39  len = sqrt(sum(diff.^2));
40  vols(gid) = prod(len);
41  end;
42 end
43