diff --git a/crpptbx/JET/gdat_jet.m b/crpptbx/JET/gdat_jet.m index ac94bd395e91284a9fdfab9d3ceb44741c6cd9eb..1bd041768bec5d8782bafc3c3a7026efea01b2f2 100644 --- a/crpptbx/JET/gdat_jet.m +++ b/crpptbx/JET/gdat_jet.m @@ -1179,54 +1179,94 @@ elseif strcmp(mapping_for_jet.method,'switchcase') % since cocos=17 for LIUQE we get: % q = -dPhi/dpsi => Phi = - int(q*dpsi) which should always have the sign of B0 % get rhotornorm etc - nodenameeff=[{'ppf'},{'EFIT'},{'FTOR'}]; - ppftype = nodenameeff{1}; - tracename = [nodenameeff{2} '/' nodenameeff{3}]; - [a,x,t,d,e]=rda_jet(shot,ppftype,tracename); - if e==0 - if gdat_params.nverbose>=3; disp(['error after rda_jet in signal with nodenameeff= ' nodenameeff]); end - if gdat_params.nverbose>=3; disp('cannot get rhotornorm'); end - return - end - phi = a; - gdat_data.rhotornorm = sqrt(a/(ones(length(x),1)*a(end,:))); - - params_eff.data_request='b0'; % psi_edge=0 with LIUQE - b0=gdat_jet([],params_eff); - if strcmp(data_request,'rhotor_edge') - gdat_data.data = psi_axis.data; % to have the dimensions correct - gdat_data.dim = psi_axis.dim; - gdat_data.t = gdat_data.dim{1}; - gdat_data.data_fullpath='phi from q_rho, psi_axis and integral(-q dpsi)'; - gdat_data.units = 'T m^2'; - gdat_data.dimunits{1} = 's'; - elseif strcmp(data_request,'rhotor') - gdat_data.data = q_rho.data; % to have the dimensions correct - gdat_data.dim{1} = ones(size(q_rho.dim{1})); - gdat_data.dim{1}(:) = rhoequal; - gdat_data.dim{2} = q_rho.dim{2}; - gdat_data.t = gdat_data.dim{2}; - gdat_data.data_fullpath='sqrt(phitor/phitor_edge), rhotor_edge=sqrt(phitor/B0/pi)'; - gdat_data.units = ''; - gdat_data.dimunits{1} = 'rhopol\_norm'; - gdat_data.dimunits{2} = 's'; - end - for it=1:length(psi_axis.data) - ij=find(~isnan(q_rho.data(:,it))); - if ~isempty(ij) - [qfit,~,~,phi]=interpos(q_rho.x(ij).^2,q_rho.data(ij,it),rhoequal.^2); - dataeff = sqrt(phi .* psi_axis.data(it) ./ b0tpsi(it) ./ pi) ; % Delta_psi = -psi_axis - else - dataeff = NaN; + switch data_request_eff + case {'rhotor', 'rhotor_edge', 'rhotor_norm'} + nodenameeff=[{'ppf'},{'EFIT'},{'FTOR'}]; + ppftype = nodenameeff{1}; + tracename = [nodenameeff{2} '/' nodenameeff{3}]; + [a,x,t,d,e]=rda_jet(shot,ppftype,tracename); + if e==0 + if gdat_params.nverbose>=3; disp(['error after rda_jet in signal with nodenameeff= ' nodenameeff]); end + if gdat_params.nverbose>=3; disp(['cannot get ' data_request_eff]); end + return end + phi = a; + phi_edge_2d = ones(length(x),1)*a(end,:); + gdat_data.rhotornorm = sqrt(phi./phi_edge_2d); + params_eff.data_request='b0'; + b0=gdat_jet(shot,params_eff); if strcmp(data_request,'rhotor_edge') - gdat_data.data(it) = dataeff(end); + b0_phi=interpos(b0.t,b0.data,t,-1); + gdat_data.data = sqrt(phi(end,:)./pi./reshape(b0_phi,1,length(b0_phi))); + gdat_data.dim = {t}; + gdat_data.t = gdat_data.dim{1}; + gdat_data.data_fullpath='sqrt(Phi_edge/pi/B0) from {''ppf''},{''EFIT''},{''FTOR''}'; + gdat_data.units = 'm'; + gdat_data.dimunits{1} = 's'; elseif strcmp(data_request,'rhotor') - gdat_data.data(:,it) = dataeff./dataeff(end); - gdat_data.rhotor_edge(it) = dataeff(end); + b0_phi=interpos(b0.t,b0.data,t,-1); + gdat_data.data = sqrt(phi./(ones(length(x),1)*reshape(b0_phi,1,length(b0_phi)))./pi); + gdat_data.dim{1} = x; + gdat_data.dim{2} = t; + gdat_data.x = x; + gdat_data.t = gdat_data.dim{2}; + gdat_data.data_fullpath='sqrt(phitor/pi/B0)) from {''ppf''},{''EFIT''},{''FTOR''}'; + gdat_data.units = 'm'; + gdat_data.dimunits{1} = 'rhopol\_norm'; + gdat_data.dimunits{2} = 's'; + elseif strcmp(data_request,'rhotor_norm') + b0_phi=interpos(b0.t,b0.data,t,-1); + gdat_data.data = gdat_data.rhotornorm; + gdat_data.rhotor_edge = sqrt(phi(end,:)./pi./reshape(b0_phi,1,length(b0_phi))); + gdat_data.dim{1} = x; + gdat_data.dim{2} = t; + gdat_data.x = x; + gdat_data.t = gdat_data.dim{2}; + gdat_data.data_fullpath='sqrt(phitor/phitor_edge), rhotor_edge=sqrt(phitor/B0/pi) from {''ppf''},{''EFIT''},{''FTOR''}'; + gdat_data.data_fullpath='sqrt(phitor/pi/B0), rhotor_edge=sqrt(phitor/B0/pi)'; + gdat_data.units = ''; + gdat_data.dimunits{1} = 'rhopol\_norm'; + gdat_data.dimunits{2} = 's'; + end + case {'volume_rho', 'rhovol'} + nodenameeff=[{'ppf'},{'EFIT'},{'VJAC'}]; + ppftype = nodenameeff{1}; + tracename = [nodenameeff{2} '/' nodenameeff{3}]; + [a,x,t,d,e]=rda_jet(shot,ppftype,tracename); + nodenameeff2=[{'ppf'},{'EFIT'},{'VOLM'}]; + ppftype = nodenameeff{1}; + tracename = [nodenameeff{2} '/' nodenameeff{3}]; + [a2,x2,t2,d2,e2]=rda_jet(shot,ppftype,tracename); + if e==0 || e2==0 + if gdat_params.nverbose>=3; + disp(['error after rda_jet in signal with nodenameeff= ' nodenameeff]); + disp(['or with nodenameeff2= ' nodenameeff2]); + disp(['cannot get ' data_request_eff]); + return + end + end + volume = a2; + dvdpsinorm = a; + for it=1:length(t) + [~,~,~,volpsi(:,it)]=interpos(x,a(:,it),-0.1); + volpsi(:,it) = volpsi(:,it) .* volume(it)./volpsi(end,it); % ensure that total volume is the same as volm end - gdat_data.b0 = b0tpsi(it); + gdat_data.x = sqrt(x); + gdat_data.t = t; + gdat_data.dim = [{gdat_data.x}, {gdat_data.t}]; + switch data_request_eff + case 'volume_rho' + gdat_data.data = volpsi; + gdat_data.volume = volume; + case 'rhovol' + gdat_data.data = sqrt(volpsi./(ones(length(gdat_data.x),1)*reshape(volpsi(end,:),1,length(gdat_data.t)))); + gdat_data.volume = volpsi(end,:); + end + otherwise + disp(['data_request_eff = ' data_request_eff ' not defined in this section']); + return end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'rhovol','volume_rho','volume'} @@ -1504,70 +1544,3 @@ gdat_params = gdat_data.gdat_params; error_status=0; return - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -function [gdat_data] = get_grids_1d(gdat_data,nbdim_x,nopt,nverbose); -% -% add various rhos in grids_1d -% -% nbdim_x = 1: same x (rhopol) for all times -% = 2: rhopol depends on time like Thomson projection -% -% nopt = 0: do not fill in, just make the empty structure -% = 1: do compute various fields -% - -gdat_data.grids_1d.rhopolnorm = gdat_data.x; -if (nopt == 0) || isempty(gdat_data.x) || isempty(gdat_data.t) || isempty(gdat_data.data) || ischar(gdat_data.data) - gdat_data.grids_1d.rhotornorm = []; - gdat_data.grids_1d.rhovolnorm = []; - gdat_data.grids_1d.psi = []; - gdat_data.grids_1d.rhotor_edge = []; - gdat_data.grids_1d.volume_edge = []; - return -end - -params_eff = gdat_data.gdat_params;params_eff.doplot=0; -params_eff.data_request='rhotor'; -rhotor = gdat(gdat_data.shot,params_eff); -params_eff.data_request='rhovol'; -rhovol = gdat(gdat_data.shot,params_eff); - -psi0 = interpos(rhotor.t',rhotor.psi_axis,gdat_data.t,-0.01); -if (nbdim_x == 1) - gdat_data.grids_1d.psi = gdat_data.grids_1d.rhopolnorm.^2*reshape(psi0,1,length(psi0)); -elseif (nbdim_x == 2) - gdat_data.grids_1d.psi = gdat_data.grids_1d.rhopolnorm.^2.*repmat(reshape(psi0,1,length(psi0)),size(gdat_data.grids_1d.rhopolnorm,1),1); -else - if nverbose>=0; disp(['option: nbdim_x = ' numstr(nbdim_x) ' not implemented, check with O. Sauter']); end - return -end -gdat_data.grids_1d.rhotornorm = NaN*ones(size(gdat_data.data)); -gdat_data.grids_1d.rhovolnorm = NaN*ones(size(gdat_data.data)); -it_rt = iround_os(rhotor.t,gdat_data.t); -it_vol = iround_os(rhovol.t,gdat_data.t); -for it=1:length(gdat_data.t) - % do an interpolation on closest point to avoid 2D interp - it_rt_eff = it_rt(it); - it_vol_eff = it_vol(it); - if (nbdim_x == 1) - ii=find(~isnan(gdat_data.grids_1d.rhopolnorm)); - else - ii=find(~isnan(gdat_data.grids_1d.rhopolnorm(:,it))); - end - if (nbdim_x == 1) - if length(ii)==length(gdat_data.grids_1d.rhopolnorm) - gdat_data.grids_1d.rhotornorm(:,it)=interpos(rhotor.x,rhotor.data(:,it_rt_eff),gdat_data.grids_1d.rhopolnorm); - gdat_data.grids_1d.rhovolnorm(:,it)=interpos(rhovol.x,rhovol.data(:,it_vol_eff),gdat_data.grids_1d.rhopolnorm); - end - else - if length(ii)==size(gdat_data.grids_1d.rhopolnorm,1) - gdat_data.grids_1d.rhotornorm(:,it)=interpos(rhotor.x,rhotor.data(:,it_rt_eff),gdat_data.grids_1d.rhopolnorm(:,it)); - gdat_data.grids_1d.rhovolnorm(:,it)=interpos(rhovol.x,rhovol.data(:,it_vol_eff),gdat_data.grids_1d.rhopolnorm(:,it)); - end - end -end -gdat_data.grids_1d.rhotor_edge=interpos(rhotor.t',rhotor.rhotor_edge,gdat_data.t',-0.01); -gdat_data.grids_1d.volume_edge=interpos(rhovol.t',rhovol.volume_edge,gdat_data.t',-0.01); - -return diff --git a/crpptbx/JET/jet_requests_mapping.m b/crpptbx/JET/jet_requests_mapping.m index 81fb6f3c139518b30ad1d3a5e4290ddc8e3acbee..9a4f0a62177e26456cd586d59325e613d187d516 100644 --- a/crpptbx/JET/jet_requests_mapping.m +++ b/crpptbx/JET/jet_requests_mapping.m @@ -250,7 +250,7 @@ switch lower(data_request) mapping.timedim = 1; mapping.method = 'switchcase'; mapping.label = 'rhotor\_edge'; - case 'rhotor_norm' + case {'rhotor_norm','rhotornorm'} mapping.timedim = 2; mapping.method = 'switchcase'; mapping.label = 'rhotor\_norm';