1 function sim_data = comsol_stat_detailed_simulation(model,model_data)
2 %
function sim_data = comsol_stat_detailed_simulation(model,model_data)
4 %
function performing a detailed simulation
using the comsol_model.
5 % then sets the result to a rbmatlab structure sim_data
7 % Oliver Zeeb, 01.09.2012
9 if model.use_comsol %let comsol
do all the work!
10 comsol_model = model_data.comsol_model;
11 comsol_model = comsol_set_mu_from_rbmatlab_model(model,comsol_model); %set the mu in the comsol model
13 %activate stationary solver (
if deactivated in COMSOL)
14 comsol_model.sol(model.comsol_tags.sol).feature(
's1').active(
true);
16 % execute COMSOL Simulation
17 comsol_model.sol(model.comsol_tags.sol).runAll;
19 %
get solution from comsol:
20 sim_data.U = mphgetu(comsol_model);
21 sim_data.comsol_model=comsol_model;
24 if model.compute_output_functional
25 sim_data.s = comsol_model.result().numerical(model.comsol_tags.output).getReal();
28 else %
do the work by hand --> use only matlab!
29 % 1.
get operator matrices --> they are in model data!
31 % 3. linear combination of 1. and 2
32 % 4. Solve the linear system
33 % 5. blow up the solution vector
34 % (6. add particular solution ud)
35 % 7. compute output functional with the full solution!
37 model.comsol_get_eliminated_data = 1;
39 model.decomp_mode = 1;
40 [A_comp, f_comp] = model.operators(model,model_data);
43 model.decomp_mode = 2;
44 [A_coeff,f_coeff] = model.operators(model,model_data);
47 Ac = lincomb_sequence(A_comp, A_coeff);
48 fc = lincomb_sequence(f_comp, f_coeff);
53 % 5. blow up the solution to the full dimension:
54 sim_data.U = model_data.ind_vectors.Null*u;
56 % 6. add particular solution ud
57 %sim_data.U = sim_data.U + model_data.operators.ud;
60 if model.compute_output_functional
61 model.comsol_get_eliminated_data = 0;
62 model.decomp_mode = 1;
63 output_comp = model.operators_output(model,model_data);
64 model.decomp_mode = 2;
65 output_coeff = model.operators_output(model,model_data);
66 output_operator = lincomb_sequence(output_comp, output_coeff);
67 sim_data.s = output_operator
' * sim_data.U;
68 sim_data.s_with_ud = output_operator' * (sim_data.U + model_data.operators.ud);
72 end %of model.use_comsol
76 %add some fields to sim_data
77 sim_data.ind_vectors = model_data.ind_vectors;