mat_watan Subroutine

public subroutine mat_watan(xr, xi, yr, yi)

Arguments

Type IntentOptional Attributes Name
doubleprecision, intent(in) :: xr
doubleprecision, intent(in) :: xi
doubleprecision, intent(out) :: yr
doubleprecision, intent(out) :: yi

Contents

Source Code


Variables

Type Visibility Attributes Name Initial
doubleprecision, public :: ti
doubleprecision, public :: tr

Source Code

subroutine mat_watan(xr,xi,yr,yi)

! ident_37="@(#) M_LA mat_watan(3fp) y = atan(x) = (i/2)*log((i+x)/(i-x))" --"

doubleprecision,intent(in)  :: xr, xi
doubleprecision,intent(out) :: yr, yi
doubleprecision             :: tr, ti

   if (xi .eq. 0.0d0) then
      yr = datan2(xr,1.0d0)
      yi = 0.0d0
   elseif (xr.ne.0.0d0 .or. dabs(xi).ne.1.0d0) then
      call mat_wdiv(xr,1.0d0+xi,-xr,1.0d0-xi,tr,ti)
      call mat_wlog(tr,ti,tr,ti)
      yr = -(ti/2.0d0)
      yi = tr/2.0d0
   else
      call mat_err(32) ! Singularity of LOG or ATAN
   endif

end subroutine mat_watan