rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
comsol_evol_gen_model_data.m
1 function model_data = comsol_evol_gen_model_data(model)
2 %function model_data = comsol_stat_gen_model_data(model)
3 %
4 % This function which extracts and computes the model_data from the comsol_model
5 % - comsol_model
6 % - the grid
7 % - the operators needed for detailed_simulation
8 % - inner-product matrices
9 % - Index Vectors
10 %
11 % Oliver Zeeb, 04.06.13
12 
13 if model.use_comsol %let comsol do all the work!
14  comsol_model = mphload(model.comsol_model_name);
15  comsol_model = comsol_set_mu_from_rbmatlab_model(model,comsol_model);
16 
17  %disable scaling so that alle the extracted matrices can be combined.
18  comsol_model.sol(model.comsol_tags.sol).feature('v1').set('scalemethod', 'none');
19 
20  model_data.comsol_model = comsol_model;
21  comsol_model.mesh(model.comsol_tags.mesh).run;
22  comsol_model.sol(model.comsol_tags.sol).runAll;
23  model_data.grid_info = mphxmeshinfo(comsol_model);%,'solname', model.comsol_tags.sol);
24  model_data.operators.init_values = mphgetu(comsol_model,'solnum',1);
25  model_data.comsol_tags = model.comsol_tags;
26 
27  %extract the operators from COMSOL and store them in model_data
28  model.decomp_mode = 1;
29  [L_I_comp, L_E_comp, b_comp] = model.operators_ptr(model,model_data);
30  model_data.operators.L_I_comp = L_I_comp;
31  model_data.operators.L_E_comp = L_E_comp;
32  model_data.operators.b_comp = b_comp;
33  if model.compute_output_functional
34  [v, s_l2norm] = model.operators_output(model, model_data);
35  model_data.operators.operators_output = v;
36  model_data.operators.output_operator_l2norm = s_l2norm;
37  end
38 
39  %compute index vectors
40  str = mphmatrix(comsol_model,'sol1','Out',{'Null'},'initmethod','init','initsol','zero');
41  model_data.ind_vectors.Null = str.Null;
42  model_data.ind_vectors.com_DBC_ind = find(sum(str.Null,2)==0);
43  model_data.ind_vectors.com_DOF_ind = find(sum(str.Null,2)~=0);
44 
45  % inner product matrices:
46  model_data.inner_product_matrices = comsol_calculate_inner_product_matrices(model,model_data);
47 
48 
49 
50 else %do the work by hand --> use only matlab! --> load model data from file
51  load([model.comsol_model_name' '_model_data']);
52 
53 end
54