Simulation features
The simulation export covers following types of simulations.
S-parameter matrix
The output of a S-parameter (scattering parameter) simulation is a matrix of S-parameters between the ports.
The dimensions of the matrix is equal to number of ports given in the simulation object.
The rows and columns of the matrix are ordered by the port order number, i.e., the number
parameter of
the class Port
.
Note
Some port variables like the renormalization
of Port
and the deembed_len
of
EdgePort
take effect in the output S-parameter matrix. You can always double-check the value of any
parameter from the exported json file.
The resulting S-parameter matrices are stored in SnP
(Touchstone) file format, where the file
extension are .s1p
, .s2p
, .s3p
, and so forth).
In Ansys Electronic Desktop, the S-parameter simulation feature employs HFSS Terminal solution type.
The S-parameter feature is activated using parameter ansys_tool='hfss'
.
The relevant ansys_export
parameters and their default values are listed below:
export_parameters.update({
'ansys_tool': 'hfss', # Determines whether to use HFSS ('hfss'), Q3D Extractor ('q3d') or HFSS eigenmode ('eigenmode')
'frequency_units': "GHz", # Units of frequency.
'frequency': 5, # Frequency for mesh refinement. To set up multifrequency analysis in HFSS use list of numbers.
'max_delta_s': 0.1, # Stopping criterion in HFSS simulation.
'percent_refinement': 30, # Percentage of mesh refinement on each iteration.
'maximum_passes': 12, # Maximum number of iterations in simulation.
'minimum_passes': 1, # Minimum number of iterations in simulation.
'minimum_converged_passes': 1, # Determines how many iterations have to meet the stopping criterion to stop simulation.
'sweep_enabled': True, # Determines if HFSS frequency sweep is enabled.
'sweep_start': 0, # The lowest frequency in the sweep.
'sweep_end': 10, # The highest frequency in the sweep.
'sweep_count': 101, # Number of frequencies in the sweep.
'sweep_type': 'interpolating', # choices are "interpolating", "discrete" or "fast"
})
The open-source alternative to calculate S-parameters is to use elmer_export
with the export parameter
tool='wave_equation'
.
For other relevant export parameters, please consult API docs for the function
export_elmer()
.
Capacitance matrix
The primary use case of a capacitance matrix simulation is to estimate capacitive couplings between different elements.
The output of a capacitance simulation is a mutual capacitance matrix between islands of signal metals.
In the mutual capacitance matrix, a non-diagonal term C_i_j
is the capacitance between two signals i
and j
,
and a diagonal term C_i_i
is the capacitance between signal i
and the ground.
The signal islands are determined by the ports of the simulation object and they are ordered by the port order number.
The port variable signal_location
determines the location of the signal island. The variable ground_location
can be used to force any floating metal island as the ground.
From Ansys tool package, the Q3D solver is recommended for capacitance simulations.
This is activated with export parameter ansys_tool='q3d'
.
The other relevant parameters and their default values are:
export_parameters.update({
'ansys_tool': 'q3d', # Determines whether to use HFSS ('hfss'), Q3D Extractor ('q3d') or HFSS eigenmode ('eigenmode')
'percent_error': 0.1, # Stopping criterion in Q3D simulation.
'percent_refinement': 30, # Percentage of mesh refinement on each iteration.
'maximum_passes': 12, # Maximum number of iterations in simulation.
'minimum_passes': 1, # Minimum number of iterations in simulation.
'minimum_converged_passes': 1, # Determines how many iterations have to meet the stopping criterion to stop simulation.
})
The capacitance matrix simulations are also available with Ansys HFSS framework, which is useful in case if only HFSS
license is available.
For the usage one must perform a HFSS S-parameter simulation as indicated above and use the export parameter
capacitance_export=True
.
This method assumes a purely capacitive model and is valid as long as the resulting C_i_j
are constant over
frequency.
The Elmer export provides the open source alternative for capacitance matrix simulations.
The Elmer capacitance matrix simulation can be activated by using elmer_export
with the export parameter
tool='capacitance'
.
Please consult API docs of export_elmer()
for more information.
Eigenmode
An eigenmode simulation provides results in terms of eigenmodes, i.e. resonances of a given structure.
The output of an eigenmode simulation is a list of complex-valued eigenfrequencies, which
can be used to estimate resonance frequencies and/or lifetimes of the resonances.
The eigenfrequencies are given in the Ansys eigenmode data file format with file extension .eig
.
The solution method in eigenmode simulation is based on solving an
eigenvalue problem.
Thus, the eigenmode simulations do not accept manually set source terms, and ports are not needed to define excitation.
Instead internal ports of a simulation object can be employed to generate lumped RLC boundary conditions into the model.
This is done by setting the port parameter junction=True
and by giving the desired values in capacitance
and
inductance
parameters. An internal port can be made floating by giving the parameter floating=True
(default False). This avoids the “ground side island” of the port becoming part of ground layer. This is recommended
in junctions between floating island qubit simulations.
Ansys HFSS Eigenmode solution type is employed in the eigenmode simulations.
The eigenmode simulations are activated by using export_ansys
with export parameter ansys_tool='eigenmode'
.
The other relevant parameters and their default values are:
export_parameters.update({
'ansys_tool': 'eigenmode', # Determines whether to use HFSS ('hfss'), Q3D Extractor ('q3d') or HFSS eigenmode ('eigenmode')
'frequency_units': "GHz", # Units of frequency.
'min_frequency': 5, # the lower limit for eigenfrequency.
'max_delta_f': 0.1, # Maximum allowed relative difference in eigenfrequency (%).
'n_modes': 2, # Number of eigenmodes to solve.
'percent_refinement': 30, # Percentage of mesh refinement on each iteration.
'maximum_passes': 12, # Maximum number of iterations in simulation.
'minimum_passes': 1, # Minimum number of iterations in simulation.
'minimum_converged_passes': 1, # Determines how many iterations have to meet the stopping criterion to stop simulation.
})
Energy integrals and participation ratio
The energy integrals can be calculated from HFSS S-parameter or eigenmode simulations by setting export parameter
integrate_energies=True
in ansys_export
function call.
The energy integrals of each simulation are stored into file ending with _energies.cvs
.
This file includes energy integrals of each surface/solid objects and the total energy integrated over all solid
material objects.
The energy participation ratios (EPRs) are calculated from energy integrals using the post processing script
export_epr.py
.
This is activated by export parameter post_process_script='export_epr.py'
.
The EPRs are saved into a file ending with _epr.csv
.
Cross-sectional simulations
KQCircuits offers possibility to export Elmer cross-sectional simulations to calculate capacitance and inductance per unit length. In cross-sectional simulations, the geometry is technically 2-dimensional, which enables more precise accuracy than with the fully 3-dimensional simulations. The reduced complexity of dimensions also allows a more detailed model to be used, for example considering the London penetration depth of metals. The cross-sectional simulations are valid only if the cross-section of the corresponding 3-dimensional geometry is constant. That includes for example waveguides.
The geometry of the cross-sectional simulations is described by an instance of a CrossSectionSimulation
subclass.
The cross-sectional simulation export follows similar logic to 3-dimensional simulations.
That is, you create a simulation subclass, create an empty folder for export files, build a list of simulation objects,
and call the export_elmer()
function with suitable
export_parameters
.
An example for simulating coplanar-waveguide cross-section can be found in
klayout_package/python/scripts/simulations/cpw_cross_section_sim.py.
There is an additional Xsection
tool to create cross-sectional geometries out of the x-y-layouts.
The tool is described in more details in Creating cross section images and an example simulation can be found in
klayout_package/python/scripts/simulations/waveguides_sim_xsection.py.
pyEPR
pyEPR is supported for HFSS eigenmode simulations.
A pyEPR simulation is activated using ansys_tool='eigenmode'
and simulation_flags=['pyepr']
in the
export_ansys
function call.
An example simulation is found at klayout_package/python/scripts/simulations/xmons_direct_coupling_pyepr.py.
See pyEPR_example.ipynb
in the KQCircuits-Examples repository for an example on using
pyEPR itself.
The pyEPR can be used for TLS-limited \(T_1\) estimation by using additional export parameter
intermediate_processing_command='python "scripts/t1_estimate.py"'
.
This will run t1_estimate.py between
queued simulations and compute the electrical participations in the lossy interfaces.
See double_pads_sim.py for an example and
N. Savola, ‘Design and modelling of long-coherence qubits using energy participation ratios’, Master’s thesis,
Aalto University, 2023, for details on the method.