3. Thermo-mechanical#

3.1. Introduction#

Heat by Induction to Verify Extremes (HIVE) is an experimental facility at the UK Atomic Energy Authority (UKAEA) to expose plasma-facing components to the high thermal loads that they will experience in a fusion reactor. Samples are thermally loaded by induction heating whilst being actively cooled with pressurised water.

While Code_Aster has no in-built ElectroMagnetic coupling, having a python interpreter and being open source makes it easier to couple with external solvers and software compared with proprietary commercial FE codes.

In VirtualLab, the heating generated by the induction coil is calculated by using the open-source EM solver ERMES during the pre-processing stage. The results are piped to Code_Aster to be applied as boundary conditions (BC).

The effect of the coolant is modelled as a 1D problem using its temperature, pressure and velocity along with knowing the geometry of the pipe. This version of the code is based on an implementation by Simon McIntosh (UKAEA) of Theron D. Marshall’s (CEA) Film-2000 software to model the Nukiyama curve1 for water-cooled fusion divertor channels, which itself was further developed by David Hancock (also UKAEA). The output from this model is also piped to Code_Aster to apply as a BC.

Because this is a multi-physics problem, the setup of Sim is slightly different with additional keywords RunCoolant and RunERMES:

Action

For this tutorial the RunFile should have the values:

Simulation='HIVE'
Project='Tutorials'
Parameters_Master='TrainingParameters'
Parameters_Var=None

VirtualLab=VLSetup(
           Simulation,
           Project
           )

VirtualLab.Settings(
           Mode='Interactive',
           Launcher='Process',
           NbJobs=1
           )

VirtualLab.Parameters(
           Parameters_Master,
           Parameters_Var,
           RunMesh=True,
           RunSim=True,
           RunDA=True
           )

VirtualLab.Mesh(
           ShowMesh=False,
           MeshCheck=None
           )

VirtualLab.Sim(
           RunPreAster=True,
           RunCoolant=True,
           RunERMES=True,
           RunAster=True,
           RunPostAster=True,
           ShowRes=True
           )

VirtualLab.DA()

3.2. Sample#

The sample selected to use in this tutorial is an additive manufactured sample which was part of the EU FP7 project “Additive Manufacturing Aiming Towards Zero Waste & Efficient Production of High-Tech Metal Products” (AMAZE, grant agreement No. 313781). The sample is a copper block on a copper pipe with a tungsten tile on the top.

The file used to generate the mesh is Scripts/Experiments/HIVE/Mesh/Monoblock.py. The geometrical parameters, referenced in Fig. 3.1, are:

Mesh.BlockWidth = 0.03
Mesh.BlockLength = 0.05
Mesh.BlockHeight = 0.02
Mesh.PipeCentre = [0,0]
Mesh.PipeDiam = 0.01
Mesh.PipeThick = 0.001
Mesh.PipeLength = Mesh.BlockLength
Mesh.TileCentre = [0,0]
Mesh.TileWidth = Mesh.BlockWidth
Mesh.TileLength = 0.03
Mesh.TileHeight = 0.005

Mesh.Fillet = 0.0005
https://gitlab.com/ibsim/media/-/raw/master/images/VirtualLab/AMAZE.png

Fig. 3.1 Drawing of the AMAZE sample with the attributes of Mesh used to specify the dimensions.#

The centre of the pipe is offset from the centre of the co-planar block face by PipeCentre. Similarly, the centre of the tile is offset from the centre of the block face by TileCentre. The current implementation of ERMES leads to singularities at sharp corners. To overcome this the edges belonging to the face adjacent to the induction coil are filleted (or smoothed). The size of the fillet is measured in metres and is given by Fillet.

# Mesh parameters
Mesh.Length1D = 0.005
Mesh.Length2D = 0.005
Mesh.Length3D = 0.005

Mesh.PipeSegmentN = 20
Mesh.SubTile = [0.002, 0.002, 0.002]
Mesh.Deflection = 0.01

The attributes Length1D-3D again specify the global mesh sizes. The mesh on the pipe is refined using PipeSegmentN, while SubTile specifies the mesh size on the tile. This is the part of the component which the coil interacts with, therefore the mesh needs to be finer here. Deflection refers to the mesh refinement along the fillet.

