% Run linear/nonlin simulation on a kr,kz grid and create gifs on the
% fourier and real space
clear all; close all;
BASIC.SIMID = 'kr_kz_time_evolution'; % Name of the simulations
addpath(genpath('../matlab')) % ... add
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% outputs options
OUTPUTS.nsave_0d = 0;
OUTPUTS.nsave_1d = 0;
OUTPUTS.nsave_2d = 10;
OUTPUTS.nsave_5d = 0;
OUTPUTS.write_Ni00    = '.true.';
OUTPUTS.write_moments = '.true.';
OUTPUTS.write_phi     = '.true.';
OUTPUTS.write_non_lin = '.false.';
OUTPUTS.write_doubleprecision = '.true.';
OUTPUTS.resfile0      = '''results''';
OUTPUTS.rstfile0      = '''restart''';
%% Grid parameters
GRID.pmaxe = 08;  % Electron Hermite moments
GRID.jmaxe = 04;  % Electron Laguerre moments
GRID.pmaxi = 08;  % Ion Hermite moments
GRID.jmaxi = 04;  % Ion Laguerre moments
GRID.nkr   = 128; % kr grid resolution
GRID.krmin =-2.0; % kr minimum value
GRID.krmax = 2.0; % kr maximal value
GRID.nkz   = 128; % kz ''
GRID.kzmin =-2.0; %    ''
GRID.kzmax = 2.0; %    ''
GRID.Pad   = 2.0; % Zero padding for dealiasing (Mx = Pad * nkx)
%% Model parameters
MODEL.CO      = -2;  % Collision operator (0 : L.Bernstein, -1 : Full Coulomb, -2 : Dougherty)
MODEL.NON_LIN = '.false.';   % Non linear term
MODEL.nu      = 0.01; % collisionality nu*L_perp/Cs0
% temperature ratio T_a/T_e
MODEL.tau_e   = 1.0;
MODEL.tau_i   = 1.0;
% mass ratio sqrt(m_a/m_i)
MODEL.sigma_e = 0.0233380;
MODEL.sigma_i = 1.0;
% charge q_a/e
MODEL.q_e     =-1.0;
MODEL.q_i     = 1.0;
% gradients L_perp/L_x
MODEL.eta_n   = 1.0;        % Density
MODEL.eta_T   = 0.0;        % Temperature
MODEL.eta_B   = 0.5;        % Magnetic
% Debye length
MODEL.lambdaD = 0.0;
%% Time integration and intialization parameters
TIME_INTEGRATION.numerical_scheme  = '''RK4''';
BASIC.nrun                = 100000;
BASIC.dt                  = 0.01;
BASIC.tmax                = 200.0;    %time normalized to 1/omega_pe
INITIAL.RESTART           = '.true.';
INITIAL.backup_file      = '''restart''';
INITIAL.only_Na00         = '.false.';
INITIAL.initback_moments  = 1.0e-4;
INITIAL.initnoise_moments = 5.0e-5;
INITIAL.iseed             = 42;
INITIAL.selfmat_file = ...
    ['''../iCa/self_Coll_GKE_0_GKI_0_ESELF_1_ISELF_1_Pmaxe_',num2str(GRID.pmaxe),...
    '_Jmaxe_',num2str(GRID.jmaxe),'_Pmaxi_',num2str(GRID.pmaxi),'_Jmaxi_',...
    num2str(GRID.jmaxi),'_pamaxx_10.h5'''];
INITIAL.eimat_file = ...
    ['''../iCa/ei_Coll_GKE_0_GKI_0_ETEST_1_EBACK_1_Pmaxe_',num2str(GRID.pmaxe),...
    '_Jmaxe_',num2str(GRID.jmaxe),'_Pmaxi_',num2str(GRID.pmaxi),'_Jmaxi_',...
    num2str(GRID.jmaxi),'_pamaxx_10_tau_1.0000_mu_0.0233.h5'''];
INITIAL.iemat_file = ...
    ['''../iCa/ie_Coll_GKE_0_GKI_0_ITEST_1_IBACK_1_Pmaxe_',num2str(GRID.pmaxe),...
    '_Jmaxe_',num2str(GRID.jmaxe),'_Pmaxi_',num2str(GRID.pmaxi),'_Jmaxi_',...
    num2str(GRID.jmaxi),'_pamaxx_10_tau_1.0000_mu_0.0233.h5'''];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Write input file and run HeLaZ
INPUT = write_fort90(OUTPUTS,GRID,MODEL,INITIAL,TIME_INTEGRATION,BASIC);
nproc = 1;
MAKE  = 'cd ..; make; cd wk';
system(MAKE);
EXEC  = ' ../bin/helaz ';
RUN   = ['mpirun -np ' num2str(nproc)];
CMD   = [RUN, EXEC, INPUT];
%system(CMD);
%% load results
filename = [OUTPUTS.resfile0(2:end-1),'_00.h5'];
[Ni00, kr, kz, time] = load_2D_data(filename, 'Ni00');
[ phi, kr, kz, time] = load_2D_data(filename, 'phi');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Analysis and basic figures
default_plots_options
SAVEFIG = 1;
default_plots_options
%% Gif creation
if strcmp(MODEL.NON_LIN,'.true.'); LINEARITY = 'nl';
else; LINEARITY = 'lin'; end;
disp('Creating gif..');
disp('');
skip    = 5;    % To skip some frames
delay   = 0.03; % Speed of the movie (smaller for faster)
t       = time(1:skip:end);
N       = squeeze(Ni00(:,:,1:skip:end));
H       = zeros(GRID.nkr, GRID.nkz, numel(t));
h       = zeros(GRID.nkr, GRID.nkz, numel(t));
Pad = 2.0; % Padding
for it = 1:numel(t)
    H(:,:,it) = abs(N(:,:,it));
    F         = real(ifft2(N(:,:,it),ceil(Pad*GRID.nkr)+1,ceil(Pad*GRID.nkz)+1));
    h(:,:,it) = F(1:GRID.nkr, 1:GRID.nkr);
end
%%
GIFNAME = [num2str(GRID.nkr),'x',num2str(GRID.nkz),'-',LINEARITY,'-Ni00'];
create_gif(kr, kz, t, log(H), BASIC, GRID, MODEL, delay, GIFNAME, false)

%%
Nr = ceil(GRID.nkr/2); Nz = ceil(GRID.nkz/2);
h_ = h;
h_(h_==0) = nan;
GIFNAME = [num2str(GRID.nkr),'x',num2str(GRID.nkz),'-',LINEARITY,'-Mi00'];
create_gif(kr(Nr:end), kz(Nr:end), t, h_(Nr:end,Nz:end,:), BASIC, GRID, MODEL, delay, GIFNAME, false)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%