Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions documentation/proc-pages/eng-models/machine-build.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# Radial and Vertical Build

Simplified scale diagrams of the vertical and horizontal cross-sections of the machine can be
Simplified scale diagrams of the vertical and horizontal cross-sections of the machine can be
output in the `2-page summary` using the utility `plot_proc.py` (currently stored in `process/process/io`).

The coordinate system is $(R,Z)$ system, where $R$ is the radial distance from the vertical
The coordinate system is $(R,Z)$ system, where $R$ is the radial distance from the vertical
centreline (axis) of the torus, and $Z$ is the vertical distance from the equatorial midplane.

Components are often referred to as being 'inboard' or 'outboard', which simply
means that they lie at a radius $R$ less than or greater than $R_0$,
respectively, where $R_0$ is the plasma major radius (`rmajor`).
Components are often referred to as being 'inboard' or 'outboard', which simply
means that they lie at a radius $R$ less than or greater than $R_0$,
respectively, where $R_0$ is the plasma major radius (`rmajor`).

The radial build is described in detail in the OUT.DAT file as in the example below, which lists
the major radius of each component in the midplane. The machine is axisymmetric, except for the
TF coils which are discrete. The variables marked "IP" below are input variables. Those marked
"ITV" are available as iteration variables (although it is not always advisable to use them as
iteration variables). Those marked with an asterisk (*) may or may not be input variables
The radial build is described in detail in the OUT.DAT file as in the example below, which lists
the major radius of each component in the midplane. The machine is axisymmetric, except for the
TF coils which are discrete. The variables marked "IP" below are input variables. Those marked
"ITV" are available as iteration variables (although it is not always advisable to use them as
iteration variables). Those marked with an asterisk (*) may or may not be input variables
depending on the switches used.

```text
Expand Down Expand Up @@ -52,10 +52,10 @@ The radial build is shown schematically below (click to zoom).

<img title="Radial build" src="../../images/radial-build.png" alt="Radial build">

The vertical build is described in detail in the OUT.DAT as in the following example, which lists
the vertical coordinate of each component at the point furthest from the midplane (excluding the
CS, the other PF coils and the cryostat). The midplane is defined to be half way between the top
and bottom of the plasma. A single-null scenario is assumed to have a lower divertor, in which
The vertical build is described in detail in the OUT.DAT as in the following example, which lists
the vertical coordinate of each component at the point furthest from the midplane (excluding the
CS, the other PF coils and the cryostat). The midplane is defined to be half way between the top
and bottom of the plasma. A single-null scenario is assumed to have a lower divertor, in which
case the machine is not symmetric about the midplane.

```text
Expand All @@ -66,7 +66,7 @@ case the machine is not symmetric about the midplane.
TF coil 1.576 9.862 (tfcth)
Gap 0.050 8.286 (tftsgap)
Thermal shield 0.050 8.236 (thshield)
Gap 0.050 8.186 (vgap2)
Gap 0.050 8.186 (vgap_vv_thermalshield)
Vacuum vessel (and shielding) 0.600 8.136 (d_vv_top+shldtth)
Gap 0.020 7.536 (vvblgap)
Top blanket 0.869 7.516 (blnktth)
Expand All @@ -78,7 +78,7 @@ case the machine is not symmetric about the midplane.
Lower scrape-off 2.002 -8.031 (vgap)
Divertor structure 0.621 -8.652 (divfix)
Vacuum vessel (and shielding) 1.000 -9.652 (d_vv_bot+shldlth)
Gap 0.050 -9.702 (vgap2)
Gap 0.050 -9.702 (vgap_vv_thermalshield)
Thermal shield 0.050 -9.752 (thshield)
Gap 0.050 -9.802 (tftsgap)
TF coil 1.576 -11.379 (tfcth)
Expand All @@ -89,14 +89,14 @@ The vertical build is shown schematically below (click to zoom).

<img title="Vertical build" src="../../images/vertical-build.png" alt="Vertical build">

Since PROCESS is essentially a 0-D code, the shape of each component is used to estimate its mass
and cost, but is not used otherwise. The first wall, blanket, shield and vacuum vessel may be
either D-shaped in cross-section, or each may be defined by two half-ellipses. The choice between
Since PROCESS is essentially a 0-D code, the shape of each component is used to estimate its mass
and cost, but is not used otherwise. The first wall, blanket, shield and vacuum vessel may be
either D-shaped in cross-section, or each may be defined by two half-ellipses. The choice between
these two possibilities is set using input parameter `fwbsshape`, which should be

- 1 for D-shaped,
- 2 for ellipses.

