From dfd4aaa603774c72eea569cbc6462f318c952e17 Mon Sep 17 00:00:00 2001 From: Giacomo Mulas <giacomo.mulas@inaf.it> Date: Mon, 4 Sep 2023 12:19:32 +0000 Subject: [PATCH] Upload New File --- sphere/sph.f | 1493 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1493 insertions(+) create mode 100644 sphere/sph.f diff --git a/sphere/sph.f b/sphere/sph.f new file mode 100644 index 00000000..f7aafd52 --- /dev/null +++ b/sphere/sph.f @@ -0,0 +1,1493 @@ + PROGRAM SPH +CCC 140531 +CCC SUPPORTS EXPERIMENTAL DIELECTRIC FUNCTIONS ONLY +CCC NSPH=2; LM=40; NXI=200 +CCC +CCC FOR IDFC>=0 AND NSPH=1 ONLY, +CCC WHEN JXI=JWTM WRITES THE JWTM-TH TRANSITION MATRIX +CCC + IMPLICIT REAL*8(A-H,O-Z) +CCC COMMON/C1/RMI(LM,NSPH),REI(LM,NSPH),W(NLMMT,4), +CCC 1FSAS(NSPH),SAS(NSPH,2,2),VINTS(NSPH,16), +CCC 2SSCS(NSPH),SEXS(NSPH),SABS(NSPH), +CCC 3SQSCS(NSPH),SQEXS(NSPH),SQABS(NSPH),GCSV(NSPH), +CCC 4ROS(NSPH),RC(NSPH,NSHL),IOG(NSPH),NSHL(NSPH) + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS +CCC COMMON/C2/RIS(NHSPO),DLRI(NHSPO),DC0(NSHL-NTL+1), +CCC 1VKT(NSPH),VSZ(NSPH) +CCC NHSPO=MAX0(NPNT,NPNTTS)*2-1 + COMMON/C2/RIS(999),DLRI(999),DC0(5),VKT(2),VSZ(2) + COMPLEX*16 RIS,DLRI,DC0,VKT +CCC DIMENSION RCF(NSPH,NSHL) + DIMENSION RCF(2,8),CMULLR(4,4),CMUL(4,4), + 1U(3),US(3),UN(3),UNS(3),UP(3),UPS(3), + 2UNMP(3),UNSMP(3),UPMP(3),UPSMP(3),DUK(3),ARGI(1),ARGS(1) + DIMENSION VINT(16) + COMPLEX*16 VINT +CCC DIMENSION ZPV(LM,3,2,2),GAPS(NSPH) + DIMENSION ZPV(40,3,2,2),GAPS(2) +CCC DIMENSION TQSE(2,NSPH),TQSPE(2,NSPH),TQSS(2,NSPH),TQSPS(2,NSPH) + DIMENSION TQSE(2,2),TQSPE(2,2),TQSS(2,2),TQSPS(2,2) + COMPLEX*16 TQSPE,TQSPS +CCC DIMENSION DC0M(NSPH,NSHL-NTL),XIV(NXI) + DIMENSION DC0M(2,4),XIV(200) + COMPLEX*16 DC0M + COMPLEX*16 ARG,S0,TFSAS + 8010 FORMAT(1H ,16I5) + 8015 FORMAT(1H ,'READ(IR,*)NSPH,LM,INPOL,NPNT,NPNTTS,ISAM') + 8068 FORMAT(1H ,'READ(IR,*)TH,THSTP,THLST,THS,THSSTP,THSLST') + 8069 FORMAT(1H ,'READ(IR,*)PH,PHSTP,PHLST,PHS,PHSSTP,PHSLST') + 8170 FORMAT(1H ,7(1PD10.3)) + 8171 FORMAT(1H ,'READ(IR,*)JWTM') + 6000 FORMAT(1H ) + 6050 FORMAT(1H ,' SIZE=',1PD15.7,', REFRACTIVE INDEX=',2(1PD15.7)) + 6055 FORMAT(1H ,' SIZE=',1PD15.7) + 6061 FORMAT(1H ,' CIRC') + 6066 FORMAT(1H ,' LIN') + 6070 FORMAT(1H ,4X,'SPHERE ',I2) + 6100 FORMAT(1H ,'----- SCS ----- ABS ----- EXS ----- ALBEDS --') + 6150 FORMAT(1H ,1PD14.7,5(1PD15.7)) + 6165 FORMAT(1H ,' UN=(',1PD12.5,',',1PD12.5,',',1PD12.5,')') + 6166 FORMAT(1H ,' UNI=(',1PD12.5,',',1PD12.5,',',1PD12.5,')') + 6167 FORMAT(1H ,' UNS=(',1PD12.5,',',1PD12.5,',',1PD12.5,')') + 6200 FORMAT(1H ,'---- SCS/GS -- ABS/GS -- EXS/GS ---') + 6240 FORMAT(1H ,1X,'FSAS=',2(1PD15.7)) + 6242 FORMAT(1H ,1X,'SAS(1,1)=',2(1PD15.7),', SAS(2,1)=',2(1PD15.7)) + 6243 FORMAT(1H ,1X,'SAS(1,2)=',2(1PD15.7),', SAS(2,2)=',2(1PD15.7)) + 6250 FORMAT(1H ,1X,'FSAT=',2(1PD15.7)) + 6331 FORMAT(1H ,1X,'MULS') + 6336 FORMAT(1H ,1X,'MULSLR') + 6350 FORMAT((1H ,7X,4(1PD15.7))) + 6550 FORMAT + 1(1H ,' AT ',I1,' LCALC=',I3,' TOO SMALL WITH ARG=',2(1PD15.7)) + 6710 FORMAT(1H ,' REFR. INDEX OF EXTERNAL MEDIUM=',1PD15.7) + 6714 FORMAT(1H ,' VK=',1PD15.7,', XI IS SCALE FACTOR FOR LENGTHS') + 6715 FORMAT(1H ,' VK=',1PD15.7,', XI=',1PD15.7) + 6716 FORMAT(1H ,' XI=',1PD15.7) + 6720 FORMAT(1H ,' TIDG=',1PD10.3,', PIDG=',1PD10.3, + 1', TSDG=',1PD10.3,', PSDG=',1PD10.3) + 6721 FORMAT(1H ,' CFMP=',1PD15.7,', SFMP=',1PD15.7) + 6722 FORMAT(1H ,' CFSP=',1PD15.7,', SFSP=',1PD15.7) + 6740 FORMAT(1H ,' SCAND=',1PD10.3) + 6750 FORMAT(1H ,' STOP IN DME') + 6930 FORMAT(1H ,1X,'QSCHU=',1PD15.7,', PSCHU=',1PD15.7, + 1', S0MAG=',1PD15.7) + 6970 FORMAT(1H ,' COSAV=',1PD15.7,', RAPRS=',1PD15.7) + 6971 FORMAT(1H ,' Fx=',1PD15.7,', Fy=',1PD15.7,', Fz=',1PD15.7) + 6977 FORMAT(1H ,' IPO=',I2,', TQEk=',1PD15.7,', TQSk=',1PD15.7) + 6991 FORMAT('========== JXI =',I3,' ====================') + 6992 FORMAT('********** JTH =',I3,', JPH =',I3, + 1', JTHS =',I3,', JPHS =',I3,' ********************') + IR=5 + IW=6 + IT=7 + ITIN=17 +CCC +CCC OTHER COMMENTS IN FILE GLOBALCOMS +CCC +CCC +CCC CONSTANTS APPEAR AS (...).X(...)D0, OR (...).X(...)D+X(X), +CCC OR (...).X(...)D-X(X) +CCC +CCC +CCC VK*ROS(I) IS SIZE PARAMETER in vacuo +CCC +CCC +CCC OUTPUTS (NORMALIZED SCATTERING AMPLITUDE)*(2*PIG/(VK*VK)) IN m**3; +CCC OUTPUTS FORCE*(c/I0) IN m**2; +CCC OUTPUTS (EXT_TO_TORQUE) AND (SCA_TO_TORQUE) CONTRIBUTIONS +CCC *(c/I0)*(VK*EXRI)**3; (TORQUE OUTPUTS)/(EXDC*VK*VK) ARE IN m**2 +CCC +CCC +CCC ON A LINEAR BASIS, +CCC POLARIZATION (1), (1,ni), (ns,1) OR -1 IS PARALLE(l), +CCC POLARIZATION (2), (2,ni), (ns,2) OR 1 IS PERPENDICULA(r); +CCC ON A CIRCULAR BASIS, +CCC POLARIZATION (1), (1,ni), (ns,1) OR -1 IS (R)ight, +CCC POLARIZATION (2), (2,ni), (ns,2) OR 1 IS (L)eft; +CCC ns=SCATWAVE POLARIZATION, ni=INCWAVE POLARIZATION +CCC +CCC +CCC ISAM<0 --> ARBITRARILY VARYING SCATTERING PLANE, +CCC AS IT IS UNDEFINED FOR FORWARD OR BACKWARD SCATTERING, +CCC MERIDIONAL PLANE FOR INCIDENCE ANGLES IS ASSUMED; +CCC ISAM=0 --> MERIDIONAL PLANES +CCC (I. E. REFERENCE PLANES ACROSS Z AXIS) +CCC AS DETERMINED BY INCIDENCE AND OBSERVATION ANGLES; +CCC ISAM=1 --> SCATTERING PLANE ACROSS THE Z AXIS; SCATTERING +CCC AS A FUNCTION OF INCIDENCE AND OF OBSERVATION ANGLES; +CCC NEEDS ONLY TH, PH, THS; THSLST GT 180 IF NECESSARY; +CCC ISAM>1 --> SCATTERING PLANE ACROSS THE Z AXIS; SCATTERING +CCC AS A FUNCTION OF INCIDENCE ANGLES +CCC FOR A FIXED SCATTERING ANGLE THSCA=THS-TH; +CCC NEEDS ONLY TH, PH, THS +CCC + OPEN(IR,FILE='DSPH',STATUS='OLD') + READ(IR,*)NSPH,LM,INPOL,NPNT,NPNTTS,ISAM + READ(IR,*)TH,THSTP,THLST,THS,THSSTP,THSLST + READ(IR,*)PH,PHSTP,PHLST,PHS,PHSSTP,PHSLST + READ(IR,*)JWTM + CLOSE(IR) + OPEN(IW,FILE='OSPH',STATUS='UNKNOWN') + WRITE(IW,8015) + WRITE(IW,8010)NSPH,LM,INPOL,NPNT,NPNTTS,ISAM + WRITE(IW,8068) + WRITE(IW,8170)TH,THSTP,THLST,THS,THSSTP,THSLST + WRITE(IW,8069) + WRITE(IW,8170)PH,PHSTP,PHLST,PHS,PHSSTP,PHSLST + WRITE(IW,8171) + WRITE(IW,8010)JWTM + OPEN(ITIN,FILE='TEDF',FORM='UNFORMATTED',STATUS='OLD') + READ(ITIN)NSPHT + IF(NSPHT.NE.NSPH)GO TO 497 + READ(ITIN)(IOG(I),I=1,NSPH) + READ(ITIN)EXDC,WP,XIP,IDFC,NXI + READ(ITIN)(XIV(I),I=1,NXI) + DO 103 I=1,NSPH + IF(IOG(I).LT.I)GO TO 103 + READ(ITIN)NSHL(I),ROS(I) + NSH=NSHL(I) + READ(ITIN)(RCF(I,NS),NS=1,NSH) + 103 CONTINUE + WRITE(IW,*)' READ(ITIN)NSPHT' + WRITE(IW,*)' READ(ITIN)(IOG(I),I=1,NSPH)' + WRITE(IW,*)' READ(ITIN)EXDC,WP,XIP,IDFC,NXI' + WRITE(IW,*)' READ(ITIN)(XIV(I),I=1,NXI)' + WRITE(IW,*)' READ(ITIN)NSHL(I),ROS(I)' + WRITE(IW,*)' READ(ITIN)(RCF(I,NS),NS=1,NSH)' + WRITE(IW,6000) + C0=0.0D0 + SML=1.0D-3 + IF(THSTP.EQ.C0)NTH=0 + IF(THSTP.NE.C0)NTH=IDINT((THLST-TH)/THSTP+SML) + NTH=NTH+1 + IF(PHSTP.EQ.C0)NPH=0 + IF(PHSTP.NE.C0)NPH=IDINT((PHLST-PH)/PHSTP+SML) + NPH=NPH+1 + IF(ISAM.LE.1)GO TO 110 + NTHS=1 + THSCA=THS-TH + GO TO 111 + 110 IF(THSSTP.EQ.C0)NTHS=0 + IF(THSSTP.NE.C0)NTHS=IDINT((THSLST-THS)/THSSTP+SML) + NTHS=NTHS+1 + IF(ISAM.LT.1)GO TO 112 + 111 NPHS=1 + GO TO 113 + 112 IF(PHSSTP.EQ.C0)NPHS=0 + IF(PHSSTP.NE.C0)NPHS=IDINT((PHSLST-PHS)/PHSSTP+SML) + NPHS=NPHS+1 + 113 NK=NTH*NPH + NKS=NTHS*NPHS + NKKS=NK*NKS + TH1=TH + PH1=PH + THS1=THS + PHS1=PHS + PIGH=DACOS(C0) + PIG=PIGH*2.0D0 + GCS=C0 + DO 116 I=1,NSPH + IOGI=IOG(I) + IF(IOGI.LT.I)GO TO 116 + GCSS=PIG*ROS(I)*ROS(I) + GCSV(I)=GCSS + NSH=NSHL(I) + DO 115 J=1,NSH + 115 RC(I,J)=RCF(I,J)*ROS(I) + 116 GCS=GCS+GCSV(IOGI) + CALL THDPS(LM,ZPV) + EXRI=DSQRT(EXDC) + WRITE(IW,6710)EXRI + OPEN(IT,FILE='TPPOAN',FORM='UNFORMATTED',STATUS='UNKNOWN') + IMODE=10 + WRITE(IT)IMODE,ISAM,INPOL + WRITE(IT)NXI,NTH,NPH,NTHS,NPHS + WRITE(IT)NSPH + WRITE(IT)(IOG(NS),NS=1,NSPH) + IF(INPOL.EQ.0)WRITE(IW,6066) + IF(INPOL.NE.0)WRITE(IW,6061) + WRITE(IW,6000) + WN=WP/3.0D08 + SQSFI=1.0D0 + IF(IDFC.GE.0)GO TO 118 + VK=XIP*WN + WRITE(IW,6714)VK + WRITE(IW,6000) + 118 DO 488 JXI=1,NXI + WRITE(IW,6991)JXI + XI=XIV(JXI) + IF(IDFC.LT.0)GO TO 119 + VK=XI*WN + VKARG=VK + WRITE(IW,6715)VK,XI + GO TO 120 + 119 VKARG=XI*VK + SQSFI=1.0D0/(XI*XI) + WRITE(IW,6716)XI + 120 WRITE(IT)VK + DO 132 I=1,NSPH + IOGI=IOG(I) + IF(IOGI.EQ.I)GO TO 125 + DO 123 L=1,LM + RMI(L,I)=RMI(L,IOGI) + 123 REI(L,I)=REI(L,IOGI) + GO TO 132 + 125 NSH=NSHL(I) + ICI=(NSH+1)/2 + IF(IDFC.NE.0)GO TO 127 + READ(ITIN)(DC0(IC),IC=1,ICI) + GO TO 130 + 127 IF(JXI.EQ.1)READ(ITIN)(DC0M(I,IC),IC=1,ICI) + DO 128 IC=1,ICI + 128 DC0(IC)=DC0M(I,IC) + 130 IF(MOD(NSH,2).EQ.0)DC0(ICI+1)=EXDC + CALL DME(LM,I,NPNT,NPNTTS,VKARG,EXDC,EXRI,JER,LCALC,ARG) + IF(JER.EQ.0)GO TO 132 + WRITE(IW,6750) + GO TO 490 + 132 CONTINUE + +C + IF(IDFC.LT.0)GO TO 156 + IF(NSPH.GT.1)GO TO 156 + IF(JXI.NE.JWTM)GO TO 156 + IS=1111 + ITS=8 + OPEN(ITS,FILE='TTMS',FORM='UNFORMATTED',STATUS='UNKNOWN') + WRITE(ITS)IS,LM + WRITE(ITS)VK,EXRI + WRITE(ITS)(-1.0D0/RMI(I,1),-1.0D0/REI(I,1),I=1,LM) + WRITE(ITS)ROS(1) + CLOSE(ITS) + 156 CONTINUE +C + + CS0=0.25D0*VK*VK*VK/PIGH + CALL SSCR0(TFSAS,NSPH,LM,VK,EXRI) + SQK=VK*VK*EXDC + CALL APS(ZPV,LM,NSPH,IOG,RMI,REI,SQK,GAPS) + CALL RABAS(INPOL,LM,NSPH,IOG,RMI,REI,TQSE,TQSPE,TQSS,TQSPS) + DO 170 I=1,NSPH + IF(IOG(I).LT.I) GO TO 170 + ALBEDS=SSCS(I)/SEXS(I) + SQSCS(I)=SQSCS(I)*SQSFI + SQABS(I)=SQABS(I)*SQSFI + SQEXS(I)=SQEXS(I)*SQSFI + WRITE(IW,6070)I + IF(NSHL(I).EQ.1) GO TO 162 + WRITE(IW,6055)VSZ(I) + GO TO 164 + 162 WRITE(IW,6050)VSZ(I),VKT(I) + 164 WRITE(IW,6100) + WRITE(IW,6150)SSCS(I),SABS(I),SEXS(I),ALBEDS + WRITE(IW,6200) + WRITE(IW,6150)SQSCS(I),SQABS(I),SQEXS(I) + WRITE(IW,6240)FSAS(I) + CSCH=2.0D0*VK*SQSFI/GCSV(I) + S0=FSAS(I)*EXRI + QSCHU=DIMAG(S0)*CSCH + PSCHU=DREAL(S0)*CSCH + S0MAG=CDABS(S0)*CS0 + WRITE(IW,6930)QSCHU,PSCHU,S0MAG + RAPR=SEXS(I)-GAPS(I) + COSAV=GAPS(I)/SSCS(I) + WRITE(IW,6970)COSAV,RAPR + WRITE(IW,6977)1,TQSE(1,I),TQSS(1,I) + WRITE(IW,6977)2,TQSE(2,I),TQSS(2,I) + WRITE(IT)TQSE(1,I),TQSS(1,I),TQSPE(1,I),TQSPS(1,I) + WRITE(IT)TQSE(2,I),TQSS(2,I),TQSPE(2,I),TQSPS(2,I) + 170 CONTINUE + IF(NSPH.EQ.1)GO TO 172 + WRITE(IW,6250)TFSAS + CSCH=2.0D0*VK*SQSFI/GCS + S0=TFSAS*EXRI + QSCHU=DIMAG(S0)*CSCH + PSCHU=DREAL(S0)*CSCH + S0MAG=CDABS(S0)*CS0 + WRITE(IW,6930)QSCHU,PSCHU,S0MAG + 172 TH=TH1 + DO 486 JTH=1,NTH + PH=PH1 + DO 484 JPH=1,NPH + IF((NK.EQ.1).AND.(JXI.GT.1))GO TO 182 + CALL UPVMP(TH,PH,0,COST,SINT,COSP,SINP,U,UPMP,UNMP) + 182 IF(ISAM.LT.0)GO TO 184 + CALL WMAMP + 1(0,COST,SINT,COSP,SINP,INPOL,LM,0,NSPH,ARGI,U,UPMP,UNMP) + DO 183 I=1,NSPH + RAPR=SEXS(I)-GAPS(I) + FRX=RAPR*U(1) + FRY=RAPR*U(2) + FRZ=RAPR*U(3) + 183 CONTINUE + JW=1 + 184 THSL=THS1 + DO 482 JTHS=1,NTHS + THS=THSL + ICSPNV=0 + IF(ISAM.GT.1)THS=TH+THSCA + IF(ISAM.LT.1)GO TO 186 + PHSPH=C0 + IF((THS.LT.C0).OR.(THS.GT.180.0D0))PHSPH=180.0D0 + IF(THS.LT.C0)THS=-THS + IF(THS.GT.180.0D0)THS=360.0D0-THS + IF(PHSPH.NE.C0)ICSPNV=1 + 186 PHS=PHS1 + DO 480 JPHS=1,NPHS + IF(ISAM.LT.1)GO TO 188 + PHS=PH+PHSPH + IF(PHS.GE.360.0D0)PHS=PHS-360.0D0 + 188 IF((NKS.EQ.1).AND.((JXI.GT.1).OR.(JTH.GT.1).OR.(JPH.GT.1))) + 1GO TO 190 + CALL UPVMP(THS,PHS,ICSPNV,COSTS,SINTS,COSPS,SINPS,US,UPSMP,UNSMP) + IF(ISAM.GE.0)CALL WMAMP + 1(2,COSTS,SINTS,COSPS,SINPS,INPOL,LM,0,NSPH,ARGS,US,UPSMP,UNSMP) + 190 IF((NKKS.EQ.1).AND.(JXI.GT.1))GO TO 194 + CALL UPVSP(U,UPMP,UNMP,US,UPSMP,UNSMP,UP,UN,UPS,UNS,DUK, + 1ISQ,IBF,SCAN,CFMP,SFMP,CFSP,SFSP) + IF(ISAM.GE.0)GO TO 192 + CALL WMASP(COST,SINT,COSP,SINP,COSTS,SINTS,COSPS,SINPS, + 1U,UP,UN,US,UPS,UNS,ISQ,IBF,INPOL,LM,0,NSPH,ARGI,ARGS) + GO TO 194 + 192 DO 193 I=1,3 + UN(I)=UNMP(I) + 193 UNS(I)=UNSMP(I) + 194 IF(ISAM.LT.0)JW=1 + WRITE(IT)TH,PH,THS,PHS + WRITE(IT)SCAN + IF(JW.EQ.0)GO TO 212 + JW=0 + WRITE(IT)U(1),U(2),U(3) + 212 CONTINUE + WRITE(IW,6992)JTH,JPH,JTHS,JPHS + WRITE(IW,6720)TH,PH,THS,PHS + WRITE(IW,6740)SCAN + WRITE(IW,6721)CFMP,SFMP + WRITE(IW,6722)CFSP,SFSP + IF(ISAM.LT.0)GO TO 214 + WRITE(IW,6166)UN(1),UN(2),UN(3) + WRITE(IW,6167)UNS(1),UNS(2),UNS(3) + GO TO 224 + 214 WRITE(IW,6165)UN(1),UN(2),UN(3) + 224 CALL SSCR2(NSPH,LM,VK,EXRI) + DO 226 NS=1,NSPH + IF(IOG(NS).LT.NS)GO TO 226 + WRITE(IW,6070)NS + WRITE(IW,6242)SAS(NS,1,1),SAS(NS,2,1) + WRITE(IW,6243)SAS(NS,1,2),SAS(NS,2,2) + IF((JTHS.EQ.1).AND.(JPHS.EQ.1))WRITE(IW,6971)FRX,FRY,FRZ + DO 225 I=1,16 + 225 VINT(I)=VINTS(NS,I) + CALL MMULC(VINT,CMULLR,CMUL) + WRITE(IW,6331) + WRITE(IW,6350)((CMUL(I,J),J=1,4),I=1,4) + WRITE(IW,6336) + WRITE(IW,6350)((CMULLR(I,J),J=1,4),I=1,4) + WRITE(IT)(VINT(I),I=1,16) + WRITE(IT)((CMUL(I,J),J=1,4),I=1,4) + 226 CONTINUE + 480 IF(ISAM.LT.1)PHS=PHS+PHSSTP + 482 IF(ISAM.LE.1)THSL=THSL+THSSTP + 484 PH=PH+PHSTP + 486 TH=TH+THSTP + 488 CONTINUE + GO TO 500 + 490 WRITE(IW,6550)JER,LCALC,ARG + GO TO 500 + 497 WRITE(IW,*)' WRONG INPUT TAPE' + 500 CONTINUE + CLOSE(IW) + CLOSE(IT) + CLOSE(ITIN) + STOP + END + SUBROUTINE RABAS(INPOL,LI,NSPH,IOG,RMI,REI,TQSE,TQSPE,TQSS,TQSPS) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION IOG(NSPH),RMI(LI,NSPH),REI(LI,NSPH), +CCC 1TQSE(2,NSPH),TQSPE(2,NSPH),TQSS(2,NSPH),TQSPS(2,NSPH) + DIMENSION IOG(2),RMI(40,2),REI(40,2), + 1TQSE(2,2),TQSPE(2,2),TQSS(2,2),TQSPS(2,2) + COMPLEX*16 RMI,REI,TQSPE,TQSPS + COMPLEX*16 CC0,UIM,RM,RE,PCE,PCS + C0=0.0D0 + PIG2=DACOS(C0)*4.0D0 + CC0=(0.0D0,0.0D0) + UIM=(0.0D0,1.0D0) + DO 80 I=1,NSPH + IF(IOG(I).LT.I)GO TO 80 + TQSE(1,I)=C0 + TQSE(2,I)=C0 + TQSPE(1,I)=CC0 + TQSPE(2,I)=CC0 + TQSS(1,I)=C0 + TQSS(2,I)=C0 + TQSPS(1,I)=CC0 + TQSPS(2,I)=CC0 + DO 70 L=1,LI + FL=L+L+1 + RM=1.0D0/RMI(L,I) + RMM=DREAL(RM*DCONJG(RM)) + RE=1.0D0/REI(L,I) + REM=DREAL(RE*DCONJG(RE)) + IF(INPOL.NE.0)GO TO 40 + PCE=((RM+RE)*UIM)*FL + PCS=((RMM+REM)*FL)*UIM + TQSPE(1,I)=TQSPE(1,I)-PCE + TQSPE(2,I)=TQSPE(2,I)+PCE + TQSPS(1,I)=TQSPS(1,I)-PCS + TQSPS(2,I)=TQSPS(2,I)+PCS + GO TO 70 + 40 CE=DREAL(RM+RE)*FL + CS=(RMM+REM)*FL + TQSE(1,I)=TQSE(1,I)-CE + TQSE(2,I)=TQSE(2,I)+CE + TQSS(1,I)=TQSS(1,I)-CS + TQSS(2,I)=TQSS(2,I)+CS + 70 CONTINUE + IF(INPOL.NE.0)GO TO 75 + TQSPE(1,I)=TQSPE(1,I)*PIG2 + TQSPE(2,I)=TQSPE(2,I)*PIG2 + TQSPS(1,I)=TQSPS(1,I)*PIG2 + TQSPS(2,I)=TQSPS(2,I)*PIG2 + GO TO 80 + 75 TQSE(1,I)=TQSE(1,I)*PIG2 + TQSE(2,I)=TQSE(2,I)*PIG2 + TQSS(1,I)=TQSS(1,I)*PIG2 + TQSS(2,I)=TQSS(2,I)*PIG2 + 80 CONTINUE + RETURN + END + SUBROUTINE MMULC(VINT,CMULLR,CMUL) + IMPLICIT REAL*8(A-H,O-Z) + DIMENSION VINT(16),CMULLR(4,4),CMUL(4,4) + COMPLEX*16 VINT + SM2=DREAL(VINT(1)) + S24=DREAL(VINT(2)) + D24=DIMAG(VINT(2)) + SM4=DREAL(VINT(6)) + S23=DREAL(VINT(9)) + D32=DIMAG(VINT(9)) + S34=DREAL(VINT(10)) + D34=DIMAG(VINT(10)) + SM3=DREAL(VINT(11)) + S31=DREAL(VINT(12)) + D31=DIMAG(VINT(12)) + S21=DREAL(VINT(13)) + D12=DIMAG(VINT(13)) + S41=DREAL(VINT(14)) + D14=DIMAG(VINT(14)) + SM1=DREAL(VINT(16)) + CMULLR(1,1)=SM2 + CMULLR(1,2)=SM3 + CMULLR(1,3)=-S23 + CMULLR(1,4)=-D32 + CMULLR(2,1)=SM4 + CMULLR(2,2)=SM1 + CMULLR(2,3)=-S41 + CMULLR(2,4)=-D14 + CMULLR(3,1)=-S24*2.0D0 + CMULLR(3,2)=-S31*2.0D0 + CMULLR(3,3)=S21+S34 + CMULLR(3,4)=D34+D12 + CMULLR(4,1)=-D24*2.0D0 + CMULLR(4,2)=-D31*2.0D0 + CMULLR(4,3)=D34-D12 + CMULLR(4,4)=S21-S34 + CMUL(1,1)=(SM2+SM3+SM4+SM1)*0.5D0 + CMUL(1,2)=(SM2-SM3+SM4-SM1)*0.5D0 + CMUL(1,3)=-S23-S41 + CMUL(1,4)=-D32-D14 + CMUL(2,1)=(SM2+SM3-SM4-SM1)*0.5D0 + CMUL(2,2)=(SM2-SM3-SM4+SM1)*0.5D0 + CMUL(2,3)=-S23+S41 + CMUL(2,4)=-D32+D14 + CMUL(3,1)=-S24-S31 + CMUL(3,2)=-S24+S31 + CMUL(3,3)=S21+S34 + CMUL(3,4)=D34+D12 + CMUL(4,1)=-D24-D31 + CMUL(4,2)=-D24+D31 + CMUL(4,3)=D34-D12 + CMUL(4,4)=S21-S34 + RETURN + END + SUBROUTINE SSCR0(TFSAS,NSPH,LM,VK,EXRI) + IMPLICIT REAL*8(A-H,O-Z) + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + COMPLEX*16 TFSAS,SUM21,RM,RE,CC0,CSAM + CC0=(0.0D0,0.0D0) + C0=0.0D0 + EXDC=EXRI*EXRI + CCS=4.0D0*DACOS(C0)/(VK*VK) + CCCS=CCS/EXDC + CSAM=-(CCS/(EXRI*VK))*(0.0D0,0.5D0) + TFSAS=CC0 + DO 12 I=1,NSPH + IOGI=IOG(I) + IF(IOGI.LT.I)GO TO 12 + SUMS=C0 + SUM21=CC0 + DO 10 L=1,LM + FL=L+L+1 + RM=1.0D0/RMI(L,I) + RE=1.0D0/REI(L,I) + SUMS=SUMS+DREAL(DCONJG(RM)*RM+DCONJG(RE)*RE)*FL + 10 SUM21=SUM21+(RM+RE)*FL + SUM21=-SUM21 + SCASEC=CCCS*SUMS + EXTSEC=-CCCS*DREAL(SUM21) + ABSSEC=EXTSEC-SCASEC + SSCS(I)=SCASEC + SEXS(I)=EXTSEC + SABS(I)=ABSSEC + GCSS=GCSV(I) + SQSCS(I)=SCASEC/GCSS + SQEXS(I)=EXTSEC/GCSS + SQABS(I)=ABSSEC/GCSS + FSAS(I)=SUM21*CSAM + 12 TFSAS=TFSAS+FSAS(IOGI) + RETURN + END + SUBROUTINE SSCR2(NSPH,LM,VK,EXRI) + IMPLICIT REAL*8(A-H,O-Z) + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + COMPLEX*16 S11,S21,S12,S22,RM,RE,CC0,CSAM,CC + CC0=(0.0D0,0.0D0) + C0=0.0D0 + CCS=1.0D0/(VK*VK) + CSAM=-(CCS/(EXRI*VK))*(0.0D0,0.5D0) + PIGFSQ=6.4D+1*DACOS(C0)**2 + CFSQ=4.0D0/(PIGFSQ*CCS*CCS) + NLMM=LM*(LM+2) + DO 14 I=1,NSPH + IOGI=IOG(I) + IF(IOGI.LT.I)GO TO 14 + K=0 + S11=CC0 + S21=CC0 + S12=CC0 + S22=CC0 + DO 10 L=1,LM + RM=1.0D0/RMI(L,I) + RE=1.0D0/REI(L,I) + LTPO=L+L+1 + DO 10 IM=1,LTPO + K=K+1 + KE=K+NLMM + S11=S11-W(K,3)*W(K,1)*RM-W(KE,3)*W(KE,1)*RE + S21=S21-W(K,4)*W(K,1)*RM-W(KE,4)*W(KE,1)*RE + S12=S12-W(K,3)*W(K,2)*RM-W(KE,3)*W(KE,2)*RE + 10 S22=S22-W(K,4)*W(K,2)*RM-W(KE,4)*W(KE,2)*RE + SAS(I,1,1)=S11*CSAM + SAS(I,2,1)=S21*CSAM + SAS(I,1,2)=S12*CSAM + SAS(I,2,2)=S22*CSAM + 14 CONTINUE + DO 24 I=1,NSPH + IOGI=IOG(I) + IF(IOGI.LT.I)GO TO 24 + J=0 + DO 22 IPO1=1,2 + DO 22 JPO1=1,2 + CC=DCONJG(SAS(I,JPO1,IPO1)) + DO 22 IPO2=1,2 + DO 22 JPO2=1,2 + J=J+1 + 22 VINTS(I,J)=SAS(I,JPO2,IPO2)*CC*CFSQ + 24 CONTINUE + RETURN + END + SUBROUTINE APS(ZPV,LI,NSPH,IOG,RMI,REI,SQK,GAPS) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION ZPV(LM,3,2,2),IOG(NSPH), +CCC 1RMI(LI,NSPH),REI(LI,NSPH),GAPS(NSPH) + DIMENSION ZPV(40,3,2,2),IOG(2),RMI(40,2),REI(40,2),GAPS(2) + COMPLEX*16 RMI,REI + COMPLEX*16 CC0,SUMM,SUME,SUEM,SUEE,SUM + CC0=(0.0D0,0.0D0) + C0=0.0D0 + PIGH=DACOS(C0) + COFS=PIGH*2.0D0/SQK + DO 40 I=1,NSPH + IF(IOG(I).LT.I)GO TO 40 + SUM=CC0 + DO 30 L=1,LI + LTPO=L+L+1 + DO 30 ILMP=1,3 + IF(((L.EQ.1).AND.(ILMP.EQ.1)).OR.((L.EQ.LI).AND.(ILMP.EQ.3))) + 1GO TO 30 + LMPML=ILMP-2 + LMP=L+LMPML + COFL=LTPO*(LMP+LMP+1) + COFL=DSQRT(COFL) + SUMM=ZPV(L,ILMP,1,1)/(DCONJG(RMI(L,I))*RMI(LMP,I)) + SUME=ZPV(L,ILMP,1,2)/(DCONJG(RMI(L,I))*REI(LMP,I)) + SUEM=ZPV(L,ILMP,2,1)/(DCONJG(REI(L,I))*RMI(LMP,I)) + SUEE=ZPV(L,ILMP,2,2)/(DCONJG(REI(L,I))*REI(LMP,I)) + SUM=SUM+(CG1(LMPML,0,L,-1)*(SUMM-SUME-SUEM+SUEE)+ + 1CG1(LMPML,0,L,1)*(SUMM+SUME+SUEM+SUEE))*COFL + 30 CONTINUE + GAPS(I)=DREAL(SUM)*COFS + 40 CONTINUE + RETURN + END + SUBROUTINE THDPS(LM,ZPV) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION ZPV(LM,3,2,2) + DIMENSION ZPV(40,3,2,2) + C0=0.0D0 + DO 10 L=1,LM + DO 10 ILMP=1,3 + ZPV(L,ILMP,1,1)=C0 + ZPV(L,ILMP,1,2)=C0 + ZPV(L,ILMP,2,1)=C0 + ZPV(L,ILMP,2,2)=C0 + 10 CONTINUE + DO 15 L=1,LM + XD=L*(L+1) + ZP=-1.0D0/DSQRT(XD) + ZPV(L,2,1,2)=ZP + ZPV(L,2,2,1)=ZP + 15 CONTINUE + IF(LM.EQ.1)GO TO 30 + DO 20 L=2,LM + XN=(L-1)*(L+1) + XD=L*(L+L+1) + ZP=DSQRT(XN/XD) + ZPV(L,1,1,1)=ZP + ZPV(L,1,2,2)=ZP + 20 CONTINUE + LMMO=LM-1 + DO 25 L=1,LMMO + XN=L*(L+2) + XD=(L+1)*(L+L+1) + ZP=-DSQRT(XN/XD) + ZPV(L,3,1,1)=ZP + ZPV(L,3,2,2)=ZP + 25 CONTINUE + 30 CONTINUE + RETURN + END + REAL*8 FUNCTION CG1(LMPML,MU,L,M) +CCC CG1(LMPML,MU,L,M)=CLGO(1,LMP,L;MU,M-MU,M) + REAL*8 XD,XN + IF(LMPML)30,5,60 + 5 IF((M.NE.0).OR.(MU.NE.0))GO TO 10 + CG1=0.0D0 + RETURN + 10 IF(MU.EQ.0)GO TO 20 + XD=(L+1)*L*2 + IF(MU.GT.0)GO TO 15 + XN=(L-M)*(L+M+1) + CG1=-DSQRT(XN/XD) + RETURN + 15 XN=(L+M)*(L-M+1) + CG1=DSQRT(XN/XD) + RETURN + 20 XD=(L+1)*L + XN=-M + CG1=XN/DSQRT(XD) + RETURN + 30 XD=(L*2-1)*L*2 + IF(MU)35,40,45 + 35 XN=(L-1-M)*(L-M) + CG1=DSQRT(XN/XD) + RETURN + 40 XN=(L-M)*(L+M)*2 + CG1=DSQRT(XN/XD) + RETURN + 45 XN=(L-1+M)*(L+M) + CG1=DSQRT(XN/XD) + RETURN + 60 XD=(L*2+3)*(L+1)*2 + IF(MU)65,70,75 + 65 XN=(L+1+M)*(L+2+M) + CG1=DSQRT(XN/XD) + RETURN + 70 XN=(L+1-M)*(L+1+M)*2 + CG1=-DSQRT(XN/XD) + RETURN + 75 XN=(L+1-M)*(L+2-M) + CG1=DSQRT(XN/XD) + RETURN + END + SUBROUTINE UPVMP(THD,PHD,ICSPNV,COST,SINT,COSP,SINP,U,UP,UN) + IMPLICIT REAL*8(A-H,O-Z) + DIMENSION U(3),UP(3),UN(3) + C0=0.0D0 + PIGH=DACOS(C0) + RDR=PIGH/9.0D+1 + TH=THD*RDR + PH=PHD*RDR + COST=DCOS(TH) + SINT=DSIN(TH) + COSP=DCOS(PH) + SINP=DSIN(PH) + U(1)=COSP*SINT + U(2)=SINP*SINT + U(3)=COST + UP(1)=COSP*COST + UP(2)=SINP*COST + UP(3)=-SINT + UN(1)=-SINP + UN(2)=COSP + UN(3)=C0 + IF(ICSPNV.EQ.0)RETURN + UP(1)=-UP(1) + UP(2)=-UP(2) + UP(3)=-UP(3) + UN(1)=-UN(1) + UN(2)=-UN(2) + RETURN + END + SUBROUTINE WMAMP + 1(IIS,COST,SINT,COSP,SINP,INPOL,LM,IDOT,NSPH,ARG,U,UP,UN) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION YLM(NLMM+2),ARG(NSPEF) +CCC NSPEF=1 CALLING WITH IDOT=0, NSPEF=NSPH OTHERWISE + DIMENSION YLM(1682),U(3),UP(3),UN(3),ARG(1) + COMPLEX*16 YLM + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + NLMP=LM*(LM+2)+2 + YLM(NLMP)=(0.0D0,0.0D0) + IF(IDOT.EQ.0)GO TO 65 + IF(IDOT.EQ.1)GO TO 45 + DO 40 N=1,NSPH + 40 ARG(N)=U(1)*RXX(N)+U(2)*RYY(N)+U(3)*RZZ(N) + GO TO 55 + 45 DO 50 N=1,NSPH + 50 ARG(N)=COST*RZZ(N) + 55 IF(IIS.NE.2)GO TO 65 + DO 60 N=1,NSPH + 60 ARG(N)=-ARG(N) + 65 CALL SPHAR(COST,SINT,COSP,SINP,LM,YLM) + CALL PWMA(UP,UN,YLM,INPOL,LM,IIS) + RETURN + END + SUBROUTINE UPVSP(U,UPMP,UNMP,US,UPSMP,UNSMP,UP,UN,UPS,UNS,DUK, + 1ISQ,IBF,SCAND,CFMP,SFMP,CFSP,SFSP) + IMPLICIT REAL*8(A-H,O-Z) + DIMENSION U(3),UPMP(3),UNMP(3),US(3),UPSMP(3),UNSMP(3), + 1UP(3),UN(3),UPS(3),UNS(3),DUK(3) + C0=0.0D0 + RDR=DACOS(C0)/9.0D+1 + SML=1.0D-6 + ISQ=0 + SCAND=U(1)*US(1)+U(2)*US(2)+U(3)*US(3) + IF(DABS(SCAND-1.0D0).LT.SML)GO TO 10 + IF(DABS(SCAND+1.0D0).LT.SML)GO TO 15 + SCAND=DACOS(SCAND)/RDR + DUK(1)=U(1)-US(1) + DUK(2)=U(2)-US(2) + DUK(3)=U(3)-US(3) + IBF=0 + GO TO 25 + 10 SCAND=C0 + DUK(1)=C0 + DUK(2)=C0 + DUK(3)=C0 + IBF=-1 + ISQ=-1 + UPS(1)=UPSMP(1) + UPS(2)=UPSMP(2) + UPS(3)=UPSMP(3) + UNS(1)=UNSMP(1) + UNS(2)=UNSMP(2) + UNS(3)=UNSMP(3) + GO TO 20 + 15 SCAND=180.0D0 + DUK(1)=U(1)*2.0D0 + DUK(2)=U(2)*2.0D0 + DUK(3)=U(3)*2.0D0 + IBF=1 + UPS(1)=-UPSMP(1) + UPS(2)=-UPSMP(2) + UPS(3)=-UPSMP(3) + UNS(1)=-UNSMP(1) + UNS(2)=-UNSMP(2) + UNS(3)=-UNSMP(3) + 20 UP(1)=UPMP(1) + UP(2)=UPMP(2) + UP(3)=UPMP(3) + UN(1)=UNMP(1) + UN(2)=UNMP(2) + UN(3)=UNMP(3) + GO TO 85 + 25 CALL ORUNVE(U,US,UN,-1,SML) + UNS(1)=UN(1) + UNS(2)=UN(2) + UNS(3)=UN(3) + CALL ORUNVE(UN,U,UP,1,SML) + CALL ORUNVE(UNS,US,UPS,1,SML) + 85 CFMP=UPMP(1)*UP(1)+UPMP(2)*UP(2)+UPMP(3)*UP(3) + SFMP=UNMP(1)*UP(1)+UNMP(2)*UP(2)+UNMP(3)*UP(3) + CFSP=UPS(1)*UPSMP(1)+UPS(2)*UPSMP(2)+UPS(3)*UPSMP(3) + SFSP=UNS(1)*UPSMP(1)+UNS(2)*UPSMP(2)+UNS(3)*UPSMP(3) + RETURN + END + SUBROUTINE WMASP(COST,SINT,COSP,SINP,COSTS,SINTS,COSPS,SINPS, + 1U,UP,UN,US,UPS,UNS,ISQ,IBF,INPOL,LM,IDOT,NSPH,ARGI,ARGS) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION YLM(NLMM+2),ARGI(NSPEF),ARGS(NSPEF) +CCC NSPEF=1 CALLING WITH IDOT=0, NSPEF=NSPH OTHERWISE + DIMENSION YLM(1682),ARGI(1),ARGS(1), + 1U(3),UP(3),UN(3),US(3),UPS(3),UNS(3) + COMPLEX*16 YLM + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + NLMP=LM*(LM+2)+2 + YLM(NLMP)=(0.0D0,0.0D0) + IF(IDOT.EQ.0)GO TO 75 + IF(IDOT.EQ.1)GO TO 50 + DO 40 N=1,NSPH + ARGI(N)=U(1)*RXX(N)+U(2)*RYY(N)+U(3)*RZZ(N) + IF(IBF.EQ.0)GO TO 35 + ARGS(N)=ARGI(N)*IBF + GO TO 40 + 35 ARGS(N)=-(US(1)*RXX(N)+US(2)*RYY(N)+US(3)*RZZ(N)) + 40 CONTINUE + GO TO 75 + 50 DO 60 N=1,NSPH + ARGI(N)=COST*RZZ(N) + IF(IBF.EQ.0)GO TO 55 + ARGS(N)=ARGI(N)*IBF + GO TO 60 + 55 ARGS(N)=-COSTS*RZZ(N) + 60 CONTINUE + 75 CALL SPHAR(COST,SINT,COSP,SINP,LM,YLM) + CALL PWMA(UP,UN,YLM,INPOL,LM,ISQ) + IF(IBF.LT.0)RETURN + CALL SPHAR(COSTS,SINTS,COSPS,SINPS,LM,YLM) + CALL PWMA(UPS,UNS,YLM,INPOL,LM,2) + RETURN + END + SUBROUTINE PWMA(UP,UN,YLM,INPOL,LW,ISQ) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION YLM(NLWM+2) + DIMENSION YLM(1682),UP(3),UN(3) + COMPLEX*16 YLM + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + COMPLEX*16 CP1,CM1,C1,CP2,CM2,C2,UIM,CL + PI4=DACOS(0.0D0)*8.0D0 + IS=ISQ + IF(ISQ.EQ.-1)IS=0 + ISPO=IS+1 + ISPT=IS+2 + NLWM=LW*(LW+2) + NLWMT=NLWM+NLWM + SQRTWI=1.0D0/DSQRT(2.0D0) + UIM=(0.0D0,1.0D0) + CM1=.5D0*DCMPLX(UP(1),UP(2)) + CP1=.5D0*DCMPLX(UP(1),-UP(2)) + CZ1=UP(3) + CM2=.5D0*DCMPLX(UN(1),UN(2)) + CP2=.5D0*DCMPLX(UN(1),-UN(2)) + CZ2=UN(3) + DO 20 L=1,LW + LF=L+1 + LFTL=LF*L + X=LFTL + CL=(PI4/DSQRT(X))*UIM**L + MV=L+LF + M=-LF + DO 20 MF=1,MV + M=M+1 + K=LFTL+M + X=LFTL-M*(M+1) + CP=DSQRT(X) + X=LFTL-M*(M-1) + CM=DSQRT(X) + CZ=M + W(K,ISPO)=DCONJG(CP1*CP*YLM(K+2)+CM1*CM*YLM(K)+CZ1*CZ*YLM(K+1))*CL + 20 W(K,ISPT)=DCONJG(CP2*CP*YLM(K+2)+CM2*CM*YLM(K)+CZ2*CZ*YLM(K+1))*CL + DO 30 K=1,NLWM + I=K+NLWM + W(I,ISPO)=UIM*W(K,ISPT) + 30 W(I,ISPT)=-UIM*W(K,ISPO) + IF(INPOL.EQ.0)GO TO 42 + DO 40 K=1,NLWM + I=K+NLWM + C1=(W(K,ISPO)+UIM*W(K,ISPT))*SQRTWI + C2=(W(K,ISPO)-UIM*W(K,ISPT))*SQRTWI + W(K,ISPO)=C2 + W(I,ISPO)=-C2 + W(K,ISPT)=C1 + 40 W(I,ISPT)=C1 + 42 IF(ISQ.EQ.0)RETURN + DO 50 I=1,2 + IPT=I+2 + IPIS=I+IS + DO 50 K=1,NLWMT + 50 W(K,IPT)=DCONJG(W(K,IPIS)) + RETURN + END + SUBROUTINE ORUNVE(U1,U2,U3,IORTH,TORTH) + IMPLICIT REAL*8(A-H,O-Z) + DIMENSION U1(3),U2(3),U3(3) + IF(IORTH.GT.0)GO TO 10 + CP=U1(1)*U2(1)+U1(2)*U2(2)+U1(3)*U2(3) + IF((IORTH.LT.0).AND.(DABS(CP).LT.TORTH))GO TO 10 + FN=1.0D0/DSQRT(1.0D0-CP*CP) + U3(1)=(U1(2)*U2(3)-U1(3)*U2(2))*FN + U3(2)=(U1(3)*U2(1)-U1(1)*U2(3))*FN + U3(3)=(U1(1)*U2(2)-U1(2)*U2(1))*FN + RETURN + 10 U3(1)=U1(2)*U2(3)-U1(3)*U2(2) + U3(2)=U1(3)*U2(1)-U1(1)*U2(3) + U3(3)=U1(1)*U2(2)-U1(2)*U2(1) + RETURN + END + SUBROUTINE DME(LI,I,NPNT,NPNTTS,VK,EXDC,EXRI,JER,LCALC,ARG) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION CFJ(LIPT),RFJ(LIPT),RFN(LIPT), +CCC 1FBI(LIPT),FB(LIPT),FN(LIPT), +CCC 2RMF(LI),DRMF(LI),REF(LI),DREF(LI) + DIMENSION CFJ(42),RFJ(42),RFN(42), + 1FBI(42),FB(42),FN(42),RMF(40),DRMF(40),REF(40),DREF(40) + COMPLEX*16 CFJ,FBI,FB,FN,RMF,DRMF,REF,DREF + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + COMMON/C2/RIS(999),DLRI(999),DC0(5),VKT(2),VSZ(2) + COMPLEX*16 RIS,DLRI,DC0,VKT + COMPLEX*16 DFBI,DFB,DFN,CCNA,CCNB,CCNC,CCND, + 1Y1,DY1,Y2,DY2,ARIN,ARG,CRI,UIM + JER=0 + UIM=(0.0D0,1.0D0) + NSTP=NPNT-1 + NSTPTS=NPNTTS-1 + LIPO=LI+1 + LIPT=LI+2 + SZ=VK*ROS(I) + VSZ(I)=SZ + VKR1=VK*RC(I,1) + NSH=NSHL(I) + VKT(I)=CDSQRT(DC0(1)) + ARG=VKR1*VKT(I) + ARIN=ARG + IF(DIMAG(ARG).EQ.0.0D0)GO TO 26 + CALL CBF(LIPO,ARG,LCALC,CFJ) + IF(LCALC.GE.LIPO)GO TO 22 + JER=5 + RETURN + 22 DO 24 J=1,LIPT + 24 FBI(J)=CFJ(J) + GO TO 32 + 26 RARG=DREAL(ARG) + CALL RBF(LIPO,RARG,LCALC,RFJ) + IF(LCALC.GE.LIPO)GO TO 28 + JER=5 + RETURN + 28 DO 30 J=1,LIPT + 30 FBI(J)=RFJ(J) + 32 AREX=SZ*EXRI + ARG=AREX + RARG=AREX + CALL RBF(LIPO,RARG,LCALC,RFJ) + IF(LCALC.GE.LIPO)GO TO 40 + JER=7 + RETURN + 40 CALL RNF(LIPO,RARG,LCALC,RFN) + IF(LCALC.GE.LIPO)GO TO 42 + JER=8 + RETURN + 42 DO 43 J=1,LIPT + FB(J)=RFJ(J) + 43 FN(J)=RFN(J) + IF(NSH.GT.1)GO TO 65 + CRI=DC0(1)/EXDC + DO 60 L=1,LI + LPO=L+1 + LTPO=LPO+L + LPT=LPO+1 + DFBI=(L*FBI(L)-LPO*FBI(LPT))*ARIN+FBI(LPO)*LTPO + DFB=(L*FB(L)-LPO*FB(LPT))*AREX+FB(LPO)*LTPO + DFN=(L*FN(L)-LPO*FN(LPT))*AREX+FN(LPO)*LTPO + CCNA=FBI(LPO)*DFN + CCNB=FN(LPO)*DFBI + CCNC=FBI(LPO)*DFB + CCND=FB(LPO)*DFBI + RMI(L,I)=1.0D0+UIM*(CCNA-CCNB)/(CCNC-CCND) + 60 REI(L,I)=1.0D0+UIM*(CRI*CCNA-CCNB)/(CRI*CCNC-CCND) + RETURN + 65 DO 80 L=1,LI + LPO=L+1 + LTPO=LPO+L + LPT=LPO+1 + DLTPO=LTPO +cccccccccccccccccccccc + Y1=FBI(LPO) + DY1=(L*FBI(L)-LPO*FBI(LPT))*VKT(I)/DLTPO +cccccccccccccccccccccc + Y2=Y1 + DY2=DY1 + IC=1 + DO 76 NS=2,NSH + NSMO=NS-1 + VKR=VK*RC(I,NSMO) + IF(MOD(NS,2).EQ.0)GO TO 70 + IC=IC+1 + STEP=NSTP + STEP=VK*(RC(I,NS)-RC(I,NSMO))/STEP + ARG=DC0(IC) + CALL RKC(NSTP,STEP,ARG,VKR,LPO,Y1,Y2,DY1,DY2) + GO TO 76 + 70 CALL DIEL(NSTPTS,NSMO,I,IC,VK) + STEPTS=NSTPTS + STEPTS=VK*(RC(I,NS)-RC(I,NSMO))/STEPTS + CALL RKT(NSTPTS,STEPTS,VKR,LPO,Y1,Y2,DY1,DY2) + 76 CONTINUE + RMF(L)=Y1*SZ + DRMF(L)=DY1*SZ+Y1 + REF(L)=Y2*SZ + 80 DREF(L)=DY2*SZ+Y2 + CRI=(1.0D0,0.0D0) + IF(MOD(NSH,2).NE.0)CRI=DC0(IC)/EXDC + DO 90 L=1,LI + LPO=L+1 + LTPO=LPO+L + LPT=LPO+1 + DFB=(L*FB(L)-LPO*FB(LPT))*AREX+FB(LPO)*LTPO + DFN=(L*FN(L)-LPO*FN(LPT))*AREX+FN(LPO)*LTPO + CCNA=RMF(L)*DFN + CCNB=DRMF(L)*FN(LPO)*SZ*LTPO + CCNC=RMF(L)*DFB + CCND=DRMF(L)*FB(LPO)*SZ*LTPO + RMI(L,I)=1.0D0+UIM*(CCNA-CCNB)/(CCNC-CCND) + CCNA=REF(L)*DFN + CCNB=DREF(L)*FN(LPO)*SZ*LTPO + CCNC=REF(L)*DFB + CCND=DREF(L)*FB(LPO)*SZ*LTPO + 90 REI(L,I)=1.0D0+UIM*(CRI*CCNA-CCNB)/(CRI*CCNC-CCND) + RETURN + END + SUBROUTINE RKT(NPNTMO,STEP,X,LPO,Y1,Y2,DY1,DY2) + IMPLICIT REAL*8(A-H,O-Z) + COMMON/C2/RIS(999),DLRI(999),DC0(5),VKT(2),VSZ(2) + COMPLEX*16 RIS,DLRI,DC0,VKT + COMPLEX*16 Y1,DY1,Y2,DY2,CY1,CDY1,C11, + 1CY23,CDY23,YC2,C12,C13,CY4,CDY4,YY,C14,C21,C22,C23,C24 + HSTEP=.5D0*STEP + CL=LPO*(LPO-1) + DO 60 IPNT=1,NPNTMO + JPNT=IPNT+IPNT-1 + CY1=CL/(X*X)-RIS(JPNT) + CDY1=-2.0D0/X + C11=(CY1*Y1+CDY1*DY1)*STEP + XH=X+HSTEP + JPNTPO=JPNT+1 + CY23=CL/(XH*XH)-RIS(JPNTPO) + CDY23=-2.0D0/XH + YC2=Y1+DY1*HSTEP + C12=(CY23*YC2+CDY23*(DY1+.5D0*C11))*STEP + C13=(CY23*(YC2+.25D0*C11*STEP)+CDY23*(DY1+.5D0*C12))*STEP + XN=X+STEP + JPNTPT=JPNT+2 + CY4=CL/(XN*XN)-RIS(JPNTPT) + CDY4=-2.0D0/XN + YY=Y1+DY1*STEP + C14=(CY4*(YY+.5D0*C12*STEP)+CDY4*(DY1+C13))*STEP + Y1=YY+(C11+C12+C13)*STEP/6.0D0 + DY1=DY1+(.5D0*C11+C12+C13+.5D0*C14)/3.0D0 + CY1=CY1-CDY1*DLRI(JPNT) + CDY1=CDY1+2.0D0*DLRI(JPNT) + C21=(CY1*Y2+CDY1*DY2)*STEP + CY23=CY23-CDY23*DLRI(JPNTPO) + CDY23=CDY23+2.0D0*DLRI(JPNTPO) + YC2=Y2+DY2*HSTEP + C22=(CY23*YC2+CDY23*(DY2+.5D0*C21))*STEP + C23=(CY23*(YC2+.25D0*C21*STEP)+CDY23*(DY2+.5D0*C22))*STEP + CY4=CY4-CDY4*DLRI(JPNTPT) + CDY4=CDY4+2.0D0*DLRI(JPNTPT) + YY=Y2+DY2*STEP + C24=(CY4*(YC2+.5D0*C22*STEP)+CDY4*(DY2+C23))*STEP + Y2=YY+(C21+C22+C23)*STEP/6.0D0 + DY2=DY2+(.5D0*C21+C22+C23+.5D0*C24)/3.0D0 + 60 X=XN + RETURN + END + SUBROUTINE RKC(NPNTMO,STEP,DCC,X,LPO,Y1,Y2,DY1,DY2) + IMPLICIT REAL*8(A-H,O-Z) + COMPLEX*16 Y1,DY1,Y2,DY2,CY1,CDY1,C11, + 1CY23,YC2,C12,C13,CY4,YY,C14,C21,C22,C23,C24,DCC + HSTEP=.5D0*STEP + CL=LPO*(LPO-1) + DO 60 IPNT=1,NPNTMO + CY1=CL/(X*X)-DCC + CDY1=-2.0D0/X + C11=(CY1*Y1+CDY1*DY1)*STEP + XH=X+HSTEP + CY23=CL/(XH*XH)-DCC + CDY23=-2.0D0/XH + YC2=Y1+DY1*HSTEP + C12=(CY23*YC2+CDY23*(DY1+.5D0*C11))*STEP + C13=(CY23*(YC2+.25D0*C11*STEP)+CDY23*(DY1+.5D0*C12))*STEP + XN=X+STEP + CY4=CL/(XN*XN)-DCC + CDY4=-2.0D0/XN + YY=Y1+DY1*STEP + C14=(CY4*(YY+.5D0*C12*STEP)+CDY4*(DY1+C13))*STEP + Y1=YY+(C11+C12+C13)*STEP/6.0D0 + DY1=DY1+(.5D0*C11+C12+C13+.5D0*C14)/3.0D0 + C21=(CY1*Y2+CDY1*DY2)*STEP + YC2=Y2+DY2*HSTEP + C22=(CY23*YC2+CDY23*(DY2+.5D0*C21))*STEP + C23=(CY23*(YC2+.25D0*C21*STEP)+CDY23*(DY2+.5D0*C22))*STEP + YY=Y2+DY2*STEP + C24=(CY4*(YC2+.5D0*C22*STEP)+CDY4*(DY2+C23))*STEP + Y2=YY+(C21+C22+C23)*STEP/6.0D0 + DY2=DY2+(.5D0*C21+C22+C23+.5D0*C24)/3.0D0 + 60 X=XN + RETURN + END + SUBROUTINE DIEL(NPNTMO,NS,I,IC,VK) + IMPLICIT REAL*8(A-H,O-Z) + COMMON/C1/RMI(40,2),REI(40,2),W(3360,4), + 1FSAS(2),SAS(2,2,2),VINTS(2,16), + 2SSCS(2),SEXS(2),SABS(2),SQSCS(2),SQEXS(2),SQABS(2), + 3GCSV(2),RXX(1),RYY(1),RZZ(1),ROS(2),RC(2,8), + 4IOG(2),NSHL(2) + COMPLEX*16 RMI,REI,W,FSAS,SAS,VINTS + COMMON/C2/RIS(999),DLRI(999),DC0(5),VKT(2),VSZ(2) + COMPLEX*16 RIS,DLRI,DC0,VKT + COMPLEX*16 DEL + DIF=RC(I,NS+1)-RC(I,NS) + HSTEP=NPNTMO + HSTEP=.5D0*DIF/HSTEP + RR=RC(I,NS) + DEL=DC0(IC+1)-DC0(IC) + KPNT=NPNTMO+NPNTMO + RIS(KPNT+1)=DC0(IC+1) + DLRI(KPNT+1)=(0.0D0,0.0D0) + DO 90 NP=1,KPNT + FF=(RR-RC(I,NS))/DIF + RIS(NP)=DEL*FF*FF*(-2.0D0*FF+3.0D0)+DC0(IC) + DLRI(NP)=3.0D0*DEL*FF*(1.0D0-FF)/(DIF*VK*RIS(NP)) + 90 RR=RR+HSTEP + RETURN + END + SUBROUTINE RBF(N,X,NM,SJ) +C +C FROM SPHJ OF LIBRARY specfun +C +C ======================================================= +C Purpose: Compute spherical Bessel functions j +C Input : X --- Argument of j +C N --- Order of j ( N = 0,1,2,... ) +C Output: SJ(N+1) --- j +C NM --- Highest order computed +C Routines called: +C MSTA1 and MSTA2 for computing the starting +C point for backward recurrence +C ======================================================= +C + IMPLICIT REAL*8 (A-H,O-Z) + DIMENSION SJ(N+1) + A0=DABS(X) + NM=N + IF(A0.LT.1.0D-60)THEN + DO K=2,N+1 + SJ(K)=0.0D0 + ENDDO + SJ(1)=1.0D0 + RETURN + ENDIF + SJ(1)=DSIN(X)/X + IF(N.EQ.0)RETURN + SJ(2)=(SJ(1)-DCOS(X))/X + IF(N.EQ.1)RETURN + SA=SJ(1) + SB=SJ(2) + M=MSTA1(A0,200) + IF(M.LT.N)THEN + NM=M + ELSE + M=MSTA2(A0,N,15) + ENDIF + F0=0.0D0 + F1=1.0D0-100 + DO K=M,0,-1 + F=(2.0D0*K+3.0D0)*F1/X-F0 + IF(K.LE.NM)SJ(K+1)=F + F0=F1 + F1=F + ENDDO + IF(DABS(SA).GT.DABS(SB))CS=SA/F + IF(DABS(SA).LE.DABS(SB))CS=SB/F0 + DO K=1,NM+1 + SJ(K)=CS*SJ(K) + ENDDO + END + SUBROUTINE CBF(N,Z,NM,CSJ) +C +C FROM CSPHJY OF LIBRARY specfun +C +C ========================================================== +C Purpose: Compute spherical Bessel functions j +C Input : Z --- Complex argument of j +C N --- Order of j ( N = 0,1,2,... ) +C Output: CSJ(N+1) --- j +C NM --- Highest order computed +C Routines called: +C MSTA1 and MSTA2 for computing the starting +C point for backward recurrence +C ========================================================== +C + IMPLICIT COMPLEX*16 (C,Z) + REAL*8 A0 + DIMENSION CSJ(N+1) + A0=CDABS(Z) + NM=N + IF(A0.LT.1.0D-60)THEN + DO K=2,N+1 + CSJ(K)=0.0D0 + ENDDO + CSJ(1)=(1.0D0,0.0D0) + RETURN + ENDIF + CSJ(1)=CDSIN(Z)/Z + IF(N.EQ.0)RETURN + CSJ(2)=(CSJ(1)-CDCOS(Z))/Z + IF(N.EQ.1)RETURN + CSA=CSJ(1) + CSB=CSJ(2) + M=MSTA1(A0,200) + IF(M.LT.N)THEN + NM=M + ELSE + M=MSTA2(A0,N,15) + ENDIF + CF0=0.0D0 + CF1=1.0D0-100 + DO K=M,0,-1 + CF=(2.0D0*K+3.0D0)*CF1/Z-CF0 + IF(K.LE.NM)CSJ(K+1)=CF + CF0=CF1 + CF1=CF + ENDDO + IF(CDABS(CSA).GT.CDABS(CSB))CS=CSA/CF + IF(CDABS(CSA).LE.CDABS(CSB))CS=CSB/CF0 + DO K=1,NM+1 + CSJ(K)=CS*CSJ(K) + ENDDO + END + INTEGER FUNCTION MSTA1(X,MP) +C +C =================================================== +C Purpose: Determine the starting point for backward +C recurrence such that the magnitude of all +C J or j at that point is about 10**(-MP) +C Input : X --- Abs of argument of J or j +C MP --- Value of magnitude +C Output: MSTA1 --- Starting point +C =================================================== +C + IMPLICIT DOUBLE PRECISION (A-H,O-Z) + A0=DABS(X) + N0=INT(1.1*A0)+1 + F0=ENVJ(N0,A0)-MP + N1=N0+5 + F1=ENVJ(N1,A0)-MP + DO 10 IT=1,20 + NN=N1-IDINT((N1-N0)/(1.0D0-F0/F1)) + F=ENVJ(NN,A0)-MP + IF(ABS(NN-N1).LT.1)GO TO 20 + N0=N1 + F0=F1 + N1=NN + 10 F1=F + 20 MSTA1=NN + RETURN + END + INTEGER FUNCTION MSTA2(X,N,MP) +C +C =================================================== +C Purpose: Determine the starting point for backward +C recurrence such that all J or j +C have MP significant digits +C Input : X --- Abs of argument of J or j +C N --- Order of J or j +C MP --- Significant digit +C Output: MSTA2 --- Starting point +C =================================================== +C + IMPLICIT DOUBLE PRECISION (A-H,O-Z) + A0=DABS(X) + HMP=0.5D0*MP + EJN=ENVJ(N,A0) + IF(EJN.LE.HMP)THEN + OBJ=MP +C + N0=INT(1.1*A0)+1 +C + ELSE + OBJ=HMP+EJN + N0=N + ENDIF + F0=ENVJ(N0,A0)-OBJ + N1=N0+5 + F1=ENVJ(N1,A0)-OBJ + DO 10 IT=1,20 + NN=N1-IDINT((N1-N0)/(1.0D0-F0/F1)) + F=ENVJ(NN,A0)-OBJ + IF(ABS(NN-N1).LT.1)GO TO 20 + N0=N1 + F0=F1 + N1=NN + 10 F1=F + 20 MSTA2=NN+10 + RETURN + END + REAL*8 FUNCTION ENVJ(N,X) + DOUBLE PRECISION X,XN +C + IF(N.EQ.0)THEN + XN=1.0D-100 + ENVJ=0.5D0*DLOG10(6.28D0*XN)-XN*DLOG10(1.36D0*X/XN) + ELSE +C + ENVJ=0.5D0*DLOG10(6.28D0*N)-N*DLOG10(1.36D0*X/N) +C + ENDIF +C + RETURN + END + SUBROUTINE RNF(N,X,NM,SY) +C +C FROM SPHJY OF LIBRARY specfun +C +C +C ====================================================== +C Purpose: Compute spherical Bessel functions y +C Input : X --- Argument of y ( X > 0 ) +C N --- Order of y ( N = 0,1,2,... ) +C Output: SY(N+1) --- y +C NM --- Highest order computed +C ====================================================== +C + IMPLICIT REAL*8 (A-H,O-Z) + DIMENSION SY(N+1) + IF(X.LT.1.0D-60)THEN + DO K=1,N+1 + SY(K)=-1.0D+300 + ENDDO + RETURN + ENDIF + SY(1)=-DCOS(X)/X + IF(N.EQ.0)RETURN + SY(2)=(SY(1)-DSIN(X))/X + IF(N.EQ.1)RETURN + F0=SY(1) + F1=SY(2) + DO K=2,N + F=(2.0D0*K-1.0D0)*F1/X-F0 + SY(K+1)=F + IF(DABS(F).GE.1.0D+300)GO TO 20 + F0=F1 + F1=F + ENDDO + RETURN + 20 NM=K + RETURN + END + SUBROUTINE SPHAR(COSRTH,SINRTH,COSRPH,SINRPH,LL,YLM) + IMPLICIT REAL*8(A-H,O-Z) +CCC DIMENSION SINRMP(LL),COSRMP(LL),PLEGN((LLPO*LL)/2+LLPO), +CCC 1YLM(LLPO*LLPO) +CCC LL=LM + DIMENSION SINRMP(40),COSRMP(40),PLEGN(861),YLM(1681) + COMPLEX*16 YLM + PI4=DACOS(0.0D0)*8.0D0 + PI4IRS=1.0D0/DSQRT(PI4) + X=COSRTH + Y=DABS(SINRTH) + CLLMO=3.0D0 + CLL=1.5D0 + YTOL=Y + PLEGN(1)=1.0D0 + PLEGN(2)=X*DSQRT(CLLMO) + PLEGN(3)=YTOL*DSQRT(CLL) + SINRMP(1)=SINRPH + COSRMP(1)=COSRPH + IF(LL.LT.2)GO TO 30 + K=3 + DO 20 L=2,LL + LMO=L-1 + LTPO=L+L+1 + LTMO=LTPO-2 + LTS=LTPO*LTMO + CN=LTS + DO 10 MPO=1,LMO + M=MPO-1 + MPOPK=MPO+K + LS=(L+M)*(L-M) + CD=LS + CNM=LTPO*(LMO+M)*(L-MPO) + CDM=(LTMO-2)*LS + 10 PLEGN(MPOPK)=PLEGN(MPOPK-L)*X*DSQRT(CN/CD)- + 1PLEGN(MPOPK-LTMO)*DSQRT(CNM/CDM) + LPK=L+K + CLTPO=LTPO + PLEGN(LPK)=PLEGN(K)*X*DSQRT(CLTPO) + K=LPK+1 + CLT=LTPO-1 + CLL=CLL*(CLTPO/CLT) + YTOL=YTOL*Y + PLEGN(K)=YTOL*DSQRT(CLL) + SINRMP(L)=SINRPH*COSRMP(LMO)+COSRPH*SINRMP(LMO) + 20 COSRMP(L)=COSRPH*COSRMP(LMO)-SINRPH*SINRMP(LMO) + 30 L=0 + 40 M=0 + K=L*(L+1) + L0Y=K+1 + L0P=K/2+1 + YLM(L0Y)=PI4IRS*PLEGN(L0P) + GO TO 45 + 44 LMP=L0P+M + SAVE=PI4IRS*PLEGN(LMP) + LMY=L0Y+M + YLM(LMY)=SAVE*DCMPLX(COSRMP(M),SINRMP(M)) + IF(MOD(M,2).NE.0)YLM(LMY)=-YLM(LMY) + LMY=L0Y-M + YLM(LMY)=SAVE*DCMPLX(COSRMP(M),-SINRMP(M)) + 45 IF(M.GE.L)GO TO 47 + M=M+1 + GO TO 44 + 47 IF(L.GE.LL) RETURN + L=L+1 + GO TO 40 + END +CCC \ No newline at end of file -- GitLab