	program Test_Panel		!sprawdza procedure PANEL
	real*8 panel,p(7),P0
	common /cosP/ P0
	G=PANEL(5,1000d0,209.18d0)
	print*,' Glebokosc panelu Nr 5 w punkcie (1000,209.18):',G
	do 1 i=1,7
	G=PANEL(i,1000d0,0d0)
1	P(i)=p0
	print'(8f9.2)',p
	end

	double precision function PANEL(NRpan,xo,yo)

c Oblicza odleglosc paraboloidalnego panelu od plaszczyzny odniesienia
c opartej na jego naroznikach w funkcji prostokatnych wspolrzednych
c (xo,yo) na tej plaszczyznie. Srodek miêdzy wewnetrznymi (blizszymi
c siebie) naroznikami ma wspolrzedne (0,0), os yo biegnie w kierunku
c wewnetrznego naroznika, zas os xo - na zewnatrz. Przy pomiarach
c podczas produkcji paneli xo i yo liczono od zewnetrznego (lewego
c patrzac z gory) naroznika do wewnatrz, co trzeba uwzglednic
c analizujac dokumentacje tamtych pomiarow; by wrocic do tamtego
c schematu wystarczy wybrac alternatywne opcje podane przy etykietach
c 1 i 2. Wielkosci o wymiarze dlugosci (w tym xo, yo i PANEL) sa
c wyrazone w mm. NRpan przyjmuje wartosci od 1 (zewnetrzny pierscien)
c do 7 (najblizej srodka RT32).

c Rownanie paraboloidu z = r**2/c = (x**2 + y**2)/c, gdzie c = 4f

	implicit real*8 (a-h,o-z)
	dimension rj(0:7),nj(7)
c Zalozenie bardzo waskich paneli (du¿ej ich liczby, nj) bardzo dobrze
c przybliza przypadek jednowymiarowej glebokosci (wzgledem cieciwy):
c	data c/44.8d3/,nj/7*10000/
	data c/44.8d3/,nj/4*64,32,32,16/	! rzeczywisty RT32
	common /cosP/ P0

c Promienie okregow ograniczajacych pierscienie paneli obliczone przez
c podzielenie luku wzdluz 'poludnika' miedzy r = 1.6 i 16 m na 7
c rownych czesci za pomoca funkcji RADIUS(sr)
	data rj/16d3,14142.91d0,12213.76d0,10212.36d0,8141.38d0,
     * 6007.36d0,3821.53d0,16d2/,NR/0/
c Alternatywna do PANEL funkcja na glebokosc
	G(x0,y0)=(((r1*(1+cosP)-x0*cosE)*(r1*(1-cosP)+x0*cosE)-y0*y0)/c
     *-x0*sinE)/cosE
	 if(NRpan.lt.1.or.NRpan.gt.7) then
	  print*,' Niema panelu o numerze', NRpan,' !!!'
	  return
	 endif
	if(NR.eq.NRpan) go to 1
	NR=NRpan
c odleglosci brzegow (tez naroznikow) paneli od osi paraboloidy [mm]
	r0=rj(NRpan)
	r1=rj(NRpan-1)
c P - polowa kata rozwarcia panelu = 180stopni/(liczba paneli)
	cosP=cos(3.1415926536d0/nj(NRpan))
c Tangens, kosinus i sinus nachylenia panelu wzgl. plaszcz. (x,y),
c tj. plaszczyzny prostopadlej do osi symetrii paraboloidu, z.
	tgE=(r0+r1)/(c*cosP)
	cosE=1/sqrt(1+tgE*tgE)
c*	Ep=atan((r0+r1)/c)
c*	P0=(r1-r0)/cos(Ep)	! tylko do bloku common
c* 2238.32  2238.25  2238.16  2238.04  2237.92  2237.82  2237.74
	sinE=tgE*cosE
	dyo=r1*sqrt(1-cosP*cosP)
