diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index 106b268f0ac0e130852d6b10902d8f268765adbb..6360949d4ff46c344a450dc23d7e6d66b8378142 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -576,7 +576,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits{1} = 's'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'cxrs'} + case {'cxrs','cxrs_rho'} %not yet finished, just started % load typical data from cxrs, Ti, ni, vtori and vpoli (if available), as well as zeff from cxrs % if 'fit' option is added: 'fit',1, then the fitted profiles are returned @@ -709,7 +709,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') end gdat_data.dimunits{1} = ''; gdat_data.dimunits{2} = 's'; - + % add grids_1d to have rhotor, etc if cxrs_rho was asked for + if strcmp(data_request_eff,'cxrs_rho') + gdat_data = get_grids_1d(gdat_data,2,1,gdat_params.nverbose); + else + gdat_data = get_grids_1d(gdat_data,2,0,gdat_params.nverbose); + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'eqdsk'} % @@ -936,30 +942,8 @@ 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); + % add grids_1d to have rhotor, etc if cxrs_rho was asked for + gdat_data = get_grids_1d(gdat_data,2,1,gdat_params.nverbose); %%%%%%%%%%% % if nete_rho, copy data as .ne, get .te and put pe=e ne Te in data: @@ -1307,31 +1291,13 @@ 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); + % add grids_1d to have rhotor, etc if cxrs_rho was asked for + gdat_data = get_grids_1d(gdat_data,1,1,gdat_params.nverbose); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'psi_edge'} % psi at edge, 0 by construction in Liuqe, thus not given + % add surface_psi from surface_flux and d(surface_flux)/dt = vloop nodenameeff=['\results::psi_axis' substr_liuqe]; if liuqe_version==-1 nodenameeff=[begstr 'q_psi' substr_liuqe]; @@ -1349,6 +1315,13 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.dimunits = tracetdi.dimunits; gdat_data.units = tracetdi.units; gdat_data.request_description = '0 since LIUQE construct psi to be zero at LCFS'; + % + params_eff.data_request='\results::surface_flux'; + surface_psi=gdat_tcv([],params_eff); + [aa,vsurf] = interpos(surface_psi.t,surface_psi.data,-3); + gdat_data.surface_psi = surface_psi.data; + gdat_data.vsurf = vsurf; + gdat_data.vsurf_description = ['time derivative from surface_psi, obtained from \results::surface_flux']; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'rhotor_edge','rhotor'} @@ -1838,3 +1811,58 @@ gdat_data.t=time; if any(strcmp(fieldnames(tracetdi),'units')) gdat_data.units=tracetdi.units; end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +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) + 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); + 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.01); +gdat_data.grids_1d.volume_edge=interpos(rhovol.t',rhovol.volume_edge,gdat_data.t',-0.01); + +return diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m index 955aede63f8e9c6ea72415193316b3d725e59856..b88a7986a1bff0cc92a4ab43710a2113b14adaa9 100644 --- a/crpptbx/TCV/tcv_requests_mapping.m +++ b/crpptbx/TCV/tcv_requests_mapping.m @@ -61,6 +61,11 @@ switch lower(data_request) mapping.label = 'cxrs'; mapping.method = 'switchcase'; mapping.expression = ''; + case 'cxrs_rho' + mapping.timedim = 2; + mapping.label = 'cxrs'; + mapping.method = 'switchcase'; + mapping.expression = ''; case 'delta' mapping.timedim = 1; mapping.method = 'tdiliuqe'; @@ -89,7 +94,7 @@ switch lower(data_request) mapping.timedim = 1; mapping.label = 'Halpha'; mapping.method = 'tdi'; - mapping.expression = '\base::pd:pd_011'; + mapping.expression = '\base::pd:pd_001'; case 'ioh' mapping.timedim = 1; mapping.label = 'I ohmic transformer'; @@ -104,6 +109,10 @@ switch lower(data_request) mapping.timedim = 1; mapping.method = 'tdiliuqe'; mapping.expression = '\results::kappa_edge'; + case 'li' + mapping.timedim = 1; + mapping.method = 'tdiliuqe'; + mapping.expression = '\results::l_i'; case 'mhd' mapping.timedim = 1; mapping.label = 'n=1,2, etc'; @@ -231,6 +240,10 @@ switch lower(data_request) mapping.label = 'Volume(\rho)'; mapping.method = 'switchcase'; % mapping.expression = '\results::psitbx:vol'; (if exists for liuqe2 and 3 as well) + case 'wmhd' + mapping.timedim = 1; + mapping.method = 'tdiliuqe'; + mapping.expression = '\results::total_energy'; case 'z_contour' mapping.timedim = 1; mapping.method = 'tdiliuqe';