rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
comsol_stat_gen_model_data.m
1 function model_data = comsol_stat_gen_model_data(model)
2 %function model_data = comsol_stat_gen_model_data(model)
3 %
4 % Function which extracts the model data from the comsol_model
5 % - comsol_model
6 % - the grid
7 % - operators needed for the detailed solution
8 % - Index Vectors
9 %
10 % Oliver Zeeb, 04.06.13
11 
12 if model.use_comsol %let comsol do all the work!
13  %load comsol_model
14  comsol_model=mphload([model.comsol_model_name '.mph']);
15  comsol_model = comsol_set_mu_from_rbmatlab_model(model,comsol_model);
16 
17 
18  % set comsol_model and grid_info in the model_data
19  model_data.comsol_model = comsol_model;
20  model_data.comsol_model.sol('sol1').feature('s1').active(false);
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 
25  %set comsol_model_tags to comsol_data
26  model_data.comsol_tags = model.comsol_tags;
27 
28  % inner product matrices:
29  model_data.comsol_model.sol('sol1').feature('s1').active(false);
30  model_data.inner_product_matrices = comsol_calculate_inner_product_matrices(model,model_data);
31 
32  %compute index vectors
33  model_data.comsol_model.sol('sol1').feature('s1').active(false);
34  str = mphmatrix(comsol_model,'sol1','Out',{'Null','ud'},'initmethod','init', 'initsol', 'zero');
35  model_data.ind_vectors.Null = str.Null;
36  model_data.operators.ud = str.ud;
37  model_data.ind_vectors.com_DBC_ind = find(sum(str.Null,2)==0);
38  model_data.ind_vectors.com_DOF_ind = find(sum(str.Null,2)~=0);
39  model_data.ind_vectors.com_DBC_value = str.ud(model_data.ind_vectors.com_DBC_ind); %ud: particular solution --> DBC_values!
40 
41  % compute and save operators
42  model.decomp_mode = 1;
43  [A_comp_full, f_comp_full] = model.operators(model,model_data);
44  model_data.operators.A_comp_full = A_comp_full;
45  model_data.operators.f_comp_full = f_comp_full;
46  for k=1:length(A_comp_full)
47  model_data.operators.A_comp_eliminated{k} = A_comp_full{k}(model_data.ind_vectors.com_DOF_ind,model_data.ind_vectors.com_DOF_ind);
48  end
49  for k=1:length(f_comp_full)
50  model_data.operators.f_comp_eliminated{k} = f_comp_full{k}(model_data.ind_vectors.com_DOF_ind);
51  end
52 
53  if model.compute_output_functional
54  model_data.operators.output_comp_full = model.operators_output(model,model_data);
55  model_data.operators.output_comp_eliminated = model_data.operators.output_comp_full;
56  for k=1:length(model_data.operators.output_comp_eliminated) %eliminated version: cut the full operators
57  model_data.operators.output_comp_eliminated{k} = model_data.operators.output_comp_eliminated{k}(model_data.ind_vectors.com_DOF_ind);
58  end
59  end
60 
61 else %do the work by hand --> use only matlab! --> load model data from file
62  load([model.comsol_model_name' '_model_data']);
63 
64 end
65