rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
comsol_ThermalBlock3D_operators.m
1 function [A, r] = comsol_ThermalBlock3D_operators(model,model_data)
2 %function [A, r] = comsol_ThermalBlock3D_operators(model,model_data)
3 %
4 % function returns the operators of the comsol thermal block model with
5 % affine decomposition!
6 %
7 % Oliver Zeeb, 25.08.2012
8 
9 if model.use_comsol
10  switch model.decomp_mode
11  %%%%%%%%%%%%%%%%
12  case 0 % full matrices!
13  warning('decomp_mode 0 NOCH TESTEN!!!');
14  keyboard;
15 
16  cmodel = model_data.comsol_model;
17  cmodel.sol('sol1').feature('v1').set('scalemethod','none');
18  cmodel.sol('sol1').feature('s1').active(false);
19 
20  str = mphmatrix(cmodel,'sol1','Out',{'K','L'});
21  A = str.K;
22  r = str.L;
23  cmodel.sol('sol1').feature('v1').set('scalemethod','auto');
24  cmodel.sol('sol1').feature('s1').active(true);
25  if model.comsol_get_eliminated_data
26  A = A(model_data.ind_vectors.com_DOF_ind,model_data.ind_vectors.com_DOF_ind);
27  r = r(model_data.ind_vectors.com_DOF_ind);
28  end
29 
30  %%%%%%%%%%%%%%%%
31  case 1 % components
32  mu_old = get_mu(model);
33  cmodel = model_data.comsol_model;
34  cmodel.sol('sol1').feature('v1').set('scalemethod','none');
35  cmodel.sol('sol1').feature('s1').active(false);
36  A=cell(1,length(mu_old));
37  for k = 1:length(mu_old)
38  mu = zeros(length(mu_old),1);
39  mu(k) = 1;
40  model = set_mu(model,mu);
41  cmodel = comsol_set_mu_from_rbmatlab_model(model,cmodel);
42  cmodel.sol('sol1').feature('s1').active(false);
43  str = mphmatrix(cmodel,'sol1','Out',{'K','L'},'initmethod','init', 'initsol', 'zero');
44  A{k} = str.K;
45  if k==1
46  r{k} = str.L;
47  end
48  end
49  if model.comsol_get_eliminated_data %cut the matrices --> return eliminated matrices!
50  for k=1:length(A)
51  A{k} = A{k}(model_data.ind_vectors.com_DOF_ind,model_data.ind_vectors.com_DOF_ind);
52  end
53  for k=1:length(r)
54  r{k} = r{k}(model_data.ind_vectors.com_DOF_ind);
55  end
56  end
57 
58  model=set_mu(model,mu_old);
59  cmodel = comsol_set_mu_from_rbmatlab_model(model,cmodel);
60  cmodel.sol('sol1').feature('v1').set('scalemethod','auto');
61  cmodel.sol('sol1').feature('s1').active(true);
62 
63  %%%%%%%%%%%%%%%%
64  case 2 %coefficients
65  A = get_mu(model);
66  r = 1;
67  otherwise
68  error('unknown decomp_mode')
69  end
70 
71 else % use only matlab, i.e. saved matrices!
72  switch model.decomp_mode
73  case 0
74  warning('decomp_mode 0 not yet implemented (because unneeded!!!)')
75  keyboard
76  case 1
77  if model.comsol_get_eliminated_data %return eliminated data
78  A = model_data.operators.A_comp_eliminated;
79  r = model_data.operators.f_comp_eliminated;
80  else %return full data
81  A = model_data.operators.A_comp_full;
82  r = model_data.operators.f_comp_full;
83  end
84  case 2
85  A = get_mu(model);
86  r = 1;
87  otherwise
88  error('unknown decomp_mode')
89  end
90 end