Skip to content
Snippets Groups Projects
liuqefortran2liuqematlab.m 3.24 KiB
Newer Older
function liuqe_fortran_matlab = liuqefortran2liuqematlab(varargin);
%
% liuqe_fortran_matlab = liuqefortran2liuqematlab(varargin);
%
% returns correspondance of node names, when different between fortran (eq_recon) and matlab (equil_1) mds node names
%
% liuqe_fortran_matlab{:,1} give liuqe fortran names
% liuqe_fortran_matlab{:,2} give liuqe matlab names
%
% Note that you can have multiple entries (for liuqe fortran since it has less nodes) but the first one should be the closest match (see r_contour/r_rho/r_surf)
% 
% varargin: If absent, then return full table
% varargin{1}: 'node_name_to_convert'
% varargin{2}: origin of node_name given=varargin{1}: 0: fortran, 1(default): matlab
% varargin{3}: type of desired output:                0: fortran, 1(default): matlab
%
% Thus by default there is no conversion
%
% Examples:
%        liuqe_fortran_matlab = liuqefortran2liuqematlab; % => liuqe_fortran_matlab(:,1:2) full cell table
%        liuqe_fortran_matlab = liuqefortran2liuqematlab('q_axis'); => liuqe_fortran_matlab = 'q_axis'
%        liuqe_fortran_matlab = liuqefortran2liuqematlab('q_axis',1,0); => liuqe_fortran_matlab = 'q_zero'
%        liuqe_fortran_matlab = liuqefortran2liuqematlab('q_zero',0,1); => liuqe_fortran_matlab = 'q_axis'
%        liuqe_fortran_matlab = liuqefortran2liuqematlab('r_edge',1,0); => liuqe_fortran_matlab = 'r_contour'
%

liuqe_fortran_matlab_table = [ ...
    {'l_i'}           , {'l_i_3'}     ; ...
    {'i_p'}           , {'i_pl'}  ; ...
    {'pprime_psi'}    , {'pprime_rho'} ; ... % warning on different x-mesh
    {'surface_flux'}  , {'psi_surf'}  ; ...
    {'q_zero'}        , {'q_axis'}    ; ...
    {'q_psi'}         , {'q'}    ; ...
    {'r_contour'}     , {'r_edge'}     ; ... % r_rho has all the flux surfaces
    {'r_min_psi'}     , {'r_in'}     ; ... % R inboard of rho flux surfaces
    {'r_max_psi'}     , {'r_out'}     ; ... % R outboard of rho flux surfaces
    {'total_energy'}  , {'w_mhd'}     ; ...
    {'ttprime_psi'}   , {'ttprime_rho'} ; ... % warning on different x-mesh
    {'z_contour'}     , {'z_edge'}     ; ... % z_rho has all the flux surfaces
                   ];

liuqe_fortran_matlab = [];
if nargin == 0
  % return full table
  liuqe_fortran_matlab = liuqe_fortran_matlab_table;
  return
end


if isempty(varargin{1})
  error(['liuqefortran2liuqematlab: unexpected empty 1st argument'])
  return
end
if ~ischar(varargin{1})
  error(['liuqefortran2liuqematlab: unexpected 1st argument is not a string'])
  return
end

liuqe_matlab_in = 1;
if nargin>=2 && ~isempty(varargin{2})
  if isnumeric(varargin{2})
    liuqe_matlab_in = varargin{2};
  else
    warning(['liuqefortran2liuqematlab: unexpected 2nd argument type, should be numeric'])
    varargin{2}
    return
  end
end

liuqe_matlab_out = 1;
if nargin>=3 && ~isempty(varargin{3})
  if isnumeric(varargin{3})
    liuqe_matlab_out = varargin{3};
  else
    warning(['liuqefortran2liuqematlab: unexpected 3rd argument type, should be numeric'])
    varargin{3}
    return
  end
end

% find index of input in corresponding column
ij = strmatch(varargin{1},liuqe_fortran_matlab_table(:,1+liuqe_matlab_in),'exact');
if isempty(ij)
  % assume name is the same
  liuqe_fortran_matlab = varargin{1};
else
  liuqe_fortran_matlab = liuqe_fortran_matlab_table{ij(1),1+liuqe_matlab_out};
end