finesse.components.thermal_effects module
- class finesse.components.thermal_effects.HelloVinetDistortions(*args, **kwargs)[source]
Bases:
RelaxingElementAn element that represents a thermal distortion for a high-reflectivity (HR) coating using the Hello-Vinet approximations. The element allows you to vary the absorbed power and the coating radius during a simulation. Other parameters are fixed during the simulation. The Hello-Vinet model is axisymmetric, so only even order effects and modes are correctly supported using this map. This element produces maps that can be used by other components in the model. Each map is a functional map that depends on the parameters of this element.
This element will alter the focal length of lenses and the radius of curvature of mirror components it is targetted at. If you override these set values you’ll need to ensure you reinclude the curvature and focal length parameters of this object.
This element is a RelaxingElement and can be used with the Relaxation action to converge to a true steady state solution for Hello-Vinet based thermal defects.
The relaxation process here uses an exponential smoothing to emulate a gradual thermalisation of the optic. This somewhat emulates the physical system. The smoothing is controlled by the smoothing_steps parameter, which is the number of steps that a step change will average to 63% of its value. This should be low enough to allow the system to converge quickly but high enough to allow the system to thermalise smoothly and locks to correctly follow the state and fail.
Parameters
- namestr
The name of the thermal map element.
- HR_portPort
The high-reflectivity port associated with the thermal map. This should be the p1 of a mirror.
- thermal_lens: finesse.components.Lens | None
The thermal lens object to add deformations to, can be None for no thermal lensing
- lens_radius: float | None
The radius of the lens.
- substrate_materialMaterial
The material of the substrate.
- coating_absorption: float
Fraction of incident power absorbed by the coating
- coating_radiusfloat
The radius of the coating.
- physical_radiusfloat
The physical radius of the element.
- thicknessfloat
The thickness of the element.
- remove_quadraticbool
Remove the quadratic term from the deformation (default is True).
- put_curvaturesbool
If True then take quadratic component of the deformation and set them to the curvatures of this element (default is True).
- put_focal_lengthbool
If True then take quadratic component of the thermal lens and set them to the focal length of this element (default is True).
- absorption_convergencefloat, optional
The fractional error in the absorbed power being used vs the incident power times the absorption that is considered converged (default 0.05, i.e. 5% error)
- power_convergencefloat, optional
The power change between steps that is considered converged (default 1000).
- smoothing_stepsint, optional
Number of steps to exponentially smooth the absorbed power over (default 10
- wait_steps: int, optional
The number of steps to wait before starting the updating process during relaxation.
- growth_factor: float, optional
The factor to increase the smoothing factor by when the step is successful
- reduction_factor: float, optional
The factor to decrease the smoothing factor by when the step is unsuccessful
- fixed_spot_size: float, optional
The fixed spot size to use for the thermal lensing calculation. If not provided, the average of the x and y spot sizes of the input field is used.
- N_xint, optional
The number of points in the x-direction (default is 200).
- N_yint, optional
The number of points in the y-direction (default is 201).
Attributes
- material
finesse.material.Material The material of the substrate.
- HR_portPort
The high-reflectivity port associated with the thermal map.
- thermal_lens: finesse.components.Lens
The thermal lens object to add deformations to
- componentComponent
The component associated with the HR port.
- thicknessfloat
The thickness of the element.
- physical_radiusfloat
The physical radius of the element.
- coating_radiusfloat
The radius of the coating.
- HR_absorbed_powerfloat
The absorbed power at the high-reflectivity coating.
- staticfinesse.knm.Map
The static surface map of the component, if None then no surface deformation is applied
Notes
This element wraps up the lower level Hello-Vinet implementation in finesse.thermal.hello_vinet as a Map object and provide model parameters as an element that the user can more easily interact with.
- property HR_absorbed_power
Power absorbed by the HR coating
- HR_aperture(model=None)[source]
Generate an aperture mask based on the coating radius.
Parameters
- modeloptional
The model to be used. If provided, it must be the same as self._model.
Returns
- numpy.ndarray
A binary mask array where elements within the coating radius are 1, and elements outside are 0.
Raises
- AssertionError
If the provided model is not the same as self._model.
- HR_surface(model=None, sim=None)[source]
Calculate the surface deformation due to coating heating on the HR (High Reflective) surface.
Parameters
- modelobject, optional
The model object to be used for the calculation. If not provided, the default model is used.
- simfinesse.simulations.BaseSimulation, optional
The simulation object to be used for the calculation. If not provided, this update is called outside of a simulation.
Returns
- np.ndarray
The interpolated surface deformation value based on the absorbed power on the HR surface.
Raises
- AssertionError
If the provided model is not the same as the internal model.
- HR_surface_map()[source]
This method creates a high-reflectivity surface map using the finesse.knm.Map class. The map is generated based on the x and y coordinates, the surface data, and the aperture amplitude. Additionally, the map is set to update when the parameters HR_absorbed_power and coating_radius change.
Returns
- finesse.knm.Map
The generated high-reflectivity surface map.
- property Rc
Radius of curvature (x)
- property coating_absorption
Fractional power absorbed by the coating
- property coating_radius
coating_radius : float The radius of the coating.
- property f
Thermal lens focal length (m)
- lens_aperture(model=None)[source]
Generate an aperture mask based on the lens radius (constarined by ESD)
Parameters
- modeloptional
The model to be used. If provided, it must be the same as self._model.
Returns
- numpy.ndarray
A binary mask array where elements within the coating radius are 1, and elements outside are 0.
Raises
- AssertionError
If the provided model is not the same as self._model.
- property physical_radius
physical_radius : float The physical radius of the element.
- thermal_lens(model=None, sim=None)[source]
Calculate the optical path difference due to coating heating on the thermal.
Parameters
- modelfinesse.model.Model, optional
The model object to be used for the calculation. If not provided, the default model is used.
- simfinesse.simulations.BaseSimulation, optional
The simulation object to be used for the calculation. If not provided, this update is called outside of a simulation
Returns
- OPDnp.ndarray
The interpolated optical path difference value based on the absorbed power on the HR surface.
- thermal_lens_map()[source]
This method creates a optical path difference map using the finesse.knm.Map class. The map is generated based on the x and y coordinates, the surface data, and the aperture amplitude. Additionally, the map is set to update when the parameters HR_absorbed_power and coating_radius change.
Returns
- finesse.knm.Map
The generated thermal lens map.
- property thickness
thickness : float The thickness of the element.
- class finesse.components.thermal_effects.HelloVinetDistortionsWorkspace(owner, sim: BaseSimulation)[source]
Bases:
RelaxingWorkspaceA workspace for handling thermal distortions using the Hello-Vinet model.
Parameters
- ownerobject
The owner of this workspace, typically a component in the simulation.
- simBaseSimulation
The simulation instance this workspace is part of.
Attributes
- input_field_indexint
The index of the input field representing the beam being absorbed.
- delta_Pfloat
The change in power between steps.
- previous_Pfloat
The power from the previous step.
- current_Pfloat
The current power.
- N_frequenciesint
The number of optical frequencies in the simulation.
- num_averagesint
The number of averages for smoothing.
- convergence_statusstr
The status of the convergence process.
- absorption_convergencefloat
The convergence threshold for absorption.
- power_convergencefloat
The convergence threshold for power.
Methods
- power()
Calculate the power of the input field.
- status() -> str
Get the current convergence status.
- converged() -> bool
Check if the workspace has converged.
- update_step(step: int)
Update the absorbed power using exponential smoothing.
- end_step(step: int)
Finalize the step by updating the power change.