3.3. Simulation#

The coolant is accounted for through the script Scripts/Experiments/HIVE/Sim/Coolant_1D.py. This calculates the heat flux between the pipe and the coolant dependent on the temperature on the wall of the pipe. This is usually referred to as the boiling curve.

Sim.Pipe = {'Type':'smooth tube', 'Diameter':0.01, 'Length':0.05}
Sim.Coolant = {'Temperature':30, 'Pressure':1, 'Velocity':10}

The dictionary Pipe specifies information about the geometry of the pipe, while Coolant provides properties about the fluid in the pipe.

To calculate the thermal loading arising from the induction coil the file Scripts/Experiments/HIVE/Sim/EM_Analysis.py is used which performs the necessary ERMES analysis:

Sim.CoilType = 'Test'
Sim.CoilDisplacement = [0,0,0.0015]

Sim.Frequency = 1e4

ERMES requires a mesh of the induction coil and surrounding vacuum which must conform with the mesh of the component.

The attribute CoilType specifies the coil design to be used. Currently available options are:

  • ‘Test’

  • ‘HIVE’

  • ‘Pancake’

CoilDisplacement dictates the x, y and z components of the displacement of the coil with respect to the sample. The z-component indicates the gap between the upper surface of the sample and the coil and must be positive. The x and y components indicate the coil’s offset about the centre of the sample, see Fig. 3.2.

Frequency is used by ERMES to produce a range of EM results, such as the Electric field (E), the Current density (J) and Joule heating. These results are stored in the sub-directory PreAster within the simulation directory.

The Joule heating profile is used by Code_Aster to apply the thermal loads. A mesh group is required for each individual volumetric element within the mesh to apply the heat source, however doing so substantially increases the computation time.

To speed this step up the Joule heating values are clustered into N-number of ‘bins’. The 1D k-means algorithm (also known as the Jenks optimisation method) find the N optimal value to group the distribution in to. The Goodness of Fit Value (GFV) describes how well the clustering represents the data, ranging from 0 (worst) to 1 (best).

The attribute NbClusters specifies the number of groups to cluster the data in to. In this analysis 100 clusters are used. The attribute Current specifies the current in the input terminal of the induction coil. Although this parameter technically relates to the ERMES analysis the results scale linearly with this, therefore this value can be altered without having to re-run the entire ERMES analysis.

Sim.Current = 1000
Sim.NbClusters = 100

Because the loads are not time-dependent this can be treated as a steady state thermal problem, with the command file Monoblock_Steady.comm used (Steady State). A transient version of this simulation is also available, Monoblock_Transient.comm.

https://gitlab.com/ibsim/media/-/raw/master/images/VirtualLab/HIVE_Parameters.png

Fig. 3.2 Schematic of the HIVE simulation setup, showing some of the variable parameters.#

3.4. Task 1: Running 1D Coolant#

In this task, firstly, the mesh of the AMAZE sample is created. This will be saved to the meshes directory under the name ‘AMAZE’.

Following this, the coolant analysis will be performed. A sub-directory named ‘Examples’ will have been created in the project directory, inside which a results directory ‘Test_Coil’ can be found. The boiling curve is shown in PreAster/HeatTransfer.png, with important values highlighted. This data is also saved to PreAster/HeatTransfer.dat to be passed to CodeAster during the analysis.

Action

Change the RunERMES and RunAster kwarg to False in VirtualLab.Sim because we are only interested in the coolant aspect of the work at this stage:

VirtualLab.Parameters(
           Parameters_Master,
           Parameters_Var,
           RunMesh=True,
           RunSim=True,
           RunDA=True
           )

VirtualLab.Sim(
           RunPreAster=True,
           RunCoolant=True,
           RunERMES=False,
           RunAster=False,
           RunPostAster=True,
           ShowRes=True
           )

Launch VirtualLab.

3.5. Task 2: Running an ERMES simulation#

Action

