rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
elliptic_discrete_model.m
Go to the documentation of this file.
1 function local_model = elliptic_discrete_model(model)
2 % function local_model = elliptic_discrete_model(model)
3 % function creating a model with local functions out of a model
4 % with global functions. See detailed description for explanation.
5 %
6 % All volume-data functions can be evaluated in many elements
7 % simultanously by e.g.
8 %
9 % local_model.source(grid,eindices,loc,params)
10 %
11 % where eindices is a n times 1 vector of element-indices and loc
12 % is a local coordinate in the reference triangle. the result is a
13 % n times 1 vector of resulting values of the source.
14 % and boundary-data functions can be evaluated by e.g.
15 %
16 % local_model.dirichlet_values(grid,eindices,face_index,lloc,params)
17 %
18 % where eindices is a n times 1 vector of element-indices and lloc
19 % is a 1d coordinate in [0,1]. the result is a n times 1 vector of
20 % resulting dirichlet-values on the edge given by face_index.
21 %
22 % to avoid conflicts in the "global" model, all data functions can
23 % still be evaluated with (glob,params), where glob are global
24 % coordinates.
25 
26 % Immanuel Maier, 25.03.2011
27 
28 local_model = model;
29 
30 % convert all data functions of model:
31 
32 if model.has_reaction
33  local_model.reaction = @(varargin) ...
34  discrete_volume_values(model.reaction,varargin{:});
35 end;
36 
37 if model.has_advection
38  local_model.velocity = @(varargin) ...
39  discrete_volume_values(model.velocity,varargin{:});
40 end;
41 
42 if model.has_diffusivity
43  local_model.diffusivity_tensor = @(varargin) ...
44  discrete_volume_values(model.diffusivity_tensor,varargin{:});
45 end;
46 
47 if model.has_source
48  local_model.source = @(varargin) ...
49  discrete_volume_values(model.source,varargin{:});
50 end;
51 
52 if model.has_dirichlet_values
53  local_model.dirichlet_values = @(varargin) ...
54  discrete_boundary_values(model.dirichlet_values,varargin{:});
55 end;
56 
57 if model.has_neumann_values
58  local_model.neumann_values = @(varargin) ...
59  discrete_boundary_values(model.neumann_values,varargin{:});
60 end;
61 
62 if model.has_robin_values
63  local_model.robin_alpha = @(varargin) ...
64  discrete_boundary_values(model.robin_alpha,varargin{:});
65  local_model.robin_beta = @(varargin) ...
66  discrete_boundary_values(model.robin_beta,varargin{:});
67  local_model.robin_values = @(varargin) ...
68  discrete_boundary_values(model.robin_values,varargin{:});
69 end
70 
71 end
function res = discrete_boundary_values(val, varargin)
Convert a boundary function with global evaluation to local evaluation.
function local_model = elliptic_discrete_model(model)
function creating a model with local functions out of a model with global functions. See detailed description for explanation.
function res = discrete_volume_values(func, varargin)
Convert a volume function with global evaluation to local evaluation.