From 508d037ea04715ae08cfea415377b80afcf14ced Mon Sep 17 00:00:00 2001
From: Olivier Sauter <Olivier.Sauter@epfl.ch>
Date: Tue, 29 Oct 2019 10:24:03 +0100
Subject: [PATCH] fix n_x_point from linear interpolation and problem with
 psitbxtcv2 removing time points

integers should be piece-wise constant interpolated, and psitbxtcv2/psitbxtcv use unique(t) once closest times are taken, thus it removes time points if time_out array delta_t smaller than liuqe (which is easy since typically 17ms). At this stage modified psitbxtcv2/psitbxtcv with unique_t=false input arg in my matlab_imas folder
---
 matlab/TCV_IMAS/tcv_get_ids_equilibrium.m | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
index fdc6b9f8..391d8e44 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m
@@ -203,8 +203,9 @@ for it=1:numel(ids_equilibrium.time)
   ids_equilibrium.time_slice{it}.boundary.geometric_axis.r = temp.rgeom.data(it);
   ids_equilibrium.time_slice{it}.boundary.geometric_axis.z = temp.zgeom.data(it);
   if temp.n_x_point.data(it) > 0
-    ids_equilibrium.time_slice{it}.boundary.x_point(1:temp.n_x_point.data(it)) = ids_equilibrium.time_slice{it}.boundary.x_point(1);
-    for i=1:temp.n_x_point.data(it)
+    % not that asking for time_out may lead to interpolated nb of X-points non integer, should included piece-wise constant interpolation for equil quantities...
+    ids_equilibrium.time_slice{it}.boundary.x_point(1:fix(temp.n_x_point.data(it))) = ids_equilibrium.time_slice{it}.boundary.x_point(1);
+    for i=1:fix(temp.n_x_point.data(it))
       ids_equilibrium.time_slice{it}.boundary.x_point{i}.r = temp.r_x_point.data(i,it);
       ids_equilibrium.time_slice{it}.boundary.x_point{i}.z = temp.z_x_point.data(i,it);
     end
@@ -296,7 +297,7 @@ switch liuqe_opt
  case {12,13}, psitbx_str=['LIUQE' num2str(mod(liuqe_opt,10))];
  otherwise, error(['Unknown LIUQE version, liuqe = ' num2str(liuqe_opt)]);
 end
-fsd = psitbxtcv2(shot,profiles_1d.volume.t,'FS',psitbx_str); % will get automatically the correct time interval
+fsd = psitbxtcv2(shot,profiles_1d.volume.t,'FS',psitbx_str,false); % will get automatically the correct time interval
 grho_metric_3D = metric(fsd,-1);
 % Introduced new anonymous function to compute FS average ...
 metric_FS = metric(grho_metric_3D.grid,[2,3]);
-- 
GitLab