Change RunMesh to False in VirtualLab.Parameters because we are using the same mesh. As we don’t need to perform the coolant analysis again change RunCoolant to False in VirtualLab.Sim. Finally, change RunERMES to True in VirtualLab.Sim as we want to run the ERMES solver:

VirtualLab.Parameters(
           Parameters_Master,
           Parameters_Var,
           RunMesh=False,
           RunSim=True,
           RunDA=True
           )

VirtualLab.Sim(
          RunPreAster=True,
          RunCoolant=False,
          RunERMES=True,
          RunAster=False,
          RunPostAster=True,
          ShowRes=True
          )

Launch VirtualLab.

Information generated by the ERMES solver is printed to the terminal. The results generated by ERMES are converted to a format compatible with ParaVis and saved to PreAster/ERMES.rmed. These are the results which are displayed in the GUI, assuming that the kwarg ShowRes is still set to True.

The results from ERMES show the whole domain, which includes the volume surrounding the sample and coil, which will obscure the view of them. In order to only visualise the sample and coil, these groups must be extracted. This is accomplished by selecting Filters / Alphabetical / Extract Group from the menu, then using the checkboxes in the properties window (usually on the bottom left side) to select Coil and Sample before clicking Apply, see Fig. 3.3.

It should then be possible to visualise any of the following results:

  • Joule_heating

  • Electric field (E) - real, imaginary and modulus

  • Current Density (J) - real, imaginary and modulus

Joule_heating is the field which is used in Code_Aster.

https://gitlab.com/ibsim/media/-/raw/master/images/docs/screenshots/ParaVis_05.png

Fig. 3.3 Visualisation of Joule heating results as calculated by ERMES.#

3.6. Task 3: Applying ERMES BC in Code_Aster#

Next, a thermal simulation is performed by Code_Aster using the results from ERMES and the boiling curve. Because we’re interested in the results once the sample reaches steady state there is no need to run a transient simulation. An additional benefit is that this will reduce the computation time substantially.

Action

You will also need to change the kwarg RunAster back to True in the RunFile to run the simulation. Also change RunERMES to False because the EM data has already been created.

VirtualLab.Sim(
           RunPreAster=True,
           RunCoolant=False,
           RunERMES=False,
           RunAster=True,
           RunPostAster=True,
           ShowRes=True
           )

Launch VirtualLab.

Both the ERMES and Code_Aster results are displayed in ParaVis with the suffix ‘ERMES’ and ‘Thermal’ respectively. By investigating the visualisation of the Code_Aster results you will observe that the temperature profile on the sample is very similar to the Joule_heating profile generated by ERMES.

3.7. Task 4: Coil change#

The previous analysis will be run again using a different coil. This time an actual coil geometry used for testing in HIVE will be selected. This is referred to as ‘HIVE’.

Action

In TrainingParameters.py you will need to change Sim.Name to ‘Examples/HIVE_Coil’ and change CoilType to ‘HIVE’:

Sim.Name = 'Examples/HIVE_Coil'
Sim.CoilType = 'HIVE'

As the entire simulation steps need to be performed again RunCoolant and RunERMES must be changed back to True:

VirtualLab.Sim(
           RunPreAster=True,
           RunCoolant=True,
           RunERMES=True,
           RunAster=True,
           RunPostAster=True,
           ShowRes=True
           )

Launch VirtualLab.

The ERMES and CodeAster results should both be opened in ParaVis to view. You should notice that the peak temperature in the component using this coil is higher than in the previous simulation even though they are positioned in the same location. This is because the winding of the coil creates a more powerful field to induce the heat generation in the component.

Note

You can open the results from the previous analysis alongside this by going to File/Open ParaView File and navigating to the directory ‘Test_Coil’ as shown in Fig. 3.4.

https://gitlab.com/ibsim/media/-/raw/master/images/docs/screenshots/ParaVis_06.png

Fig. 3.4 Visualisation of simulation results from ERMES and Code_Aster for both coil types.#

3.8. References#

1

T. D. Marshall, D. L. Youchison and L. C. Cadwallader. Modeling the nukiyama curve for water-cooled fusion divertor channels. Fusion Technol., 35:8–16, 2001. http://film2000.free.fr/TOFE.pdf.