Skip to content

firstwall

Calculate radial and vertical coordinates for the geometry of the first wall

first_wall_geometry_single_null(radx_outer, rminx_outer, radx_inner, rminx_inner, cumulative_upper, triang, cumulative_lower, dz_blkt_upper, c_blnkith, c_fwoth, dr_fw_inboard, dr_fw_outboard, tfwvt)

Calculates radial and vertical distances for the geometry of first wall in a single null configuration

Parameters:

Name Type Description Default
radx_outer float

outboard radius of outer surface of first wall

required
rminx_outer float

inboard radius of outer surface of first wall

required
radx_inner float

outboard radius of inner surface of first wall

required
rminx_inner float

inboard radius of inner surface of first wall

required
cumulative_upper dict

cumulative vertical thicknesses of components above the midplane

required
triang float

plasma triangularity

required
cumulative_lower dict

cumulative vertical thicknesses of components below the midplane

required
dz_blkt_upper float

top blanket vertical thickness

required
c_blnkith float

inboard blanket vertical thickness

required
c_fwoth float

outboard first wall vertical thickness

required
dr_fw_inboard float

inboard first wall radial thickness

required
dr_fw_outboard float

outboard first wall radial thickness

required
tfwvt float

top first wall vertical thickness

required

Returns:

Type Description
ArbitraryGeometry

dataclass returning radial and vertical coordinates

Source code in process/models/geometry/firstwall.py
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
def first_wall_geometry_single_null(
    radx_outer: float,
    rminx_outer: float,
    radx_inner: float,
    rminx_inner: float,
    cumulative_upper: dict,
    triang: float,
    cumulative_lower: dict,
    dz_blkt_upper: float,
    c_blnkith: float,
    c_fwoth: float,
    dr_fw_inboard: float,
    dr_fw_outboard: float,
    tfwvt: float,
) -> ArbitraryGeometry:
    """Calculates radial and vertical distances for the geometry of first wall in a single null configuration

    Parameters
    ----------
    radx_outer:
        outboard radius of outer surface of first wall
    rminx_outer:
        inboard radius of outer surface of first wall
    radx_inner:
        outboard radius of inner surface of first wall
    rminx_inner:
        inboard radius of inner surface of first wall
    cumulative_upper:
        cumulative vertical thicknesses of components above the midplane
    triang:
        plasma triangularity
    cumulative_lower:
        cumulative vertical thicknesses of components below the midplane
    dz_blkt_upper:
        top blanket vertical thickness
    c_blnkith:
        inboard blanket vertical thickness
    c_fwoth:
        outboard first wall vertical thickness
    dr_fw_inboard:
        inboard first wall radial thickness
    dr_fw_outboard:
        outboard first wall radial thickness
    tfwvt:
        top first wall vertical thickness

    Returns
    -------
    ArbitraryGeometry
        dataclass returning radial and vertical coordinates
    """
    # Upper first wall: outer surface
    kapx = cumulative_upper["dz_fw_upper"] / rminx_outer
    rs_upper_outboard, zs_upper_outboard = dh_vertices(
        radx_outer, rminx_outer, triang, kapx
    )

    # Upper first wall: inner surface
    rs_upper_inboard, zs_upper_inboard = dh_vertices(
        radx_inner, rminx_inner, triang, kapx
    )

    # Lower first wall
    divgap = cumulative_lower["dz_divertor"]
    top_point = divgap + dz_blkt_upper
    (
        rs_lower_outboard,
        zs_lower_outboard,
        rs_lower_inboard,
        zs_lower_inboard,
    ) = first_wall_geometry_lower(
        triang=triang,
        c_blnkith=c_blnkith,
        c_fwoth=c_fwoth,
        dr_fw_inboard=dr_fw_inboard,
        dr_fw_outboard=dr_fw_outboard,
        tfwvt=tfwvt,
        top_point=top_point,
    )

    rs = np.concatenate([
        rs_upper_outboard,
        rs_lower_inboard,
        rs_upper_inboard[::-1],
        rs_lower_outboard[::-1],
    ])
    zs = np.concatenate([
        zs_upper_outboard,
        zs_lower_inboard,
        zs_upper_inboard[::-1],
        zs_lower_outboard[::-1],
    ])

    return ArbitraryGeometry(rs=rs, zs=zs)

first_wall_geometry_lower(triang, c_blnkith, c_fwoth, dr_fw_inboard, dr_fw_outboard, tfwvt, top_point)

Calculates radial and vertical distances for the geometry of section of first wall below the midplane

Parameters:

Name Type Description Default
triang float

plasma triangularity

required
c_blnkith float

inboard blanket vertical thickness

required
c_fwoth float

outboard first wall vertical thickness

required
dr_fw_inboard float

inboard first wall radial thickness

required
dr_fw_outboard float

outboard first wall radial thickness

required
tfwvt float

top first wall vertical thickness

required
top_point float

top point for plotdhgap, equal to

required

Returns:

Type Description
tuple[ndarray, ndarray, ndarray, ndarray]

tuple containing the R coordinates for the outboard, Z coordinates for the outboard, R coordinates for the inboard, Z coordinates for the inboard of the first wall geometry below the midplane

