From 94abd1ec21b28a055fc62569323c775b6868e4ec Mon Sep 17 00:00:00 2001
From: Francesco Carpanese <francesco.carpanese@epfl.ch>
Date: Tue, 5 Feb 2019 14:30:25 +0000
Subject: [PATCH] Connection matrix implemented

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11390 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 .../TCV_IMAS/tcv_ids_pf_active_definition.m   | 97 +++++++++++++++++--
 1 file changed, 88 insertions(+), 9 deletions(-)

diff --git a/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m b/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m
index 86d7c913..7abb4862 100644
--- a/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m
+++ b/crpptbx/TCV_IMAS/tcv_ids_pf_active_definition.m
@@ -22,8 +22,8 @@ coil_names_and_current_sign = {...
     {'F_006'}, [1]; ... % Circuit 16
     {'F_007'}, [1]; ... % Circuit 17
     {'F_008'}, [1]; ... % Circuit 18
-    {'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [1,1,1,1,1,1]; ... % Circuit 19
-    {'T_001', 'T_002', 'T_003'}, [1,1,1]; ...% Circuit 20
+    {'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [1,1,1,-1,-1,-1]; ... % Circuit 19 Lower coils connected in opposite direcetion
+    {'T_001', 'T_002', 'T_003'}, [1,1,-1]; ...% Circuit 20 %T003 in opposite direction
 };
 
 power_supply_names_and_current_sign = {...
@@ -90,32 +90,111 @@ combined_structure.mds_paths = mds_paths;
 combined_structure.coil_current_signs = coil_current_sign;
 combined_structure.power_supply_current_signs = power_supply_current_sign;
 combined_structure.circuit_names = circuit_names;
-combined_structure = get_circuiting(combined_struct); %Add circuiting information
+combined_structure = get_circuiting(combined_structure); %Add circuiting information
 
 end
 
+%% Create the connection matrix from the previous information
 function circuit_struct = get_circuiting(circuit_struct)
 % Get dimension of the circuits
 circuit_struct.ntotcircuits = numel(circuit_struct.circuit_names);
-circuit_struct.ntotpowersupply = numel(circuit_struct.power_supply_names);
+circuit_struct.ntotpowersupplies = numel(circuit_struct.power_supply_names);
 circuit_struct.ntotcoils = numel([circuit_struct.coil_names{1:end}]);
-circuit_struct.ncoilpercircuit = zeros(1,ntotcircuits);
-for ii=1:ntotcircuits
+circuit_struct.ncoilpercircuit = zeros(1,circuit_struct.ntotcircuits);
+for ii=1:circuit_struct.ntotcircuits
    circuit_struct.ncoilpercircuit(ii) =  numel(circuit_struct.coil_names{ii});
 end
 
-% Each circuit has only 1 power supply, number of elements per circuit =
+% Each circuit has only 1 power supply-> number of elements per circuit =
 % number of nodes per circuit= number of coils per circuit + 1;
 circuit_struct.nnodespercircuit = circuit_struct.ncoilpercircuit + 1; 
+circuit_struct.nelementspercircuit = circuit_struct.nnodespercircuit;
 circuit_struct.ntotelements = sum(circuit_struct.nnodespercircuit);
 
-connection_matrix = struct([]);
+circuit_struct.connection_matrix = struct([]);
+
+power_supply_index = 0;
+coil_column_index = 2*circuit_struct.ntotpowersupplies ;
 for ii=1:circuit_struct.ntotcircuits
-    circuit_connetion_matrix = zeros(circuit_struct.nnodespercircuit(ii), 2*circuit_struct.ntotelements);
+    circuit_connection_matrix = zeros(circuit_struct.nnodespercircuit(ii), 2*circuit_struct.ntotelements);
+    
+    % Put power supply connection
+    power_supply_index = ii;
+    if circuit_struct.power_supply_current_signs{power_supply_index} == 1
+        circuit_connection_matrix(1,2*(power_supply_index-1)+2) = 1;
+        circuit_connection_matrix(circuit_struct.nnodespercircuit(ii),2*(power_supply_index-1)+1) = 1;
+    elseif circuit_struct.power_supply_current_signs{power_supply_index} == -1
+        circuit_connection_matrix(1,2*(power_supply_index-1)+1) = 1;
+        circuit_connection_matrix(circuit_struct.nnodespercircuit(ii),2*(power_supply_index-1)+2) = 1;
+    end
+    
+    % Put coil connection
+    for jj=1:circuit_struct.ncoilpercircuit(ii)
+        if circuit_struct.coil_current_signs{ii}(jj) == 1
+            circuit_connection_matrix(jj, coil_column_index + 2*(jj-1) + 1  ) = 1;
+            circuit_connection_matrix(jj + 1, coil_column_index + 2*(jj-1) + 2 ) = 1;
+            
+        elseif circuit_struct.coil_current_signs{ii}(jj) == -1
+            circuit_connection_matrix(jj, coil_column_index + 2*(jj-1) + 2  ) = 1;
+            circuit_connection_matrix(jj + 1, coil_column_index + 2*(jj-1) + 1 ) = 1;
+        end
+    end
+    
+    coil_column_index = coil_column_index + 2*circuit_struct.ncoilpercircuit(ii);
+    circuit_struct.connection_matrix{ii} = circuit_connection_matrix;
+    
+    % Plot all the connaction matrices as a check
+    doplot = 0;
+    if doplot
+    plot_connection_matrix(circuit_connection_matrix, circuit_struct.power_supply_names, circuit_struct.coil_names);
+    end
     
 end
 
 end
 
+%% Plot connection matrix
+function plot_connection_matrix(mat, psnames, cnames, circuitname, circuit )
+% Plot the value of a matrix in separated block
+figure
+b = zeros([size(mat)]+1);
+b(1:end-1, 1:end-1) = mat;
+
+pcolor(b)
+
+yti = [1:size(b,1)]+0.5;
+xti = [1:size(b,2)]+0.5;
+
+ylab = cellstr(num2str([1:size(b,1)-1]'));
+index = 0;
+xlab = {};
+% Get the labels
+for ii=1:numel(psnames)
+    index = index +1;
+    xlab{index} = [psnames{ii}{1} 'in'];
+    index = index +1;
+    xlab{index} = [psnames{ii}{1} 'out'];
+end
+for ii=1:numel(cnames)
+    for jj=1:numel(cnames{ii})
+        
+        index = index +1;
+        xlab{index} = [cnames{ii}{jj} 'in'];
+        index = index +1;
+        xlab{index} = [cnames{ii}{jj} 'out'];
+    end
+end
+
+shg
+axis ij
+ax = gca;
+colormap(bone(2))
+xlabel('Element name');
+ylabel('Node');
+set(ax,'Xtick', xti, 'Ytick', yti, 'XTickLabel', xlab, 'YTickLabel', ylab')
+
+end
+
+
 
 
-- 
GitLab