diff --git a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m index a8978b733c0c9e9d2b97084c9fec085298b5c1dd..1df35c1c1f990eff12d6d9bca0fe1403629eb9dc 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m +++ b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m @@ -4,7 +4,7 @@ function [ids_pf_active,ids_pf_active_description,varargout] = tcv_get_ids_pf_ac % % Input pharser -if exist('gdat_params') +if exist('gdat_params','var') [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,'gdat_params',gdat_params,varargin{:}); else [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:}); @@ -21,7 +21,7 @@ end ids_pf_active.vertical_force = {}; % cocos automatic transform -if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2 +if exist('ids_generic_cocos_nodes_transformation_symbolic','file') [ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',gdat_params.cocos_in, ... gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in, ... gdat_params.error_bar,gdat_params.nverbose); diff --git a/matlab/TCV_IMAS/tcv_ids_coil.m b/matlab/TCV_IMAS/tcv_ids_coil.m index 13eb86f0f7d3580ba00cb632fc5fa407f6024323..8fc6ae8171d4beecee6e90c79594b4e02f671b55 100644 --- a/matlab/TCV_IMAS/tcv_ids_coil.m +++ b/matlab/TCV_IMAS/tcv_ids_coil.m @@ -13,11 +13,11 @@ function [ids_struct_out,ids_struct_out_description] = tcv_ids_coil(shot, ids_s % TODO add logic to get the current in the coils only once. error_bar = 'delta'; -if exist('gdat_params') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar) +if exist('gdat_params','var') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar) error_bar = gdat_params.error_bar; end params_eff_ref = gdat_params; params_eff_ref.doplot=0; -try;params_eff_ref=rmfield(params_eff_ref,'source');catch;end % make sure no source (from ids def) +try params_eff_ref=rmfield(params_eff_ref,'source');catch;end % make sure no source (from ids def) % Coils that can be characterized by R, Z and a % crosssectional area are described as distinct coils with a single element, this also corresponds to coils with distinct TCV names). @@ -44,117 +44,118 @@ r_c = mdsvalue('_r_c=static(''r_c'')'); % R position z_c = mdsvalue('_z_c=static(''z_c'')'); % Z position w_c = mdsvalue('static(''w_c'')'); % width rectangular description h_c = mdsvalue('static(''h_c'')'); % height rectangular description -a_c = mdsvalue('static(''a_c'')'); % tilt angle for parallelogram representation ( deprecated representation in IDS) +% a_c = mdsvalue('static(''a_c'')'); % tilt angle for parallelogram representation ( deprecated representation in IDS) nt_c = mdsvalue('static(''nt_c'')'); % number of turns xsect_c = mdsvalue('static(''xsect_c'')'); res_c = mdsvalue('static(''res_c'')'); % resistence of the coil sizepfc = numel(r_c); -namepfc = mdsvalue('dim_of(_r_c)'); +namepfc = mdsvalue('static(''dim_c'')'); % Set effective turns in T1 and T2 (see J.-M. Moret, et al., RSI 69 (1998) 2333) -iT = strmatch('T_001',namepfc); +iT = strcmp('T_001',namepfc); nt_c(iT)=26/68; -iT = strmatch('T_002',namepfc); +iT = strcmp('T_002',namepfc); nt_c(iT)=42/68; -iT = strmatch('T_003',namepfc); % Return current +iT = strcmp('T_003',namepfc); % Return current nt_c(iT)=1; % Approximate circular G-coil conductor with a square of the same crosssection -iG=strmatch('G_00',namepfc); +iG=strcmp('G_00',namepfc); w_c(iG)=sqrt(xsect_c(iG)); h_c(iG)=sqrt(xsect_c(iG)); %% Put data to ids structure ids_struct_out(1:sizepfc) = ids_structures; +ids_struct_out_description = cell(1,sizepfc); ind_coil_ids = 0; params_eff = params_eff_ref; for ii=1:ncircuits2ids - ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit - - for jj = 1:ncoil2ids - ind_coil_ids = ind_coil_ids +1; - ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj}; - ids_struct_out_description{ind_coil_ids}.name = ['through aa=tcv_ids_pf_active_definition from aa.coil_names ']; - - % time-varying data - if shot == -1 - tmpdata.dim{1} = []; - tmpdata.data = []; - warning('no time data loaded for shot %d',shot); - else - params_eff.data_request = mds_paths2ids{ii}; - tmpdata = gdat_tcv(shot,params_eff); - end -% $$$ ids_struct_out{ind_coil_ids}.current.data = tmpdata.data; -% $$$ ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}]; - ids_struct_out{ind_coil_ids}.current.data = pf_def.coil_current_signs{ii}(jj) .* tmpdata.data; - ids_struct_out_description{ind_coil_ids}.current.data = ['from ' num2str(pf_def.coil_current_signs{ii}(jj)) ' * ' mds_paths2ids{ii}]; -try + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + + for jj = 1:ncoil2ids + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj}; + ids_struct_out_description{ind_coil_ids}.name = 'through aa=tcv_ids_pf_active_definition from aa.coil_names '; + + % time-varying data + if shot == -1 + tmpdata.dim{1} = []; + tmpdata.data = []; + warning('no time data loaded for shot %d',shot); + else + params_eff.data_request = mds_paths2ids{ii}; + tmpdata = gdat_tcv(shot,params_eff); + end + % $$$ ids_struct_out{ind_coil_ids}.current.data = tmpdata.data; + % $$$ ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}]; + ids_struct_out{ind_coil_ids}.current.data = pf_def.coil_current_signs{ii}(jj) .* tmpdata.data; + ids_struct_out_description{ind_coil_ids}.current.data = ['from ' num2str(pf_def.coil_current_signs{ii}(jj)) ' * ' mds_paths2ids{ii}]; + try ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1}; -catch - keyboard - end - - % Find index on static tree - tmpind = find(strcmp(ids_struct_out{ind_coil_ids}.name, namepfc)); - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.r = r_c(tmpind); - ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_r = ['from static(''r_c'')']; - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.z = z_c(tmpind); - ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_z = ['from static(''z_c'')']; - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_c(tmpind); - ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_width = ['from static(''w_c'')']; - ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind); - ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_height = ['from static(''h_c'')']; - ids_struct_out{ind_coil_ids}.element{1}.turns_with_sign = nt_c(tmpind); - ids_struct_out_description{ind_coil_ids}.element{1}.turns_with_sign = ['from static(''nt_c'')']; - ids_struct_out{ind_coil_ids}.element{1}.geometry.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle - ids_struct_out_description{ind_coil_ids}.element{1}.geometry.geometry_type = 'rectangle'; - - ids_struct_out{ind_coil_ids}.resistance = res_c(tmpind); - ids_struct_out_description{ind_coil_ids}.resistance = ['from static(''res_c'')']; + catch + keyboard end + + % Find index on static tree + tmpind = find(strcmp(ids_struct_out{ind_coil_ids}.name, namepfc)); + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.r = r_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_r = 'from static(''r_c'')'; + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.z = z_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_z = 'from static(''z_c'')'; + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_width = 'from static(''w_c'')'; + ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_height = 'from static(''h_c'')'; + ids_struct_out{ind_coil_ids}.element{1}.turns_with_sign = nt_c(tmpind); + ids_struct_out_description{ind_coil_ids}.element{1}.turns_with_sign = 'from static(''nt_c'')'; + ids_struct_out{ind_coil_ids}.element{1}.geometry.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle + ids_struct_out_description{ind_coil_ids}.element{1}.geometry.geometry_type = 'rectangle'; + + ids_struct_out{ind_coil_ids}.resistance = res_c(tmpind); + ids_struct_out_description{ind_coil_ids}.resistance = 'from static(''res_c'')'; + end end % fixed_error = 200.; ind_coil_ids = 0; switch error_bar - case 'delta' - for ii=1:ncircuits2ids - ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit - for jj = 1:ncoil2ids - fixed_error = pf_def.coil_current_error{ii}(jj); - ind_coil_ids = ind_coil_ids +1; - ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - ids_struct_out_description{ind_coil_ids}.current_data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['not provided since symmetric']; + case 'delta' + for ii=1:ncircuits2ids + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + for jj = 1:ncoil2ids + fixed_error = pf_def.coil_current_error{ii}(jj); + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out_description{ind_coil_ids}.current_data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out_description{ind_coil_ids}.current_data_error_lower = 'not provided since symmetric'; + end end - end - case 'delta_with_lower' - for ii=1:ncircuits2ids - ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit - for jj = 1:ncoil2ids - fixed_error = pf_def.coil_current_error{ii}(jj); - ind_coil_ids = ind_coil_ids +1; - ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data_error_upper; - ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from fixed error value in case ' error_bar]; - ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from fixed error value in case ' error_bar]; + case 'delta_with_lower' + for ii=1:ncircuits2ids + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + for jj = 1:ncoil2ids + fixed_error = pf_def.coil_current_error{ii}(jj); + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data_error_upper; + ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from fixed error value in case ' error_bar]; + ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from fixed error value in case ' error_bar]; + end end - end - case 'added' - for ii=1:ncircuits2ids - ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit - for jj = 1:ncoil2ids - fixed_error = pf_def.coil_current_error{ii}(jj); - ind_coil_ids = ind_coil_ids +1; - ids_struct_out{ind_coil_ids}.current.data_error_upper = ids_struct_out{ind_coil_ids}.current.data ... + case 'added' + for ii=1:ncircuits2ids + ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit + for jj = 1:ncoil2ids + fixed_error = pf_def.coil_current_error{ii}(jj); + ind_coil_ids = ind_coil_ids +1; + ids_struct_out{ind_coil_ids}.current.data_error_upper = ids_struct_out{ind_coil_ids}.current.data ... + fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data ... + ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data ... - fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from data + fixed error value in case ' error_bar]; - ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from data - fixed error value in case ' error_bar]; + ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from data + fixed error value in case ' error_bar]; + ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from data - fixed error value in case ' error_bar]; + end end - end - otherwise - error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) + otherwise + error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) end diff --git a/matlab/TCV_IMAS/tcv_ids_pf_active_definition.m b/matlab/TCV_IMAS/tcv_ids_pf_active_definition.m index 35230de7d17067ce3c7292de7b3cb202203be099..413340424beb1618110ad6bee605be8d466516d6 100644 --- a/matlab/TCV_IMAS/tcv_ids_pf_active_definition.m +++ b/matlab/TCV_IMAS/tcv_ids_pf_active_definition.m @@ -1,87 +1,96 @@ -function [ combined_structure] = tcv_ids_pf_active_definition() +function [ combined_structure] = tcv_ids_pf_active_definition(doplot) % All circuits are connected in series and has only 1 power supply, so they % share the same current. +if nargin < 1, doplot = 0;end + +% NOTE: The sign for T_00* comes from the connection matrix in the static +% tree "T_C_A". +% TODO: We could probably rebuild the connection matrix from the static +% tree node "T_C_A". + % {Coil name}, [connection side identifier] -error_fixed = 200.; +error_fixed = 200.; % This is the error assigned by LIUQE to each circuit/PS + % Since all coils are serially connected to their PS, + % this is also the error for individual coil currents. coil_names_and_current_sign = {... - {'A_001'}, [1], error_fixed*0.007; ... % Circuit 1 - {'B_001', 'B_002', 'C_001', 'C_002', 'D_001', 'D_002'}, [1, 1, 1, 1, 1, 1], ... - error_fixed*[0.03448275862, 0.03448275862, 0.08333333333333, 0.08333333333333, 0.125, 0.125]; ... % Circuit 2 - {'E_001'}, [1], error_fixed*0.02941176470588; ... % Circuit 3 - {'E_002'}, [1], error_fixed*0.02941176470588; ... % Circuit 4 - {'E_003'}, [1], error_fixed*0.02941176470588; ... % Circuit 5 - {'E_004'}, [1], error_fixed*0.02941176470588; ... % Circuit 6 - {'E_005'}, [1], error_fixed*0.02941176470588; ... % Circuit 7 - {'E_006'}, [1], error_fixed*0.02941176470588; ... % Circuit 8 - {'E_007'}, [1], error_fixed*0.02941176470588; ... % Circuit 9 - {'E_008'}, [1], error_fixed*0.02941176470588; ... % Circuit 10 - {'F_001'}, [1], error_fixed*0.02777777777778; ... % Circuit 11 - {'F_002'}, [1], error_fixed*0.02777777777778; ... % Circuit 12 - {'F_003'}, [1], error_fixed*0.02777777777778; ... % Circuit 13 - {'F_004'}, [1], error_fixed*0.02777777777778; ... % Circuit 14 - {'F_005'}, [1], error_fixed*0.02777777777778; ... % Circuit 15 - {'F_006'}, [1], error_fixed*0.02777777777778; ... % Circuit 16 - {'F_007'}, [1], error_fixed*0.02777777777778; ... % Circuit 17 - {'F_008'}, [1], error_fixed*0.02777777777778; ... % Circuit 18 - {'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [1,1,1,-1,-1,-1], error_fixed*[1, 1, 1, 1, 1, 1]; ... % Circuit 19 Lower coils connected in opposite direcetion - {'T_001', 'T_002', 'T_003'}, [1,1,-1], error_fixed*[2.61538489704145, 1.619047511111125, 1]; ...% Circuit 20 %T003 in opposite direction -}; + {'A_001'}, 1, error_fixed; ... % Circuit 1 + {'B_001', 'B_002', 'C_001', 'C_002', 'D_001', 'D_002'}, [1, 1, 1, 1, 1, 1], ... + error_fixed*[1, 1, 1, 1, 1, 1]; ... % Circuit 2 + {'E_001'}, 1, error_fixed; ... % Circuit 3 + {'E_002'}, 1, error_fixed; ... % Circuit 4 + {'E_003'}, 1, error_fixed; ... % Circuit 5 + {'E_004'}, 1, error_fixed; ... % Circuit 6 + {'E_005'}, 1, error_fixed; ... % Circuit 7 + {'E_006'}, 1, error_fixed; ... % Circuit 8 + {'E_007'}, 1, error_fixed; ... % Circuit 9 + {'E_008'}, 1, error_fixed; ... % Circuit 10 + {'F_001'}, 1, error_fixed; ... % Circuit 11 + {'F_002'}, 1, error_fixed; ... % Circuit 12 + {'F_003'}, 1, error_fixed; ... % Circuit 13 + {'F_004'}, 1, error_fixed; ... % Circuit 14 + {'F_005'}, 1, error_fixed; ... % Circuit 15 + {'F_006'}, 1, error_fixed; ... % Circuit 16 + {'F_007'}, 1, error_fixed; ... % Circuit 17 + {'F_008'}, 1, error_fixed; ... % Circuit 18 + {'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [ 1, 1, 1,-1,-1,-1], error_fixed*[ 1, 1, 1, 1, 1, 1]; ... % Circuit 19 Lower coils connected in opposite direcetion + {'T_001', 'T_002', 'T_003'}, [-1,-1, 1], error_fixed*[1, 1, 1]; ...% Circuit 20 %T003 in opposite direction + }; power_supply_names_and_current_sign = {... -{'OH1'}, [1];... % Circuit 1 -{'OH2'}, [1];... % Circuit 2 -{'E1'}, [1];...% Circuit 3 -{'E2'}, [1];...% Circuit 4 -{'E3'}, [1];... % Circuit 5 -{'E4'}, [1];... % Circuit 6 -{'E5'}, [1];... % Circuit 7 -{'E6'}, [1];... % Circuit 8 -{'E7'}, [1];... % Circuit 9 -{'E8'}, [1];... % Circuit 10 -{'F1'}, [1];... % Circuit 11 -{'F2'}, [1];... % Circuit 12 -{'F3'}, [1];... % Circuit 13 -{'F4'}, [1];... % Circuit 14 -{'F5'}, [1];... % Circuit 15 -{'F6'}, [1];... % Circuit 16 -{'F7'}, [1];... % Circuit 17 -{'F8'}, [1];... % Circuit 18 -{'FPS'}, [1];...% Circuit 19 -{'T'}, [1];... % Circuit 20 -}; - -coil_names = {coil_names_and_current_sign{:,1}}'; -coil_current_sign = {coil_names_and_current_sign{:,2}}; -coil_current_error = {coil_names_and_current_sign{:,3}}; -power_supply_names = {power_supply_names_and_current_sign{:,1}}'; -power_supply_current_sign = {power_supply_names_and_current_sign{:,2}}; + {'OH1'}, 1;... % Circuit 1 + {'OH2'}, 1;... % Circuit 2 + {'E1'}, 1;... % Circuit 3 + {'E2'}, 1;... % Circuit 4 + {'E3'}, 1;... % Circuit 5 + {'E4'}, 1;... % Circuit 6 + {'E5'}, 1;... % Circuit 7 + {'E6'}, 1;... % Circuit 8 + {'E7'}, 1;... % Circuit 9 + {'E8'}, 1;... % Circuit 10 + {'F1'}, 1;... % Circuit 11 + {'F2'}, 1;... % Circuit 12 + {'F3'}, 1;... % Circuit 13 + {'F4'}, 1;... % Circuit 14 + {'F5'}, 1;... % Circuit 15 + {'F6'}, 1;... % Circuit 16 + {'F7'}, 1;... % Circuit 17 + {'F8'}, 1;... % Circuit 18 + {'FPS'}, 1;... % Circuit 19 + {'T'}, 1;... % Circuit 20 + }; + +coil_names = coil_names_and_current_sign(:,1); +coil_current_sign = coil_names_and_current_sign(:,2); +coil_current_error = coil_names_and_current_sign(:,3); +power_supply_names = power_supply_names_and_current_sign(:,1); +power_supply_current_sign = power_supply_names_and_current_sign(:,2); circuit_names = power_supply_names; % mds path to be called with gdat mds_paths = {... - '\magnetics::ipol[*,"OH_001"]';... % Circuit 1 - '\magnetics::ipol[*,"OH_002"]'; ... % Circuit 2 - '\magnetics::ipol[*,"E_001"]';... % Circuit 3 - '\magnetics::ipol[*,"E_002"]';...% Circuit 4 - '\magnetics::ipol[*,"E_003"]';...% Circuit 5 - '\magnetics::ipol[*,"E_004"]';...% Circuit 6 - '\magnetics::ipol[*,"E_005"]';...% Circuit 7 - '\magnetics::ipol[*,"E_006"]';...% Circuit 8 - '\magnetics::ipol[*,"E_007"]';...% Circuit 9 - '\magnetics::ipol[*,"E_008"]'; ...% Circuit 10 - '\magnetics::ipol[*,"F_001"]';...% Circuit 11 - '\magnetics::ipol[*,"F_002"]';...% Circuit 12 - '\magnetics::ipol[*,"F_003"]';...% Circuit 13 - '\magnetics::ipol[*,"F_004"]';...% Circuit 14 - '\magnetics::ipol[*,"F_005"]';...% Circuit 15 - '\magnetics::ipol[*,"F_006"]';...% Circuit 16 - '\magnetics::ipol[*,"F_007"]';...% Circuit 17 - '\magnetics::ipol[*,"F_008"]';... % Circuit 18 - 'is_in("G_001",dim_of(\magnetics::ipol,1)) ? \magnetics::ipol[*,"G_001"] : make_signal(zero(shape(data(\magnetics::ipol))[0],1.0),*,dim_of(\magnetics::ipol,0))';... % G coils % Circuit 19 - '\magnetics::iphi';... % Connection between tf coils % Circuit 20 -}; + '\magnetics::ipol[*,"OH_001"]';... % Circuit 1 + '\magnetics::ipol[*,"OH_002"]'; ... % Circuit 2 + '\magnetics::ipol[*,"E_001"]';... % Circuit 3 + '\magnetics::ipol[*,"E_002"]';...% Circuit 4 + '\magnetics::ipol[*,"E_003"]';...% Circuit 5 + '\magnetics::ipol[*,"E_004"]';...% Circuit 6 + '\magnetics::ipol[*,"E_005"]';...% Circuit 7 + '\magnetics::ipol[*,"E_006"]';...% Circuit 8 + '\magnetics::ipol[*,"E_007"]';...% Circuit 9 + '\magnetics::ipol[*,"E_008"]'; ...% Circuit 10 + '\magnetics::ipol[*,"F_001"]';...% Circuit 11 + '\magnetics::ipol[*,"F_002"]';...% Circuit 12 + '\magnetics::ipol[*,"F_003"]';...% Circuit 13 + '\magnetics::ipol[*,"F_004"]';...% Circuit 14 + '\magnetics::ipol[*,"F_005"]';...% Circuit 15 + '\magnetics::ipol[*,"F_006"]';...% Circuit 16 + '\magnetics::ipol[*,"F_007"]';...% Circuit 17 + '\magnetics::ipol[*,"F_008"]';... % Circuit 18 + 'is_in("G_001",dim_of(\magnetics::ipol,1)) ? \magnetics::ipol[*,"G_001"] : make_signal(zero(shape(data(\magnetics::ipol))[0],1.0),*,dim_of(\magnetics::ipol,0))';... % G coils % Circuit 19 + '\magnetics::iphi';... % Connection between tf coils % Circuit 20 + }; % Combined structure @@ -93,17 +102,18 @@ combined_structure.coil_current_signs = coil_current_sign; combined_structure.coil_current_error = coil_current_error; combined_structure.power_supply_current_signs = power_supply_current_sign; combined_structure.circuit_names = circuit_names; -combined_structure = get_circuiting(combined_structure); %Add circuiting information +combined_structure = get_circuiting(combined_structure,doplot); %Add circuiting information %% Create the connection matrix from the previous information -function circuit_struct = get_circuiting(circuit_struct) +function circuit_struct = get_circuiting(circuit_struct,doplot) +if nargin<2, doplot=0;end % Get dimension of the circuits circuit_struct.ntotcircuits = numel(circuit_struct.circuit_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,circuit_struct.ntotcircuits); for ii=1:circuit_struct.ntotcircuits - circuit_struct.ncoilpercircuit(ii) = numel(circuit_struct.coil_names{ii}); + circuit_struct.ncoilpercircuit(ii) = numel(circuit_struct.coil_names{ii}); end % Each circuit has only 1 power supply-> number of elements per circuit = @@ -114,74 +124,72 @@ circuit_struct.ntotelements = sum(circuit_struct.nnodespercircuit); circuit_struct.connection_matrix = struct([]); -power_supply_index = 0; coil_column_index = 2*circuit_struct.ntotpowersupplies ; for ii=1:circuit_struct.ntotcircuits - 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 + 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 - - 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 + 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 + 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 ) +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 = 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; +yti = (1:size(b,1))+0.5; +xti = (1:size(b,2))+0.5; -ylab = cellstr(num2str([1:size(b,1)-1]')); +ylab = cellstr(num2str((1:size(b,1)-1).')); index = 0; -xlab = {}; +xlab = cell(1,numel(psnames)); % 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']; + 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 + 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