1 | SUBROUTINE MSCAT
|
---|
2 | C VERSION 4.00 -- 26 JAN 1986/1900
|
---|
3 | C******************************************************************
|
---|
4 | COMMON/ELECIN/EKELIM,ICOMP,EKE0,EKE1,CMFP0,CMFP1,RANGE0,RANGE1, XR
|
---|
5 | *0,TEFF0,BLCC,XCC,PICMP0(1),PICMP1(1),EICMP0(1),EICMP1(1),MPEEM(1),
|
---|
6 | * ESIG0(500),ESIG1(500),PSIG0(500),PSIG1(500),EDEDX0(500),EDEDX1(50
|
---|
7 | *0),PDEDX0(500),PDEDX1(500),EBR10(500),EBR11(500),PBR10(500),PBR11(
|
---|
8 | *500),PBR20(500),PBR21(500),TMXS0(500),TMXS1(500),CMFPE0(1),CMFPE1(
|
---|
9 | *1),CMFPP0(1),CMFPP1(1),ERANG0(1),ERANG1(1),PRANG0(1),PRANG1(1),CXC
|
---|
10 | *2E0(1),CXC2E1(1),CXC2P0(1),CXC2P1(1),CLXAE0(1),CLXAE1(1),CLXAP0(1)
|
---|
11 | *,CLXAP1(1), THR0(1,1),THR1(1,1),THR2(1,1),THRI0(1,1),THRI1(1,1),TH
|
---|
12 | *RI2(1,1),FSTEP(16),FSQR(16),MSMAP(200), VERT1(1000),VERT2(100,16),
|
---|
13 | *MSTEPS,JRMAX,MXV1, MXV2,NBLC,NRNTH,NRNTHI,BLC0,BLC1,RTHR0,RTHR1,RT
|
---|
14 | *HRI0,RTHRI1
|
---|
15 | *KEEP,EPCONT.
|
---|
16 | COMMON/EPCONT/ EDEP,RATIO,TSTEP,TUSTEP,USTEP,TVSTEP,VSTEP,IDISC,
|
---|
17 | * IROLD,IRNEW,RHOFAC, EOLD,ENEW,EKE,ELKE,BETA2,GLE,
|
---|
18 | * TSCAT,IAUSFL
|
---|
19 | DOUBLE PRECISION EDEP,RATIO
|
---|
20 | REAL TSTEP,TUSTEP,USTEP,TVSTEP,VSTEP,RHOFAC,EOLD,ENEW,
|
---|
21 | * EKE,ELKE,BETA2,GLE,TSCAT
|
---|
22 | INTEGER IDISC,IROLD,IRNEW,IAUSFL(29)
|
---|
23 | *KEND.
|
---|
24 | COMMON/MISC/KMPI,KMPO,DUNIT,NOSCAT,MED(6),RHOR(6),IRAYLR(6)
|
---|
25 | COMMON/MULTS/NG21,B0G21,B1G21,G210(7),G211(7),G212(7), NG22,B0G22,
|
---|
26 | *B1G22,G220(8),G221(8),G222(8), NG31,B0G31,B1G31,G310(11),G311(11),
|
---|
27 | *G312(11), NG32,B0G32,B1G32,G320(25),G321(25),G322(25), NBGB,B0BGB,
|
---|
28 | *B1BGB,BGB0(8),BGB1(8),BGB2(8)
|
---|
29 | *KEEP,RANDPA.
|
---|
30 | COMMON /RANDPA/ FAC,U1,U2,RD,NSEQ,ISEED,KNOR
|
---|
31 | DOUBLE PRECISION FAC,U1,U2
|
---|
32 | REAL RD(3000)
|
---|
33 | INTEGER ISEED(103,10),NSEQ
|
---|
34 | LOGICAL KNOR
|
---|
35 | *KEEP,RUNPAR.
|
---|
36 | COMMON /RUNPAR/ FIXHEI,THICK0,HILOECM,HILOELB,
|
---|
37 | * STEPFC,NRRUN,NSHOW,PATAPE,MONIIN,
|
---|
38 | * MONIOU,MDEBUG,NUCNUC,
|
---|
39 | * CETAPE,
|
---|
40 | * SHOWNO,ISHW,NOPART,NRECS,NBLKS,MAXPRT,NDEBDL,
|
---|
41 | * N1STTR,MDBASE,
|
---|
42 | * DEBDEL,DEBUG,FDECAY,FEGS,FIRSTI,FIXINC,FIXTAR,
|
---|
43 | * FIX1I,FMUADD,FNKG,FPRINT,FDBASE
|
---|
44 | * ,GHEISH,GHESIG
|
---|
45 | COMMON /RUNPAC/ DSN,HOST,USER
|
---|
46 | DOUBLE PRECISION FIXHEI,THICK0,HILOECM,HILOELB
|
---|
47 | REAL STEPFC
|
---|
48 | INTEGER NRRUN,NSHOW,PATAPE,MONIIN,MONIOU,MDEBUG,NUCNUC,
|
---|
49 | * SHOWNO,ISHW,NOPART,NRECS,NBLKS,MAXPRT,NDEBDL,
|
---|
50 | * N1STTR,MDBASE
|
---|
51 | INTEGER CETAPE
|
---|
52 | CHARACTER*79 DSN
|
---|
53 | CHARACTER*20 HOST,USER
|
---|
54 |
|
---|
55 | LOGICAL DEBDEL,DEBUG,FDECAY,FEGS,FIRSTI,FIXINC,FIXTAR,
|
---|
56 | * FIX1I,FMUADD,FNKG,FPRINT,FDBASE
|
---|
57 | * ,GHEISH,GHESIG
|
---|
58 | *KEEP,STACKE.
|
---|
59 | COMMON/STACKE/ E,TIME,X,Y,Z,U,V,W,DNEAR,IQ,IGEN,IR,IOBS,LPCTE,NP
|
---|
60 | DOUBLE PRECISION E(60),TIME(60)
|
---|
61 | REAL X(60),Y(60),Z(60),U(60),V(60),W(60),DNEAR(60)
|
---|
62 | INTEGER IQ(60),IGEN(60),IR(60),IOBS(60),LPCTE(60),NP
|
---|
63 | *KEND.
|
---|
64 | COMMON/THRESH/RMT2,RMSQ,ESCD2,AP,API,AE,UP,UE,TE,THMOLL
|
---|
65 | COMMON/UPHIIN/SINC0,SINC1,SIN0(20002),SIN1(20002)
|
---|
66 | COMMON/UPHIOT/THETA,SINTHE,COSTHE,SINPHI, COSPHI,PI,TWOPI,PI5D2
|
---|
67 | DOUBLE PRECISION PZERO,PRM,PRMT2,RMI,VC
|
---|
68 | COMMON/USEFUL/PZERO,PRM,PRMT2,RMI,VC,RM,MEDIUM,MEDOLD,IBLOBE,ICALL
|
---|
69 | COMMON/ACLOCK/NCLOCK,JCLOCK
|
---|
70 | C_____IF (NCLOCK.GT.JCLOCK) THEN
|
---|
71 | C______WRITE(MDEBUG,* )' MSCAT: NP=',NP,' IR=',IR(NP),' IOBS=',IOBS(NP)
|
---|
72 | C______CALL AUSGB2
|
---|
73 | C_____END IF
|
---|
74 | VSTEFF=TVSTEP*RHOFAC
|
---|
75 | OMEGA0=BLCC*VSTEFF/BETA2
|
---|
76 | IF ((OMEGA0.LE.1.0)) THEN
|
---|
77 | SINTHE=0.0
|
---|
78 | COSTHE=1.0
|
---|
79 | THETA=0.0
|
---|
80 | NOSCAT=NOSCAT+1
|
---|
81 | RETURN
|
---|
82 | END IF
|
---|
83 | BLC=LOG(OMEGA0)
|
---|
84 | IF (BLC.LE.1.30685) THEN
|
---|
85 | B=1.530394*BLC
|
---|
86 | ELSE
|
---|
87 | IB=B0BGB+BLC*B1BGB
|
---|
88 | IF (IB.GT.NBGB) THEN
|
---|
89 | WRITE(KMPO,940)IB
|
---|
90 | 940 FORMAT('MSCAT: NBGB<IB=',I5)
|
---|
91 | END IF
|
---|
92 | B=BGB0(IB)+BLC*(BGB1(IB)+BLC*BGB2(IB))
|
---|
93 | END IF
|
---|
94 | XR=XCC*SQRT(MAX(0.,VSTEFF*B))/(EOLD*BETA2)
|
---|
95 | IF (B.GT.2.0) THEN
|
---|
96 | BI=1./B
|
---|
97 | BMD=1./(1.0+1.75*BI)
|
---|
98 | BM1=(1.0-2.0*BI)*BMD
|
---|
99 | BM2=(1.0+0.025*BI)*BMD
|
---|
100 | ELSE
|
---|
101 | BI=0.5
|
---|
102 | BM1=(1.-2./B)*0.53333333
|
---|
103 | BM2=0.54
|
---|
104 | END IF
|
---|
105 | 951 CONTINUE
|
---|
106 | CALL RMMAR(RMS1,1,2)
|
---|
107 | IF (RMS1.LE.BM1) THEN
|
---|
108 | CALL RMMAR(RMS2,1,2)
|
---|
109 | IF((RMS2.EQ.0.0))RMS2=1.E-30
|
---|
110 | THR=SQRT(MAX(0.,-LOG(RMS2)))
|
---|
111 | ELSE IF((RMS1.LE.BM2)) THEN
|
---|
112 | CALL RMMAR(RD,3,2)
|
---|
113 | RMS3=RD(1)
|
---|
114 | RMS4=RD(2)
|
---|
115 | RMS5=RD(3)
|
---|
116 | ETA=MAX(RMS3,RMS4)
|
---|
117 | I31=B0G31+ETA*B1G31
|
---|
118 | G31=G310(I31)+ETA*(G311(I31)+ETA*G312(I31))
|
---|
119 | I32=B0G32+ETA*B1G32
|
---|
120 | G32=G320(I32)+ETA*(G321(I32)+ETA*G322(I32))
|
---|
121 | G3=G31+G32*BI
|
---|
122 | IF((RMS5.GT.G3))GO TO951
|
---|
123 | THR=1.0/ETA
|
---|
124 | ELSE
|
---|
125 | CALL RMMAR(RD,2,2)
|
---|
126 | RMS6=RD(1)
|
---|
127 | RMS7=RD(2)
|
---|
128 | THR=RMS6
|
---|
129 | I21=B0G21+THR*B1G21
|
---|
130 | G21=G210(I21)+THR*(G211(I21)+THR*G212(I21))
|
---|
131 | I22=B0G22+THR*B1G22
|
---|
132 | G22=G220(I22)+THR*(G221(I22)+THR*G222(I22))
|
---|
133 | G2=G21+G22*BI
|
---|
134 | IF((RMS7.GT.G2))GO TO951
|
---|
135 | END IF
|
---|
136 | THETA=THR*XR
|
---|
137 | IF((THETA.GE.PI))GO TO951
|
---|
138 | LTHETA=SINC1*THETA+SINC0
|
---|
139 | SINTHE=SIN1(LTHETA)*THETA+SIN0(LTHETA)
|
---|
140 | CALL RMMAR(RMS8,1,2)
|
---|
141 | IF(((RMS8*RMS8*THETA.LE.SINTHE)))GO TO952
|
---|
142 | GO TO 951
|
---|
143 | 952 CONTINUE
|
---|
144 | CTHET=PI5D2-THETA
|
---|
145 | LCTHET=SINC1*CTHET+SINC0
|
---|
146 | COSTHE=SIN1(LCTHET)*CTHET+SIN0(LCTHET)
|
---|
147 | RETURN
|
---|
148 | END
|
---|