1 function model_data = comsol_stat_gen_model_data(model)
2 %
function model_data = comsol_stat_gen_model_data(model)
4 % Function which extracts the model data from the comsol_model
7 % - operators needed
for the detailed solution
10 % Oliver Zeeb, 04.06.13
12 if model.use_comsol %let comsol
do all the work!
14 comsol_model=mphload([model.comsol_model_name
'.mph']);
15 comsol_model = comsol_set_mu_from_rbmatlab_model(model,comsol_model);
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);
25 %set comsol_model_tags to comsol_data
26 model_data.comsol_tags = model.comsol_tags;
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);
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!
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);
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);
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);
61 else %
do the work by hand --> use only matlab! --> load model data from file
62 load([model.comsol_model_name
' '_model_data
']);