function csabva(a, b) C* returns (1. - cos(a * b) ) / a / a, or its limit as a -> 0 term = snabva(.5 * a, b) csabva = .5 * term * term return end real function lnabva(a, b) C* returns ln (1. + a * b) / a, or its limit as a -> 0. c = a * b if (abs(c) .gt. 0.01) then lnabva = log( 1. + c ) / a else C* using (1. + t) / (1. - t) = 1. + c when t = c / (2. + c) t = c/(2. + c) t = t * t lnabva = b / (2. + c) * (2. + t * a (2./3. + t * b (2./5. + t * c (2./7. )))) endif return end function snabva(a, b) C* returns sin(a * b) / a, or its limit as a -> 0. c = a * b csq = c * c if (csq .gt. .001) then snabva = sin( c ) / a else snabva = b * ( 1. - csq / 6. * a ( 1. - csq / 20. * b ( 1. - csq / 42. ))) endif return end C A series of functions which may have problems in certain ranges C of one of their parameters. These functions, if written normally, C may suffer round-off problems. They are used in particular for C Lambert Conformal projections whose parameters make them almost C the same as a Mercator Projection. function xpabva(a, b) C* returns (exp (a * b) - 1. ) / a, or its limit as a -> 0. c = a * b csq = .25 * c * c if ( csq .gt. .001) then xpabva = (exp( c ) - 1.) / a else xpabva = exp(.5 * c) * b * (1. + csq / 6. * a (1. + csq / 20. * b (1. + csq / 42. ))) endif return end function atnabv(a, b, c) C* returns atan2(a*b,1-a*c)/a, or its limit as a -> 0 xi = a * b eta = a * c vsq = xi * xi + eta * eta if ( vsq - 2. * eta + 1. .le. 0.) then atnabv = 0. return endif if (abs(xi) .gt. .01 * (1. - eta) ) then atnabv = atan2(xi, 1. - eta) / a else t = xi/(1. - eta) t = t * t atnabv = b / (1. - eta) * (1. - t * a (1./3. - t * b (1./5. - t * c (1./7. )))) endif return end