-
Antoine Cyril David Hoffmann authoredAntoine Cyril David Hoffmann authored
plot_gbms_ballooning.m 1.95 KiB
function [ ] = plot_gbms_ballooning(resfile)
% perform ballooning transformation from phi.dat.h5 file
% read data and attributes
coordkx = h5read(resfile,'/data/var2d/phi/coordkx');
Nkx = (length(coordkx)-1)/2;
coordz = h5read(resfile,'/data/var2d/phi/coordz');
Nz = length(coordz);
coordtime =h5read(resfile,'/data/var2d/time');
Nt = length(coordtime) ;
iframe = Nt -1;
dataset = ['/data/var2d/phi/',num2str(iframe,'%06d')];
phi = h5read(resfile,dataset);
try
dataset = ['/data/var2d/psi/',num2str(iframe,'%06d')];
psi = h5read(resfile,dataset);
catch
psi = 0;
end
% Apply baollooning tranform
dims = size(phi.real);
phib_real = zeros( dims(1)*Nz ,1);
phib_imag= phib_real;
psib_real= phib_real;
psib_imag= phib_real;
b_angle = phib_real;
midpoint = floor((dims(1)*Nz )/2)+1;
for ip =1: dims(1)
start_ = (ip -1)*Nz +1;
end_ = ip*Nz;
phib_real(start_:end_) = phi.real(ip,:);
phib_imag(start_:end_) = phi.imaginary(ip,:);
try
psib_real(start_:end_) = psi.real(ip,:);
psib_imag(start_:end_) = psi.imaginary(ip,:);
catch
psib_real(start_:end_) = 0;
psib_imag(start_:end_) = 0;
end
end
% Define ballooning angle
idx = -Nkx:1:Nkx;
for ip =1: dims(1)
for iz=1:Nz
ii = Nz*(ip -1) + iz;
b_angle(ii) =coordz(iz) + 2*pi*idx(ip);
end
end
% normalize real and imaginary parts at chi =0
[~,idxLFS] = min(abs(b_angle -0));
phib = phib_real + 1i*phib_imag;
psib = psib_real + 1i*psib_imag;
% normalize to the outer mid-plane
norm = (phib(idxLFS));
phib = phib(:)/norm;
psib = psib(:)/norm;
figure;
subplot(1,2,1);
plot(b_angle/pi,real(phib),'b'); hold on;
plot(b_angle/pi,imag(phib),'r'); hold on;
plot(b_angle/pi, abs(phib),'k'); hold on;
xlabel('$\chi/\pi$'); ylabel('$\phi(\chi)/|\phi(0)|$');
title('GBMS');
subplot(1,2,2)
plot(b_angle/pi,real(psib),'b'); hold on;
plot(b_angle/pi,imag(psib),'r'); hold on;
plot(b_angle/pi, abs(psib),'k'); hold on;
xlabel('$\chi/\pi$'); ylabel('$\psi(\chi)/|\phi(0)|$');
end