From a3b6f7ab51e955199dc7501e8da3f8448bbaa389 Mon Sep 17 00:00:00 2001
From: Aliki Chatzilouka <chatzilouka.aliki@epfl.ch>
Date: Thu, 14 Mar 2024 18:17:26 +0100
Subject: [PATCH] fixing time grid for ec sources

---
 matlab/TCV_IMAS/tcv_get_ids_core_sources.m | 68 ++++++++++++----------
 1 file changed, 38 insertions(+), 30 deletions(-)

diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
index 0a4a3963..652a2339 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
@@ -36,51 +36,58 @@ globals_template = source_template.global_quantities{1};
 ohm_gdat = gdat(shot,'ohm_data');
 powers_gdat = gdat(shot,'powers');
 % fix time grid to ohm time grid, same as bs
-t_grid = ohm_gdat.t; n_t = numel(t_grid); t_spacing = mean(diff(t_grid));
 
 last_index = 0;
 %% initialize source from template
 % ohm
+ohm_t_grid = powers_gdat.ohm.t; ohm_n_t = numel(ohm_t_grid); t_spacing = mean(diff(ohm_t_grid));
+
 id_ohm.description = 'Source from ohmic heating';
 id_ohm.index = 7; id_ohm.name = 'ohmic';
-ids_core_sources.source{1} = source_template;
-ids_core_sources.source{1}.identifier = id_ohm;
-ids_core_sources.source{1}.profiles_1d(1:n_t) = {profiles_template};
-ids_core_sources.source{1}.global_quantities(1:n_t) = {globals_template};
+ids_core_sources.source{last_index+1} = source_template;
+ids_core_sources.source{last_index+1}.identifier = id_ohm;
+ids_core_sources.source{last_index+1}.profiles_1d(1:ohm_n_t) = {profiles_template};
+ids_core_sources.source{last_index+1}.global_quantities(1:ohm_n_t) = {globals_template};
 ohm_data = ohm_gdat.ohm.ohm_data;
 
 %fill profiles for times n t_grid
-for ii = 1:n_t
+
+for ii = 1:ohm_n_t
   % ohm
   % 1d_profiles
-  ids_core_sources.source{1}.profiles_1d{ii}.time = t_grid(ii);
-  ids_core_sources.source{1}.profiles_1d{ii}.j_parallel = ...
+  ids_core_sources.source{last_index+1}.profiles_1d{ii}.time = ohm_t_grid(ii);
+  ids_core_sources.source{last_index+1}.profiles_1d{ii}.j_parallel = ...
     ohm_data.cd_dens.data(:,ii)';
   % globals
-  ids_core_sources.source{1}.global_quantities{ii}.time = t_grid(ii);
-  ids_core_sources.source{1}.global_quantities{ii}.power = powers_gdat.ohm.data(ii);
+  ids_core_sources.source{last_index+1}.global_quantities{ii}.time = ohm_t_grid(ii);
+  ids_core_sources.source{last_index+1}.global_quantities{ii}.power = powers_gdat.ohm.data(ii);
 end
-last_index = last_index+1;
+
+last_index = last_index+1;  % add if statement to only increment if ohmic source has been added
+
 %% bs
 id_bs.description = 'Bootstrap current';
-id_bs.index = 13; id_bs.name = 'bootstrap_cuurent';
+id_bs.index = 13; id_bs.name = 'bootstrap_current';
 ids_core_sources.source{last_index+1} = source_template;
 ids_core_sources.source{last_index+1}.identifier = id_bs;
-ids_core_sources.source{last_index+1}.profiles_1d(1:n_t) = {profiles_template};
-ids_core_sources.source{last_index+1}.global_quantities(1:n_t) = {globals_template};
+ids_core_sources.source{last_index+1}.profiles_1d(1:ohm_n_t) = {profiles_template};
+ids_core_sources.source{last_index+1}.global_quantities(1:ohm_n_t) = {globals_template};
 % load data
 bs_gdat = gdat(shot,'bs_data'); bs_data = bs_gdat.bs.bs_data;
 
 % fill profiles for times n t_grid
-for ii = 1:n_t
+for ii = 1:ohm_n_t
    ids_core_sources.source{last_index+1}.profiles_1d{ii}.j_parallel = ...
