c.....  file name dud_jones.for

	SUBROUTINE DUDNEY(ipass,ff,hh)

C	DUDENEY N(H) PROFILE S/R FOR USE WITH Jones RAYTRACING PROG

c	calculate the parameters x,pxpr etc corresponding to a

c	height hh above the surface of the earth, for a wave freq ff.

C	SEE  JATP 40(2), 1978, PG 195

C	LEO MCNAMARA  APRIL 1981

c-----  LAST MODIFIED 23-mar-87

c

C.....REQUIRES S/R DIMSOL & FUNCTIONS HMAX,YMAX (DUDENEY S/RS)

C	

C	S/R IS ESSENTIALLY THE SAME AS DUDENEY'S FUNCTION FN(H), EXCEPT

C	THAT THE SLOPE PXPR IS ALSO CALCULATED

C........................................................................

C	

c 	IPASS = 0 to calculate Dudeney parameters; set=1 afterwards

C........................................................................

C	FOF2  F2 LAYER CRITICAL                MANDATORY

C	FOF1  F1 LAYER CRITICAL                NO F1 GENERATED IF <=0

C	FOE    E LAYER CRITICAL                SET=.6 IF <=0

C	HFF2  MIN F2 VIRTUAL HEIGHT            MANDATORY IF YMF2<=0

C	M3000 M(3000)F2                        MANDATORY IF HMF2<=0

C	HME   E REGION PEAK HEIGHT             SET=100 IF <=0

C	YME   E REGION SEMITHICKNESS           SET=20 IF <=0

C	HMF2  F REGION PEAK HEIGHT             CALCULATED IF <=0

C	YMF2  F REGION SEMITHICKNESS           CALCULATED IF <=0

C	H0    BASE HEIGHT OF IONOSPHERE        E LAYER IF XD<=0

C	XD    D REGION TANGENT TO E LAYER AT XD*FOE

C	DV    E-F FRACTIONAL VALLEY DEPTH

C........................................................................

C	

	REAL M3000

	real*8 x,pxpr,pxpth,pxpph,pxpt,hmax,ff,hh

	character*8 modx

C	

C	DUDENEY'S LABELLED COMMON - OUTPUT FROM DIMSOL

	COMMON / PARMS / BETA,HT,FT,A,HF,AD,TAU,HD

C	JONES CODE

	COMMON / XX / MODX(2),X,PXPR,PXPTH,PXPPH,PXPT,HMAX

c

	common / iondat / fof2,fof1,foe,hff2,m3000,hme,yme,

     a  hmf2,ymf2,h0,xd,dv

c

c	data modx / 'DUDNEY','  ' /

	DATA PI,C1 / 3.141592654,1. /

C	

	fn=0.

	X=0.d0

	PXPR=0.d0

	PXPTH=0.d0

	PXPPH=0.d0

	h = sngl (hh)

	f = sngl (ff)

c

C	FIRST CALL TO S/R - IPASS=0 - CALCULATE DUDENEY PROFILE

	IF(IPASS.EQ.1) GO TO 10

	CALL DIMSOL(IERROR)

	HMAX= dble(HMF2)

	IF(IERROR.EQ.0) GO TO 10

	PRINT 200,IERROR

200	FORMAT(//5X,'*DIMSOL RETURNED ERROR CODE*',I3//)

	STOP 200

10	continue

C	

C	CHECK TO SEE IF POINT IS BELOW BASE HEIGHT

	IF(H.LE.H0) RETURN

C	

C	D-REGION SEGMENT

	IF(H.GT.HD) GO TO 20

	FN=TAU/ALOG(AD/(H-H0))

	DFNDH=FN*FN/TAU/(H-H0)

	GO TO 60

C	

C	E-REGION SEGMENT   DUDENEY EQN 5

20	IF(H.GT.HME) GO TO 25

	CON1=(HME-H)/YME

	CON2=SQRT(C1-CON1*CON1)

	FN=FOE*CON2

	DFNDH=FOE*CON1/CON2/YME

	GO TO 60

c

25	continue

C	

C	F1-REGION SEGMENT   APPROX DUDENEY EQN 12

	IF(H.GT.HT) GO TO 40

	ANG1=2.*PI*(H-HME)/(HT-HME)

	ANG2=(H-HME)/BETA/YMF2

	COS1=COS(ANG1)

	SIN1=SIN(ANG1)

	COS2=COS(ANG2)

	SIN2=SIN(ANG2)

	FN=FOE*(A*(C1-COS1)+C1/COS2)

	DFNDH=2.*PI*A/(HT-HME)*SIN1+C1/BETA/YMF2/COS2/COS2*SIN2

	DFNDH=FOE*DFNDH

	GO TO 60

C	

C	F2-REGION   DUDENEY EQN 1

C	TOPSIDE DENSITY DROPS TO ZERO AT H=HMF2+(PI/2)*YMF2

40	IF(H.GT.HMF2+(PI/2.)*YMF2) RETURN

	ANG=(HMF2-H)/YMF2

	FN=FOF2*COS(ANG)

	DFNDH=FOF2*SIN(ANG)/YMF2

C	

C	CONVERT FROM FN TO X AND FROM DFNDH TO PXPR (for Jones prog)

60	F2=F*F

	X= dble (FN*FN/F2)

	PXPR= dble (2.*FN*DFNDH/F2)

C	

	RETURN

	END