diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index 555bff0a1cbb434e10ee2d139d5f886ee307b6c3..106b268f0ac0e130852d6b10902d8f268765adbb 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -936,6 +936,31 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dim{1}=rho; gdat_data.dimunits=[{'sqrt(psi_norm)'} ; {'time [s]'}]; gdat_data.x=rho; + % add various rhos in grids_1d + 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); + gdat_data.grids_1d.rhopolnorm = gdat_data.x; + psi0 = interpos(rhotor.t',rhotor.psi_axis,gdat_data.t,-0.01); + 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); + 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); + ii=find(~isnan(gdat_data.grids_1d.rhopolnorm(:,it))); + 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(:,it)); + gdat_data.grids_1d.rhovolnorm(:,it)=interpos(rhovol.x,rhovol.data(:,it_vol_eff),gdat_data.grids_1d.rhopolnorm(:,it)); + end + end + gdat_data.grids_1d.rhotor_edge=interpos(rhotor.t',rhotor.rhotor_edge,gdat_data.t',-0.1); + %%%%%%%%%%% % if nete_rho, copy data as .ne, get .te and put pe=e ne Te in data: if strcmp(data_request_eff(1:4),'nete') @@ -1282,6 +1307,27 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits{2} = 's'; gdat_data.units = ''; gdat_data.request_description = 'q(rhopol\_norm)'; + % add various rhos in grids_1d + 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); + gdat_data.grids_1d.rhopolnorm = gdat_data.x; + psi0 = interpos(rhotor.t',rhotor.psi_axis,gdat_data.t,-0.01); + gdat_data.grids_1d.psi = gdat_data.grids_1d.rhopolnorm.^2*reshape(psi0,1,length(psi0)); + 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); + 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 + gdat_data.grids_1d.rhotor_edge=interpos(rhotor.t',rhotor.rhotor_edge,gdat_data.t',-0.1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'psi_edge'} @@ -1310,14 +1356,20 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') % O. Sauter, S.Yu. Medvedev, Comput. Phys. Commun. 184 (2013) 293–302 % since cocos=17 for LIUQE we get: % q = -dPhi/dpsi => Phi = - int(q*dpsi) which should always have the sign of B0 - params_eff = gdat_data.gdat_params; - params_eff.data_request='q_rho'; - q_rho=gdat_tcv([],params_eff); + % need to get q_rho but to avoid loop for rhotor in grids_1d, get q_rho explicitely here + nodenameeff=['\results::q_psi' substr_liuqe]; + if liuqe_version==-1 + nodenameeff=[begstr 'q_psi' substr_liuqe]; + end + q_rho=tdi(nodenameeff); if isempty(q_rho.data) || isempty(q_rho.dim) % || ischar(q_rho.data) (to add?) if (gdat_params.nverbose>=1); warning(['problems loading data for q_rho for data_request= ' data_request_eff]); end if (gdat_params.nverbose>=3); disp(['rerun LIUQE?']); end return end + rhopol_eff = ones(size(q_rho.dim{1})); + rhopol_eff(:) = sqrt(linspace(0,1,length(q_rho.dim{1}))); + q_rho.dim{1} = rhopol_eff; params_eff.data_request='psi_axis'; % psi_edge=0 with LIUQE psi_axis=gdat_tcv([],params_eff); params_eff.data_request='b0'; % psi_edge=0 with LIUQE @@ -1328,14 +1380,14 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') return end rhoequal = linspace(0,1,length(q_rho.dim{1})); - if strcmp(data_request,'rhotor_edge') + if strcmp(data_request_eff,'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') + elseif strcmp(data_request_eff,'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; @@ -1347,17 +1399,22 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits{2} = 's'; end gdat_data.x=gdat_data.dim{1}; + gdat_data.psi_axis = reshape(psi_axis.data,1,length(psi_axis.data)); + if length(gdat_data.psi_axis) ~= length(gdat_data.t) + disp('problems of time between qrho and psi_axis?') + return + 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); + [qfit,~,~,phi]=interpos(q_rho.dim{1}(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; end - if strcmp(data_request,'rhotor_edge') + if strcmp(data_request_eff,'rhotor_edge') gdat_data.data(it) = dataeff(end); - elseif strcmp(data_request,'rhotor') + elseif strcmp(data_request_eff,'rhotor') gdat_data.data(:,it) = dataeff./dataeff(end); gdat_data.rhotor_edge(it) = dataeff(end); end @@ -1384,7 +1441,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end end gdat_data.units = tracetdi.units; - if strcmp(data_request,'volume') + if strcmp(data_request_eff,'volume') gdat_data.data = tracetdi.data(end,:); gdat_data.dim{1} = tracetdi.dim{2}; gdat_data.data_fullpath=['\results::psitbx:vol(end,:)']; @@ -1393,11 +1450,12 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') else gdat_data.data = tracetdi.data; gdat_data.dim = tracetdi.dim; + gdat_data.x = gdat_data.dim{1}; gdat_data.dimunits = tracetdi.dimunits; - if strcmp(data_request,'volume_rho') + if strcmp(data_request_eff,'volume_rho') gdat_data.data_fullpath=['\results::psitbx:vol']; gdat_data.request_description = 'volume(rho)'; - elseif strcmp(data_request,'rhovol') + elseif strcmp(data_request_eff,'rhovol') gdat_data.volume_edge = gdat_data.data(end,:); gdat_data.data = sqrt(gdat_data.data./repmat(reshape(gdat_data.volume_edge,1,size(gdat_data.data,2)),size(gdat_data.data,1),1)); gdat_data.data_fullpath='sqrt(\results::psitbx:vol/vol_edge)'; @@ -1409,7 +1467,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') return end end - gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; + gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'sxr', 'mpx'}