clc; clear;

% parametry geometrie
x_min = -100;
x_max = 100;
y_min = -50;
y_max = 50;

% parametry sponge zones
sponge_width = 100;

% parametry velikosti elementu vysledne site
euler_size = 3.0;
sponge_size = 15.0;

% nacteni site, na ktere se vytvori background mesh
soubor_GUI = 0;

if soubor_GUI == 1
    [soubor,cesta,~] = uigetfile('.msh');
    soubor_string = strcat(cesta,soubor);
else
    soubor_string = 'Bajko_Problem3_sponge_geometry.msh';
end
[P,~,E] = MshToMatlab2D(soubor_string);

K = size(E,2); % pocet trojuhelniku
hodnoty = ones(3,K);
% napocitani "profilu" velikosti elementu
hodnoty = euler_size * hodnoty;
% zjemneni ve sponge zones
v_1 = E(1,:); v_2 = E(2,:); v_3 = E(3,:);
x = [P(1,v_1); P(1,v_2); P(1,v_3)];
y = [P(2,v_1); P(2,v_2); P(2,v_3)];
beta_stretch = 1.5;
indexes_L = find(x <= x_min);
hodnoty(indexes_L) = hodnoty(indexes_L) + (sponge_size - euler_size) * (abs(x(indexes_L) - x_min) / sponge_width) .^ beta_stretch;
indexes_R = find(x >= x_max);
hodnoty(indexes_R) = hodnoty(indexes_R) + (sponge_size - euler_size) * (abs(x(indexes_R) - x_max) / sponge_width) .^ beta_stretch;

filename = 'Problem_Problem3_sponge_background_mesh.pos';
fileID = fopen(filename,'w');

fprintf(fileID,'View \"background mesh\" {\n');
for i = 1:K
    tri = E(:,i);
    % vrcholy trojuhelniku
    fprintf(fileID,'ST(');
    for j = 1:3
        fprintf(fileID,'%0.8f,%0.8f,0',P(1,tri(j)),P(2,tri(j)));
        if j < 3
            fprintf(fileID,',');
        end
    end
    fprintf(fileID,')');
    % hodnoty ve vrcholech
    fprintf(fileID,'{');
    for j = 1:3
        fprintf(fileID,'%0.8f',hodnoty(j,i));
        if j < 3
            fprintf(fileID,',');
        end
    end
    fprintf(fileID,'};\n');
end
fprintf(fileID,'};');

fclose(fileID);