diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m index c0289a7144b407781fe4b735671117faa07e2366..dc9b7443be9f08f1cc5e7dccdda690c678f3fa68 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m +++ b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m @@ -105,10 +105,10 @@ end id_ec.description = 'L1/G1 Sources from electron cyclotron heating and current drive'; id_ec.index = 3; id_ec.name = 'ec'; for i_lau = active_launchers - ids_core_sources.source{last_index+i_lau} = source_template; - ids_core_sources.source{last_index+i_lau}.identifier = id_ec; - ids_core_sources.source{last_index+i_lau}.profiles_1d(1:ec_n_t) = {profiles_template}; - ids_core_sources.source{last_index+i_lau}.global_quantities(1:ec_n_t) = {globals_template}; + ids_core_sources.source{last_index+i_lau} = source_template; + ids_core_sources.source{last_index+i_lau}.identifier = id_ec; + ids_core_sources.source{last_index+i_lau}.profiles_1d(1:ec_n_t) = {profiles_template}; + ids_core_sources.source{last_index+i_lau}.global_quantities(1:ec_n_t) = {globals_template}; end ec_total_pow = transpose(powers_gdat.ec.data(:,nb_launchers+1)); %use power from powers_gdat(injected ec power) instead of ec_data power @@ -117,15 +117,15 @@ ec_total_cur = ec_data.cd_tot.data(nb_launchers+1,:); ec_total_cur(isnan(ec_total_cur)) = 0; for i_lau = active_launchers - for ii = 1:ec_n_t - ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.time = ec_t_grid(ii); % profiles time - ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.time = ec_t_grid(ii); % globals time - - % globals - ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.time = ec_t_grid(ii); - ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.power = ec_total_pow(ii); - ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.current_parallel = ec_total_cur(ii); - end + for ii = 1:ec_n_t + ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.time = ec_t_grid(ii); % profiles time + ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.time = ec_t_grid(ii); % globals time + + % globals + ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.time = ec_t_grid(ii); + ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.power = ec_total_pow(ii); + ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.current_parallel = ec_total_cur(ii); + end end % interpoating p_dens profiles from 'ec_time' grid (toray time nodes) to 'ec_t_grid' (injected power time) @@ -145,20 +145,20 @@ norm_p_integrated = zeros(rho_grid, n_active_launchers, n_ec_time); norm_cd_dens = zeros(rho_grid, n_active_launchers, n_ec_time); norm_cd_integrated = zeros(rho_grid, n_active_launchers, n_ec_time); for t = 1:n_ec_time - norm_p_dens_temp = zeros(rho_grid, n_active_launchers); - norm_p_integrated_temp = zeros(rho_grid, n_active_launchers); - norm_cd_dens_temp = zeros(rho_grid, n_active_launchers); - norm_cd_integrated_temp = zeros(rho_grid, n_active_launchers); - for i_lau = n_active_launchers - norm_p_dens_temp(:, i_lau) = p_dens(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, active_launchers(i_lau)); - norm_p_integrated_temp(:, i_lau) = p_integrated(:, active_launchers(i_lau)) ./ sparse_p_ec_injected(t, active_launchers(i_lau)); - norm_cd_dens_temp(:, i_lau) = cd_dens(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, i_lau); - norm_cd_integrated_temp(:, i_lau) = cd_integrated(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, active_launchers(i_lau)); - end - norm_p_dens(:,:,t) = norm_p_dens_temp; - norm_p_integrated(:,:,t) = norm_p_integrated_temp; - norm_cd_dens(:,:,t) = norm_cd_dens_temp; - norm_cd_integrated(:,:,t) = norm_cd_integrated_temp; + norm_p_dens_temp = zeros(rho_grid, n_active_launchers); + norm_p_integrated_temp = zeros(rho_grid, n_active_launchers); + norm_cd_dens_temp = zeros(rho_grid, n_active_launchers); + norm_cd_integrated_temp = zeros(rho_grid, n_active_launchers); + for i_lau = n_active_launchers + norm_p_dens_temp(:, i_lau) = p_dens(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, active_launchers(i_lau)); + norm_p_integrated_temp(:, i_lau) = p_integrated(:, active_launchers(i_lau)) ./ sparse_p_ec_injected(t, active_launchers(i_lau)); + norm_cd_dens_temp(:, i_lau) = cd_dens(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, i_lau); + norm_cd_integrated_temp(:, i_lau) = cd_integrated(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, active_launchers(i_lau)); + end + norm_p_dens(:,:,t) = norm_p_dens_temp; + norm_p_integrated(:,:,t) = norm_p_integrated_temp; + norm_cd_dens(:,:,t) = norm_cd_dens_temp; + norm_cd_integrated(:,:,t) = norm_cd_integrated_temp; end % interpolate normalised p_dens profiles on ec_t_grid @@ -167,20 +167,20 @@ interp_norm_p_integrated = zeros(rho_grid, n_active_launchers, ec_n_t); interp_norm_cd_dens = zeros(rho_grid, n_active_launchers, ec_n_t); interp_norm_cd_integrated = zeros(rho_grid, n_active_launchers, ec_n_t); for rho = 1:rho_grid - for i_lau = 1:n_active_launchers - profile_p_dens = squeeze(norm_p_dens(rho, i_lau, :)); - profile_p_integrated = squeeze(norm_p_integrated(rho, i_lau, :)); - profile_cd_dens = squeeze(norm_cd_dens(rho, i_lau, :)); - profile_cd_integrated = squeeze(norm_cd_integrated(rho, i_lau, :)); - interp_profile_p_dens = interp1(ec_time, profile_p_dens, ec_t_grid); - interp_profile_p_integrated = interp1(ec_time, profile_p_integrated, ec_t_grid); - interp_profile_cd_dens = interp1(ec_time, profile_cd_dens, ec_t_grid); - interp_profile_cd_integrated = interp1(ec_time, profile_cd_integrated, ec_t_grid); - interp_norm_p_dens(rho, i_lau, :) = interp_profile_p_dens; - interp_norm_p_integrated(rho, i_lau, :) = interp_profile_p_integrated; - interp_norm_cd_dens(rho, i_lau, :) = interp_profile_cd_dens; - interp_norm_cd_integrated(rho, i_lau, :) = interp_profile_cd_integrated; - end + for i_lau = 1:n_active_launchers + profile_p_dens = squeeze(norm_p_dens(rho, i_lau, :)); + profile_p_integrated = squeeze(norm_p_integrated(rho, i_lau, :)); + profile_cd_dens = squeeze(norm_cd_dens(rho, i_lau, :)); + profile_cd_integrated = squeeze(norm_cd_integrated(rho, i_lau, :)); + interp_profile_p_dens = interp1(ec_time, profile_p_dens, ec_t_grid); + interp_profile_p_integrated = interp1(ec_time, profile_p_integrated, ec_t_grid); + interp_profile_cd_dens = interp1(ec_time, profile_cd_dens, ec_t_grid); + interp_profile_cd_integrated = interp1(ec_time, profile_cd_integrated, ec_t_grid); + interp_norm_p_dens(rho, i_lau, :) = interp_profile_p_dens; + interp_norm_p_integrated(rho, i_lau, :) = interp_profile_p_integrated; + interp_norm_cd_dens(rho, i_lau, :) = interp_profile_cd_dens; + interp_norm_cd_integrated(rho, i_lau, :) = interp_profile_cd_integrated; + end end % normalised & interpolated profiles * p_ec_injected on ec_t_grid @@ -189,44 +189,43 @@ interp_p_integrated = zeros(rho_grid, n_active_launchers, ec_n_t); interp_cd_dens = zeros(rho_grid, n_active_launchers, ec_n_t); interp_cd_integrated = zeros(rho_grid, n_active_launchers, ec_n_t); for t = 1:numel(ec_t_grid) - unnormalised_p_dens = zeros(rho_grid, n_active_launchers); - unnormalised_p_integrated = zeros(rho_grid, n_active_launchers); - unnormalised_cd_dens = zeros(rho_grid, n_active_launchers); - unnormalised_cd_integrated = zeros(rho_grid, n_active_launchers); - for i_lau = 1:n_active_launchers - unnormalised_p_dens(:,i_lau) = interp_norm_p_dens(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); - unnormalised_p_integrated(:,i_lau) = interp_norm_p_integrated(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); - unnormalised_cd_dens(:,i_lau) = interp_norm_cd_dens(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); - unnormalised_cd_integrated(:,i_lau) = interp_norm_cd_integrated(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); - end - interp_p_dens(:,:,t) = unnormalised_p_dens; - interp_p_integrated(:,:,t) = unnormalised_p_integrated; - interp_cd_dens(:,:,t) = unnormalised_cd_dens; - interp_cd_integrated(:,:,t) = unnormalised_cd_integrated; + unnormalised_p_dens = zeros(rho_grid, n_active_launchers); + unnormalised_p_integrated = zeros(rho_grid, n_active_launchers); + unnormalised_cd_dens = zeros(rho_grid, n_active_launchers); + unnormalised_cd_integrated = zeros(rho_grid, n_active_launchers); + for i_lau = 1:n_active_launchers + unnormalised_p_dens(:,i_lau) = interp_norm_p_dens(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); + unnormalised_p_integrated(:,i_lau) = interp_norm_p_integrated(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); + unnormalised_cd_dens(:,i_lau) = interp_norm_cd_dens(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); + unnormalised_cd_integrated(:,i_lau) = interp_norm_cd_integrated(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau)); + end + interp_p_dens(:,:,t) = unnormalised_p_dens; + interp_p_integrated(:,:,t) = unnormalised_p_integrated; + interp_cd_dens(:,:,t) = unnormalised_cd_dens; + interp_cd_integrated(:,:,t) = unnormalised_cd_integrated; end for ii = 1:ec_n_t - for i_lau = active_launchers - launcher_index = find(active_launchers == i_lau); - ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.grid.rho_tor_norm = ... - ec_data.p_dens.rhotor_norm(1,:); - ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.electrons.energy = ... - interp_p_dens(:,launcher_index,ii); - ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.electrons.power_inside = ... - interp_p_integrated(:,launcher_index,ii); - % current density (to adapt to <J.B>/B0) - ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.j_parallel = ... - interp_cd_dens(:,launcher_index,ii); - % integrated current density (to adapt to INTEGRAL(<J.B>/B0)*ds_phi) - ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.current_parallel_inside = ... - interp_cd_integrated(:,launcher_index,ii); - - end + for i_lau = active_launchers + launcher_index = find(active_launchers == i_lau); + ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.grid.rho_tor_norm = ... + ec_data.p_dens.rhotor_norm(1,:); + ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.electrons.energy = ... + interp_p_dens(:,launcher_index,ii); + ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.electrons.power_inside = ... + interp_p_integrated(:,launcher_index,ii); + % current density (to adapt to <J.B>/B0) + ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.j_parallel = ... + interp_cd_dens(:,launcher_index,ii); + % integrated current density (to adapt to INTEGRAL(<J.B>/B0)*ds_phi) + ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.current_parallel_inside = ... + interp_cd_integrated(:,launcher_index,ii); + end end %add empty sources for rest of unsused launchers if numel(ids_core_sources.source)-last_index ~= nb_launchers - ids_core_sources.source{last_index+nb_launchers} = []; + ids_core_sources.source{last_index+nb_launchers} = []; end last_index = last_index+nb_launchers;