/* tgsng2.c CCMATH mathematics library source code.
*
* Copyright (C) 2000 Daniel A. Atkinson All rights reserved.
* This code may be redistributed under the terms of the GNU library
* public license (LGPL). ( See the lgpl.license file for details.)
* ------------------------------------------------------------------------
*/
/*
Test: gelp g2elp gsng gsng2
Input file: gel2c.dat
*/
#include "ccmath.h"
#include <math.h>
void main(int na,char **av)
{ double ap,bp,cp,k; FILE *fp;
double ax,bx,cx,b,ia,ib,i2;
double s1,s2,ss,h,dd,ga,gb,g2;
if(na!=2){ printf("para: input_file\n"); exit(-1);}
fp=fopen(*++av,"r");
fscanf(fp,"%lf %lf %lf %lf",&k,&ap,&bp,&cp);
b=sqrt(1.-k*k);
printf(" Parameters: k=%f\n",k);
printf(" Bartky a=%f b=%f c=%f\n\n",ap,bp,cp);
while(fscanf(fp,"%lf %lf",&s1,&s2)!=EOF){
printf(" angles: aa=%f ab=%f\n",s1,s2);
/* evaluate first elliptic integral */
ss=fabs(s1); ax=ap; bx=bp; cx=cp;
ga=gelp(ss,k,ax,bx,cx,NULL,NULL,NULL);
printf(" ga0= %12.8f\n",ga); h=ga;
/* check first integral */
ia=gsng(&ax,&bx,&cx,b,ss);
printf(" T-Bartky: %f %f %f ia= %12.8f\n",ax,bx,cx,ia);
ga=gelp(ss,k,ax,bx,cx,NULL,NULL,NULL);
printf(" sa= %12.8f ia+sa= %12.8f\n",ga,ia+ga);
/* evaluate second elliptic integral */
ax=ap; bx=bp; cx=cp;
gb=gelp(s2,k,ax,bx,cx,NULL,NULL,NULL);
printf(" gb0= %12.8f\n",gb);
/* set dd equal to general limit integral integral */
if(s1>0.) dd=gb-h; else dd=gb+h;
/* check second integral */
ib=gsng(&ax,&bx,&cx,b,s2);
printf(" T-Bartky: %f %f %f ib= %12.8f\n",ax,bx,cx,ib);
gb=gelp(s2,k,ax,bx,cx,NULL,NULL,NULL);
printf(" sb= %12.8f ib+sb= %12.8f\n",gb,ib+gb);
/* evaluate elliptic integral using general limits */
ax=ap; bx=bp; cx=cp;
g2=g2elp(s1,s2,k,ax,bx,cx); h=g2;
printf(" g20= %12.8f\n",g2);
/* transform singular elliptic integral with general limits */
i2=gsng2(&ax,&bx,&cx,b,s1,s2);
/* check general limit integral */
printf(" T-Bartky: %f %f %f i2= %12.8f\n",ax,bx,cx,i2);
g2=g2elp(s1,s2,k,ax,bx,cx);
printf(" g2= %12.8f g2+i2= %12.8f\n",g2,i2+g2);
/* compare direct general limit integral with result obtained by
combining single limit integrals */
printf(" comparison: g2: %12.8f diff: %12.8f\n",h,dd);
}
}
/* Test output
Parameters: k=0.500000
Bartky a=1.000000 b=-1.000000 c=-1.154701
angles: aa=0.392699 ab=1.178097
ga0= 0.44373891
T-Bartky: 0.000000 -0.142857 1.010363 ia= 0.44624102
sa= -0.00250212 ia+sa= 0.44373891
gb0= 0.38362644
T-Bartky: 0.000000 -0.142857 1.010363 ib= 0.44368679
sb= -0.06006035 ib+sb= 0.38362644
g20= -0.06011246
T-Bartky: 0.000000 -0.142857 1.010363 i2= -0.00255423
g2= -0.05755823 g2+i2= -0.06011246
comparison: g2: -0.06011246 diff: -0.06011246
angles: aa=-0.392699 ab=1.178097
ga0= 0.44373891
T-Bartky: 0.000000 -0.142857 1.010363 ia= 0.44624102
sa= -0.00250212 ia+sa= 0.44373891
gb0= 0.38362644
T-Bartky: 0.000000 -0.142857 1.010363 ib= 0.44368679
sb= -0.06006035 ib+sb= 0.38362644
g20= 0.82736535
T-Bartky: 0.000000 -0.142857 1.010363 i2= 0.88992781
g2= -0.06256246 g2+i2= 0.82736535
comparison: g2: 0.82736535 diff: 0.82736535
*/
syntax highlighted by Code2HTML, v. 0.9.1