irfpy.util.surfaceframe
¶
An implementation of conversion to surface-interaction frame.
Code author: Yoshifumi Futaana
Surface interaction frame (SIF) is defined as follows. Inpinging angle, ti, is defined by the angle between the negate of the inpinging velocity vector (-vi) and the surface normal, ns.
ti = angle(-vi, ns)
From the outgoing velocity vector (vo), two angles are defined. The outgoing elevation angle, to, is defined as
to = angle(vo, ns)
The azimuthal angle, po, is the angle of the outgoing vector projected on the surface from that of the incoming angle This can be calculated by
|po| = angle( cross(vi, ns), cross(vo, ns) )
The +/- of po should also be considered, i.e.
Sign( ns dot cross(cross(vi, ns), cross(vo, ns) )
- irfpy.util.surfaceframe.tosif(invec, outvec, normvec)[source]¶
Calculate the SIF values from the given vectors.
Three input parameters (3-element array-like or Vector3d instance) are needed. The instances will not be changed (const). @param invec A impinging vector in arbitrary coordinate system. @param outvec A outgoing vector in arbitrary coordinate system. @param normvec A normal vector in arbitrary coordinate system.
@retval ti, to, po A tuple of three angles in degrees.
If the invec is anti-parallel to normvec, ti=0, po=0 is returned. The condition ti > 90 or to > 90 is not acceptable from a physical point of view, but the calculated values are returned (with warning) since mathematically they can be calculated.
>>> t0, t1, p1 = tosif([-1, 0, -1], ... [-1/math.sqrt(2), 1/math.sqrt(2), 1], [0, 0, 1]) >>> print('%.1f' % t0) 45.0 >>> print('%.1f' % t1) 45.0 >>> print('%.1f' % p1) -45.0
If the outgoing direction is opposite, p1 should be positive. >>> t0, t1, p1 = tosif([-1, 0, -1], … [-1/math.sqrt(2), -1/math.sqrt(2), 1], [0, 0, 1]) >>> print(‘%.1f’ % t0) 45.0 >>> print(‘%.1f’ % t1) 45.0 >>> print(‘%.1f’ % p1) 45.0
In case of the flux coming from inside surface, warning is displayed. >>> t0, t1, p1 = tosif([-1, 0, 1], … [-1/math.sqrt(2), -1/math.sqrt(2), 1], [0, 0, 1]) >>> print(‘%.1f’ % t0) 135.0
In case the flux is from antiparallel to the norm >>> t0, t1, p1 = tosif([0, -1, 0], [1, 1, 1], [0, 1, 0]) >>> print(‘%.1f’ % t0) 0.0 >>> print(‘%.1f’ % p1) 0.0