Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
gdat
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SPC
gdat
Commits
13227a1b
Commit
13227a1b
authored
5 years ago
by
Francesco Carpanese
Committed by
Olivier Sauter
5 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Moving to a unique version of LIUQE IDS to include all cases
parent
0590752c
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!41
Add corsica liuqe complete ids from meq
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
IDS/gen_filament.m
+51
-111
51 additions, 111 deletions
IDS/gen_filament.m
with
51 additions
and
111 deletions
IDS/gen_filament.m
+
51
−
111
View file @
13227a1b
function
[
discretizationr
,
discretizationz
,
Twc
]
=
eval_trap
(
vvdata
,
num
,
type
,
varargin
)
function
[
discretizationr
,
discretizationz
,
Twc
]
=
gen_filament
(
vvdata
,
num
,
type_coil_description
,
varargin
)
% Evaluate the trapezoid from vv data structure, and computes the
% Generate filamentary(windings) discretization from different geometrical coil descriptions
% discretization
% type = 2 -> rectangle description
% type = 3 -> oblique description
% type = 4 -> contour of the coils are specified varargin = [r, z ]
% contours
% vv data contains R, Z, dR, dZ for type = 2.
% vv data contains R, Z, dR, dZ, AC, AC2 for type = 3 where AC, AC2 are the
% angles of the parallelogram. Refer to GA document for specifications.
if
mod
(
num
,
1
)
~=
0
,
warning
(
'The number of turns must be an integer. Ceil operation on it'
);
end
% type_coil_description = 2 -> rectangle description
num
=
ceil
(
num
);
% type_coil_description = 3 -> oblique description
% type_coil_description = 4 -> contour of the coils are specified varargin = [r, z ] contours
% vvdata = R, Z, dR, dZ for type_coil_description = 2.
% vvdata = R, Z, dR, dZ, AC, AC2 for type_coil_description = 3 where AC, AC2 are the angles of the parallelogram.
R
=
vvdata
(
1
,
:);
R
=
vvdata
(
1
,
:);
Z
=
vvdata
(
2
,
:);
Z
=
vvdata
(
2
,
:);
dR
=
vvdata
(
3
,
:);
dR
=
vvdata
(
3
,
:);
dZ
=
vvdata
(
4
,
:);
dZ
=
vvdata
(
4
,
:);
switch
type_coil_description
switch
type
case
1
% outline option
case
1
% outline option
disp
(
'Not yet implemented. It will contain outline option IMAS'
)
error
(
'Filamentary discretization for
''
outline
''
coils description in ids type_coil_description not yet implmented'
)
return
case
2
% rectangle
case
2
% rectangle
AC
=
0
*
ones
(
size
(
R
));
AC
=
0
*
ones
(
size
(
R
));
AC2
=
90
*
ones
(
size
(
R
));
AC2
=
90
*
ones
(
size
(
R
));
case
3
% oblique (parallelogram)
case
3
% oblique
AC
=
vvdata
(
5
,
:);
AC
=
vvdata
(
5
,
:);
AC2
=
vvdata
(
6
,
:);
AC2
=
vvdata
(
6
,
:);
case
4
% contour of the polygon
case
4
% contour of the polygon
error
(
'Filamentary discretizaion for
''
polygon
''
coils description in ids typ not yet implemented'
)
otherwise
otherwise
disp
(
'case not defined'
)
error
(
'Coils description not supported for filamenteray discretization '
)
return
end
end
% Initialize the extrema of the trapezoid
% Initialize the extrema of the trapezoid
pointr
=
zeros
(
numel
(
AC
),
4
);
pointr
=
zeros
(
numel
(
AC
),
4
);
pointz
=
zeros
(
numel
(
AC
),
4
);
pointz
=
zeros
(
numel
(
AC
),
4
);
discretizationr
=
[];
discretizationr
=
[];
discretizationz
=
[];
discretizationz
=
[];
Twc
=
[];
% Grouping matrix from windings to active coil
Twc
=
[];
% Grouping matrix from windings to active coil
for
ii
=
1
:
numel
(
AC
)
% loop all the coils
for
ii
=
1
:
numel
(
AC
)
% loop all the coils given vvstructure
% Find 4 extrema of the parallelogram
% D----C
% / /
% A----B
if
AC2
(
ii
)
~=
0
&&
AC
(
ii
)
==
0
if
AC2
(
ii
)
~=
0
&&
AC
(
ii
)
==
0
DH
=
dZ
(
ii
)/
tand
(
AC2
(
ii
));
DH
=
dZ
(
ii
)/
tand
(
AC2
(
ii
));
pointr
(
ii
,
1
)
=
R
(
ii
)
-
DH
/
2
-
dR
(
ii
)/
2
;
pointr
(
ii
,
1
)
=
R
(
ii
)
-
DH
/
2
-
dR
(
ii
)/
2
;
pointr
(
ii
,
2
)
=
R
(
ii
)
+
DH
/
2
-
dR
(
ii
)/
2
;
pointr
(
ii
,
2
)
=
R
(
ii
)
+
DH
/
2
-
dR
(
ii
)/
2
;
pointr
(
ii
,
3
)
=
R
(
ii
)
+
DH
/
2
+
dR
(
ii
)/
2
;
pointr
(
ii
,
3
)
=
R
(
ii
)
+
DH
/
2
+
dR
(
ii
)/
2
;
pointr
(
ii
,
4
)
=
R
(
ii
)
-
DH
/
2
+
dR
(
ii
)/
2
;
pointr
(
ii
,
4
)
=
R
(
ii
)
-
DH
/
2
+
dR
(
ii
)/
2
;
pointz
(
ii
,
1
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
1
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
2
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
2
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
3
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
3
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
4
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
4
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
elseif
AC
(
ii
)
~=
0
&&
AC2
(
ii
)
==
0
elseif
AC
(
ii
)
~=
0
&&
AC2
(
ii
)
==
0
DH
=
dR
(
ii
)
*
tand
(
AC
(
ii
));
DH
=
dR
(
ii
)
*
tand
(
AC
(
ii
));
pointr
(
ii
,
1
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
1
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
2
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
2
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
3
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointr
(
ii
,
3
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointr
(
ii
,
4
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointr
(
ii
,
4
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointz
(
ii
,
1
)
=
Z
(
ii
)
-
DH
/
2
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
1
)
=
Z
(
ii
)
-
DH
/
2
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
2
)
=
Z
(
ii
)
-
DH
/
2
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
2
)
=
Z
(
ii
)
-
DH
/
2
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
3
)
=
Z
(
ii
)
+
DH
/
2
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
3
)
=
Z
(
ii
)
+
DH
/
2
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
4
)
=
Z
(
ii
)
+
DH
/
2
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
4
)
=
Z
(
ii
)
+
DH
/
2
-
dZ
(
ii
)/
2
;
elseif
AC2
(
ii
)
==
0
&&
AC
(
ii
)
==
0
elseif
AC2
(
ii
)
==
0
&&
AC
(
ii
)
==
0
pointr
(
ii
,
1
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
1
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
2
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
2
)
=
R
(
ii
)
-
dR
(
ii
)/
2
;
pointr
(
ii
,
3
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointr
(
ii
,
3
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointr
(
ii
,
4
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointr
(
ii
,
4
)
=
R
(
ii
)
+
dR
(
ii
)/
2
;
pointz
(
ii
,
1
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
1
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
2
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
2
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
3
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
3
)
=
Z
(
ii
)
+
dZ
(
ii
)/
2
;
pointz
(
ii
,
4
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
pointz
(
ii
,
4
)
=
Z
(
ii
)
-
dZ
(
ii
)/
2
;
end
end
% Define base vector of the 2D deformed space for the parallelogram
AD
=
[
pointr
(
ii
,
4
)
-
pointr
(
ii
,
1
),
pointz
(
ii
,
4
)
-
pointz
(
ii
,
1
)];
AD
=
[
pointr
(
ii
,
4
)
-
pointr
(
ii
,
1
),
pointz
(
ii
,
4
)
-
pointz
(
ii
,
1
)];
AB
=
[
pointr
(
ii
,
2
)
-
pointr
(
ii
,
1
),
pointz
(
ii
,
2
)
-
pointz
(
ii
,
1
)];
AB
=
[
pointr
(
ii
,
2
)
-
pointr
(
ii
,
1
),
pointz
(
ii
,
2
)
-
pointz
(
ii
,
1
)];
ex
=
[
1
,
0
];
ex
=
[
1
,
0
];
ey
=
[
0
,
1
];
ey
=
[
0
,
1
];
% Rotation matrix containing the scalar product of the deformed space
% and orthogonal space
S
=
([
ex
*
AD
', ex*AB'
;
ey
*
AD
', ey*AB'
]);
S
=
([
ex
*
AD
', ex*AB'
;
ey
*
AD
', ey*AB'
]);
%fixed_area = 0.01; %Decide the area represented by each single coils
% Try to use a number of filaments that respect the shape of the parallelogram
%area_of_element = abs(AB(1)*AD(2)-AB(2)*AD(1)); %Evaluate the closer area to the element
ratio
=
sqrt
((
AD
*
AD
'))/sqrt((AB*AB'
));
num1
=
ceil
(
sqrt
(
num
(
ii
)
*
ratio
));
num2
=
ceil
(
num1
/
ratio
);
%num = round(area_of_element/fixed_area); %Find the number of integer
pointx
=
zeros
(
num1
*
num2
,
1
);
%filaments closer to a fixed desired area for each element.
pointy
=
zeros
(
num1
*
num2
,
1
);
for
kk
=
1
:
num1
for
jj
=
1
:
num2
if
numel
(
num
)
==
1
%selfsimilar equally spaced
pointx
((
kk
-
1
)
*
num1
+
jj
)
=
(
2
*
kk
-
1
)/(
2
*
num1
);
%uniform grid in the deformed space defined by the parallelogram
pointy
((
kk
-
1
)
*
num2
+
jj
)
=
(
2
*
jj
-
1
)/(
2
*
num2
);
pointx
=
zeros
(
num
*
num
,
1
);
tmp
=
S
*
[
pointx
((
kk
-
1
)
*
(
num1
)
+
jj
),
pointy
((
kk
-
1
)
*
(
num2
)
+
jj
)]
'
;
% evaluate component in the r,z system of reference
pointy
=
zeros
(
num
*
num
,
1
);
discretizationr
(
end
+
1
)
=
pointr
(
ii
,
1
)
+
tmp
(
1
)
;
% translate to the original central location
discretizationz
(
end
+
1
)
=
pointz
(
ii
,
1
)
+
tmp
(
2
);
% translate to the original central location
% Mode with selfsimilar shape
for
kk
=
1
:
num
for
jj
=
1
:
num
pointx
((
kk
-
1
)
*
num
+
jj
)
=
(
2
*
kk
-
1
)/(
2
*
num
);
%uniform grid in the deformed space defined by the parallelogram
pointy
((
kk
-
1
)
*
num
+
jj
)
=
(
2
*
jj
-
1
)/(
2
*
num
);
tmp
=
S
*
[
pointx
((
kk
-
1
)
*
(
num
)
+
jj
),
pointy
((
kk
-
1
)
*
(
num
)
+
jj
)]
'
;
% evaluate component in the r,z system of reference
discretizationr
(
end
+
1
)
=
pointr
(
ii
,
1
)
+
tmp
(
1
)
;
% translate to the original point
discretizationz
(
end
+
1
)
=
pointz
(
ii
,
1
)
+
tmp
(
2
);
end
end
end
% Creating the grouping matrix
tmp
=
zeros
(
num
*
num
,
numel
(
AC
));
tmp
(:,
ii
)
=
1
;
Twc
=
[
Twc
;
tmp
];
else
%Depending on the turns and same similar aspect ration
ratio
=
sqrt
(
dot
(
AB
,
AB
)/
dot
(
AD
,
AD
));
nx
=
ceil
(
sqrt
(
num
(
ii
)/
ratio
));
ny
=
ceil
(
nx
*
ratio
);
if
ny
>=
2
pointy
=
linspace
(
1
/(
ny
-
1
)/
2
,
1
-
1
/(
ny
-
1
)/
2
,
ny
);
else
pointy
=
0.5
;
end
if
nx
>=
2
pointx
=
linspace
(
1
/(
nx
-
1
)/
2
,
1
-
1
/(
nx
-
1
)/
2
,
nx
);
else
pointx
=
0.5
;
end
[
pointxx
,
pointyy
]
=
meshgrid
(
pointx
,
pointy
);
for
kk
=
1
:
ny
for
jj
=
1
:
nx
tmp
=
S
*
[
pointxx
(
kk
,
jj
);
pointyy
(
kk
,
jj
)];
% evaluate component in the r,z system of reference
discretizationr
(
end
+
1
)
=
pointr
(
ii
,
1
)
+
tmp
(
1
)
;
% translate to the original point
discretizationz
(
end
+
1
)
=
pointz
(
ii
,
1
)
+
tmp
(
2
);
end
end
% Creating the grouping matrix
tmp
=
zeros
(
nx
*
ny
,
numel
(
num
));
tmp
(:,
ii
)
=
1
;
Twc
=
[
Twc
;
tmp
];
end
end
% Only the number of turns is specified but not the position of
% each individual winding. The function eval_trap generates a winding
% distrubution that nicely resamble the geometry of the coil section,
% but will not necessarily generate a number of windings = number of
% turns. The following normalization garanties that the total current
% flowing in the cross section of coil Iw*nw = Ia*nturns respect the input data.
Twc
(
end
+
1
:
end
+
num1
*
num2
,
end
+
1
)
=
1
*
sign
(
num
(
ii
))/(
num1
*
num2
)
*
num
(
ii
);
end
end
% Reshape filaments(windings) into unique vector
%% Plot the coils discretization from the original data
%{
figure
hold
on
axis
equal
for
ii
=
1
:
numel
(
AC
)
% loop all the coils
patch
(
pointr
(
ii
,:),
pointz
(
ii
,:),
'red'
);
end
scatter
(
discretizationr
,
discretizationz
,
'.'
);
%}
discretizationr
=
reshape
(
discretizationr
,
numel
(
discretizationr
),
1
);
discretizationr
=
reshape
(
discretizationr
,
numel
(
discretizationr
),
1
);
discretizationz
=
reshape
(
discretizationz
,
numel
(
discretizationz
),
1
);
discretizationz
=
reshape
(
discretizationz
,
numel
(
discretizationz
),
1
);
% Plot the coils discretization
if
~
isempty
(
varargin
)
&&
varargin
{
1
}
==
1
figure
hold
on
axis
equal
for
ii
=
1
:
numel
(
AC
)
% loop all the coils
patch
(
pointr
(
ii
,:),
pointz
(
ii
,:),
'red'
);
end
scatter
(
discretizationr
,
discretizationz
,
'.'
);
end
end
end
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment