! ! This file is part of SACAMOS, State of the Art CAble MOdels for Spice. ! It was developed by the University of Nottingham and the Netherlands Aerospace ! Centre (NLR) for ESA under contract number 4000112765/14/NL/HK. ! ! Copyright (C) 2016-2018 University of Nottingham ! ! SACAMOS is free software: you can redistribute it and/or modify it under the ! terms of the GNU General Public License as published by the Free Software ! Foundation, either version 3 of the License, or (at your option) any later ! version. ! ! SACAMOS is distributed in the hope that it will be useful, but ! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! for more details. ! ! A copy of the GNU General Public License version 3 can be found in the ! file GNU_GPL_v3 in the root or at . ! ! SACAMOS uses the EISPACK library (in /SRC/EISPACK). EISPACK is subject to ! the GNU Lesser General Public License. A copy of the GNU Lesser General Public ! License version can be found in the file GNU_LGPL in the root of EISPACK ! (/SRC/EISPACK ) or at . ! ! The University of Nottingham can be contacted at: ggiemr@nottingham.ac.uk ! ! ! FILE CONTAINS: ! FUNCTION conjugate_pair ! FUNCTION imaginary_pair ! FUNCTION complex_pair ! ! ! NAME ! conjugate_pair ! ! DESCRIPTION ! Test whether the two complex numbers a and b are a complex conjugate pair ! ! HISTORY ! ! started 15/09/2017 CJS ! FUNCTION conjugate_pair(a,b) RESULT(res) USE type_specifications USE constants IMPLICIT NONE ! argument types complex(dp),intent(IN) :: a,b ! Result type logical :: res !local variables complex(dp) :: diff real(dp) :: mag_diff,mag1,mag2 ! function definition ! Test whether (a*-b)/(|a|+|b|) is zero (very small) mag1=abs(a) mag2=abs(b) diff=conjg(a)-b mag_diff=abs(diff) if ( (mag_diff/(mag1+mag2)).GT.zero_test_small) then res=.FALSE. else res=.TRUE. end if END FUNCTION conjugate_pair ! ! NAME ! imaginary_pair ! ! DESCRIPTION ! Test whether the two complex numbers a and b are an imaginary pair ! It is assumed that a and b are a complex conjugate pair ! ! HISTORY ! ! started 15/09/2017 CJS ! FUNCTION imaginary_pair(a,b) RESULT(res) USE type_specifications USE constants IMPLICIT NONE ! argument types complex(dp),intent(IN) :: a,b ! Result type logical :: res ! local variables complex(dp) :: sum real(dp) :: mag_sum,mag1,mag2 ! function definition ! Test whether the real part of (a*+b)/(|a|+|b|) is zero (very small) mag1=abs(a) mag2=abs(b) sum=conjg(a)+b mag_sum=abs(real(sum)) if ( (mag_sum/(mag1+mag2)).GT.zero_test_small) then res=.FALSE. else res=.TRUE. end if END FUNCTION imaginary_pair ! ! NAME ! complex_pair ! ! DESCRIPTION ! Test whether the two complex numbers a and b are a complex pair ! i.e. the real parts of a and b are not zero ! It is assumed that a and b are a complex conjugate pair ! ! HISTORY ! ! started 15/09/2017 CJS ! FUNCTION complex_pair(a,b) RESULT(res) USE type_specifications USE constants IMPLICIT NONE ! argument types complex(dp),intent(IN) :: a,b ! Result type logical :: res ! local variables complex(dp) :: sum real(dp) :: mag_sum,mag1,mag2 ! function definition ! Test whether the real part of (a*+b)/(|a|+|b|) is greater than zero (something very small) mag1=abs(a) mag2=abs(b) sum=conjg(a)+b mag_sum=abs(real(sum)) if ( (mag_sum/(mag1+mag2)).LT.zero_test_small) then res=.FALSE. else res=.TRUE. end if END FUNCTION complex_pair