!!! Info "TF coil placement"
The radial build can vary from the figures above dependant on the placement of the inboard TF
The radial build can vary from the figures above dependant on the placement of the inboard TF
coil leg when using the `tf_in_cs` switch. See [TF coil page](tf-coil.md)**
70 changes: 35 additions & 35 deletions process/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ def calculate_vertical_build(self, output: bool) -> None:
+ build_variables.tfcth
+ build_variables.tftsgap
+ build_variables.thshield_vb
+ build_variables.vgap2
+ build_variables.vgap_vv_thermalshield
+ build_variables.d_vv_top
+ build_variables.shldtth
+ divertor_variables.divfix
Expand Down Expand Up @@ -199,17 +199,17 @@ def calculate_vertical_build(self, output: bool) -> None:
po.obuild(
self.outfile,
"Gap",
build_variables.vgap2,
build_variables.vgap_vv_thermalshield,
vbuild,
"(vgap2)",
"(vgap_vv_thermalshield)",
)
po.ovarre(
self.mfile,
"Vessel - TF coil vertical gap (m)",
"(vgap2)",
build_variables.vgap2,
"(vgap_vv_thermalshield)",
build_variables.vgap_vv_thermalshield,
)
vbuild = vbuild - build_variables.vgap2
vbuild = vbuild - build_variables.vgap_vv_thermalshield

po.obuild(
self.outfile,
Expand Down Expand Up @@ -288,19 +288,19 @@ def calculate_vertical_build(self, output: bool) -> None:
"(rminor*kappa)",
)

vbuild = vbuild - build_variables.vgap
vbuild = vbuild - build_variables.vgap_xpoint_divertor
po.obuild(
self.outfile,
"Lower scrape-off",
build_variables.vgap,
build_variables.vgap_xpoint_divertor,
vbuild,
"(vgap)",
"(vgap_xpoint_divertor)",
)
po.ovarre(
self.mfile,
"Bottom scrape-off vertical thickness (m)",
"(vgap)",
build_variables.vgap,
"(vgap_xpoint_divertor)",
build_variables.vgap_xpoint_divertor,
)

vbuild = vbuild - divertor_variables.divfix
Expand Down Expand Up @@ -341,13 +341,13 @@ def calculate_vertical_build(self, output: bool) -> None:
build_variables.d_vv_bot,
)

vbuild = vbuild - build_variables.vgap2
vbuild = vbuild - build_variables.vgap_vv_thermalshield
po.obuild(
self.outfile,
"Gap",
build_variables.vgap2,
build_variables.vgap_vv_thermalshield,
vbuild,
"(vgap2)",
"(vgap_vv_thermalshield)",
)

vbuild = vbuild - build_variables.thshield_vb
Expand Down Expand Up @@ -404,7 +404,7 @@ def calculate_vertical_build(self, output: bool) -> None:
+ build_variables.tfcth
+ build_variables.tftsgap
+ build_variables.thshield_vb
+ build_variables.vgap2
+ build_variables.vgap_vv_thermalshield
+ 0.5e0 * (build_variables.d_vv_top + build_variables.d_vv_bot)
+ build_variables.vvblgap
+ build_variables.shldtth
Expand Down Expand Up @@ -471,17 +471,17 @@ def calculate_vertical_build(self, output: bool) -> None:
po.obuild(
self.outfile,
"Gap",
build_variables.vgap2,
build_variables.vgap_vv_thermalshield,
vbuild,
"(vgap2)",
"(vgap_vv_thermalshield)",
)
po.ovarre(
self.mfile,
"Vessel - TF coil vertical gap (m)",
"(vgap2)",
build_variables.vgap2,
"(vgap_vv_thermalshield)",
build_variables.vgap_vv_thermalshield,
)
vbuild = vbuild - build_variables.vgap2
vbuild = vbuild - build_variables.vgap_vv_thermalshield

po.obuild(
self.outfile,
Expand Down Expand Up @@ -579,19 +579,19 @@ def calculate_vertical_build(self, output: bool) -> None:
"(rminor*kappa)",
)

vbuild = vbuild - build_variables.vgap
vbuild = vbuild - build_variables.vgap_xpoint_divertor
po.obuild(
self.outfile,
"Lower scrape-off",
build_variables.vgap,
build_variables.vgap_xpoint_divertor,
vbuild,
"(vgap)",
"(vgap_xpoint_divertor)",
)
po.ovarre(
self.mfile,
"Bottom scrape-off vertical thickness (m)",
"(vgap)",
build_variables.vgap,
"(vgap_xpoint_divertor)",
build_variables.vgap_xpoint_divertor,
)

vbuild = vbuild - divertor_variables.divfix
Expand Down Expand Up @@ -632,13 +632,13 @@ def calculate_vertical_build(self, output: bool) -> None:
build_variables.d_vv_bot,
)

vbuild = vbuild - build_variables.vgap2
vbuild = vbuild - build_variables.vgap_vv_thermalshield
po.obuild(
self.outfile,
"Gap",
build_variables.vgap2,
build_variables.vgap_vv_thermalshield,
vbuild,
"(vgap2)",
"(vgap_vv_thermalshield)",
)

vbuild = vbuild - build_variables.thshield_vb
Expand Down Expand Up @@ -703,20 +703,20 @@ def calculate_vertical_build(self, output: bool) -> None:

divht = self.divgeom(output)
# Issue #481 Remove build_variables.vgaptf
if build_variables.vgap < 0.00001e0:
build_variables.vgap = divht
if build_variables.vgap_xpoint_divertor < 0.00001e0:
build_variables.vgap_xpoint_divertor = divht

