3 % Initializes a
default linear and stationary model
for more
generic
4 % fem discretization by modifying model generated by
5 % lin_stat_model_default.
12 model = lin_stat_model_default;
16 model.df_type =
'lagrangian';
20 model.gen_model_data = @stokes_gen_model_data;
23 model.get_inner_product_matrix = ...
24 @(detailed_data) detailed_data.df_info.h10_inner_product_matrix;
25 model.gen_reduced_data = @stokes_gen_reduced_data;
26 model.reduced_data_subset = @stokes_reduced_data_subset;
27 model.set_rb_in_detailed_data = @gfem_model_set_rb; % see below
28 model.rb_simulation = @stokes_rb_simulation;
29 model.rb_reconstruction = @stokes_rb_reconstruction;
32 model.orthonormalize = @
VecMat.gram_schmidt_reiterate;
33 model.disable_caching = 1;
37 model.has_nonlinearity = 0;
39 % collect volume integral kernels
42 if model.has_diffusivity
45 if model.has_advection
52 model.has_volume_integral_matrix = ~isempty(mvik);
53 if model.has_volume_integral_matrix
54 model.matrix_volume_int_kernel = mvik;
58 model.has_volume_integral_rhs = model.has_source;
59 if model.has_volume_integral_rhs
63 % collect boundary integral kernels
66 if model.has_advection && model.has_neumann_values
69 if model.has_robin_values
73 model.has_boundary_integral_matrix = ~isempty(mbik);
74 if model.has_boundary_integral_matrix
75 model.matrix_boundary_int_kernel = mbik;
80 if model.has_neumann_values
83 if model.has_robin_values
87 model.has_boundary_integral_rhs = ~isempty(rbik);
88 if model.has_boundary_integral_rhs
89 model.rhs_boundary_int_kernel = rbik;
92 % collect coefficient functions
93 old_decomp_mode = model.decomp_mode;
94 model.decomp_mode = 2;
97 if model.has_volume_integral_matrix
100 if model.has_diffusivity
101 mvc = [mvc, {@(params)model.diffusivity_tensor([], [], [], ...
104 if model.has_advection
105 mvc = [mvc, {@(params)model.velocity([], [], [], params)}];
107 if model.has_reaction
108 mvc = [mvc, {@(params)model.reaction([], [], [], params)}];
111 model.matrix_volume_coeffs = mvc;
114 if model.has_boundary_integral_matrix
117 if model.has_advection && model.has_neumann_values
120 if model.has_robin_values
121 if model.has_advection
122 mbc = [mbc, {@(params)[1; model.velocity([], [], [], ...
125 mbc = [mbc, {@(params)1}];
129 model.matrix_boundary_coeffs = mbc;
133 if model.has_volume_integral_rhs
134 model.rhs_volume_coeffs = {@(params)model.source([], [], [], ...
138 if model.has_boundary_integral_rhs
141 if model.has_neumann_values
142 rbc = [rbc, {@(params)model.neumann_values([], [], [], [], ...
145 if model.has_robin_values
146 rbc = [rbc, {@(params)model.robin_values([], [], [], [], ...
150 model.rhs_boundary_coeffs = rbc;
153 model.decomp_mode = old_decomp_mode;
157 %% auxiliary
function
158 function detailed_data = gfem_model_set_rb(detailed_data, RB)
159 %
this function subtracts dirichlet condition from basis functions
162 RB(detailed_data.bc_info.dirichlet_gids, :) = 0;
165 detailed_data.RB = RB;
function model = generic_fem_model_adapter(model)
Initializes a default linear and stationary model for more generic fem discretization by modifying mo...
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 sim_data = stokes_detailed_simulation(model, model_data)
Performs a detailed simulation of a (Navier-)stokes problem.