Source code in process/models/geometry/firstwall.py
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
def first_wall_geometry_lower(
    triang: float,
    c_blnkith: float,
    c_fwoth: float,
    dr_fw_inboard: float,
    dr_fw_outboard: float,
    tfwvt: float,
    top_point: float,
) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
    """Calculates radial and vertical distances for the geometry of section of first wall below the midplane

    Parameters
    ----------
    triang:
        plasma triangularity
    c_blnkith:
        inboard blanket vertical thickness
    c_fwoth:
        outboard first wall vertical thickness
    dr_fw_inboard:
        inboard first wall radial thickness
    dr_fw_outboard:
        outboard first wall radial thickness
    tfwvt:
        top first wall vertical thickness
    top_point:
        top point for plotdhgap, equal to

    Returns
    -------
    :
        tuple containing the R coordinates for the outboard, Z coordinates for the outboard,
        R coordinates for the inboard, Z coordinates for the inboard of the first wall geometry below the midplane
    """
    # Lower first wall
    rs1, rs2, rs3, rs4, zs1, zs2, zs3, zs4 = dhgap_vertices(
        c_blnkith,
        c_fwoth,
        dr_fw_inboard,
        dr_fw_outboard,
        top_point,
        -tfwvt,
        triang,
    )
    # outboard radial and vertical coordinates
    rs_lower_outboard = np.concatenate([rs1, rs2[::-1]])
    zs_lower_outboard = np.concatenate([zs1, zs2[::-1]])
    # inboard radial and vertical coordinates
    rs_lower_inboard = np.concatenate([rs3, rs4[::-1]])
    zs_lower_inboard = -np.concatenate([zs3, zs4[::-1]])

    return rs_lower_outboard, zs_lower_outboard, rs_lower_inboard, zs_lower_inboard

first_wall_geometry_double_null(cumulative_lower, triang, dz_blkt_upper, c_blnkith, c_fwoth, dr_fw_inboard, dr_fw_outboard, tfwvt)

Calculates radial and vertical distances for the geometry of first wall in a double null configuration In a double null configuration, the geometry of the lower first wall is reflected across the midplane to create the section of first wall above the midplane

Parameters:

Name Type Description Default
cumulative_lower dict

cumulative vertical thicknesses of components below the midplane

required
triang float

plasma triangularity

required
dz_blkt_upper float

top blanket vertical thickness

required
c_blnkith float

inboard blanket vertical thickness

required
c_fwoth float

outboard first wall vertical thickness

required
dr_fw_inboard float

inboard first wall radial thickness

required
dr_fw_outboard float

outboard first wall radial thickness

required
tfwvt float

top first wall vertical thickness

required

Returns:

Type Description
ArbitraryGeometry

dataclass returning radial and vertical coordinates

Source code in process/models/geometry/firstwall.py
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
def first_wall_geometry_double_null(
    cumulative_lower: dict,
    triang: float,
    dz_blkt_upper: float,
    c_blnkith: float,
    c_fwoth: float,
    dr_fw_inboard: float,
    dr_fw_outboard: float,
    tfwvt: float,
) -> ArbitraryGeometry:
    """Calculates radial and vertical distances for the geometry of first wall in a double null configuration
    In a double null configuration, the geometry of the lower first wall is reflected across the midplane to create the section of first wall above the midplane

    Parameters
    ----------
    cumulative_lower:
        cumulative vertical thicknesses of components below the midplane
    triang:
        plasma triangularity
    dz_blkt_upper:
        top blanket vertical thickness
    c_blnkith:
        inboard blanket vertical thickness
    c_fwoth:
        outboard first wall vertical thickness
    dr_fw_inboard:
        inboard first wall radial thickness
    dr_fw_outboard:
        outboard first wall radial thickness
    tfwvt:
        top first wall vertical thickness

    Returns
    -------
    ArbitraryGeometry
        dataclass returning radial and vertical coordinates
    """
    # Lower first wall
    divgap = cumulative_lower["dz_divertor"]
    top_point = divgap + dz_blkt_upper
    (
        rs_lower_outboard,
        zs_lower_outboard,
        rs_lower_inboard,
        zs_lower_inboard,
    ) = first_wall_geometry_lower(
        triang=triang,
        c_blnkith=c_blnkith,
        c_fwoth=c_fwoth,
        dr_fw_inboard=dr_fw_inboard,
        dr_fw_outboard=dr_fw_outboard,
        tfwvt=tfwvt,
        top_point=top_point,
    )

    # Upper first wall
    top_point = -1 * top_point
    (
        rs_upper_outboard,
        zs_upper_outboard,
        rs_upper_inboard,
        zs_upper_inboard,
    ) = first_wall_geometry_lower(
        triang=triang,
        c_blnkith=c_blnkith,
        c_fwoth=c_fwoth,
        dr_fw_inboard=dr_fw_inboard,
        dr_fw_outboard=dr_fw_outboard,
        tfwvt=tfwvt,
        top_point=top_point,
    )

    rs_1 = np.concatenate([rs_upper_outboard, rs_lower_outboard[::-1]])
    rs_2 = np.concatenate([rs_upper_inboard, rs_lower_inboard[::-1]])
    zs_1 = np.concatenate([zs_upper_outboard, zs_lower_outboard[::-1]])
    zs_2 = np.concatenate([zs_upper_inboard, zs_lower_inboard[::-1]])
    rs = [rs_1, rs_2]
    zs = [zs_1, zs_2]

    return ArbitraryGeometry(rs=rs, zs=zs)