-    bs_data.cd_dens.data(:,ii)'; 
+     bs_data.cd_dens.data(:,ii)'; 
 end
-last_index = last_index+1;
+ 
+last_index = last_index+1;  % add if statement to only increment if bs source has been added
+
 %% ec
 % load data
 ec_gdat = gdat(shot,'ec_data'); ec_data = ec_gdat.ec.ec_data;
 ec_time = ec_data.cd_dens.t;
+ec_t_grid = powers_gdat.ec.t; ec_n_t = numel(ec_t_grid); t_spacing = mean(diff(ec_t_grid));
 
 nb_launchers = size(ec_gdat.ec.ec_data.rho_max_pow_dens.data,1);
 id_ec.description = 'Sources from electron cyclotron heating and current drive';
@@ -88,22 +95,23 @@ id_ec.index = 3; id_ec.name = 'ec';
 for i = 1:nb_launchers
     ids_core_sources.source{last_index+i} = source_template;
     ids_core_sources.source{last_index+i}.identifier = id_ec;
-    ids_core_sources.source{last_index+i}.profiles_1d(1:n_t) = {profiles_template};
-    ids_core_sources.source{last_index+i}.global_quantities(1:n_t) = {globals_template};
+    ids_core_sources.source{last_index+i}.profiles_1d(1:ec_n_t) = {profiles_template};
+    ids_core_sources.source{last_index+i}.global_quantities(1:ec_n_t) = {globals_template};
 end
-% interpolate totals on t_grid
-ec_total_pow = interp1(ec_data.p_abs_plasma.t,ec_data.p_abs_plasma.data(nb_launchers+1,:),t_grid); %the index 10 works for shot 56044
+
+% interpolate totals on t_grid ??
+ec_total_pow = ec_data.p_abs_plasma.data(nb_launchers+1,:); 
 ec_total_pow(isnan(ec_total_pow)) = 0;
-ec_total_cur = interp1(ec_data.cd_tot.t,ec_data.cd_tot.data(nb_launchers+1,:),t_grid);
+ec_total_cur = ec_data.cd_tot.data(nb_launchers+1,:);
 ec_total_cur(isnan(ec_total_cur)) = 0;
 
 for i = 1:nb_launchers
-    for ii = 1:n_t
-    % ec, need to find matching time index\
-    ids_core_sources.source{last_index+i}.profiles_1d{ii}.time = t_grid(ii); % profiles time (should profiles time be ec_time?)
-    ids_core_sources.source{last_index+i}.global_quantities{ii}.time = t_grid(ii); % globals time
-    [~, ec_idx] = min(abs(ec_time-t_grid(ii)));
-    if ec_time(ec_idx) == t_grid(ii) % same grid 
+    for ii = 1:ec_n_t
+    % ec, need to find matching time index
+    ids_core_sources.source{last_index+i}.profiles_1d{ii}.time = ec_t_grid(ii); % profiles time (should profiles time be ec_time?)
+    ids_core_sources.source{last_index+i}.global_quantities{ii}.time = ec_t_grid(ii); % globals time
+    [~, ec_idx] = min(abs(ec_time-ec_t_grid(ii)));
+    if ec_time(ec_idx) == ec_t_grid(ii) % same grid 
         % current density
         ids_core_sources.source{last_index+i}.profiles_1d{ii}.j_parallel = ...
           ec_data.cd_dens.data(:,end,ec_idx)';
@@ -118,12 +126,12 @@ for i = 1:nb_launchers
           zeros(1,numel(ec_data.cd_integrated.x(1,:)))';
     end
     % globals
-    ids_core_sources.source{last_index+i}.global_quantities{ii}.time = t_grid(ii);
+    ids_core_sources.source{last_index+i}.global_quantities{ii}.time = ec_t_grid(ii);
     ids_core_sources.source{last_index+i}.global_quantities{ii}.power = ec_total_pow(ii);
     ids_core_sources.source{last_index+i}.global_quantities{ii}.current_parallel = ec_total_cur(ii);
     end
 end
-
+last_index = last_index+nb_launchers;
 
 % nbi  
 id_nbi.description = 'Source from Neutral Beam Injection';
-- 
GitLab