calc_jacobian_bkgnd

PURPOSE ^

CALC_JACOBIAN_BKGND: calculate background image around

SYNOPSIS ^

function img_bkgnd = calc_jacobian_bkgnd( inv_model )

DESCRIPTION ^

 CALC_JACOBIAN_BKGND: calculate background image around
    which initial estimate of jacobian is calculated
 
 img_bkgnd = calc_jacobian_bkgnd( inv_model )
 inv_model   is an EIDORS fwd_model 
 img_bkgnd   is an EIDORS struct

 Usage: 
      The background for calc_jacobian may be specified
      as an estimated value
  inv_model.jacobian_bkgnd.value;  % scalar OR
                                   % vector of Nx1

 Usage:
      The background may be calculated by a function
  inv_model.jacobian_bkgnd.func;

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function img_bkgnd = calc_jacobian_bkgnd( inv_model )
0002 % CALC_JACOBIAN_BKGND: calculate background image around
0003 %    which initial estimate of jacobian is calculated
0004 %
0005 % img_bkgnd = calc_jacobian_bkgnd( inv_model )
0006 % inv_model   is an EIDORS fwd_model
0007 % img_bkgnd   is an EIDORS struct
0008 %
0009 % Usage:
0010 %      The background for calc_jacobian may be specified
0011 %      as an estimated value
0012 %  inv_model.jacobian_bkgnd.value;  % scalar OR
0013 %                                   % vector of Nx1
0014 %
0015 % Usage:
0016 %      The background may be calculated by a function
0017 %  inv_model.jacobian_bkgnd.func;
0018 
0019 % (C) 2005-2012 Andy Adler and Bartlomiej Grychtol
0020 % License: GPL version 2 or version 3
0021 % $Id: calc_jacobian_bkgnd.m 4039 2013-05-22 14:00:36Z aadler $
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 %%% old interface %%%
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    % allow bkgnd to be scalar or vector
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 %%% new interface with physics %%%
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     % copy physics from to im
0051     for i = 1:length(flds)
0052        img_bkgnd.(flds{i}) = inv_model.jacobian_bkgnd.(flds{i});
0053     end
0054 %     img_bkgnd = physics_data_mapper(img_bkgnd);
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

Generated on Wed 29-May-2013 17:11:47 by m2html © 2005