c Wymiary panelu: odstep zewnetrznych (Yout) i wewnetrznych (Yin)
c naroznikow, odleglosc prostych laczacych zewnetrzne i wewnetrzne
c narozniki (Dlug) oraz najwieksza odleglosc panelu od plaszczyzny
c odniesienia (Gmax)

	Dlug=(r1-r0)*sqrt((r0+r1)**2/c/c+cosP**2)
c*	P0=Dlug
c* 2236.46  2236.24  2236.00  2235.73  2228.12  2227.54  2195.37
c*	P0=r1*(1-cosP)*cosE	! tyle panel wystaje za Dlug
c*   15.98    14.68    13.15    11.38    37.37    28.25    72.88
c*	P0=r0*(1-cosP)*cosE	! tyle panel wciety pod Dlug
c*   14.13    12.68    11.00     9.07    27.57    17.97    30.51
	Yin=2*dyo*r0/r1	!tj. Yout*r0/r1
	Gmax=((c/4*tgE-r1*cosP)*sinE+r1*r1/c*cosE)
	write(*,'(a,4(f8.2,a))')' Yout=',2*dyo,' Yin=',Yin,
     * '  Dlug=',Dlug,'  Glebokosc=',Gmax,' [mm]'
c*	P0=Gmax
c   26.11    25.96    26.04    26.34    34.55    31.14    33.77
c Powyzszy wzor na glebokosc Gmax uzyskuje sie z zaleznosci odleglosci
c od paraboloidu do plaszczyzny odniesienia w funkcji x i y:
c 	G(x)=(r1**2-x**2-y**2)/c*cosE-(r1*cosP-x)*sinE
c G'(x)= sinE-2x*cosE/c = 0 --&#62; x_max=tgE*c/2; przy y=0.

c Minimum G z boku panelu
c*
	sinP=dsqrt(1-cosP**2)
c*
	tgPsi=(r1-r0)*sinP/Dlug	!=c*sinP/dsqrt((r0+r1)**2+(c*cosP)**2)

	b1=c/(2*tgPsi**2*sinE)-r1*sinP/tgPsi
	A=c/(2*sinE)-r1*sinP*tgPsi
	b=c/(2*tgE)+r1*cosP
	c1=(A*A-(b*cosE)**2)/(tgPsi**2*(tgPsi**2+cosE**2))
	x0=-b1+dsqrt(b1*b1-c1)

c*	x0=Dlug
cc	a1=c/(2*tgE)-x0*cosE+r1*cosP
cc	a2=2*r1*x0*(cosP*cosE+sinP*tgPsi)-x0**2*(cosE**2+tgPsi**2)
cc     *-c*x0*sinE
	b=c/(2*tgE)+r1*cosP
c	c2=2*r1*x0*sinP*tgPsi-(x0*tgPsi)**2-c*x0/sinE
	c2=x0*(2*r1*sinP*tgPsi-c/sinE-x0*tgPsi**2)
c*
	P0=(dsqrt(b*b+c2) - b + x0*cosE)/sinE  !glebokosc na boku
c   15.97    17.91    19.99    22.15    24.24    26.05    27.35
c*	P0=x0
cx0(side)1128.97  1128.64  1128.00  1126.93  1121.68  1119.46  1100.93

c*
	ciec=(r1-r0)*sqrt((r0+r1)**2/c/c+1)
c*
	y0=r1*sinP-x0*tgPsi
c*	P0=ciec-dsqrt(x0**2+y0**2)
c  888.94   937.71   983.32  1024.63   919.59  1019.34  1016.65
c*
	go to 3

