From 1425bd27d3cf353ef2e424eb991b68f20bcde5e7 Mon Sep 17 00:00:00 2001
From: Olivier Sauter <olivier.sauter@epfl.ch>
Date: Fri, 1 Feb 2002 13:47:13 +0000
Subject: [PATCH] to calculate a(psi), etc

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@1861 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 JET/Ra_rho_t.m | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 JET/Ra_rho_t.m

diff --git a/JET/Ra_rho_t.m b/JET/Ra_rho_t.m
new file mode 100644
index 00000000..f7110235
--- /dev/null
+++ b/JET/Ra_rho_t.m
@@ -0,0 +1,80 @@
+function [R0zmag,azmag,Rminzmag,Rmaxzmag]=Ra_rho_t(sspr,sspi,npts);
+%
+% Rmax(psi^.5),Rmin(psi^.5) and a(psi^.5) on z=zmag on npts equidistant sqrt(psin)
+%
+% Assumes all timing the same: sspr.t, sspi.t, zmag.t, rmag.t
+%
+% cannot use zmag as not good enough with respect to psirz. Better to use min of psirz contours
+%
+% precision within 1e-3 - 1e-4 (as usually min(psi)~a few 1e-4)
+%
+% Note: this also gives Rin and Rout (psi) directly from Rmin and Rmax, or from R0+a or R0-a of rho^2
+%
+
+rhopsi=linspace(0,1,npts)';
+figure(92);clf; % used as dummy for contours calculation
+set(92,'pos',[600 500 200 200])
+set(92,'MenuBar','none');
+hold on
+azmag=sspr; % to get time array and structure same
+azmag.data=zeros(length(rhopsi),length(sspr.t));
+azmag.x=rhopsi;
+azmag.dim{1}=rhopsi;
+azmag.dimunits{1}='rho=sqrt(psin)';
+azmag.name='a(rho,t)=mean minor radius from psi(R,Z) and Ra_rho_t function';
+R0zmag=azmag;
+R0zmag.name='R0(rho,t)=mean major radius from psi(R,Z) and Ra_rho_t function';
+Rminzmag=azmag;
+Rminzmag.name='Rmin(rho,t)=Rbnd_HFS from psi(R,Z) and Ra_rho_t function';
+Rmaxzmag=azmag;
+Rmaxzmag.name='a(rho,t)=Rbnd_LFS from psi(R,Z) and Ra_rho_t function';
+
+iteff=find(sspr.t>=54 & sspr.t<=69);
+% for it=1:length(sspr.t)
+for it1=1:length(iteff)
+  it=iteff(it1);
+  [r,z,psinrz]=psinrzjet(-1,sspr.t(it),3*npts,3*npts,[],[],[],0,sspr,sspi,[]);
+  ir=find(r>2.7 & r<3.3);
+  iz=find(z>-1 & z<1.5);
+  psimin=1.2*max(0,min(min(psinrz(ir,iz))));
+  [c,h]=contour(r,z,psinrz',[psimin psimin]);
+  iii=find(c(1,:)==psimin);
+  rmagpsi=mean(c(1,iii(end)+1:iii(end)+c(2,iii(end))));
+  zmagpsi=mean(c(2,iii(end)+1:iii(end)+c(2,iii(end))));
+  % make (R,Z) array on which to compute psinrz
+  nr=sspi.data(1,it);
+  rmin=sspr.data(1,it)/100;
+  rmax=sspr.data(nr,it)/100; % in [cm] but will be used in [m]
+  zeff=zmagpsi;
+  rgrid=linspace(rmin+1e-4,rmax-1e-4,3*npts);
+  zgrid=zeff*ones(size(rgrid));
+  [r2,z2,psinrz2]=psinrzjet(-1,sspr.t(it),rgrid,zgrid,[],[],[],0,sspr,sspi,[],1);
+  [a,da1]=interpos(13,r2,psinrz2);
+  ii=find(da1>0);ii=ii(1);
+  rmagmin=interp1([da1(ii(1)-1) da1(ii(1))],[r2(ii(1)-1) r2(ii(1))],0);
+  ii=find(r2>=rmagmin);
+  [RpsiLFS]=interpos(13,psinrz2(ii).^.5,r2(ii),rhopsi);
+  ii=find(r2<=rmagmin);
+  [RpsiHFS]=interpos(13,psinrz2([ii(end):-1:1]).^.5,r2([ii(end):-1:1]),rhopsi);
+  azmag.data(:,it)=0.5.*(RpsiLFS-RpsiHFS);
+  azmag.data(1,it)=0;
+  azmag.data(2,it)=max(0,azmag.data(2,it));
+  R0zmag.data(:,it)=0.5.*(RpsiLFS+RpsiHFS);
+  R0zmag.data(1,it)=rmagmin;
+  Rminzmag.data(:,it)=RpsiHFS;
+  Rmaxzmag.data(:,it)=RpsiLFS;
+  % get isoflux
+  %  [c1,h1]=contour(r,z,psinrz',rhopsi.^2);
+  %  for ir=1:length(rhopsi)
+  %    ii=find(c1(1,:)==rhopsi(ir)^2);
+  %    if isempty(ii)
+  %      Riso{ir,it}=rmagmin;
+  %      Ziso{ir,it}=zmagpsi;
+  %    else
+  %      [il ij]=max(c1(2,ii));
+  %      ieff=ii(ij);
+  %      Riso{ir,it}=c1(1,ieff+1:ieff+il)';
+  %      Ziso{ir,it}=c1(2,ieff+1:ieff+il)';
+  %    end
+  %  end
+end
-- 
GitLab