/*Translated by FOR_C, v3.4.2 (-), on 07/09/115 at 08:30:10 */
/*FOR_C Options SET: ftn=u io=c no=p op=aimnv s=dbov str=l x=f - prototypes */
#include <math.h>
#include "fcrt.h"
#include "slesum.h"
#include <stdlib.h>
void /*FUNCTION*/ slesum(
float x,
long n,
float a[],
float *sum)
{
	long int k;
	float b, b1, b2, c1, c2, c3;
	static float zero = 0.e0;
	static float one = 1.e0;
	static float two = 2.e0;
 
	/* Copyright (c) 1996 California Institute of Technology, Pasadena, CA.
	 * ALL RIGHTS RESERVED.
	 * Based on Government Sponsored Research NAS7-03001.
	 *>> 1994-10-20 SLESUM Krogh  Changes to use M77CON
	 *>> 1994-04-20 SLESUM CLL  Edited to make DP & SP files similar.
	 *>> 1992-03-13 SLESUM FTK  Removed implicit statements.
	 *>> 1985-08-02 SLESUM Lawson  Initial code.
	 *
	 *     THIS SUBROUTINE EVALUATES THE SUM OF
	 *          A(J) * P(J) FOR J = 0,...,N,
	 *     WHERE P(J)'S  ARE LEGENDRE POLYNOMIALS OF DEGREE J.
	 *
	 *     THE RECURSION FORMULA IS :
	 *     B(K) = X+B(K+1)*(2*K+1)/(K+1)-B(K+2)*(K+1)/(K+2)+A(K)
	 *
	 *     C.L.LAWSON & S.CHAN, JPL, 1983 JUNE 9
	 *
	 *     -------------------------------------------------------------
	 *     SUBROUTINE ARGUMENTS
	 *     --------------------
	 *     X     ARGUMENT OF LEG POLYS, X SHOULD BE NON-NEGATIVE.
	 *     N     SUM IS TO INCLUDE LEGENDRE POLYS OF DEGREE ZERO
	 *           THRU N.
	 *     A()   A,...,A(N) CONTAIN COEFFS TO BE USED IN
	 *           FORMING THE SUM.
	 *     SUM   SUM OF COMBINATION
	 *
	 *     -------------------------------------------------------------
	 *--S replaces "?": ?LESUM
	 *     ------------------------------------------------------------- */
	/*     ------------------------------------------------------------- */
	if (n < 0)
	{
		*sum = zero;
		return;
	}
 
	c1 = (float)( n + 1 );
	c3 = c1 + c1 - one;
	b1 = zero;
	b = a[n];
 
	for (k = n - 1; k >= 0; k--)
	{
 
		/*     C1 = K + 1, C3 = 2K + 1
		 * */
		c2 = c1;
		c1 -= one;
		c3 -= two;
		b2 = b1;
		b1 = b;
		b = x*b1*c3/c1 - b2*c1/c2 + a[k];
	}
	*sum = b;
	return;
} /* end of function */