Commit 712a2d27 authored by Sebastian Hofmann's avatar Sebastian Hofmann ☝🏽
Browse files

added Re_particle_over_height_w_error

parent 8a18e927
% ** coded by Sebastian Hofmann **
% ** s.m.hofmann@mailbox.org ** sebastian.hofmann@tuhh.de **
%
% Creation of data for Figure 10, Re particle number over reactor height with uncertainty
% (for paper: 6 azimuthal positions calulated, on the SECOND is used! -> azimuthal 20 mm away from shaft at tip of impeller)
% Load .mat created by "y_cut_data_exp_sim.m", experimental or simulation, one after
% another!!
% (1) is done for all data sets, (2) combines all data sets to one .mat file
% (3) Calculation of Reynolds particle number, (4) plot the data only for 450 rpm
%
% INFORMATION
% 1.1 Define azimuthal area in l.46-47 and file name in l.111-112
% 1.2 Define particle characteristics l.166-170
% 2. Used data here are as follows:
% 1-6: 252 rpm: sim flowtracer - sim 180 1000 - sim 180 1024 - sim 740 1024 - exp 180 1000 - exp 740 1024
% 7-12: 450 rpm: sim flowtracer - sim 180 1000 - sim 180 1024 - sim 740 1024 - exp 180 1000 - exp 740 1024
% meaning 180 or 740 µm in particle size and 1000 or 1024 kg/m^-3 particle density
% 3. Data set of "sim 180 1024" is not used for the publication!
clear all
close all
%% (1) Load .mat file with separated tracks and from pie_piece and calculate velocity and std for resp. area
[FileName,FilePath] = uigetfile('*.mat','Select the .mat file', ...
'C:\','MultiSelect', 'off');
load(strcat(FilePath,FileName));
% General calculation for all subs, radial distance
r = sqrt((x).^2+(z).^2); % calculation of r position of all data points
% Calculate center of bins of respective y-axis subdivision - definition of grid size
y_spaces = linspace(0,228,228); % reactor height with 228 mm ->
% division into 228 bins to gain 1mm grid height
[N, edges_y]=histcounts(y_spaces,228); % edges_y used later for calculation
j=0;
center_edges_y = zeros(size(edges_y,2)-1,1); % calc of center of bins (just to be precise for plot)
for i = 1:size(edges_y,2)-1
j = j + 1;
center_edges_y(j,1) = (edges_y(1,j) + edges_y(1,j + 1))./2;
end
% Defining azimuthal values to investigate
azimut = [10 20 30 40 50 60]; % in mm away from center of shaft
dazimut = [2 2 2 2 2 2]; % plus/minus distance around respective defined azimuth radius above
azimut_u = azimut + dazimut;
azimut_l = azimut - dazimut;
azimut_all = [azimut_l;azimut_u];
% Calculating respective average velocities
% starts at bottom left bin at respective radius and goes to top right bin of last radius distance
for k = 1:size(azimut_all,2) % counter for radius bin
clear y_v_r
clear v_mag_r
clear u_r
clear v_r
clear w_r
y_v_r = y(r>azimut_all(1,k) & r<azimut_all(2,k)); % defining range of y value
v_mag_r = v_mag(r>azimut_all(1,k) & r<azimut_all(2,k)); % looking for all velocities in that range of r
u_r = u(r>azimut_all(1,k) & r<azimut_all(2,k));
v_r = v(r>azimut_all(1,k) & r<azimut_all(2,k));
w_r = w(r>azimut_all(1,k) & r<azimut_all(2,k));
j = 0; % counter for axial/y bin
v_avg_bin = zeros(size(edges_y,2)-1,1);
for i = 1:size(edges_y,2)-1 % Start scanning from bottom to top to corr. defined y bins
j = j + 1;
[a ~] = find(y_v_r >= edges_y(1,j) & y_v_r < edges_y(1,j + 1)); % still working with fund function, can be optimized to logical
v_mag_r_avg_bin(j,1) = mean(v_mag_r(a,:),'omitnan');
u_r_avg_bin(j,1) = mean(u_r(a,:),'omitnan');
v_r_avg_bin(j,1) = mean(v_r(a,:),'omitnan');
w_r_avg_bin(j,1) = mean(w_r(a,:),'omitnan');
v_mag_r_avg_bin_std(j,1) = std(v_mag_r(a,:),'omitnan');
u_r_avg_bin_std(j,1) = std(u_r(a,:),'omitnan');
v_r_avg_bin_std(j,1) = std(v_r(a,:),'omitnan');
w_r_avg_bin_std(j,1) = std(w_r(a,:),'omitnan');
% for calc of uncertainty
v_mag_r_avg_bin_std_count(j,1) = length(v_mag_r(a,:)) - sum(isnan(v_mag_r(a,:)));
u_r_avg_bin_count(j,1) = length(u_r(a,:)) - sum(isnan(u_r(a,:)));
v_r_avg_bin_count(j,1) = length(v_r(a,:)) - sum(isnan(v_r(a,:)));
w_r_avg_bin_count(j,1) = length(w_r(a,:)) - sum(isnan(w_r(a,:)));
end
v_mag_r_avg_bin_all(:,k) = v_mag_r_avg_bin;
u_r_avg_bin_all(:,k) = u_r_avg_bin;
v_r_avg_bin_all(:,k) = v_r_avg_bin;
w_r_avg_bin_all(:,k) = w_r_avg_bin;
v_mag_r_avg_bin_all_std(:,k) = v_mag_r_avg_bin_std;
u_r_avg_bin_all_std(:,k) = u_r_avg_bin_std;
v_r_avg_bin_all_std(:,k) = v_r_avg_bin_std;
w_r_avg_bin_all_std(:,k) = w_r_avg_bin_std;
% for calc of uncertainty
v_mag_r_avg_bin_all_std_count(:,k) = v_mag_r_avg_bin_std_count;
u_r_avg_bin_all_std_count(:,k) = u_r_avg_bin_count;
v_r_avg_bin_all_std_count(:,k) = v_r_avg_bin_count;
w_r_avg_bin_all_std_count(:,k) = w_r_avg_bin_count;
end
% Saving of respective dataset
fname = sprintf('graph_vel_over_height_azimut6_sim_200LX_1024_740_450rpm_pie_4mm'); % Enter filename here!
%fname = sprintf('graph_vel_over_height_azimut6_exp_1024_740_450rpm_pie_4mm'); % Enter filename here!
fpath = sprintf('C:/'); % Enter filepath here!
save(strcat(fpath,'./',fname,'.mat'),...
'v_mag_r_avg_bin_all','u_r_avg_bin_all','v_r_avg_bin_all','w_r_avg_bin_all',...
'v_mag_r_avg_bin_all_std','u_r_avg_bin_all_std','v_r_avg_bin_all_std','w_r_avg_bin_all_std',...
'v_mag_r_avg_bin_all_std_count','u_r_avg_bin_all_std_count','v_r_avg_bin_all_std_count','w_r_avg_bin_all_std_count',...
'center_edges_y','azimut_all')
fprintf('Done!\n')
%% (2) Reload data from single mat file and saves them with resp. index for plotting
%n..1-6 252 rpm: sim flowtracer - sim 180 1000 - sim 180 1024 - sim 740 1024 - exp 180 1000 - exp 740 1024
%n..7-12 450 rpm: sim flowtracer - sim 180 1000 - sim 180 1024 - sim 740 1024 - exp 180 1000 - exp 740 1024
n = 0;
for i=1:12
[FileName,FilePath] = uigetfile('*.mat','Select the .mat file', ...
'C:/','MultiSelect', 'off');
load(strcat(FilePath,FileName));
n = n+1;
v_mag_uvw_avg_azimut6_all{n} = cat(3,[u_r_avg_bin_all],[v_r_avg_bin_all],[w_r_avg_bin_all],[v_mag_r_avg_bin_all]);
v_mag_uvw_avg_azimut6_all_std{n} = cat(3,[u_r_avg_bin_all_std],[v_r_avg_bin_all_std],[w_r_avg_bin_all_std],[v_mag_r_avg_bin_all_std]);
v_mag_uvw_avg_azimut6_all_std_count{n} = cat(3,[u_r_avg_bin_all_std_count],[v_r_avg_bin_all_std_count],[w_r_avg_bin_all_std_count],[v_mag_r_avg_bin_all_std_count]);
end
fname = sprintf('graph_vel_over_height_azimut6_all_252rpm_450rpm_pie_4mm'); % Enter filename here!
fpath = sprintf('C:/'); % Enter filepath here!
save(strcat(fpath,'./',fname,'.mat'),...
'v_mag_uvw_avg_azimut6_all','v_mag_uvw_avg_azimut6_all_std','v_mag_uvw_avg_azimut6_all_std_count',...
'center_edges_y','azimut_all')
%% (3) Calculation of Reynolds particle number from created dataset above
clear all
% Load .mat file with azimut separated data (e.g. 6 azimuts), from e.g. v_mag_uvw_azimut6.m
[FileName,FilePath] = uigetfile('*.mat','Select the .mat file', ...
'./','MultiSelect', 'off');
load(strcat(FilePath,FileName));
% First rename the long name
vel = v_mag_uvw_avg_azimut6_all;
vel_std = v_mag_uvw_avg_azimut6_all_std;
vel_std_count = v_mag_uvw_avg_azimut6_all_std_count;
% Variables liquid and solid
rho_f = 998.2; % density fluid, kgm^-3
rho_p = [1024; 1000; rho_f]; % density alginate/PE particle/Flow tracer particle, kgm^-3
d_p = [732*10^(-6); 180*10^(-6)]; % alginate/PE particle diameter, m
eta = 1.0016 * 10^-3; % dyn. viscosity of fluid, Pa s
nue = eta / rho_f; % kin. viscosity of fluid, m^2 s^-1
% Calculation of Reynolds particle number for respective azimuthal for both rpm
% 252 rpm
for n = [2:6]
dufp{n} = vel{1}(:,:,1) - vel{n}(:,:,1); % Calculate the respective delta veloc from fluid to particle for Re_p
dvfp{n} = vel{1}(:,:,2) - vel{n}(:,:,2);
dwfp{n} = vel{1}(:,:,3) - vel{n}(:,:,3);
dufp_squ{n} = dufp{n}.^2;
dvfp_squ{n} = dvfp{n}.^2;
dwfp_squ{n} = dwfp{n}.^2;
dvelfp_squ_root{n} = sqrt(dufp_squ{n} + dvfp_squ{n} + dwfp_squ{n}); %
% Error propagation calc for 252 rpm - Calc of uncertainty with 6 parts
der_uf{n} = ((vel{1}(:,:,1) - vel{n}(:,:,1)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{1}(:,:,1) ./ sqrt(vel_std_count{1}(:,:,1)).^2);
der_up{n} = ((- vel{1}(:,:,1) + vel{n}(:,:,1)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{n}(:,:,1) ./ sqrt(vel_std_count{n}(:,:,1)).^2);
der_vf{n} = ((vel{1}(:,:,2) - vel{n}(:,:,2)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{1}(:,:,2) ./ sqrt(vel_std_count{1}(:,:,2)).^2);
der_vp{n} = ((- vel{1}(:,:,2) + vel{n}(:,:,2)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{n}(:,:,2) ./ sqrt(vel_std_count{n}(:,:,2)).^2);
der_wf{n} = ((vel{1}(:,:,3) - vel{n}(:,:,3)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{1}(:,:,3) ./ sqrt(vel_std_count{1}(:,:,3)).^2);
der_wp{n} = ((- vel{1}(:,:,3) + vel{n}(:,:,3)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{n}(:,:,3) ./ sqrt(vel_std_count{n}(:,:,3)).^2);
delta_dvelfp_squ_root{n} = sqrt(der_uf{n} + der_up{n} + der_vf{n} + der_vp{n} + der_wf{n} + der_wp{n});
end
Re_p_azimut6_252{1} = (rho_f .* d_p(2,1) .* dvelfp_squ_root{2}) ./ eta; % Calc Re particle with average velocity in resp. horizontal bin
Re_p_azimut6_252{3} = (rho_f .* d_p(1,1) .* dvelfp_squ_root{4}) ./ eta;
Re_p_azimut6_252{4} = (rho_f .* d_p(2,1) .* dvelfp_squ_root{5}) ./ eta;
Re_p_azimut6_252{5} = (rho_f .* d_p(1,1) .* dvelfp_squ_root{6}) ./ eta;
Re_p_azimut6_252_delta{1} = sqrt(((rho_f .* d_p(2,1)) ./ eta).^2 .* delta_dvelfp_squ_root{2}.^2);
Re_p_azimut6_252_delta{3} = sqrt(((rho_f .* d_p(1,1)) ./ eta).^2 .* delta_dvelfp_squ_root{4}.^2);
Re_p_azimut6_252_delta{4} = sqrt(((rho_f .* d_p(2,1)) ./ eta).^2 .* delta_dvelfp_squ_root{5}.^2);
Re_p_azimut6_252_delta{5} = sqrt(((rho_f .* d_p(1,1)) ./ eta).^2 .* delta_dvelfp_squ_root{6}.^2);
for n = [1:5]
curve1_Re_p_azimut6_252{n} = Re_p_azimut6_252{n}' + Re_p_azimut6_252_delta{n}';
curve2_Re_p_azimut6_252{n} = Re_p_azimut6_252{n}' - Re_p_azimut6_252_delta{n}'; % wenn ganzer Bereich benötigt, dann Re_p_azimut6_252_delta{n} zu Re_p_azimut6_252 ändern
curve1_Re_p_azimut6_252{n}(isnan(curve1_Re_p_azimut6_252{n})) = 0;
curve2_Re_p_azimut6_252{n}(isnan(curve2_Re_p_azimut6_252{n})) = 0;
inBetween_Re_p_azimut6_252{n} = [curve1_Re_p_azimut6_252{n}, fliplr(curve2_Re_p_azimut6_252{n})];
end
% 450 rpm
for n = [8:12]
dufp{n} = vel{7}(:,:,1) - vel{n}(:,:,1); % Calculate the respective delta veloc from fluid to particle for Re_p
dvfp{n} = vel{7}(:,:,2) - vel{n}(:,:,2);
dwfp{n} = vel{7}(:,:,3) - vel{n}(:,:,3);
dufp_squ{n} = dufp{n}.^2;
dvfp_squ{n} = dvfp{n}.^2;
dwfp_squ{n} = dwfp{n}.^2;
dvelfp_squ_root{n} = sqrt(dufp_squ{n} + dvfp_squ{n} + dwfp_squ{n});
% Error propagation calc for 450 rpm - Calc of uncertainty with 6 parts
der_uf{n} = ((vel{7}(:,:,1) - vel{n}(:,:,1)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{7}(:,:,1) ./ sqrt(vel_std_count{7}(:,:,1)).^2);
der_up{n} = ((- vel{7}(:,:,1) + vel{n}(:,:,1)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{n}(:,:,1) ./ sqrt(vel_std_count{n}(:,:,1)).^2);
der_vf{n} = ((vel{7}(:,:,2) - vel{n}(:,:,2)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{7}(:,:,2) ./ sqrt(vel_std_count{7}(:,:,2)).^2);
der_vp{n} = ((- vel{7}(:,:,2) + vel{n}(:,:,2)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{n}(:,:,2) ./ sqrt(vel_std_count{n}(:,:,2)).^2);
der_wf{n} = ((vel{7}(:,:,3) - vel{n}(:,:,3)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{7}(:,:,3) ./ sqrt(vel_std_count{7}(:,:,3)).^2);
der_wp{n} = ((- vel{7}(:,:,3) + vel{n}(:,:,3)).^2 ./ dvelfp_squ_root{n}.^2) .* (vel_std{n}(:,:,3) ./ sqrt(vel_std_count{n}(:,:,3)).^2);
delta_dvelfp_squ_root{n} = sqrt(der_uf{n} + der_up{n} + der_vf{n} + der_vp{n} + der_wf{n} + der_wp{n});
end
Re_p_azimut6_450{1} = (rho_f .* d_p(2,1) .* dvelfp_squ_root{8}) ./ eta; % Calc Re particle with average velocity in resp. horizontal bin
Re_p_azimut6_450{3} = (rho_f .* d_p(1,1) .* dvelfp_squ_root{10}) ./ eta;
Re_p_azimut6_450{4} = (rho_f .* d_p(2,1) .* dvelfp_squ_root{11}) ./ eta;
Re_p_azimut6_450{5} = (rho_f .* d_p(1,1) .* dvelfp_squ_root{12}) ./ eta;
Re_p_azimut6_450_delta{1} = sqrt(((rho_f .* d_p(2,1)) ./ eta).^2 .* delta_dvelfp_squ_root{8}.^2);
Re_p_azimut6_450_delta{3} = sqrt(((rho_f .* d_p(1,1)) ./ eta).^2 .* delta_dvelfp_squ_root{10}.^2);
Re_p_azimut6_450_delta{4} = sqrt(((rho_f .* d_p(2,1)) ./ eta).^2 .* delta_dvelfp_squ_root{11}.^2);
Re_p_azimut6_450_delta{5} = sqrt(((rho_f .* d_p(1,1)) ./ eta).^2 .* delta_dvelfp_squ_root{12}.^2);
for n = [1:5]
curve1_Re_p_azimut6_450{n} = Re_p_azimut6_450{n}' + Re_p_azimut6_450_delta{n}';
curve2_Re_p_azimut6_450{n} = Re_p_azimut6_450{n}' - Re_p_azimut6_450_delta{n}';
curve1_Re_p_azimut6_450{n}(isnan(curve1_Re_p_azimut6_450{n})) = 0;
curve2_Re_p_azimut6_450{n}(isnan(curve2_Re_p_azimut6_450{n})) = 0;
inBetween_Re_p_azimut6_450{n} = [curve1_Re_p_azimut6_450{n}, fliplr(curve2_Re_p_azimut6_450{n})];
end
% Additional information for shaded std area in graph
y_axis_shade = [center_edges_y', fliplr(center_edges_y')];
% Save results of current run
fname = sprintf('graph_Re_particle_over_height_azimut6_all_252rpm_450rpm_pie_4mm'); % Enter filename here!
fpath = sprintf('C:/'); % Enter filepath here!
save(strcat(fpath,'./',fname,'.mat'),...
'Re_p_azimut6_252','Re_p_azimut6_252_delta','curve1_Re_p_azimut6_252','curve2_Re_p_azimut6_252','inBetween_Re_p_azimut6_252',...
'Re_p_azimut6_450','Re_p_azimut6_450_delta','curve1_Re_p_azimut6_450','curve2_Re_p_azimut6_450','inBetween_Re_p_azimut6_450',...
'center_edges_y','y_axis_shade')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (4) Figure 10 - special for paper: r = 20 mit +-2mm in bin, PE/Alg (sim) und PE/Alg (exp)
% Experimentally and numerically determined particle Reynolds number for the pie_piece, only for 450 rpm
% over the reactor height,for the radial position of 20 mm, time-, axially- and azimuthally-averaged for
% radial bin size of 4 mm and an axial bin size of 1 mm.
fig = figure(1)
pp = tiledlayout(1,2);
p1 = nexttile
plot(Re_p_azimut6_450{1}(:,2),center_edges_y(:,1),"-",'Color','blue','LineWidth',2)
hold on
plot(Re_p_azimut6_450{3}(:,2),center_edges_y(:,1),"-",'Color',[0.75 0.75 0],'LineWidth',2)
fill(inBetween_Re_p_azimut6_450{1}(2,:), y_axis_shade(1,:),'b',...
'facealpha',0.45,'LineWidth',0.1,'LineStyle','none')
fill(inBetween_Re_p_azimut6_450{3}(2,:), y_axis_shade(1,:),[0.75, 0.75, 0],...
'facealpha',0.45,'LineWidth',0.1,'LineStyle','none')
line1 = yline(30,'-.','LineWidth',1.3,'interpreter','latex')
axes = gca;
axes.FontSize = 14;
xlim([0 200])
ylim([0 225])
hold off
grid on
p2 = nexttile
plot(Re_p_azimut6_450{4}(:,2),center_edges_y(:,1),"-",'Color','blue','LineWidth',2)
hold on
plot(Re_p_azimut6_450{5}(:,2),center_edges_y(:,1),"-",'Color',[0.75 0.75 0],'LineWidth',2)
fill(inBetween_Re_p_azimut6_450{4}(2,:), y_axis_shade(1,:),'b',...
'facealpha',.45,'LineWidth',0.14,'LineStyle','none');
fill(inBetween_Re_p_azimut6_450{5}(2,:), y_axis_shade(1,:),[0.75, 0.75, 0],...
'facealpha',.45,'LineWidth',0.14,'LineStyle','none');
line1 = yline(30,'-.','LineWidth',1.3,'interpreter','latex')
axes = gca;
axes.FontSize = 14;
xlim([0 200])
ylim([0 225])
hold off
grid on
pp.Padding = 'compact';
pp.TileSpacing = 'compact';
% Add shared title and axis labels
title(p1,'r = 20 mm','FontSize',17,'interpreter','latex')
title(p2,'r = 20 mm','FontSize',17,'interpreter','latex')
xlabel(pp,"$Re_{\textrm{p}}$ / -",...
'FontSize',17,'interpreter','latex');
ylabel(pp,"Reactor height \textit{h} / mm",'FontSize',19,'interpreter','latex');
leg = legend(p2,{
'180 µm, 1000 kg m^{-3}',...
'732 µm, 1024 kg m^{-3}',...
'\Delta_{180 µm, 1000 kg m^{-3}}',...
'\Delta_{732 µm, 1024 kg m^{-3}}'},...
'FontSize',14,'Location','EastOutside')
set(0,'DefaultAxesFontSize', 18)
set(gcf,'PaperPositionMode','auto')
set(fig,'units','centimeters','position',[25,5,24,16])
annotation('textbox',...
[0.29 0.86 0.06 0.06],...
'String',{strcat('\bf','sim','\rm')},...
'FontSize',17,...
'FontName','Calibri',...
'Units','characters',...
'LineStyle','-',...
'EdgeColor',[0 0 153/255],...
'LineWidth',2,...
'BackgroundColor',[1 1 1],...
'Color',[0 0 0]);
annotation('textbox',...
[0.63 0.86 0.06 0.06],...
'String',{strcat('\bf','exp','\rm')},...
'FontSize',17,...
'FontName','Calibri',...
'Units','characters',...
'LineStyle','-',...
'EdgeColor',[0 0 153/255],...
'LineWidth',2,...
'BackgroundColor',[1 1 1],...
'Color',[0 0 0]);
print(strcat('C:/','./','Re_particle_over_height_azimut6_4mm_pie'),'-dpng','-r600');
%SH%%#%%%%%%%%%%%%%%%%#%%%%%%%####
%%%%%%%%%%%%#%v~~~~~~\%%%#%%%%%%%%
%%%%%%%#%%%%v' ~~~~\%%%%%%%
%%%%#%%%%%%v'dHHb a%%%#%%%%%%
%%%%%%%#%%v'dHHHA :%%%%%%#%%%%
%%%%%#%%%v' VHHHHaadHHb:%#%%%%%%%%
%%%%%%%#v' `VHHHHHHHHb:%%%%%#%%%
%%%#%%%v' `VHHHHHHH:%%%#%%%%%
%%%%%%%' dHHHHHHH:%%#%%%%%%
%%%%#%% dHHHHHHHH:%%%%%%%%%
%%%%%%% dHHHHHHHHH:%%#%%%%%%
%%#%%%% VHHHHHHHHH:%%%%%#%%%
%%%%%%# b HHHHHHHHV:%%%#%%#%%
%%%%%%% Hb HHHHHHHV'%%%%%%%%%%
%%%%#%% HH dHHHHHHV'%%%#%%%%%%%
%%%#%%% VHbdHHHHHHV'#%%%%%%%%%%%
%%%%%#% VHHHHHHHV'%%%%%#%%#%%%%
%%%#%%%% VHHHHHHH:%%#%%#%%#%%#%
%%#%%#%%#%%#%%#%%#%%#%%#%%#%%#%%#%
%%#%%#%%#%%#%%#%%#%%#%%#%%#%%#%IMS
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment