0001 function img_bkgnd = calc_jacobian_bkgnd( inv_model )
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 if isstr(inv_model) && strcmp(inv_model,'UNIT_TEST') do_unit_test; return;end
0024
0025 img_bkgnd= eidors_obj('get-cache', inv_model, 'jacobian_bkgnd');
0026 if ~isempty(img_bkgnd)
0027 eidors_msg('calc_jacobian_bkgnd: using cached value', 3);
0028 return
0029 end
0030
0031 if isfield(inv_model.jacobian_bkgnd,'func')
0032 img_bkgnd= feval( inv_model.jacobian_bkgnd.func, inv_model );
0033 elseif isfield(inv_model.jacobian_bkgnd,'value')
0034 if has_physics(inv_model.jacobian_bkgnd)
0035 warning('Ignoring physics-specific fields in Jacobian background')
0036 end
0037
0038 fwd_model= inv_model.fwd_model;
0039 bkgnd = ones(size(fwd_model.elems,1),1);
0040 bkgnd(:)= inv_model.jacobian_bkgnd.value;
0041
0042 img_bkgnd= eidors_obj('image', 'background image', ...
0043 'elem_data', bkgnd, ...
0044 'fwd_model', fwd_model );
0045 else
0046
0047 fwd_model = inv_model.fwd_model;
0048 img_bkgnd = eidors_obj('image','background image','fwd_model',fwd_model);
0049 flds = fieldnames(inv_model.jacobian_bkgnd);
0050
0051 for i = 1:length(flds)
0052 img_bkgnd.(flds{i}) = inv_model.jacobian_bkgnd.(flds{i});
0053 end
0054
0055 end
0056
0057
0058 eidors_obj('set-cache', inv_model, 'jacobian_bkgnd', img_bkgnd);
0059 eidors_msg('jacobian_bkgnd: setting cached value', 3);
0060
0061
0062 function b = has_physics(s)
0063 b = false;
0064 if isstruct(s)
0065 b = any(ismember(fieldnames(s),supported_physics));
0066 end
0067
0068 function do_unit_test
0069 imdl = mk_common_model('d2c2');
0070 calc_jacobian_bkgnd(imdl)
0071
0072 imdl.jacobian_bkgnd = rmfield(imdl.jacobian_bkgnd,'value');
0073 imdl.jacobian_bkgnd.node_data = 5;
0074 calc_jacobian_bkgnd(imdl)
0075
0076 imdl.jacobian_bkgnd = rmfield(imdl.jacobian_bkgnd,'node_data');
0077 imdl.jacobian_bkgnd.node_data.val1 = 5;
0078 imdl.jacobian_bkgnd.node_data.val2 = ones(length(imdl.fwd_model.nodes),1);
0079 img = calc_jacobian_bkgnd(imdl);
0080 display(img.node_data);
0081
0082 imdl.jacobian_bkgnd = rmfield(imdl.jacobian_bkgnd,'node_data');
0083 imdl.jacobian_bkgnd.elem_data.val1 = 5;
0084 imdl.jacobian_bkgnd.elem_data.val2 = ones(length(imdl.fwd_model.elems),1);
0085 img = calc_jacobian_bkgnd(imdl);
0086 display(img.elem_data);
0087 imdl = rmfield(imdl,'jacobian_bkgnd');
0088 imdl.jacobian_bkgnd.resistivity.elem_data = 3;
0089 img = calc_jacobian_bkgnd(imdl);
0090
0091