finesse.components.thermal_effects module

class finesse.components.thermal_effects.HelloVinetDistortions(*args, **kwargs)[source]

Bases: RelaxingElement

An 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

materialfinesse.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)

check_aperture(component)[source]
check_static(component)[source]
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.

relaxing_parameters() tuple[Parameter, ...][source]
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.

update()[source]

Update the surface and thermal lens maps based on the current parameters.

Returns

HR, lenstuple(np.ndarray, np.ndarray)

A tuple containing the surface and thermal lens 2D data.

class finesse.components.thermal_effects.HelloVinetDistortionsWorkspace(owner, sim: BaseSimulation)[source]

Bases: RelaxingWorkspace

A 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.

converged(self) bool[source]
end_step(self, int step)[source]
on_failed_step(self, int step)[source]
on_sucess_step()[source]
power()[source]
status(self) str[source]
update_step(self, int step)[source]