c*
c*	P0=ciec-dsqrt(x0**2+y0**2)
c*x:     897.67   946.61   992.10  1032.89   925.69  1024.35  1019.30
c*Gbok:   15.97    17.90    19.99    22.15    24.24    26.05    27.35
c*	P0=G(x0,y0) liczone alternatywna funkcja
c         15.96    17.89    19.98    22.14    24.22    26.04    27.33
c x0-50   15.93    17.85    19.94    22.09    24.18    25.98    27.28
c x0+50   15.95    17.88    19.97    22.12    24.21    26.01    27.30
c*	go to 3
c Max. glebokosc z zewnatrz i od wewnatrz - z bledem
c	P0=r1**2*(1 - cosP**2)/c*cosE
c Gout  11.41     9.26     7.17     5.19    13.55     7.56    12.31
c*	P0=G(0d0,0d0) ! lepsza tu od PANEL bo daje te same wyniki:
c       11.41     9.26     7.17     5.19    13.55     7.56    12.31
c*	P0=(r1**2 - (r0*cosP)**2)/c*cosE - (r1 - r0)*cosP*sinE
c Gin    8.92     6.91     5.01     3.30     7.38     3.06     2.16
c*	P0=G(Dlug,0d0)
c        8.92     6.91     5.01     3.30     7.38     3.06     2.16

c*	C1=c/(2*tgE)+ r1*cosP
c*	P0=(dsqrt((r1*sinP)**2+C1**2)-C1)/sinE
cGout   11.20     9.10     7.04     5.10    13.38     7.48    12.25
c*	C1=c/(2*tgE)+ r0*cosP
c*	P0=(dsqrt((r0*sinP)**2+C1**2)-C1)/sinE	! lub (daje to samo):
c	P0=(dsqrt(r0**2+c/tgE*(r0*cosP+c/(4*tgE)))-r0*cosP-c/(2*tgE))/sinE
cGin    9.10     7.04     5.10     3.35     7.49     3.09     2.17


c test identycznosci dwoch g_max dla cieciwy: wszedzie wychodza 0.00
c	P0=(c*tgE/4 -r0)*sinE+r0**2*cosE/c-
c     *(c/sinE/4-(r0+c/tgE/2)*cosE/2)**2/(c*cosE)*4


c Wspolrzedne (x0,y0) na plaszczyznie odniesienia maja poczatek
c y0 na osi symetrii panelu i x0 liczone od zewnatrz do srodka
  1	x0=Dlug-xo	! gdy xo liczone od wewnatrz na zewnatrz
c 1	x0=xo		! gdy xo liczone z zewnatrz do wewnatrz
  2	y0=yo		! gdy yo liczone od srodka panelu
c 2	y0=yo-dyo	! gdy yo liczone od naroznika panelu

c Dla prostej prostopadlej do plaszczyzny odnies. w punkcie (x0,y0),
c z=z0-x/tgE, obliczam wartosc z0, tj. z(x=0,y dowolne). Dla tejze 
c prostej musi byc tez: z=r1**2/c-x0*sinE i x=r1*cosP-x0*cosE, zatem
  3	cE=c/(tgE+tgE)
	z0=r1*(r1+(cE+cE)*cosP)/c-x0/sinE
c Prostopadla przebija panel w punkcie (xp,y0,zp) takim, ze:
c 	z = (xp**2+y0**2)/c 	 i 	z = z0-xp/tgE
c stad (odejmujac stronami):	xp**2+c/tgE*xp+y0**2-z0*c = 0
c	sqrt(del)/2 = sqrt((c/(2*tgE))**2-(y0*y0-c*z0))
c		 xp = sqrt(del)/2-c/(2*tgE)
c (rozwiazanie na xp>0). Wspolrzedne punktu na panelu wynosza wiec
	xp=sqrt(cE*cE-y0*y0+c*z0)-cE
	zp=(xp*xp+y0*y0)/c
c Obliczam odleglosc punktu na panelu od plaszczyzny odniesienia.
c Na plaszcz. odniesienia jest:	x=r1*cosP-x0*cosE
c    			oraz    z=r1**2/c-x0*sinE
	dx=xp-(r1*cosP-x0*cosE)
	dz=zp-(r1*r1/c-x0*sinE)
	PANEL=sign(sqrt(dx*dx+dz*dz),dx)	! lub (lepiej):
c	PANEL=G(x0,y0)
c*
	P0=(PANEL-P0)*1000
	end
