SUBROUTINE ANGLE7(BE,NA,IN) INTEGER NA REAL BE(*) LOGICAL IN C C**** BE=JACIN,NA=NARCS,IN=INTER C C**** TO COMPUTE THE ARRAY OF JACOBI INDECES CORRESPONDING TO THE C**** CORNER ANGLES ON THE BOUNDARY C C**** LOCAL VARIABLES INTEGER K,B0,B1,B2 REAL X,Y,ANG,PI,R1MACH,EPS,XI,APP COMPLEX U,V,DPARFN EXTERNAL DPARFN,R1MACH C PI=4E+0*ATAN(1E+0) EPS=SQRT(R1MACH(4)) DO 1 K=1,NA U=DPARFN(K,(1.0,0.0)) U=-U/ABS(U) IF (K.EQ.NA) THEN V=DPARFN(1,(-1.0,0.0)) ELSE V=DPARFN(K+1,(-1.0,0.0)) ENDIF V=V/ABS(V) V=U/V X=REAL(V) Y=AIMAG(V) ANG=ATAN2(Y,X) IF (ANG.LT.0) THEN ANG=ANG+2E+0*PI ENDIF ANG=ANG/PI IF (.NOT.IN) THEN ANG=2E+0-ANG ENDIF ANG=-1E+0+1E+0/ANG C C**** TRY TO DETECT SIMPLE RATIONAL INDECES AND FORCE BEST REAL C**** APPROXIMATIONS C IF (ABS(ANG) .LT. EPS) THEN ANG=0E+0 ELSE XI=ABS(ANG) B0=INT(XI) XI=XI-REAL(B0) IF (ABS(XI) .LT. EPS) THEN APP=REAL(B0) ELSE XI=1E+0/XI B1=INT(XI) XI=XI-REAL(B1) IF (ABS(XI) .LT. EPS) THEN APP=REAL(1+B0*B1)/REAL(B1) ELSE XI=1E+0/XI B2=INT(XI) APP=REAL(B0*(1+B1*B2)+B2)/REAL(1+B1*B2) ENDIF ENDIF APP=SIGN(1E+0,ANG)*APP IF (ABS(ANG-APP) .LT. EPS) ANG=APP ENDIF C IF (K.EQ.NA) THEN BE(1)=ANG ELSE BE(K+1)=ANG ENDIF 1 CONTINUE END REAL FUNCTION ARGIN1(RT1,RT2,PT,DIFF1,DIFF2,ZZ,LIMIT) INTEGER PT REAL RT1,RT2,LIMIT COMPLEX DIFF1,DIFF2,ZZ C C ZZ IS A GIVEN FIELD POINT AND DIFF1, DIFF2 ARE THE DIFFERENCES C BETWEEN ZZ AND CONSECUTIVE POINTS ON THE BOUNDARY C (DIFF1=PARFUN(PT,RT1)-ZZ, ZET2=PARFUN(PT,RT2)-ZZ). THE C PURPOSE OF THIS ROUTINE IS TO CALCULATE THE INCREASE IN THE C ARGUMENT ARG(ZZ-Z) AS Z MOVES ALONG THE BOUNDARY FROM THE POINT C WITH PARAMETER VALUE RT1 TO THE POINT WITH PARAMETER VALUE RT2. C C LOCAL VARIABLES C INTEGER NANGS,NINTS REAL ANGLE,T1,T2 COMPLEX D1,D2,PARFUN,V EXTERNAL PARFUN C C LIMIT IS CURRENTLY SET TO 3*PI/4, APPROXIMATELY C T1=RT1 T2=(RT1+RT2)*5E-1 D1=DIFF1 D2=PARFUN(PT,CMPLX(T2))-ZZ NANGS=0 NINTS=2 ARGIN1=0E+0 C 10 CONTINUE V=D2*CONJG(D1) ANGLE=ATAN2(AIMAG(V),REAL(V)) IF (ABS(ANGLE) .GE. LIMIT) THEN T2=(T1+T2)*5E-1 D2=PARFUN(PT,CMPLX(T2))-ZZ NINTS=NINTS+1 GOTO 10 ELSE ARGIN1=ARGIN1+ANGLE NANGS=NANGS+1 IF (NANGS .NE. NINTS) THEN T1=T2 T2=RT2 D1=D2 D2=DIFF2 GOTO 10 ENDIF ENDIF C END SUBROUTINE ASONJ7(ALFA,BETA,A,B,H,N) INTEGER N REAL A(*),B(*),H,ALFA,BETA C ..TO ASSIGN THE COEFFICIENTS A(K) AND B(K) , K=1(1)N, IN THE C ..3-TERM RECURRENCE FORMULA FOR THE ORTHONORMAL JACOBI POLYNOMIALS C ..WHERE C .. C .. A(K)P (X) = (X - B(K))P (X) - A(K-1)P (X) , K=1,2,..,N, C .. K K-1 K-2 C .. C .. P (X) = 0 , P (X) = 1/SQRT(H) C .. -1 0 C .. C ..AND H IS THE ZEROTH MOMENT OF THE JACOBI WEIGHT FUNCTION C ..(1-X)**ALFA*(1+X)**BETA ON [-1,1]. C**** AUTHOR: DAVID HOUGH C**** LAST UPDATE: 15.09.89 C**** ..LOCAL VARIABLES.. REAL SUM,DIFF,PROD,TC,T,SC,S,GAMMA,C INTEGER K EXTERNAL GAMMA SUM=ALFA+BETA DIFF=BETA-ALFA PROD=SUM*DIFF C ..CALCULATE H. TC=SUM+1.0 SC=2.0**TC S=GAMMA(ALFA+1.0) T=GAMMA(BETA+1.0) C=GAMMA(TC+1.0) H=SC*S*T/C C ..START ON A,B ARRAYS. IF (N.GT.0) THEN T=2.0+SUM S=T*T C=4.0*(ALFA+1.0)*(BETA+1.0)/S/(T+1.0) A(1)=SQRT(C) B(1)=DIFF/T DO 10 K=2,N B(K)=PROD/T/(T+2.0) T=2.0*K+SUM S=T*T C=4.0*K*(ALFA+K)*(BETA+K)*(SUM+K)/S/(S-1.0) A(K)=SQRT(C) 10 CONTINUE ENDIF END SUBROUTINE ASQUC7(AQCOF,BQCOF,CQCOF,JACIN,NJIND,NQPTS) INTEGER NJIND,NQPTS REAL AQCOF(*),BQCOF(*),CQCOF(*),JACIN(*) C C ..TO ASSIGN THE COEFFICIENTS A(J), B(J) AND C(J) ,J=1,MN IN THE C ..3-TERM RECURRENCE FORMULA C .. C .. Q (Z) = (A(J)Z - B(J))Q (Z) - C(J)Q (Z) , J=2,...,MN C .. J+1 J J-1 C .. C .. Q (Z) = (A(1)Z - B(1))Q (Z) - C(1) C .. 2 1 C .. C ..WHERE Q (Z):=
, P IS THE ORTHONORMAL JACOBI POLY
C .. J J J
C ..OF DEGREE J AND THE INNER PRODUCT IS WITH RESPECT TO THE JACOBI
C ..DISTRIBUTION OVER (-1,1). HERE A(J,I) STORES "A(J)" FOR THE ITH
C ..ARC ON THE BOUNDARY (WITH SIMILAR ROLE FOR ARRAYS B AND C) AND
C ..THE JACOBI WEIGHT FUNCTION FOR THE ITH ARC IS
C ..(1-X)**AB(I,1)*(1+X)**AB(I,2), J=1,MN, I=1,NA.
C
C**** AUTHOR: DAVID HOUGH
C**** LAST UPDATE: 15.09.89
C
C**** LOCAL VARIABLES
INTEGER I,J,K,LOSUB
REAL BE,H,D,N,N1,N2,F
EXTERNAL ASONJ7
DO 10 I=1,NJIND
LOSUB=(I-1)*NQPTS+1
BE=JACIN(I)
CALL ASONJ7(1E+0,BE+1E+0,AQCOF(LOSUB),BQCOF(LOSUB),H,NQPTS)
DO 20 K=1,NQPTS
J=LOSUB+K-1
N=REAL(K)
D=(N+1E+0)*(N+BE+2E+0)
N1=N*(N+BE+1E+0)
N2=(N-1E+0)*(N+BE)
F=SQRT(N1/D)
AQCOF(J)=F/AQCOF(J)
BQCOF(J)=BQCOF(J)*AQCOF(J)
IF (K.GT.1) THEN
CQCOF(J)=AQCOF(J)*N2/AQCOF(J-1)/N1
ELSE
CQCOF(J)=-AQCOF(J)*SQRT(H/N1)
ENDIF
20 CONTINUE
10 CONTINUE
C
END
SUBROUTINE AXION1(AXION,NEWDG,SOLUN,MDGPO,TNSUA,DGPOL,LOSUB,HISUB,
+RIGLL,LGTOL,ACCPT,JACIN,JATYP,NJIND,NEWHL,ESTOL,IER)
INTEGER AXION(*),NEWDG(*),MDGPO,TNSUA,DGPOL(*),LOSUB(*),HISUB(*),
+JATYP(*),NJIND,IER
REAL SOLUN(*),RIGLL(*),LGTOL,JACIN(*),NEWHL(*),ESTOL
LOGICAL ACCPT
C
C TO DETERMINE THE ARRAY "AXION" WHICH SPECIFIES THE ACTIONS THAT
C ARE TO TAKEN ON EACH SUBARC, AS FOLLOWS:
C AXION(I)=-1 - REDUCE THE DEGREE ON ARC I
C AXION(I)=0 - LEAVE THE DEGREE ON ARC I UNCHANGED
C AXION(I)=1 - INCREASE THE DEGREE ON ARC I
C AXION(I)=2 - SUBDIVIDE ARC I.
C
C IN CASE ABS(AXION(I))=1, NEWDG(I) RECORDS THE NEW DEGREE TO BE
C USED ON ARC I.
C
C IN CASE AXION(I)<=0 FOR ALL I=1,TNSUA, THE SOLUTION IS DEEMED TO
C BE ACCEPTABLE TO THE REQUIRED ACCURACY AND WE SET ACCPT=.TRUE.;
C ACCPT=.FALSE. OTHERWISE.
C
C ALSO TO DETERMINE THE EFFECTIVE STOPPING TOLERANCE ESTOL; IF THE
C USER HAD INPUT ESTOL AS THE VALUE FOR THE ARGUMENT MAXER IN
C JAPHYC, THEN THE CURRENT SOLUTION WOULD BE ACCEPTED.
C
C IER=0 - NORMAL EXIT
C IER=54 - LOCAL PARAMETER MXCO MUST BE INCREASED
C
C LOCAL VARIABLES
C
INTEGER AJT,CI,CRITCO,DG,I,IA,IFL,J,LOD,LOM,MINDG,MXCO,PNDG
REAL AA,BETA,CONF,EXA,LAM,POW,SAFEF,TERM,THSLN,XX,VAR
REAL COVAR(2,2)
LOGICAL CONSV
EXTERNAL CRITCO,STATS1
PARAMETER (SAFEF=5E+0,MINDG=0,MXCO=32,CONSV=.FALSE.)
REAL POSCO(MXCO)
C
ESTOL=0E+0
DO 60 IA=1,TNSUA
DG=DGPOL(IA)
IF (DG+1 .GT. MXCO) THEN
IER=54
RETURN
ENDIF
LOM=LOSUB(IA)
AJT=ABS(JATYP(IA))
LOD=(AJT-1)*(MDGPO+1)+1
DO 10 I=0,DG
J=LOM+I
POSCO(I+1)=ABS(SOLUN(J))*RIGLL(LOD+I)/LGTOL
10 CONTINUE
CI=CRITCO(DG+1,POSCO)-1
PNDG=CI+1+MINDG
IF (CI .EQ. -1) THEN
C
C**** ALL COEFFICIENTS ARE ACCEPTABLE.
C
IF (DG .EQ. MINDG) THEN
AXION(IA)=0
NEWDG(IA)=DG
ELSE
C
C**** PROBABLY DECREASE THE DEGREE, BUT ONLY IGNORE THOSE
C**** COEFFICIENTS WHICH ARE 'SAFELY' BELOW THE TOLERANCE
C**** LIMIT.
C
DO 20 I=0,DG
POSCO(I+1)=POSCO(I+1)*SAFEF
20 CONTINUE
PNDG=CRITCO(DG+1,POSCO)+MINDG
IF (PNDG .GE. DG) THEN
AXION(IA)=0
NEWDG(IA)=DG
ELSE IF (PNDG .LE. MINDG) THEN
AXION(IA)=-1
NEWDG(IA)=MINDG
ELSE
AXION(IA)=-1
NEWDG(IA)=PNDG
ENDIF
ENDIF
ELSE IF (PNDG .EQ. DG) THEN
AXION(IA)=0
NEWDG(IA)=DG
ELSE IF (PNDG .LT. DG) THEN
C
C**** PROBABLY DECREASE THE DEGREE, BUT ONLY IGNORE THOSE
C**** COEFFICIENTS WHICH ARE 'SAFELY' BELOW THE TOLERANCE
C**** LIMIT.
DO 30 I=0,DG
POSCO(I+1)=POSCO(I+1)*SAFEF
30 CONTINUE
PNDG=CRITCO(DG+1,POSCO)+MINDG
IF (PNDG .GE. DG) THEN
AXION(IA)=0
NEWDG(IA)=DG
ELSE IF (PNDG .LE. MINDG) THEN
AXION(IA)=-1
NEWDG(IA)=MINDG
ELSE
AXION(IA)=-1
NEWDG(IA)=PNDG
ENDIF
ELSE IF (DG .EQ. MDGPO) THEN
C
C**** ARC SUBDIVISION IS REQUIRED AND ASSIGN NEW HALF-LENGTH.
C
AXION(IA)=2
BETA=JACIN(AJT)
LAM=MIN(1E+0,1E+0+BETA)
IF (AJT .NE. NJIND) THEN
NEWHL(IA)=(1E+0/POSCO(CI+1))**(1E+0/(1E+0+LAM+BETA))
ELSE
NEWHL(IA)=5E-1
ENDIF
ELSE
C
C**** MUST DECIDE BETWEEN ARC SUBDIVISION ARC DEGREE INCREASE.
C**** FIRST MAKE CONSERVATIVE ESTIMATES FOR THE COEFFICIENTS
C**** FOR DEGREES DG+1 TO MDGPO.
C
CALL STATS1(SOLUN(LOM),DG+1,AA,POW,EXA,COVAR,CONF,IFL)
IF (IFL .EQ. 1) THEN
C
C**** NOT ENOUGH DATA TO MAKE ESTIMATES, WHICH PRESUMES DG
C**** IS RATHER SMALL; THEREFORE INCREASE THE DEGREE.
C
AXION(IA)=1
NEWDG(IA)=MIN(DG+2,MDGPO)
ELSE
DO 40 I=DG+1,MDGPO
IF (CONSV) THEN
XX=LOG(1E+0+I)
VAR=COVAR(1,1)+XX*XX*COVAR(2,2)+2E+0*XX*COVAR(1,2)
THSLN=EXA*(I+1)**POW*EXP(CONF*SQRT(VAR))
ELSE
THSLN=EXA*(I+1)**POW
ENDIF
POSCO(I+1)=ABS(THSLN)*RIGLL(LOD+I)/LGTOL
40 CONTINUE
PNDG=CRITCO(MDGPO+1,POSCO)+MINDG
IF (PNDG .LE. MDGPO) THEN
C
C**** INCREASE DEGREE
C
AXION(IA)=1
NEWDG(IA)=PNDG
ELSE
C
C**** SUBDIVIDE ARC AND ASSIGN NEW HALF-LENGTH.
C
AXION(IA)=2
BETA=JACIN(AJT)
LAM=MIN(1E+0,1E+0+BETA)
IF (AJT .NE. NJIND) THEN
NEWHL(IA)=(1E+0/POSCO(CI+1))**
+ (1E+0/(1E+0+LAM+BETA))
ELSE
NEWHL(IA)=5E-1
ENDIF
ENDIF
ENDIF
ENDIF
C
C**** NOW UPDATE THE EFFECTIVE STOPPING TOLERANCE
C
J=HISUB(IA)-MINDG
DO 50 I=J,HISUB(IA)
TERM=ABS(SOLUN(I))*RIGLL(LOD+I-LOM)
ESTOL=MAX(ESTOL,EXP(TERM)-1E+0)
50 CONTINUE
60 CONTINUE
C
ACCPT=.TRUE.
DO 70 I=1,TNSUA
IF (AXION(I) .GT. 0) THEN
ACCPT=.FALSE.
GOTO 80
ENDIF
70 CONTINUE
C
80 CONTINUE
C
IER=0
C
END
SUBROUTINE BCFSNG(TNSUC,DGPOC,JTYPC,LSUBC,H0VLC,JAINC,BFSNC,SOLNC)
INTEGER TNSUC
INTEGER DGPOC(*),JTYPC(*),LSUBC(*)
REAL H0VLC(*),JAINC(*)
COMPLEX BFSNC(*),SOLNC(*)
C
C PERFORMS VARIOUS PRELIMINARY TASKS TO PREPARE FOR THE POST-
C PROCESSING QUADRATURE CALCULATIONS.
C
C SETS UP THE ARRAY OF COEFFICIENTS BFSNC NEEDED FOR THE CALCULATION
C OF THE COMPLEX BOUNDARY CORRESPONDENCE FUNCTIONS FOR THE MAP
C CANONICAL --> PHYSICAL; THESE ARE SIMPLY RELATED TO THE SOLUTION
C COEFFICIENT ARRAY SOLNC.
C
C LOCAL VARIABLES
C
INTEGER AJTC,DEG,I,J,J1,JTC,LO
REAL B1,RTH0,TUPI
C
TUPI=8E+0*ATAN(1E+0)
C
DO 30 I=1,TNSUC
JTC=JTYPC(I)
AJTC=ABS(JTC)
RTH0=SQRT(H0VLC(AJTC))
B1=JAINC(AJTC)+1E+0
DEG=DGPOC(I)
LO=LSUBC(I)
C
BFSNC(LO)=TUPI*SOLNC(LO)/(B1*RTH0)
DO 10 J=1,DEG
J1=LO+J
BFSNC(J1)=TUPI*SOLNC(J1)/SQRT(J*(J+B1))
10 CONTINUE
C
IF (JTC .LT. 0) THEN
DO 20 J=1,DEG,2
J1=LO+J
BFSNC(J1)=-BFSNC(J1)
20 CONTINUE
ENDIF
C
30 CONTINUE
C
END
SUBROUTINE BCFVTF(BCFSN,VTARG,DGPOL,JATYP,LOSUB,PARNT,RFARC,TNSUA,
+H0VAL,JACIN,RFARG,SOLUN)
INTEGER RFARC,TNSUA
INTEGER DGPOL(*),JATYP(*),LOSUB(*),PARNT(*)
REAL RFARG
REAL BCFSN(*),H0VAL(*),JACIN(*),SOLUN(*),VTARG(*)
C
C PERFORMS VARIOUS PRELIMINARY TASKS TO PREPARE FOR THE POST-
C PROCESSING QUADRATURE CALCULATIONS.
C
C SETS UP THE ARRAY OF COEFFICIENTS BCFSN NEEDED FOR THE
C CALCULATION OF THE BOUNDARY CORRESPONDENCE FUNCTIONS FOR THE MAP
C PHYSICAL --> CANONICAL; THESE ARE SIMPLY RELATED TO THE SOLUTION
C COEFFICIENT ARRAY SOLUN.
C
C CALCULATES THE ARGUMENTS VTARG OF THE IMAGES ON THE UNIT CIRCLE
C OF THE END POINTS OF ALL SUBARCS, ENFORCING THE USER'S ROTATION
C CONDITION THAT PARFUN(RFARC,(-1.0,0.0)) BE MAPPED TO THE POINT
C WITH ARGUMENT RFARG.
C
C LOCAL VARIABLES
C
INTEGER AJT,DEG,I,J,J1,JT,LO
REAL B1,RTH0,THET0,TUPI
C
TUPI=8E+0*ATAN(1E+0)
VTARG(1)=0E+0
C
DO 30 I=1,TNSUA
JT=JATYP(I)
AJT=ABS(JT)
RTH0=SQRT(H0VAL(AJT))
B1=JACIN(AJT)+1E+0
DEG=DGPOL(I)
LO=LOSUB(I)
VTARG(I+1)=VTARG(I)+SOLUN(LO)*TUPI*RTH0
C
BCFSN(LO)=TUPI*SOLUN(LO)/(B1*RTH0)
DO 10 J=1,DEG
J1=LO+J
BCFSN(J1)=TUPI*SOLUN(J1)/SQRT(J*(J+B1))
10 CONTINUE
C
IF (JT .LT. 0) THEN
DO 20 J=1,DEG,2
J1=LO+J
BCFSN(J1)=-BCFSN(J1)
20 CONTINUE
ENDIF
C
30 CONTINUE
C
I=1
40 IF (PARNT(I) .EQ. RFARC) THEN
THET0=RFARG-VTARG(I)
ELSE
I=I+1
GOTO 40
ENDIF
C
DO 50 I=1,TNSUA
VTARG(I)=VTARG(I)+THET0
50 CONTINUE
VTARG(TNSUA+1)=VTARG(1)+TUPI
C
END
SUBROUTINE BISNEW(IER,LL,TT,UU,A1COF,ACOEF,B1COF,BCFSN,BCOEF,BETA,
+DEG,H0VAL,H1VAL,JACOF,NEWTL,SJT,RRHS,TOLIW)
INTEGER DEG,IER
REAL A1COF(*),ACOEF(*),B1COF(*),BCFSN(*),BCOEF(*),BETA,H0VAL,
+H1VAL,JACOF,LL,NEWTL,TT,UU,SJT,RRHS,TOLIW
C
C A MIXTURE OF BISECTION AND NEWTON'S METHOD TO SOLVE THE NON-LINEAR
C BOUNDARY CORRESPONDENCE EQUATION
C
C THETA(TT) = CONST
C
C FOR REAL PARAMETER TT GIVEN REAL CONST; SEE RB#50 P134. THE
C INTERVAL (LL,UU) SHOULD BRACKET TT.
C
C IER=0 - NORMAL EXIT
C IER=34 - FUNCTION HAS SAME SIGN AT LL AND UU
C IER=35 - ZERO FUNCTION DERIVATIVE DETECTED
C
C LOCAL VARIABLES
C
INTEGER MNITS,NBSCT,NITS,STEPS
REAL DFT,EPS,FL,FT,FU,JACSUM,RDIFF,TUPI
PARAMETER (MNITS=10,NBSCT=3)
EXTERNAL JACSUM
C
TUPI=8E+0*ATAN(1E+0)
C
FL=JACSUM(SJT*LL,DEG-1,A1COF,B1COF,H1VAL,BCFSN(2))
FL=BCFSN(1)-(1E+0-SJT*LL)*FL
FL=(1E+0+SJT*LL)**(1E+0+BETA)*FL-RRHS
C
FU=JACSUM(SJT*UU,DEG-1,A1COF,B1COF,H1VAL,BCFSN(2))
FU=BCFSN(1)-(1E+0-SJT*UU)*FU
FU=(1E+0+SJT*UU)**(1E+0+BETA)*FU-RRHS
C
IF (FL*FU .GT. 0E+0) THEN
IER=34
RETURN
ENDIF
C
C ENTER NEWTON ITERATION MODE
C
10 CONTINUE
TT=(UU+LL)*5E-1
NITS=0
20 CONTINUE
FT=JACSUM(SJT*TT,DEG-1,A1COF,B1COF,H1VAL,BCFSN(2))
FT=BCFSN(1)-(1E+0-SJT*TT)*FT
FT=(1E+0+SJT*TT)**(1E+0+BETA)*FT-RRHS
DFT=JACSUM(SJT*TT,DEG,ACOEF,BCOEF,H0VAL,JACOF)
DFT=TUPI*(1E+0+SJT*TT)**BETA*DFT*SJT
IF (DFT.EQ.0E+0) THEN
IER=35
RETURN
ENDIF
RDIFF=FT/DFT
TT=TT-RDIFF
NITS=NITS+1
IF (ABS(RDIFF) .LT. NEWTL) THEN
C
C NEWTON ITERATIONS HAVE CONVERGED FOR TT
C
IER=0
RETURN
ELSE IF (TT.LE.LL .OR. TT.GE.UU .OR. NITS.EQ.MNITS) THEN
C
C PERFORM NBSCT BISECTION STEPS
C
STEPS=0
30 CONTINUE
EPS=(UU-LL)*5E-1
IF (EPS.LT.TOLIW) THEN
C
C BISECTION ITERATIONS HAVE CONVERGED FOR TT
C
IER=0
RETURN
ENDIF
TT=(UU+LL)*5E-1
FT=JACSUM(SJT*TT,DEG-1,A1COF,B1COF,H1VAL,BCFSN(2))
FT=BCFSN(1)-(1E+0-SJT*TT)*FT
FT=(1E+0+SJT*TT)**(1E+0+BETA)*FT-RRHS
C
IF (FT*FL.LT.0E+0) THEN
UU=TT
FU=FT
ELSE
LL=TT
FL=FT
ENDIF
STEPS=STEPS+1
IF (STEPS .EQ. NBSCT) THEN
C
C RE-START NEWTON MODE
C
GOTO 10
ELSE
C
C CONTINUE WITH BISECTION
C
GOTO 30
ENDIF
ELSE
C
C CONTINUE WITH NEWTON MODE
C
GOTO 20
ENDIF
C
END
SUBROUTINE BMCANP(THETA,PHYPT,DERIV,WANTD,INTER,CENTR,IGEOM,RGEOM,
+ISNCA,RSNCA,ZSNCA,WANTM,IER)
C
INTEGER IER
INTEGER IGEOM(*),ISNCA(*)
REAL THETA
REAL RGEOM(*),RSNCA(*)
COMPLEX PHYPT,DERIV,CENTR
COMPLEX ZSNCA(*)
LOGICAL WANTD,INTER,WANTM
C
C ......................................................................
C
C 1. BMCANP
C BOUNDARY MAPPING FOR THE CANONICAL --> PHYSICAL MAP.
C
C 2. PURPOSE
C GIVEN A POINT ON THE UNIT CIRCLE, THIS ROUTINE COMPUTES THE
C CORRESPONDING APPROXIMATE IMAGE POINT ON THE BOUNDARY OF THE
C PHYSICAL DOMAIN AND, IF REQUESTED, ALSO COMPUTES THE
C DERIVATIVE OF THE MAP : CANONICAL --> PHYSICAL AT THE GIVEN
C POINT ON THE UNIT CIRCLE.
C
C 3. CALLING SEQUENCE
C CALL BMCANP(THETA,PHYPT,DERIV,WANTD,INTER,CENTR,IGEOM,RGEOM,
C ISNCA,RSNCA,ZSNCA,WANTM,IER)
C
C PARAMETERS
C ON ENTRY
C THETA - REAL
C THE ARGUMENT OF THE GIVEN POINT ON THE UNIT
C CIRCLE.
C
C WANTD - LOGICAL
C IF WANTD IS TRUE THEN DERIV IS COMPUTED OTHERWISE
C DERIV ISN'T COMPUTED.
C
C INTER - LOGICAL
C TRUE IF THE PHYSICAL DOMAIN IS INTERIOR, FALSE
C OTHERWISE. (AS PREVIOUSLY USED IN JAPHYC, GQPHYC)
C
C IGEOM - INTEGER ARRAY
C THE INTEGER VECTOR IGEOM PREVIOUSLY SET UP BY
C JAPHYC.
C
C RGEOM - REAL ARRAY
C THE REAL VECTOR RGEOM PREVIOUSLY SET UP BY JAPHYC.
C
C ISNCA - INTEGER ARRAY
C THE INTEGER VECTOR PREVIOUSLY SET UP BY JACANP.
C
C RSNCA - REAL ARRAY
C THE REAL VECTOR PREVIOUSLY SET UP BY JACANP.
C
C ZSNCA - COMPLEX ARRAY
C THE COMPLEX VECTOR PREVIOUSLY SET UP BY JACANP.
C
C WANTM - LOGICAL
C IF WANTM IS TRUE THEN, ON AN ABNORMAL EXIT, AN
C ERROR MESSAGE IS WRITTEN ON THE STANDARD OUTPUT
C CHANNEL. IF WANTM IS FALSE THEN NO MESSAGE IS
C WRITTEN.
C
C ON EXIT
C PHYPT - COMPLEX
C THE COMPUTED POINT ON THE PHYSICAL BOUNDARY CORR-
C ESPONDING TO THE POINT WITH ARGUMENT THETA ON THE
C UNIT CIRCLE.
C
C DERIV - COMPLEX
C THE COMPUTED DERIVATIVE OF THE MAP : CANONICAL -->
C PHYSICAL AT THE GIVEN POINT ON THE UNIT CIRCLE.
C THIS IS COMPUTED ONLY IF WANTD IS TRUE.
C
C IER - INTEGER
C IF IER > 0 THEN AN ABNORMAL EXIT HAS OCCURRED;
C A MESSAGE TO DESCRIBE THE ERROR IS AUTOMATICALLY
C WRITTEN ON THE STANDARD OUTPUT CHANNEL.
C IER=0 - NORMAL EXIT.
C IER>0 - ABNORMAL EXIT; THE ERROR MESSAGE SHOULD
C BE SELF EXPLANATORY.
C
C
C 4. SUBROUTINES OR FUNCTIONS NEEDED
C - THE CONFPACK LIBRARY.
C - THE REAL FUNCTION R1MACH.
C - THE USER SUPPLIED COMPLEX FUNCTIONS PARFUN AND DPARFN.
C
C
C 5. FURTHER COMMENTS
C - NOTE THAT THIS ROUTINE CAN ONLY BE USED A F T E R THE
C ROUTINE JACANP HAS SUCCESSFULLY EXECUTED, AND THAT SOME
C INPUT ARGUMENTS FOR BMCANP ARE OUTPUT VALUES FROM JACANP.
C
C
C ......................................................................
C AUTHOR: DAVID HOUGH, ETH, ZUERICH
C LAST UPDATE: 3 JULY 1990
C ......................................................................
C
C LOCAL VARAIBLES
C
INTEGER ACOFC,AICOC,BCOFC,BFSNC,BICOC,DGPOC,H0VLC,HALEN,HIVLC,
+JAINC,JTYPC,LSUBC,NARCS,NJIND,NQPTS,MIDPT,MNCOF,MNSUA,MNSUC,PARNT,
+PHPAS,PRNSA,SOLNC,TNGQP,TNSUC,VARGC,VTARG
CHARACTER IERTXT*6
C
EXTERNAL BMCAP1,IERTXT
C
NARCS=ISNCA(1)
NQPTS=ISNCA(2)
TNSUC=ISNCA(3)
MNSUC=ISNCA(5)
MNCOF=ISNCA(6)
MNSUA=IGEOM(4)
C
NJIND=NARCS+1
TNGQP=NQPTS*NJIND
C
C**** SET UP POINTERS TO IGEOM AND RGEOM, AS IN JAPHYC
C
PARNT=5
HALEN=3
MIDPT=MNSUA+3
VTARG=2*MNSUA+3
C
C**** SET UP POINTERS TO ISNCA, RSNCA AND ZSNCA, AS IN JACANP
C
DGPOC=7
JTYPC=MNSUC+7
LSUBC=2*MNSUC+7
PRNSA=3*MNSUC+7
ACOFC=2
BCOFC=TNGQP+2
AICOC=2*TNGQP+2
BICOC=3*TNGQP+2
H0VLC=6*TNGQP+2
HIVLC=NJIND+6*TNGQP+2
JAINC=2*NJIND+6*TNGQP+2
PHPAS=4*NJIND+6*TNGQP+2
VARGC=MNSUC+4*NJIND+6*TNGQP+2
BFSNC=2
SOLNC=MNCOF+2
C
C**** GET REQUIRED MAP AND DERIVATIVE
C
CALL BMCAP1(PHYPT,DERIV,THETA,NQPTS,TNSUC,ISNCA(DGPOC),
+ISNCA(JTYPC),ISNCA(LSUBC),IGEOM(PARNT),ISNCA(PRNSA),RSNCA(AICOC),
+RSNCA(ACOFC),RSNCA(BICOC),RSNCA(BCOFC),RSNCA(H0VLC),RSNCA(HIVLC),
+RGEOM(HALEN),RSNCA(JAINC),RGEOM(MIDPT),RSNCA(PHPAS),RGEOM(VTARG),
+RSNCA(VARGC),ZSNCA(BFSNC),CENTR,ZSNCA(SOLNC),INTER,WANTD,IER)
C
C**** SEND ERROR MESSAGE TO STANDARD OUTPUT OF NECESSARY
C
IF (IER.GT.0 .AND. WANTM) WRITE(*,*) IERTXT(IER)
C
END
SUBROUTINE BMCAP1(PHYPT,DERIV,THETA,NQPTS,TNSUC,DGPOC,JTYPC,LSUBC,
+PARNT,PRNSA,A1COC,ACOFC,B1COC,BCOFC,H0VLC,H1VLC,HALEN,JAINC,MIDPT,
+PHPAS,THET0,VARGC,BFSNC,CENTR,SOLNC,INTER,WANTD,IER)
INTEGER IER,NQPTS,TNSUC
INTEGER DGPOC(*),JTYPC(*),LSUBC(*),PARNT(*),PRNSA(*)
REAL THET0,THETA
REAL A1COC(*),ACOFC(*),B1COC(*),BCOFC(*),H0VLC(*),H1VLC(*),
+HALEN(*),JAINC(*),MIDPT(*),PHPAS(*),VARGC(*)
COMPLEX CENTR,DERIV,PHYPT
COMPLEX BFSNC(*),SOLNC(*)
LOGICAL INTER,WANTD
C
C GIVEN A POINT ON THE UNIT CIRCLE DEFINED BY ITS ARGUMENT THETA
C TO COMPUTE ITS IMAGE POINT PHYPT ON THE BOUNDARY OF THE
C PHYSICAL DOMAIN. IN CASE WANTD=.TRUE. THEN ALSO COMPUTE THE
C DERIVATIVE DERIV OF THE MAP ONTO THE PHYSICAL DOMAIN AT THE GIVEN
C BOUNDARY POINT ON THE UNIT DISC.
C
C IER=0 - NORMAL TERMINATION
C IER=46 - LOCAL PARAMETER MNCOF NEEDS INCREASING
C
C LOCAL VARIABLES
C
INTEGER AJTC,DGC,I,I1,IA,JTC,LODC,LOMC,MNCOF,PSA
REAL AA,ARGW,BB,BETAC,HA,MD,R1MACH,SJTC,TT,TUPI
COMPLEX CT0,FP,JACSUC,PARFUN,PHI
PARAMETER (MNCOF=32)
COMPLEX JACOF(MNCOF)
EXTERNAL JACSUC,PARFUN,R1MACH
C
TUPI=8E+0*ATAN(1E+0)
ARGW=THETA
C
10 CONTINUE
IF (ARGW .GT. THET0+TUPI) THEN
ARGW=ARGW-TUPI
GOTO 10
ENDIF
20 CONTINUE
IF (ARGW .LT. THET0) THEN
ARGW=ARGW+TUPI
GOTO 20
ENDIF
C
IA=1
30 CONTINUE
IF (VARGC(IA).LE.ARGW .AND. ARGW.LE.VARGC(IA+1)) THEN
C
C WW IS ON ARC IA AND WE USE THE CONTINUATION OF THE BOUNDARY
C CORRESPONDENCE FUNCTION TO ESTIMATE PHYPT AND (IF WANTED) THE
C DERIVATIVE.
C
HA=(VARGC(IA+1)-VARGC(IA))*5E-1
MD=(VARGC(IA+1)+VARGC(IA))*5E-1
TT=(ARGW-MD)/HA
IF (TT .GT. 1E+0) THEN
TT=1E+0
ELSE IF (TT .LT. -1E+0) THEN
TT=-1E+0
ENDIF
C
DGC=DGPOC(IA)
IF (DGC+1 .GT. MNCOF) THEN
IER=46
RETURN
ENDIF
JTC=JTYPC(IA)
AJTC=ABS(JTC)
BETAC=JAINC(AJTC)
LOMC=LSUBC(IA)
LODC=(AJTC-1)*NQPTS+1
SJTC=SIGN(1E+0,REAL(JTC))
PSA=PRNSA(IA)
C
IF (PHPAS(IA+1) .LE. PHPAS(IA)) THEN
BB=1E+0
ELSE
BB=PHPAS(IA+1)
ENDIF
AA=PHPAS(IA)
C
IF (SJTC.GT.0) THEN
CT0=CMPLX(MIDPT(PSA)+AA*HALEN(PSA))
ELSE
CT0=CMPLX(MIDPT(PSA)+BB*HALEN(PSA))
ENDIF
C
TT=SJTC*TT
FP=(1E+0+TT)**(BETAC+1E+0)
IF (INTER) THEN
FP=-FP
ENDIF
PHI=JACSUC(TT,DGC-1,A1COC(LODC),B1COC(LODC),
+ H1VLC(AJTC),BFSNC(LOMC+1))
PHI=(BFSNC(LOMC)-(1E+0-TT)*PHI)*SJTC*CMPLX(0E+0,1E+0)
PHYPT=CENTR+(PARFUN(PARNT(PSA),CT0)-CENTR)*EXP(FP*PHI)
C
IF (WANTD) THEN
IF (BETAC.LT.0E+0 .AND. (1E+0+TT).LE.0E+0) THEN
C
C WE ARE AT A CORNER WITH INFINITE DERIVATIVE.
C
DERIV=CMPLX(R1MACH(2),R1MACH(2))
ELSE IF (BETAC.GT.0E+0 .AND. (1E+0+TT).LE.0E+0) THEN
C
C WE ARE AT A CORNER WITH ZERO DERIVATIVE
C
DERIV=(0E+0,0E+0)
ELSE
DO 40 I=1,DGC+1
I1=I+LOMC-1
JACOF(I)=SOLNC(I1)
40 CONTINUE
DO 50 I=2,DGC+1,2
JACOF(I)=SJTC*JACOF(I)
50 CONTINUE
PHI=JACSUC(TT,DGC,ACOFC(LODC),BCOFC(LODC),H0VLC(AJTC),
+ JACOF)
DERIV=TUPI*FP*PHI*(PHYPT-CENTR)*
+ CMPLX(COS(THETA),-SIN(THETA))/HA/(1E+0+TT)
ENDIF
ENDIF
ELSE
IA=IA+1
GOTO 30
ENDIF
C
C NORMAL EXIT
C
IER=0
END
SUBROUTINE BMPHC1(IARC,PHYPT,CANPT,DERIV,NQPTS,TNSUA,DGPOL,JATYP,
+LOSUB,LPQSB,NPPQF,PARNT,A1COF,ACOEF,B1COF,BCFSN,BCOEF,H0VAL,H1VAL,
+HALEN,JACIN,MIDPT,SOLUN,TPPQF,TRRAD,VTARG,ZPPQF,INTER,WANTD,
+IER)
INTEGER IARC,IER,NQPTS,TNSUA
INTEGER DGPOL(*),JATYP(*),LOSUB(*),LPQSB(*),NPPQF(*),PARNT(*)
REAL A1COF(*),ACOEF(*),B1COF(*),BCFSN(*),BCOEF(*),H0VAL(*),
+H1VAL(*),HALEN(*),JACIN(*),MIDPT(*),SOLUN(*),TPPQF(*),TRRAD(*),
+VTARG(*)
COMPLEX CANPT,DERIV,PHYPT,ZPPQF(*)
LOGICAL INTER,WANTD
C
C GIVEN A POINT (DEFINED BY IARC AND PHYPT AS EXPLAINED NEXT) ON
C THE BOUNDARY OF THE PHYSICAL DOMAIN, TO COMPUTE ITS IMAGE CANPT
C ON THE UNIT DISC. IN CASE WANTD=.TRUE. THEN ALSO COMPUTE THE
C DERIVATIVE DERIV OF THE MAP ONTO THE DISC AT THE GIVEN BOUNDARY
C POINT.
C
C IF IARC > 0 THEN PHYPT IS THE PARAMETER VALUE OF THE
C PHYSICAL POINT ON THE PARENT ANALYTIC ARC NUMBER IARC OTHERWISE
C PHYPT DEFINES THE COORDINATES OF A PHYSICAL POINT SOMEWHERE ON
C THE BOUNDARY.
C
C IER=0 - NORMAL EXIT.
C IER=44 - LOCAL PARAMETER MNCOF NEEDS INCREASING.
C IER=45 - THE PHYSICAL POINT DEFINED BY PHYPT (WITH IARC<0) HAS NOT
C BEEN DETECTED AS LYING ON THE BOUNDARY; ACTUALLY, IT HAS
C NOT BEEN DETECTED AS LYING PATHOLOGICALY CLOSE TO THE
C BOUNDARY. CHECK THAT PHYPT IS CORRECT AND IF IT IS THEN
C CONSIDER INCREASING THE PATHOLOGICAL TOLERANCE PARAMETER
C PTHTL IN THE FIRST LINE BELOW.
C
C LOCAL VARIABLES
C
INTEGER AJT,DEG,I,I1,IA,K,J1,JQ,JT,LOD,LOM,MNCOF,NQ,PT
REAL BETA,DIST,HL,JACSUM,MD,MINDS,NEWTL,PHI,PTHTL,R1MACH,RBCF,
+SJT,SUM,TOLSM,TT,TUPI,TXI
COMPLEX BCF,CJACSU,CT,DIFF2,DPARFN,PARFUN,PSI,WGHT,XI,ZXI,
+ZTOB1,ZZ
C
PARAMETER (MNCOF=32)
REAL JACOF(MNCOF)
C
EXTERNAL CJACSU,DPARFN,JACSUM,PARFUN,R1MACH,ZTOB1
C
NEWTL=SQRT(R1MACH(4))
PTHTL=NEWTL
TOLSM=1E+1*R1MACH(4)
TUPI=8E+0*ATAN(1E+0)
C
IF (IARC .GT. 0) THEN
C
C *PHYPT* IS THE PARAMETER VALUE OF THE PHYSICAL POINT ON THE
C PARENT ANALYTIC ARC NUMBER *IARC*.
C
C FIRST FIND THE CORRESPONDING SUBARC NUMBER AND LOCAL PARAMETER.
C
TT=REAL(PHYPT)
IF (TT .LT. -1E+0) THEN
TT=-1E+0
ENDIF
IF (TT .GT. 1E+0) THEN
TT=1E+0
ENDIF
I=1
10 CONTINUE
PT=PARNT(I)
HL=HALEN(I)
MD=MIDPT(I)
SUM=MD+HL
C
IF (ABS(SUM-1E+0) .LT. TOLSM) THEN
SUM=1E+0
ENDIF
C
IF (PT.EQ.IARC .AND. TT.LE.SUM) THEN
IA=I
TT=(TT-MD)/HL
ELSE
I=I+1
GOTO 10
ENDIF
C
IF (TT .LT. -1E+0) THEN
TT=-1E+0
ENDIF
IF (TT .GT. 1E+0) THEN
TT=1E+0
ENDIF
C
JT=JATYP(IA)
SJT=SIGN(1E+0,REAL(JT))
AJT=ABS(JT)
BETA=JACIN(AJT)
DEG=DGPOL(IA)
IF (DEG+1 .GT. MNCOF) THEN
IER=44
RETURN
ENDIF
LOM=LOSUB(IA)
LOD=(AJT-1)*NQPTS+1
C
TT=SJT*TT
PHI=JACSUM(TT,DEG-1,A1COF(LOD),B1COF(LOD),H1VAL(AJT),
+ BCFSN(LOM+1))
PHI=(1E+0+TT)**(BETA+1E+0)*(BCFSN(LOM)-(1E+0-TT)*PHI)
IF (JT .GT. 0) THEN
RBCF=VTARG(IA)
ELSE
RBCF=VTARG(IA+1)
ENDIF
RBCF=RBCF+SJT*PHI
CANPT=CEXP((0E+0,1E+0)*RBCF)
IF (WANTD) THEN
IF (BETA.LT.0E+0 .AND. (1E+0+TT).LE.0E+0) THEN
C
C WE ARE AT A CORNER WITH INFINITE DERIVATIVE.
C
DERIV=CMPLX(R1MACH(2),R1MACH(2))
ELSE IF (BETA.GT.0E+0 .AND. (1E+0+TT).LE.0E+0) THEN
C
C WE ARE AT A CORNER WITH ZERO DERIVATIVE
C
DERIV=(0E+0,0E+0)
ELSE
DO 15 I=1,DEG+1
I1=I+LOM-1
JACOF(I)=SOLUN(I1)
15 CONTINUE
DO 20 I=2,DEG+1,2
JACOF(I)=SJT*JACOF(I)
20 CONTINUE
PHI=JACSUM(TT,DEG,ACOEF(LOD),BCOEF(LOD),H0VAL(AJT),JACOF)
DERIV=TUPI*(1E+0+TT)**BETA*PHI*(0E+0,1E+0)*CANPT/
+ DPARFN(IARC,PHYPT)/HL
ENDIF
ENDIF
ELSE
C
C *PHYPT* IS A POINT SOMEWHERE ON THE PHYSICAL BOUNDARY.
C
ZZ=PHYPT
DO 200 IA=1,TNSUA
PT=PARNT(IA)
JT=JATYP(IA)
NQ=NPPQF(IA)
K=LPQSB(IA)-1
HL=HALEN(IA)
MD=MIDPT(IA)
DO 100 JQ=1,NQ
K=K+1
DIFF2=ZZ-ZPPQF(K)
DIST=ABS(DIFF2)
IF (DIST .LT. TRRAD(K)) THEN
C
C ZZ IS CLOSE TO ARC IA.
C
J1=JQ
MINDS=DIST
TXI=TPPQF(K)
ZXI=ZPPQF(K)
40 CONTINUE
J1=J1+1
IF (J1 .LE. NQ) THEN
K=K+1
DIFF2=ZZ-ZPPQF(K)
DIST=ABS(DIFF2)
IF (DIST .LT. MINDS) THEN
MINDS=DIST
TXI=TPPQF(K)
ZXI=ZPPQF(K)
GOTO 40
ENDIF
ENDIF
C
C PRELIMINARIES
C
SJT=SIGN(1E+0,REAL(JT))
AJT=ABS(JT)
BETA=JACIN(AJT)
DEG=DGPOL(IA)
IF (DEG+1 .GT. MNCOF) THEN
IER=44
RETURN
ENDIF
LOM=LOSUB(IA)
LOD=(AJT-1)*NQPTS+1
C
C NOW USE NEWTON'S METHOD TO ESTIMATE THE PARAMETRIC
C PRE-IMAGE XI OF ZZ.
C
XI=CMPLX(TXI)
CT=MD+HL*XI
DIFF2=(ZXI-ZZ)/(DPARFN(PT,CT)*HL)
XI=XI-DIFF2
50 CONTINUE
IF (ABS(DIFF2) .GT. NEWTL) THEN
CT=MD+HL*XI
DIFF2=(PARFUN(PT,CT)-ZZ)/(DPARFN(PT,CT)*HL)
XI=XI-DIFF2
GOTO 50
ELSE
C
C LAST ITERATION
C
CT=MD+HL*XI
DIFF2=(PARFUN(PT,CT)-ZZ)/(DPARFN(PT,CT)*HL)
XI=XI-DIFF2
ENDIF
XI=SJT*XI
C
IF (ABS(AIMAG(XI)) .LT. PTHTL .AND. ABS(REAL(XI)) .LT. 1E+
+ 0+PTHTL) THEN
C
C ZZ IS PATHOLOGICALLY CLOSE TO ARC IA AND WE USE THE
C CONTINUATION OF THE BOUNDARY CORRESPONDENCE FUNCTION
C TO ESTIMATE CANPT AND THE DERIVATIVE
C
PSI=CJACSU(XI,DEG-1,A1COF(LOD),B1COF(LOD),H1VAL(AJT),
+ BCFSN(LOM+1))
WGHT=ZTOB1(XI+1E+0,BETA+1E+0,JT,INTER)
PSI=WGHT*(BCFSN(LOM)-(1E+0-XI)*PSI)
IF (JT .GT. 0) THEN
BCF=VTARG(IA)
ELSE
BCF=VTARG(IA+1)
ENDIF
BCF=BCF+SJT*PSI
CANPT=CEXP((0E+0,1E+0)*BCF)
IF (WANTD) THEN
IF ((1E+0+XI).EQ.(0E+0,0E+0) .AND. BETA.LT.0E+0) THEN
C
C WE ARE AT A CORNER WITH INFINITE DERIVATIVE.
C
DERIV=CMPLX(R1MACH(2),R1MACH(2))
ELSE IF ((1E+0+XI).EQ.(0E+0,0E+0) .AND. BETA.GT.0E+0)
+ THEN
C
C WE ARE AT A CORNER WITH ZERO DERIVATIVE.
C
DERIV=(0E+0,0E+0)
ELSE
DO 55 I=1,DEG+1
I1=I+LOM-1
JACOF(I)=SOLUN(I1)
55 CONTINUE
DO 60 I=2,DEG+1,2
JACOF(I)=SJT*JACOF(I)
60 CONTINUE
PSI=CJACSU(XI,DEG,ACOEF(LOD),BCOEF(LOD),H0VAL(AJT),
+ JACOF)
CT=MD+HL*SJT*XI
WGHT=WGHT/(1E+0+XI)
DERIV=TUPI*WGHT*PSI*(0E+0,1E+0)*CANPT
+ /DPARFN(PT,CT)/HL
ENDIF
ENDIF
GOTO 300
ENDIF
C
C END OF *IF (DIST .LT. TRRAD(K)) THEN* FOLLOWS
C
ENDIF
100 CONTINUE
200 CONTINUE
IER=45
RETURN
ENDIF
C
300 CONTINUE
C
C NORMAL EXIT
C
IER=0
END
SUBROUTINE BMPHYC(IARC,PHYPT,CANPT,DERIV,WANTD,INTER,IGEOM,RGEOM,
+ISNPH,RSNPH,IQUPH,RQUPH,ZQUPH,WANTM,IER)
C
INTEGER IARC,IER
INTEGER IGEOM(*),ISNPH(*),IQUPH(*)
REAL RGEOM(*),RSNPH(*),RQUPH(*)
COMPLEX PHYPT,CANPT,DERIV
COMPLEX ZQUPH(*)
LOGICAL WANTD,INTER,WANTM
C
C ......................................................................
C
C 1. BMPHYC
C BOUNDARY MAPPING FOR THE PHYSICAL --> CANONICAL MAP.
C
C 2. PURPOSE
C GIVEN A POINT ON THE BOUNDARY OF THE PHYSICAL DOMAIN, THIS
C ROUTINE COMPUTES THE CORRESPONDING APPROXIMATE IMAGE POINT
C ON THE UNIT DISC AND, IF REQUESTED, ALSO COMPUTES THE
C DERIVATIVE OF THE MAP : PHYSICAL --> CANONICAL AT THE GIVEN
C POINT ON THE PHYSICAL BOUNDARY.
C
C 3. CALLING SEQUENCE
C CALL BMPHYC(IARC,PHYPT,CANPT,DERIV,WANTD,INTER,IGEOM,RGEOM,
C ISNPH,RSNPH,IQUPH,RQUPH,ZQUPH,WANTM,IER)
C
C PARAMETERS
C ON ENTRY
C IARC - INTEGER
C ALLOWS TWO MODES OF DEFINING THE POINT ON THE
C BOUNDARY OF THE PHYSICAL DOMAIN. IF IARC > 0 THEN
C THE PHYSICAL POINT LIES ON ANALYTIC ARC NUMBER
C IARC (AS DEFINED IN THE PARAMETRIC FUNCTION
C PARFUN). IF IARC <= 0 THEN THE PARTICULAR ARC ON
C WHICH THE PHYSICAL POINT LIES IS CONSIDERED TO BE
C UNKNOWN ON ENTRY.
C
C PHYPT - COMPLEX
C IF IARC > 0 THEN PHYPT IS THE (COMPLEX) PARAMETER
C VALUE WHICH DEFINES THE PHYSICAL POINT ON ANALYTIC
C ARC NUMBER IARC. IF IARC <= 0 THEN PHYPT IS THE
C GIVEN PHYSICAL POINT.
C
C WANTD - LOGICAL
C IF WANTD IS TRUE THEN DERIV IS COMPUTED OTHERWISE
C DERIV ISN'T COMPUTED.
C
C INTER - LOGICAL
C TRUE IF THE PHYSICAL DOMAIN IS INTERIOR, FALSE
C OTHERWISE. (AS PREVIOUSLY USED IN JAPHYC, GQPHYC)
C
C IGEOM - INTEGER ARRAY
C THE INTEGER VECTOR IGEOM PREVIOUSLY SET UP BY
C JAPHYC.
C
C RGEOM - REAL ARRAY
C THE REAL VECTOR RGEOM PREVIOUSLY SET UP BY JAPHYC.
C
C ISNPH - INTEGER ARRAY
C THE INTEGER VECTOR ISNPH PREVIOUSLY SET UP BY
C JAPHYC.
C
C RSNPH - REAL ARRAY
C THE REAL VECTOR RSNPH PREVIOUSLY SET UP BY JAPHYC.
C
C IQUPH - INTEGER ARRAY
C THE INTEGER VECTOR IQUPH PREVIOUSLY SET UP BY
C GQPHYC.
C
C RQUPH - REAL ARRAY
C THE REAL ARRAY PREVIOUSLY SET UP BY GQPHYC.
C
C ZQUPH - COMPLEX ARRAY
C THE COMPLEX ARRAY PREVIOUSLY SET UP BY GQPHYC.
C
C WANTM - LOGICAL
C IF WANTM IS TRUE THEN, ON AN ABNORMAL EXIT, AN
C ERROR MESSAGE IS WRITTEN ON THE STANDARD OUTPUT
C CHANNEL. IF WANTM IS FALSE THEN NO MESSAGE IS
C WRITTEN.
C
C
C ON EXIT
C CANPT - COMPLEX
C THE POINT ON THE UNIT DISC CORRESPONDING TO THE
C GIVEN PHYSICAL POINT UNDER THE MAP : PHYSICAL -->
C CANONICAL.
C
C DERIV - COMPLEX
C THE COMPUTED DERIVATIVE OF THE MAP : PHYSICAL -->
C CANONICAL AT THE GIVEN POINT ON THE PHYSICAL BOUN-
C DARY. THIS IS COMPUTED ONLY IF WANTD IS TRUE.
C
C IER - INTEGER
C IF IER > 0 THEN AN ABNORMAL EXIT HAS OCCURRED;
C A MESSAGE TO DESCRIBE THE ERROR IS AUTOMATICALLY
C WRITTEN ON THE STANDARD OUTPUT CHANNEL.
C IER=0 - NORMAL EXIT.
C IER>0 - ABNORMAL EXIT; THE ERROR MESSAGE SHOULD
C BE SELF EXPLANATORY.
C
C
C 4. SUBROUTINES OR FUNCTIONS NEEDED
C - THE CONFPACK LIBRARY.
C - THE REAL FUNCTION R1MACH.
C - THE USER SUPPLIED COMPLEX FUNCTIONS PARFUN AND DPARFN.
C
C
C 5. FURTHER COMMENTS
C - NOTE THAT THIS ROUTINE CAN ONLY BE USED A F T E R THE
C ROUTINES JAPHYC AND GQPHYC HAVE SUCCESSFULLY EXECUTED,
C AND THAT MANY INPUT ARGUMENTS FOR BMPHYC ARE OUTPUT VALUES
C FROM JAPHYC AND GQPHYC.
C
C ......................................................................
C AUTHOR: DAVID HOUGH, ETH, ZUERICH
C LAST UPDATE: 3 JULY 1990
C ......................................................................
C
C LOCAL VARAIBLES
C
INTEGER ACOEF,AICOF,BCFSN,BCOEF,BICOF,DGPOL,H0VAL,HALEN,HIVAL,
+JACIN,JATYP,LOSUB,LQSBF,MIDPT,MNSUA,MNEQN,MQUPH,NARCS,NJIND,NPPQF,
+NQPTS,PARNT,SOLUN,TNGQP,TNSUA,TPPQF,TRRAD,VTARG,ZPPQF
CHARACTER*6 IERTXT
C
EXTERNAL BMPHC1,IERTXT
C
NARCS=ISNPH(1)
NJIND=NARCS+1
NQPTS=ISNPH(2)
TNSUA=ISNPH(3)
MNSUA=ISNPH(5)
MNEQN=ISNPH(6)
MQUPH=IQUPH(4)
TNGQP=NQPTS*NJIND
C
C**** SET UP POINTERS TO IGEOM AND RGEOM, AS IN JAPHYC
C
PARNT=5
HALEN=3
MIDPT=MNSUA+3
VTARG=2*MNSUA+3
C
C**** SET UP THE POINTERS TO ISNPH AND RSNPH, AS IN JAPHYC
C
DGPOL=7
JATYP=MNSUA+7
LOSUB=2*MNSUA+7
ACOEF=1
BCOEF=TNGQP+1
AICOF=2*TNGQP+1
BICOF=3*TNGQP+1
H0VAL=6*TNGQP+1
HIVAL=NJIND+6*TNGQP+1
JACIN=2*NJIND+6*TNGQP+1
BCFSN=MNSUA+3*NJIND+6*TNGQP+1
SOLUN=MNEQN+MNSUA+3*NJIND+6*TNGQP+1
C
C**** SET UP POINTERS TO IQUPH AND RQUPH, AS IN GQPHYC
C
LQSBF=5
NPPQF=MNSUA+5
TPPQF=2
TRRAD=MQUPH+2
ZPPQF=2
C
C**** GET REQUIRED MAP AND DERIVATIVE
C
CALL BMPHC1(IARC,PHYPT,CANPT,DERIV,NQPTS,TNSUA,ISNPH(DGPOL),
+ISNPH(JATYP),ISNPH(LOSUB),IQUPH(LQSBF),IQUPH(NPPQF),IGEOM(PARNT),
+RSNPH(AICOF),RSNPH(ACOEF),RSNPH(BICOF),RSNPH(BCFSN),RSNPH(BCOEF),
+RSNPH(H0VAL),RSNPH(HIVAL),RGEOM(HALEN),RSNPH(JACIN),RGEOM(MIDPT),
+RSNPH(SOLUN),RQUPH(TPPQF),RQUPH(TRRAD),RGEOM(VTARG),ZQUPH(ZPPQF),
+INTER,WANTD,IER)
C
C**** SEND ERROR MESSAGE TO STANDARD OUTPUT OF NECESSARY
C
IF (IER.GT.0 .AND. WANTM) WRITE(*,*) IERTXT(IER)
C
END
SUBROUTINE CATPH4(NPTS,PHYPT,CANPT,NARCS,NQPTS,TNSUC,DGPOC,JTYPC,
+LSUBC,LQSBG,NPPQG,PARNT,PRNSA,A1COC,ACOFC,B1COC,BCOFC,H0VLC,
+H1VLC,HALEN,JAINC,LGTOL,MIDPT,PHPAS,QUPTC,QUWTC,THET0,
+VARGC,BFSNC,CENTR,FACTR,SOLNC,WPPQG,ZPPQG,INTER,IER)
INTEGER IER,NPTS,NARCS,NQPTS,TNSUC
INTEGER DGPOC(*),JTYPC(*),LSUBC(*),LQSBG(*),NPPQG(*),PARNT(*),
+PRNSA(*)
REAL LGTOL,THET0
REAL A1COC(*),ACOFC(*),B1COC(*),BCOFC(*),H0VLC(*),H1VLC(*),
+HALEN(*),JAINC(*),MIDPT(*),PHPAS(*),QUPTC(*),QUWTC(*),VARGC(*)
COMPLEX CENTR,FACTR
COMPLEX BFSNC(*),CANPT(*),PHYPT(*),SOLNC(*),WPPQG(*),ZPPQG(*)
LOGICAL INTER
C
C GIVEN THE ARRAY CANPT OF NPTS POINTS IN THE CANONICAL PLANE, THIS
C ROUTINE COMPUTES THE ARRAY PHYPT OF IMAGES IN THE PHYSICAL
C PLANE.
C
C IER=0 - NORMAL EXIT
C IER=47 - LOCAL PARAMETER MXNQD NEEDS INCREASING
C IER=48 - LOCAL PARAMETER MNCOF NEEDS INCREASING
C IER=49 - LOCAL PARAMETER MQIN1 NEEDS INCREASING
C
C.......................................................................
C AUTHOR: DAVID HOUGH, ETH, ZUERICH
C LAST UPDATE: 7 JULY 90
C.......................................................................
C
C LOCAL VARIABLES
C
INTEGER AJTC,DGC,I,IA,IP,K,J,J1,JQ,JTC,LODC,LOL,
+LOMC,MNCOF,MQIN1,MXNQD,NBSCT,NQ,NQUAD,PSA,QINTS
REAL AA,ARG,ARGW,AWW,BB,BETAC,DELTA,DIST,EFPTL,EPS,HA,ILW,IMXI,MD,
+MEAN,PI,PTHTL,R1MACH,REXI,RLW,RR,RRB,S2C,SCO,SJTC,SUM1,TOLOU,TT,
+TUPI,UPPER
COMPLEX CT0,CT2,CTA,CTB,FP,CCJACS,CSUM,CT,JACSUC,PARFUN,PHI,TERM,
+XI,WW
PARAMETER (MNCOF=32,MQIN1=21,MXNQD=144,NBSCT=3,
+PTHTL=1E-3,DELTA=2E-1)
REAL XENPT(MQIN1)
COMPLEX JCOFC(MNCOF),WSPEC(MXNQD),ZSPEC(MXNQD)
EXTERNAL CCJACS,JACSUC,PARFUN,PPSBI1,R1MACH
C
EPS=1E+1*R1MACH(4)
PI=4E+0*ATAN(1E+0)
TUPI=2E+0*PI
LOL=NARCS*NQPTS
DO 300 IP=1,NPTS
WW=CANPT(IP)
AWW=ABS(WW)
IF (AWW.LE.EPS) THEN
PHYPT(IP)=CENTR
GOTO 300
ENDIF
RLW=LOG(AWW)
ILW=ATAN2(AIMAG(WW),REAL(WW))
10 CONTINUE
IF (ILW .GT. THET0+TUPI) THEN
ILW=ILW-TUPI
GOTO 10
ENDIF
20 CONTINUE
IF (ILW .LT. THET0) THEN
ILW=ILW+TUPI
GOTO 20
ENDIF
CSUM=(0E+0,0E+0)
DO 200 IA=1,TNSUC
C
C PRELIMINARIES FOR ARC IA
C
HA=(VARGC(IA+1)-VARGC(IA))*5E-1
MD=(VARGC(IA+1)+VARGC(IA))*5E-1
EFPTL=MAX(PTHTL,EPS/HA)
IMXI=-RLW/HA
C
IF (ILW .GT. (MD+PI)) THEN
ARGW=ILW-TUPI
ELSE IF (ILW .LT. (MD-PI)) THEN
ARGW=ILW+TUPI
ELSE
ARGW=ILW
ENDIF
C
REXI=(ARGW-MD)/HA
IF (REXI .GT. 1E+0) THEN
DIST=SQRT(IMXI**2+(REXI-1E+0)**2)
ELSE IF (REXI .LT. -1E+0) THEN
DIST=SQRT(IMXI**2+(REXI+1E+0)**2)
ELSE
DIST=ABS(IMXI)
ENDIF
C
IF (DIST .GE. DELTA) THEN
C
C USE THE STANDARD PRECOMPUTED COMPOSITE GAUSSIAN RULE
C
NQ=NPPQG(IA)
K=LQSBG(IA)-1
DO 30 JQ=1,NQ
K=K+1
CT=WW/ZPPQG(K)
IF (.NOT. INTER) THEN
CT=1E+0/CT
ENDIF
CSUM=CSUM+WPPQG(K)*CLOG(1E+0-CT)
30 CONTINUE
C
ELSE IF (DIST.LT.EFPTL) THEN
C
C WW IS PATHOLOGICALLY CLOSE TO ARC IA (OR MAYBE JUST CLOSE TO
C ARC IA AND APPARENTLY OUTSIDE THE CANONICAL DOMAIN) AND WE
C USE THE CONTINUATION OF THE BOUNDARY CORRESPONDENCE FUNCTION
C TO ESTIMATE PHYPT.
C
C INITIALISE SOME DATA
C
XI=CMPLX(REXI,IMXI)
DGC=DGPOC(IA)
IF (DGC+1 .GT. MNCOF) THEN
IER=48
RETURN
ENDIF
JTC=JTYPC(IA)
AJTC=ABS(JTC)
BETAC=JAINC(AJTC)
LOMC=LSUBC(IA)
LODC=(AJTC-1)*NQPTS+1
SJTC=SIGN(1E+0,REAL(JTC))
PSA=PRNSA(IA)
C
IF (PHPAS(IA+1) .LE. PHPAS(IA)) THEN
BB=1E+0
ELSE
BB=PHPAS(IA+1)
ENDIF
AA=PHPAS(IA)
C
IF (INTER) THEN
S2C=SJTC
ELSE
S2C=-SJTC
ENDIF
C
CTA=CMPLX(MIDPT(PSA)+AA*HALEN(PSA))
CTB=CMPLX(MIDPT(PSA)+BB*HALEN(PSA))
IF (SJTC.GT.0) THEN
CT0=CTA
CT2=CTB
ELSE
CT0=CTB
CT2=CTA
ENDIF
C
TERM=1E+0+SJTC*XI
IF (TERM.EQ.(0E+0,0E+0)) THEN
PHYPT(IP)=PARFUN(PARNT(PSA),CT0)
GOTO 300
ENDIF
C
IF (TERM.EQ.(2E+0,0E+0)) THEN
PHYPT(IP)=PARFUN(PARNT(PSA),CT2)
GOTO 300
ENDIF
C
ARG=ATAN2(AIMAG(TERM),REAL(TERM))
UPPER=(1E+0+S2C*5E-1)*PI
IF (ARG.GT.UPPER) THEN
ARG=ARG-TUPI
ELSE IF (ARG.LE.(UPPER-TUPI)) THEN
ARG=ARG+TUPI
ENDIF
C
FP=ABS(TERM)**(BETAC+1E+0)*CMPLX(COS((BETAC+1E+0)*ARG),
+ SIN((BETAC+1E+0)*ARG))
IF (INTER) THEN
FP=-FP
ENDIF
PHI=CCJACS(SJTC*XI,DGC-1,A1COC(LODC),B1COC(LODC),
+ H1VLC(AJTC),BFSNC(LOMC+1))
PHI=(BFSNC(LOMC)-(1E+0-SJTC*XI)*PHI)*SJTC*CMPLX(0E+0,1E+0)
PHYPT(IP)=CENTR+(PARFUN(PARNT(PSA),CT0)-CENTR)*EXP(FP*PHI)
GOTO 300
ELSE
C
C SET UP A SPECIAL COMPOSITE GAUSSIAN RULE TO HANDLE THIS
C PARTICULAR POINT WW.
C
C INITIALISE SOME DATA
C
DGC=DGPOC(IA)
IF (DGC+1 .GT. MNCOF) THEN
IER=48
RETURN
ENDIF
JTC=JTYPC(IA)
AJTC=ABS(JTC)
BETAC=JAINC(AJTC)
LOMC=LSUBC(IA)
LODC=(AJTC-1)*NQPTS+1
SJTC=SIGN(1E+0,REAL(JTC))
SCO=SJTC
C
DO 100 J=1,DGC+1
J1=LOMC+J-1
SCO=SCO*SJTC
JCOFC(J)=SOLNC(J1)*SCO
100 CONTINUE
C
XI=SJTC*CMPLX(REXI,IMXI)
CALL PPSBI1(XI,BETAC,NQPTS,DGC,ACOFC(LODC),BCOFC(LODC),
+ H0VLC(AJTC),JCOFC,LGTOL,TOLOU,XENPT,QINTS,
+ MQIN1,IER)
IF (IER .GT. 0) THEN
IF (IER .EQ. 29) THEN
IER=49
ENDIF
RETURN
ENDIF
NQUAD=QINTS*NQPTS
IF (NQUAD .GT. MXNQD) THEN
IER=47
RETURN
ENDIF
K=0
SUM1=BETAC+1E+0
DO 130 I=1,QINTS
RR=(XENPT(I+1)-XENPT(I))*5E-1
MEAN=(XENPT(I+1)+XENPT(I))*5E-1
IF (I .EQ. 1) THEN
RRB=RR**SUM1
DO 110 J=1,NQPTS
J1=LODC+J-1
K=K+1
TT=MEAN+RR*QUPTC(J1)
WSPEC(K)=RRB*QUWTC(J1)*JACSUC(TT,DGC,ACOFC(LODC),
+ BCOFC(LODC),H0VLC(AJTC),JCOFC)
TT=MD+TT*SJTC*HA
ZSPEC(K)=CMPLX(COS(TT),SIN(TT))
110 CONTINUE
ELSE
DO 120 J=1,NQPTS
J1=LOL+J
K=K+1
TT=MEAN+RR*QUPTC(J1)
WSPEC(K)=RR*QUWTC(J1)*(1E+0+TT)**BETAC*JACSUC(TT,
+ DGC,ACOFC(LODC),BCOFC(LODC),H0VLC(AJTC),
+ JCOFC)
TT=MD+TT*SJTC*HA
ZSPEC(K)=CMPLX(COS(TT),SIN(TT))
120 CONTINUE
ENDIF
130 CONTINUE
C
C THIS COMPLETES THE SETTING UP OF THE SPECIAL WEIGHTS
C AND POINTS WSPEC AND ZSPEC. NOW ESTIMATE THE INTEGRAL.
C
DO 140 K=1,NQUAD
CT=WW/ZSPEC(K)
IF (.NOT. INTER) THEN
CT=1E+0/CT
ENDIF
CSUM=CSUM+WSPEC(K)*CLOG(1E+0-CT)
140 CONTINUE
C
C END OF ELSE BLOCK RELATING TO SPECIAL QUADRATURE RULE FOR
C WW NEAR ARC IA
C
ENDIF
C
C END OF LOOP FOR CONTRIBUTIONS FROM ARC NUMBER IA
C
200 CONTINUE
PHYPT(IP)=CENTR+FACTR*WW*CEXP(CSUM)
C
C END OF MAP CALCULATION FOR FIELD POINT NUMBER IP
C
300 CONTINUE
C
IER=0
C
END
COMPLEX FUNCTION CCJACS(X,N,A,B,H,CO)
INTEGER N
REAL A(*),B(*),H
COMPLEX CO(*),X
C ..TO CALCULATE SUMMATION{CO(K+1)*P(K,X)},K=0(1)N, WHERE P(K,X)
C ..DENOTES THE ORTHONORMAL JACOBI POLYNOMIAL OF DEGREE K
C ..EVALUATED AT X, ARRAY CO STORES A GIVEN SET OF COEFFICIENTS,
C ..ARRAYS A,B STORE THE COEFFICIENTS IN THE THREE-TERM
C ..RECURRENCE FORMULA FOR THE JACOBI POLYNOMIALS (SEE ASONJ7)
C ..AND H IS THE SQUARED 2-NORM OF UNITY.
COMPLEX PREV,CURR,NEXT
INTEGER K
C
IF (N .EQ. 0) THEN
CCJACS=CO(1)/SQRT(H)
ELSE IF (N .GT. 0) THEN
PREV=CO(N+1)
CURR=CO(N)+(X-B(N))*PREV/A(N)
DO 10 K=N-2,0,-1
NEXT=CO(K+1)+(X-B(K+1))*CURR/A(K+1)-A(K+1)*PREV/A(K+2)
PREV=CURR
CURR=NEXT
10 CONTINUE
CCJACS=CURR/SQRT(H)
ELSE
CCJACS=(0E+0,0E+0)
ENDIF
C
END
LOGICAL FUNCTION CHRIN(A,B)
CHARACTER*1 A,B
C
C**** TEST WHETHER THE EITHER CHARACTER A OR B IS CONTAINED IN THE FIRST
C**** 6 CHARACTERS OF THE NEXT RECORD FROM STANDARD INPUT.
C
C LOCAL VARIABLES
C
CHARACTER*6 C
C
READ(*,'(A6)') C
CHRIN=(INDEX(C,A).NE.0 .OR. INDEX(C,B).NE.0)
C
END
COMPLEX FUNCTION CINRAD(NARCS,NQPTS,TNSUA,DGPOL,JATYP,LOSUB,LPQSB,
+NPPQF,PARNT,ACOEF,BCOEF,H0VAL,HALEN,JACIN,LGTOL,MIDPT,QUPTS,QUWTS,
+SOLUN,TPPQF,TRRAD,WPPQF,CENTR,FACTR,ZPPQF,IER)
INTEGER IER,NARCS,NQPTS,TNSUA
INTEGER DGPOL(*),JATYP(*),LOSUB(*),LPQSB(*),NPPQF(*),PARNT(*)
REAL LGTOL
REAL ACOEF(*),BCOEF(*),
+H0VAL(*),HALEN(*),JACIN(*),MIDPT(*),QUPTS(*),QUWTS(*),SOLUN(*),
+TPPQF(*),TRRAD(*),WPPQF(*)
COMPLEX CENTR,FACTR
COMPLEX ZPPQF(*)
C
C TO COMPUTE THE COMPLEX INNER RADIUS (I.E. THE RECIPROCAL OF THE
C DERIVATIVE OF THE INTERIOR MAP AT THE CENTRE POINT OF THE PHYSICAL
C DOMAIN)
C
C IER=0 - NORMAL EXIT
C IER=37 - LOCAL PARAMETER MXNQD NEEDS INCREASING
C IER=38 - LOCAL PARAMETER MNCOF NEEDS INCREASING
C IER=39 - THE CENTRE POINT IS PATHOLOGICALLY CLOSE TO THE
C BOUNDARY
C IER=40 - LOCAL PARAMETER MQIN1 MUST BE INCREASED
C
C LOCAL VARIABLES
C
INTEGER AJT,DEG,I,IA,K,J,J1,J2,JQ,JT,LIM,LOD,LOL,LOM,MNCOF,
+MQIN1,MXNQD,NQ,NQUAD,PT,QINTS
REAL AISUM,ANGLE,ARGBR,ARGIN1,ARSUM,BETA,CURARG,DIST,HL,ISUM,
+JACSUM,LIMIT,MD,MEAN,MINDS,NEWTL,PI,PTHTL,R1MACH,RR,RRB,RSUM,RT1,
+RT2,SCO,SS,STARG,STRT1,STTH1,SUM1,THET1,THET2,TOLOU,TT,TXI,TUPI,WT
COMPLEX CT,DPARFN,PARFUN,XI,DIFF1,DIFF2,
+STDF1,ZXI,ZZ
LOGICAL FIRST
EXTERNAL ARGIN1,DPARFN,JACSUM,PARFUN,PPSBI1,R1MACH
PARAMETER (MNCOF=32,MQIN1=11,MXNQD=80,PTHTL=1E-3)
PARAMETER (LIMIT=2.3562E+0)
REAL JACOF(MNCOF),TSPEC(MXNQD),WSPEC(MXNQD),XENPT(MQIN1)
COMPLEX JCOFC(MNCOF),ZSPEC(MXNQD)
C
NEWTL=SQRT(R1MACH(4))
PI=4E+0*ATAN(1E+0)
TUPI=2E+0*PI
LOL=NARCS*NQPTS
ZZ=CENTR
RSUM=0E+0
ISUM=0E+0
FIRST=.TRUE.
DO 200 IA=1,TNSUA
PT=PARNT(IA)
JT=JATYP(IA)
NQ=NPPQF(IA)
K=LPQSB(IA)-1
HL=HALEN(IA)
MD=MIDPT(IA)
ARSUM=0E+0
AISUM=0E+0
DO 100 JQ=1,NQ
K=K+1
DIFF2=ZZ-ZPPQF(K)
RT2=MD+HL*TPPQF(K)
DIST=ABS(DIFF2)
IF (DIST .GE. TRRAD(K)) THEN
WT=WPPQF(K)
IF (WT .NE. 0E+0) THEN
ARSUM=ARSUM+WT*LOG(DIST)
IF (FIRST) THEN
CURARG=ATAN2(AIMAG(DIFF2),REAL(DIFF2))
THET2=CURARG
FIRST=.FALSE.
STARG=CURARG
ELSE
C CT=DIFF2/DIFF1
C CT=DIFF2*CONJG(DIFF1)
C ANGLE=ATAN2(AIMAG(CT),REAL(CT))
THET2=ATAN2(AIMAG(DIFF2),REAL(DIFF2))
ANGLE=THET2-THET1
IF (ANGLE .LE. -PI .OR. ANGLE .GT. PI) THEN
ANGLE=ANGLE-SIGN(TUPI,ANGLE)
ENDIF
IF (ABS(ANGLE) .GE. LIMIT) THEN
ANGLE=ARGIN1(RT1,RT2,PT,-DIFF1,-DIFF2,ZZ,
+ LIMIT)
ENDIF
CURARG=CURARG+ANGLE
ENDIF
AISUM=CURARG*WT+AISUM
RT1=RT2
DIFF1=DIFF2
THET1=THET2
ENDIF
ELSE
C
C ZZ IS TOO CLOSE TO ARC IA TO USE THE STANDARD RULE.
C FIND THE QUADRATURE POINT NEAREST TO ZZ.
C
J1=JQ
MINDS=DIST
TXI=TPPQF(K)
ZXI=ZPPQF(K)
40 CONTINUE
J1=J1+1
IF (J1 .LE. NQ) THEN
K=K+1
DIFF2=ZZ-ZPPQF(K)
DIST=ABS(DIFF2)
IF (DIST .LT. MINDS) THEN
MINDS=DIST
TXI=TPPQF(K)
ZXI=ZPPQF(K)
GOTO 40
ENDIF
ENDIF
C
C PRELIMINARIES
C
IF (JT .GT. 0) THEN
SS=1E+0
ELSE
SS=-1E+0
ENDIF
AJT=ABS(JT)
BETA=JACIN(AJT)
DEG=DGPOL(IA)
IF (DEG+1 .GT. MNCOF) THEN
IER=38
RETURN
ENDIF
LOM=LOSUB(IA)
LOD=(AJT-1)*NQPTS+1
C
C NOW USE NEWTON'S METHOD TO ESTIMATE THE PARAMETRIC
C PRE-IMAGE XI OF ZZ.
C
XI=CMPLX(TXI)
CT=MD+HL*XI
DIFF2=(ZXI-ZZ)/(DPARFN(PT,CT)*HL)
XI=XI-DIFF2
50 CONTINUE
IF (ABS(DIFF2) .GT. NEWTL) THEN
CT=MD+HL*XI
DIFF2=(PARFUN(PT,CT)-ZZ)/(DPARFN(PT,CT)*HL)
XI=XI-DIFF2
GOTO 50
ENDIF
XI=SS*XI
C
IF (ABS(AIMAG(XI)) .LT. PTHTL .AND. ABS(REAL(XI)) .LT. 1E+
+ 0+PTHTL) THEN
C
C THE CENTRE OF THE DOMAIN (I.E. ZZ) IS PATHOLOGICALLY
C CLOSE TO ARC IA AND WE DO NOT ALLOW THIS.
C
IER=39
RETURN
ELSE
C
C SET UP A SPECIAL COMPOSITE GAUSSIAN RULE TO HANDLE THIS
C PARTICULAR POINT ZZ.
C
SCO=SS
DO 55 J=1,DEG+1
J1=LOM+J-1
SCO=SCO*SS
JACOF(J)=SOLUN(J1)*SCO
JCOFC(J)=CMPLX(SOLUN(J1)*SCO)
55 CONTINUE
CALL PPSBI1(XI,BETA,NQPTS,DEG,ACOEF(LOD),BCOEF(LOD),
+ H0VAL(AJT),JCOFC,LGTOL,TOLOU,XENPT,QINTS,
+ MQIN1,IER)
IF (IER .GT. 0) THEN
IF (IER .EQ. 29) THEN
IER=40
ENDIF
RETURN
ENDIF
NQUAD=QINTS*NQPTS
IF (NQUAD .GT. MXNQD) THEN
IER=37
RETURN
ENDIF
K=0
SUM1=BETA+1E+0
DO 70 I=1,QINTS
RR=(XENPT(I+1)-XENPT(I))*5E-1
MEAN=(XENPT(I+1)+XENPT(I))*5E-1
IF (I .EQ. 1) THEN
RRB=RR**SUM1
DO 60 J=1,NQPTS
J1=LOD+J-1
K=K+1
TT=(MEAN+RR*QUPTS(J1))
WSPEC(K)=RRB*QUWTS(J1)*JACSUM(TT,DEG,ACOEF(LOD),
+ BCOEF(LOD),H0VAL(AJT),JACOF)
TT=TT*SS
TSPEC(K)=MD+TT*HL
CT=CMPLX(TSPEC(K))
ZSPEC(K)=PARFUN(PT,CT)
60 CONTINUE
ELSE
DO 65 J=1,NQPTS
J1=LOL+J
K=K+1
TT=(MEAN+RR*QUPTS(J1))
WSPEC(K)=RR*QUWTS(J1)*(1E+0+TT)**BETA*JACSUM(TT,
+ DEG,ACOEF(LOD),BCOEF(LOD),H0VAL(AJT),
+ JACOF)
TT=TT*SS
TSPEC(K)=MD+TT*HL
CT=CMPLX(TSPEC(K))
ZSPEC(K)=PARFUN(PT,CT)
65 CONTINUE
ENDIF
70 CONTINUE
IF (SS .LT. 0E+0) THEN
LIM=NQUAD
IF (MOD(LIM,2) .EQ. 0) THEN
LIM=LIM/2
ELSE
LIM=(LIM-1)/2
ENDIF
J1=0
J2=NQUAD+1
DO 75 J=1,LIM
J1=J1+1
J2=J2-1
TT=WSPEC(J1)
WSPEC(J1)=WSPEC(J2)
WSPEC(J2)=TT
TT=TSPEC(J1)
TSPEC(J1)=TSPEC(J2)
TSPEC(J2)=TT
CT=ZSPEC(J1)
ZSPEC(J1)=ZSPEC(J2)
ZSPEC(J2)=CT
75 CONTINUE
ENDIF
C
C THIS COMPLETES THE SETTING UP OF THE SPECIAL WEIGHTS
C AND POINTS WSPEC AND ZSPEC. NOW ESTIMATE THE INTEGRAL.
C
ARSUM=0E+0
AISUM=0E+0
IF (IA .EQ. 1) THEN
FIRST=.TRUE.
ELSE
CURARG=STARG
RT1=STRT1
DIFF1=STDF1
THET1=STTH1
ENDIF
DO 80 K=1,NQUAD
WT=WSPEC(K)
DIFF2=ZZ-ZSPEC(K)
RT2=TSPEC(K)
DIST=ABS(DIFF2)
ARSUM=ARSUM+WT*LOG(DIST)
IF (FIRST) THEN
CURARG=ATAN2(AIMAG(DIFF2),REAL(DIFF2))
THET2=CURARG
FIRST=.FALSE.
ELSE
C CT=DIFF2/DIFF1
C CT=DIFF2*CONJG(DIFF1)
C ANGLE=ATAN2(AIMAG(CT),REAL(CT))
THET2=ATAN2(AIMAG(DIFF2),REAL(DIFF2))
ANGLE=THET2-THET1
IF (ANGLE .LE. -PI .OR. ANGLE .GT. PI) THEN
ANGLE=ANGLE-SIGN(TUPI,ANGLE)
ENDIF
IF (ABS(ANGLE) .GE. LIMIT) THEN
ANGLE=ARGIN1(RT1,RT2,PT,-DIFF1,-DIFF2,ZZ,
+ LIMIT)
ENDIF
CURARG=CURARG+ANGLE
ENDIF
AISUM=CURARG*WT+AISUM
RT1=RT2
DIFF1=DIFF2
THET1=THET2
80 CONTINUE
GOTO 150
ENDIF
ENDIF
C
C END OF QUADRATURE SUM LOOP
C
100 CONTINUE
C
150 CONTINUE
RSUM=RSUM+ARSUM
ISUM=ISUM+AISUM
IF (JT .LT. 0) THEN
C
C BRING THE ARGUMENT FORWARD TO THE CORNER POINT AND REPLACE
C THE INCREMENTED CURARG VALUE BY AN INVERSE TANGENT
C EVALUATION
C
DIFF2=ZZ-PARFUN(PT,(1E+0,0E+0))
RT2=1E+0
THET2=ATAN2(AIMAG(DIFF2),REAL(DIFF2))
ANGLE=THET2-THET1
IF (ANGLE .LE. -PI .OR. ANGLE .GT. PI) THEN
ANGLE=ANGLE-SIGN(TUPI,ANGLE)
ENDIF
IF (ABS(ANGLE) .GE. LIMIT) THEN
ANGLE=ARGIN1(RT1,RT2,PT,-DIFF1,-DIFF2,ZZ,
+ LIMIT)
ENDIF
CURARG=CURARG+ANGLE
ARGBR=ANINT((CURARG-THET2)/TUPI)
CURARG=THET2+TUPI*ARGBR
RT1=-1E+0
DIFF1=DIFF2
THET1=THET2
ENDIF
STARG=CURARG
STRT1=RT1
STDF1=DIFF1
STTH1=THET1
C
C END OF LOOP FOR CONTRIBUTIONS FROM ARC NUMBER IA
C
200 CONTINUE
CT=CMPLX(RSUM,ISUM)
CT=CEXP(CT)
CINRAD=CT/FACTR
C
IER=0
C
END
SUBROUTINE CNDPLT(MAP11,RESMN,UPHYC,UCANP,CRRES,IGEOM,RGEOM,ISNPH,
+RSNPH,CH0,CH1,DASH,NEWD,IER)
C
INTEGER CH0,CH1,IER
INTEGER IGEOM(*),ISNPH(*)
REAL RESMN,UPHYC,UCANP,CRRES
REAL RGEOM(*),RSNPH(*)
LOGICAL MAP11
CHARACTER DASH*(*),NEWD*(*)
C
C ......................................................................
C
C 1. CNDPLT
C REPORTS ON THE CONDITION OF THE PROBLEM OF EVALUATING THE
C MAPPING FUNCTIONS AND ALSO OUTPUTS DATA FOR GRAPH PLOTTING.
C
C 2. PURPOSE
C THE ROUTINE COMPUTES CONDITION NUMBERS FOR THE PROBLEMS OF
C EVALUATING THE TWO MAPS PHYSICAL --> CANONICAL AND
C CANONICAL --> PHYSICAL AND COMPUTES THE ERROR THAT MAY BE
C EXPECTED (IN THE WORST CASE) IN THE RANGE OF EACH APPROX-
C IMATE MAP FROM A MACHINE PRECISION LEVEL ROUNDING ERROR IN
C THE DOMAIN OF EACH MAP.
C THE ROUTINE ALSO COMPUTES THE LEAST RESOLUTION OF THE
C COMPUTED MAP : PHYSICAL --> CANONICAL OVER ALL SUB-ARCS ON
C THE PHYSICAL BOUNDARY. THE RESOLUTION OF THE MAP FOR ANY
C PHYSICAL SUB-ARC IS DEFINED AS THE COMPUTED ANGULAR WIDTH OF
C THE IMAGE SUB-ARC ON THE UNIT DISC DIVIDED BY THE ESTIMATED
C MAXIMUM ERROR IN THE MODULUS OF THE MAP ON THE GIVEN SUB-
C ARC. A LEAST RESOLUTION OF LESS THAN, SAY, 10 INDICATES
C THAT THERE ARE REGIONS OF SEVERE CROWDING AND THAT IT WILL
C BE PRACTICALLY IMPOSSIBLE TO COMPUTE THE INVERSE MAP
C EVERYWHERE ON THE CANONICAL DOMAIN.
C THE ROUTINE ALSO SEARCHES (NOT VERY EXHAUSTIVELY) FOR
C CHANGES OF SIGN IN THE COMPUTED BOUNDARY CORRESPONDENCE
C DERIVATIVE FOR THE MAP : PHYSICAL --> CANONICAL. SUCH
C SIGN CHANGES MEAN THAT THE COMPUTED MAP IS NOT ONE-TO-ONE
C AND HENCE ONE SHOULD EXPECT DIFFICULTIES IN TRYING TO
C COMPUTE THE INVERSE MAP : CANONICAL --> PHYSICAL.
C FINALLY THREE OUTPUT FILES
C