# If build_variables.vgap /= 0 use the value set by the user.
# If build_variables.vgap_xpoint_divertor /= 0 use the value set by the user.

# Height to inside edge of TF coil. TF coils are assumed to be symmetrical.
# Therefore this applies to single and double null cases.
build_variables.hmax = (
physics_variables.rminor * physics_variables.kappa
+ build_variables.vgap
+ build_variables.vgap_xpoint_divertor
+ divertor_variables.divfix
+ build_variables.shldlth
+ build_variables.d_vv_bot
+ build_variables.vgap2
+ build_variables.vgap_vv_thermalshield
+ build_variables.thshield_vb
+ build_variables.tftsgap
)
Expand All @@ -730,7 +730,7 @@ def calculate_vertical_build(self, output: bool) -> None:
build_variables.tfcth
+ build_variables.tftsgap
+ build_variables.thshield_vb
+ build_variables.vgap2
+ build_variables.vgap_vv_thermalshield
+ build_variables.d_vv_top
+ build_variables.shldtth
+ build_variables.vvblgap
Expand Down Expand Up @@ -1888,7 +1888,7 @@ def calculate_radial_build(self, output: bool) -> None:
# Half-height of first wall (internal surface)
hbot = (
physics_variables.rminor * physics_variables.kappa
+ build_variables.vgap
+ build_variables.vgap_xpoint_divertor
+ divertor_variables.divfix
- build_variables.blnktth
- 0.5e0 * (build_variables.fwith + build_variables.fwoth)
Expand Down
6 changes: 3 additions & 3 deletions process/buildings.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def run(self, output: bool = False):
tfcoil_variables.n_tf,
build_variables.rsldo,
build_variables.rsldi,
2.0e0 * (build_variables.hmax - build_variables.vgap2)
2.0e0 * (build_variables.hmax - build_variables.vgap_vv_thermalshield)
- build_variables.d_vv_top
- build_variables.d_vv_bot,
fwbs_variables.whtshld,
Expand Down Expand Up @@ -532,7 +532,7 @@ def bldgs_sizes(self, output, tf_radial_dim, tf_vertical_dim):
build_variables.tfcth
+ build_variables.tftsgap
+ build_variables.thshield_vb
+ build_variables.vgap2
+ build_variables.vgap_vv_thermalshield
)
)
hcomp_rad_thk = (
Expand Down Expand Up @@ -576,7 +576,7 @@ def bldgs_sizes(self, output, tf_radial_dim, tf_vertical_dim):
build_variables.tfcth
+ build_variables.tftsgap
+ build_variables.thshield_vb
+ build_variables.vgap2
+ build_variables.vgap_vv_thermalshield
)
)
hcomp_rad_thk = (
Expand Down
16 changes: 8 additions & 8 deletions process/divertor.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def run(self, output: bool) -> None:
pv.rminor,
pv.triang,
bv.scrapli,
bv.vgap,
bv.vgap_xpoint_divertor,
pv.pdivt,
output=output,
)
Expand Down Expand Up @@ -752,7 +752,7 @@ def divtart(
rminor: float,
triang: float,
scrapli: float,
vgap: float,
vgap_xpoint_divertor: float,
pdivt: float,
output: bool,
) -> float:
Expand All @@ -777,8 +777,8 @@ def divtart(
:param scrapli: inboard scrape-off width (m)
:type scrapli: float

:param vgap: top scrape-off width (m)
:type vgap: float
:param vgap_xpoint_divertor: top scrape-off width (m)
:type vgap_xpoint_divertor: float

:param pdivt: power to the divertor (MW)
:type pdivt: float
Expand All @@ -800,15 +800,15 @@ def divtart(

# Angle of diagonal divertor plate from horizontal

if vgap <= 0.0e0:
eh.fdiags[0] = vgap
if vgap_xpoint_divertor <= 0.0e0:
eh.fdiags[0] = vgap_xpoint_divertor
eh.report_error(22)

theta = math.atan(vgap / (r2 - r1))
theta = math.atan(vgap_xpoint_divertor / (r2 - r1))

# Vertical plate area

a1 = 2.0e0 * constants.pi * r1 * vgap
a1 = 2.0e0 * constants.pi * r1 * vgap_xpoint_divertor

# Horizontal plate area

Expand Down
4 changes: 2 additions & 2 deletions process/io/mfile_comparison.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,11 +259,11 @@
"gapsto",
"tftsgap",
"tfthko",
"vgap",
"vgap_xpoint_divertor",
"divfix",
"d_vv_bot",
"shldlth",
"vgap2",
"vgap_vv_thermalshield",
]


Expand Down
2 changes: 2 additions & 0 deletions process/io/obsolete_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@
"theat": "t_fusion_ramp",
"ieped": None,
"eped_sf": None,
"vgap2": "vgap_vv_thermalshield",
"vgap": "vgap_xpoint_divertor",
}

OBS_VARS_HELP = {
Expand Down
Loading