function visualizeGSWavefunction2D(run_index)
    
    set(0,'defaulttextInterpreter','latex')
    set(groot, 'defaultAxesTickLabelInterpreter','latex'); set(groot, 'defaultLegendInterpreter','latex');
    
    folder_path = './Data';

    % Load data
    Data = load(sprintf(horzcat(folder_path, '/Run_%03i/psi_gs.mat'),run_index),'psi','Params','Transf','Observ');
    
    Params = Data.Params;
    Transf = Data.Transf; 
    Observ = Data.Observ; 
    if isgpuarray(Data.psi)
        psi = gather(Data.psi);
    else
        psi = Data.psi;
    end
    
    if isgpuarray(Data.Observ.residual)
        Observ.residual = gather(Data.Observ.residual);
    else
        Observ.residual = Data.Observ.residual;
    end

    % Set long format for output
    format long
    
    % Coordinates in micrometers
    x = Transf.x * Params.l0 * 1e6; 
    y = Transf.y * Params.l0 * 1e6; 
    
    % Plotting
    figure('Position', [100, 100, 1600, 900]);
    clf
    
    % Compute probability density |psi|^2
    n = abs(psi).^2;
    
    % Plot |psi(x,y)|^2 (density in x and y plane)
    subplot('Position', [0.05, 0.55, 0.28, 0.4])
    pcolor(x, y, n');
    shading interp;
    colorbar;
    xlabel('$x$ [$\mu$m]', 'FontSize', 14); ylabel('$y$ [$\mu$m]', 'FontSize', 14);
    title('$|\Psi_{xy}|^2$', 'FontSize', 14);
    
    % Plot real part of psi in the x-y plane
    subplot('Position', [0.36, 0.55, 0.28, 0.4])
    pcolor(x, y, real(psi)');
    shading interp;
    colorbar;
    xlabel('$x$ [$\mu$m]', 'FontSize', 14); ylabel('$y$ [$\mu$m]', 'FontSize', 14);
    title('Re$\{\Psi_{xy}\}$', 'FontSize', 14);

    % Plot imaginary part of psi in the x-y plane
    subplot('Position', [0.67, 0.55, 0.28, 0.4])
    pcolor(x, y, imag(psi)');
    shading interp;
    colorbar;
    xlabel('$x$ [$\mu$m]', 'FontSize', 14); ylabel('$y$ [$\mu$m]', 'FontSize', 14);
    title('Im$\{\Psi_{xy}\}$', 'FontSize', 14);

    % Plot residual (time steps vs -log10(residual))
    subplot('Position', [0.05, 0.05, 0.26, 0.4]);
    plot(-log10(Observ.residual), '-b')
    ylabel('$-\mathrm{log}_{10}(r)$', 'FontSize', 14); xlabel('Time steps', 'FontSize', 14);
    title('Residual', 'FontSize', 14);

    % Plot total energy over time
    subplot('Position', [0.36, 0.05, 0.26, 0.4]);
    plot(Observ.EVec, '-b')
    ylabel('$E$', 'FontSize', 14); xlabel('Time steps', 'FontSize', 14);
    title('Total Energy', 'FontSize', 14);

    % Plot chemical potential over time
    subplot('Position', [0.67, 0.05, 0.26, 0.4]);
    plot(Observ.mucVec, '-b')
    ylabel('$\mu$', 'FontSize', 14); xlabel('Time steps', 'FontSize', 14);
    title('Chemical Potential', 'FontSize', 14);
end
