rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
comsol_stat_detailed_simulation.m
1 function sim_data = comsol_stat_detailed_simulation(model,model_data)
2 %function sim_data = comsol_stat_detailed_simulation(model,model_data)
3 %
4 % function performing a detailed simulation using the comsol_model.
5 % then sets the result to a rbmatlab structure sim_data
6 %
7 % Oliver Zeeb, 01.09.2012
8 
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
12 
13  %activate stationary solver ( if deactivated in COMSOL)
14  comsol_model.sol(model.comsol_tags.sol).feature('s1').active(true);
15 
16  % execute COMSOL Simulation
17  comsol_model.sol(model.comsol_tags.sol).runAll;
18 
19  %get solution from comsol:
20  sim_data.U = mphgetu(comsol_model);
21  sim_data.comsol_model=comsol_model;
22 
23  % compute output
24  if model.compute_output_functional
25  sim_data.s = comsol_model.result().numerical(model.comsol_tags.output).getReal();
26  end;
27 
28 else %do the work by hand --> use only matlab!
29  % 1. get operator matrices --> they are in model data!
30  % 2. get parameter
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!
36 
37  model.comsol_get_eliminated_data = 1;
38  % 1.
39  model.decomp_mode = 1;
40  [A_comp, f_comp] = model.operators(model,model_data);
41 
42  % 2.
43  model.decomp_mode = 2;
44  [A_coeff,f_coeff] = model.operators(model,model_data);
45 
46  % 3.
47  Ac = lincomb_sequence(A_comp, A_coeff);
48  fc = lincomb_sequence(f_comp, f_coeff);
49 
50  % 4.
51  u = Ac\fc;
52 
53  % 5. blow up the solution to the full dimension:
54  sim_data.U = model_data.ind_vectors.Null*u;
55 
56  % 6. add particular solution ud
57  %sim_data.U = sim_data.U + model_data.operators.ud;
58 
59  % 7.
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);
69  end
70 
71 
72 end %of model.use_comsol
73 
74 
75 
76 %add some fields to sim_data
77 sim_data.ind_vectors = model_data.ind_vectors;