Version update.
[u/mrichter/AliRoot.git] / LHAPDF / lhapdf5.3.1 / inputPDF.f
1       
2       subroutine weightPDF(x)
3       implicit none
4       integer nset,imem,nfmax
5       real*8 x,Q
6       nset=1
7       call weightPDFM(nset,x)
8       return
9
10       entry GetNF(nfmax)
11       nset=1
12       call GetNFM(nset,nfmax)
13       return
14
15       entry GetThreshold(imem,Q)
16       nset=1
17       call GetThresholdM(nset,imem,Q)
18       return
19       
20       end
21       
22       subroutine parmPDF(nset,x,pdf)
23       implicit none
24       include 'parmsetup.inc'
25       integer nset
26       character*16 name(nmxset)
27       integer nmem(nmxset),ndef(nmxset),mem
28       common/NAME/name,nmem,ndef,mem
29       real*4 xp(40),x4,fgdis4
30       character*16 s1,s2
31       integer i,j,imem,nop,parmN,Nfunc(nmxset),Fw(nmxset),nfmax,M
32       real*8 x,N,b0,Poly,pdf(-6:6),Fparm(nopmax),F(nofmax)
33       real*8 Ccoef(nmxset,-6:6,nofmax),Fpow(nmxset,nofmax)
34       real*8 Q,Treshold(nmxset,-6:6)
35 c      data Treshold/39*0d0/
36       integer Fmap(nmxset,nofmax,npfmax)
37       integer Ftype(nmxset,nofmax),Fn(nmxset,nofmax),Ctype(nmxset,-6:6)
38       integer lhasilent
39       common/lhasilent/lhasilent
40       logical first
41       data first/.true./
42       save Nfunc,Fn,Fw,Fpow,Fmap,Ccoef,Fparm,Ftype,Ctype,first,Treshold
43             
44       do i=1,Nfunc(nset)
45          if (Ftype(nset,i).eq.1) then
46             Poly=1.0
47
48             do j=4,Fn(nset,i)
49          Poly=Poly+Fparm(Fmap(nset,i,j))*x**(float(j-3)/Fpow(nset,i))
50             enddo
51             Poly=Fparm(Fmap(nset,i,1))*Poly
52        F(i)=x**Fparm(Fmap(nset,i,2))*(1.0-x)**Fparm(Fmap(nset,i,3))*Poly
53          endif
54          if (Ftype(nset,i).eq.2) then
55             if (x.lt.0.9999999) then
56       Poly=Fparm(Fmap(nset,i,2))*log(x)+Fparm(Fmap(nset,i,3))*log(1.0-x)
57      .      +Fparm(Fmap(nset,i,4))*x
58      .      +Fparm(Fmap(nset,i,6))*log(1.0+x*exp(Fparm(Fmap(nset,i,5))))
59          F(i)=Fparm(Fmap(nset,i,1))*exp(Poly)
60             else
61                F(i)=0d0
62             endif
63          endif
64          if (Ftype(nset,i).eq.101) then
65        Poly=exp(Fparm(Fmap(nset,i,1)))*x**(Fparm(Fmap(nset,i,2))-1)
66      .       *(1d0-x)**Fparm(Fmap(nset,i,3))
67        Poly=
68      . Poly+(1d0+Fparm(Fmap(nset,i,4))*x)*(1d0-x)**Fparm(Fmap(nset,i,5))
69             b0=10d0
70             if (Poly.gt.b0) then
71                F(i)=Poly
72             elseif (Poly.lt.-b0) then
73                F(i)=0d0
74             else
75                F(i)=Poly+log(1d0+exp(-b0*Poly)-exp(-b0))/b0
76             endif
77          endif
78 c - to add the mrst2004 gluon convolution
79          if (Ftype(nset,i).eq.201) then
80            xp(2) = Fparm(Fmap(nset,i,1))
81            xp(3) = Fparm(Fmap(nset,i,2))
82            xp(23)= Fparm(Fmap(nset,i,3))
83            xp(16)= Fparm(Fmap(nset,i,4))
84            xp(5) = Fparm(Fmap(nset,i,5))
85            xp(40)= Fparm(Fmap(nset,i,6))
86            xp(24)= Fparm(Fmap(nset,i,7)) 
87            xp(20)= Fparm(Fmap(nset,i,8)) 
88            xp(4) = Fparm(Fmap(nset,i,9)) 
89            xp(1) = Fparm(Fmap(nset,i,10))
90            x4 = x
91            call gconv(x4,xp,fgdis4)
92           F(i) = FGDIS4
93          endif
94 c--
95       enddo
96       do i=-6,6
97          pdf(i)=0.0
98          if (Ctype(nset,i).gt.0) then
99             if (Ctype(nset,i).eq.1) then
100                do j=1,Nfunc(nset)
101                   pdf(i)=pdf(i)+Ccoef(nset,i,j)*F(j)
102 c                 print *,i,j,Ccoef(i,j),F(j)
103                enddo
104             endif
105             if (Ctype(nset,i).eq.101) then
106                if (i.eq.-2) then
107        pdf(i)=F(int(Ccoef(nset,i,1)))/(F(int(Ccoef(nset,i,2)))+1d0)
108                endif
109                if (i.eq.-1) then
110       pdf(i)=
111      .F(int(Ccoef(nset,i,1)))/(1d0/F(int(Ccoef(nset,i,2)))+1d0)
112                endif
113                if (i.eq.1) then
114                   pdf(i)=F(1)+pdf(-1)
115                endif
116                if (i.eq.2) then
117                   pdf(i)=F(2)+pdf(-2)
118                endif
119             endif
120          endif
121       enddo
122 c      print *,pdf
123       return
124 *
125       entry weightPDFM(nset,x)
126       if (Fw(nset).ge.0) then
127          x=Fparm(Fw(nset))
128       else
129          call numberPDF(nop)
130          x=1.0/float(nop)
131       endif
132       return
133 *
134 c      entry GetParmPDFM(nset,imem,x)
135       entry GetParmPDF(nset,imem,x)
136       x=Fparm(imem)
137       return
138 *
139       entry GetNfM(nset,nfmax)
140       if(name(nset).eq.'MRST'.or.
141      +   name(nset).eq.'EVLCTEQ'.or.
142      +   name(nset)(1:6).eq.'QCDNUM') then
143         nfmax=0
144         do i=1,6
145            if (Treshold(nset,-i).ge.0d0) nfmax=nfmax+1
146            if (Treshold(nset,i).ge.0d0) nfmax=nfmax+1
147         enddo
148         nfmax=nfmax/2
149       else
150         nfmax = -1
151       endif
152       return
153 *
154       entry GetThresholdM(nset,imem,Q)
155       Q=Treshold(nset,imem)
156       return
157 *
158 c      entry InitEvolvePDFM(nset,imem)
159       entry InitEvolvePDF(nset,imem)
160 c      print*, 'calling listPDF',nset,imem
161       call listPDF(nset,imem,Fparm)
162 c      print *,Fparm
163       return
164 *
165 c      entry initInputPDFM(nset)
166       entry initInputPDF(nset)
167
168       if(first) then
169         do i=1,nmxset
170           do j=-6,6
171              Treshold(i,j)=0.0d0
172           enddo
173         enddo
174         first=.false.
175       endif
176       read(1,*) s1,Fw(nset),Nfunc(nset)
177 c      print *,s1,Fw,Nfunc
178       if(lhasilent.eq.0) then
179         write(*,*) 'Parametrization: ',s1
180         write(*,*)
181       endif
182       do i=1,Nfunc(nset)
183          Ftype(nset,i)=-1
184          read(1,*) s1,s2
185          if (index(s2,'x-taylor').eq.1) then
186             Ftype(nset,i)=1
187             read(1,*) FPow(nset,i),Fn(nset,i)
188             read(1,*) (Fmap(nset,i,j),j=1,Fn(nset,i))
189          endif
190          if (index(s2,'log-pade').eq.1) then
191             Ftype(nset,i)=2
192             FPow(nset,i)=0d0
193             read(1,*) Fn(nset,i)
194             read(1,*) (Fmap(nset,i,j),j=1,Fn(nset,i))
195          endif
196          if (index(s2,'cteq6-ratio').eq.1) then
197             Ftype(nset,i)=101
198             Fpow(nset,i)=0d0
199             Fn(nset,i)=5
200             read(1,*) (Fmap(nset,i,j),j=1,Fn(nset,i))
201          endif
202          if (index(s2,'convol').eq.1) then
203             Ftype(nset,i)=201
204             read(1,*) Fn(nset,i)
205             read(1,*) (Fmap(nset,i,j),j=1,Fn(nset,i))
206          endif
207          if (Ftype(nset,i).lt.0) then
208             write(*,*) 'File description error:'
209             write(*,*) 'Unknown functional ',s2
210             stop
211          endif
212       enddo
213       read(1,*) s1
214       do i=-6,6
215          Ctype(nset,i)=-1
216          read(1,*) s1,s2
217 c        print *,s1,s2
218          if (index(s2,'none').eq.1) then
219             Ctype(nset,i)=0
220             Treshold(nset,i)=-1d0
221          endif
222          if (index(s2,'treshold').eq.1) then
223             Ctype(nset,i)=0
224             read(1,*) Treshold(nset,i)
225          endif
226          if (index(s2,'composite').eq.1) then
227             Ctype(nset,i)=1
228             Treshold(nset,i)=0d0
229             read(1,*) (Ccoef(nset,i,j),j=1,Nfunc(nset))
230          endif
231          if (index(s2,'cteq6-ratio').eq.1) then
232             Ctype(nset,i)=101
233             Treshold(nset,i)=0d0
234             read(1,*) (Ccoef(nset,i,j),j=1,3)
235          endif
236          if (Ctype(nset,i).lt.0) then
237             write(*,*) 'File description error:'
238             write(*,*) 'Unknown composit type ',s2
239             stop
240          endif
241       enddo
242       if (Fw(nset).ge.0) then
243          write(*,*) '***********************************************'
244          write(*,*) '* Note that this is a weigthed PDF set.       *'
245          write(*,*) '* See manual for proper use.                  *'
246          write(*,*) '***********************************************'
247       endif
248       return
249 *
250       end
251
252       FUNCTION BETA_LHA(X1,X2)
253       CALL GAMMA_LHA(X1,G1,IER)
254       IF(IER.NE.0) write(16,*) 'GAMMA_LHA ERROR: IER= ',IER,X1,X2
255       CALL GAMMA_LHA(X2,G2,IER)
256       IF(IER.NE.0) write(16,*) 'GAMMA_LHA ERROR: IER= ',IER,X1,X2
257       X3=X1+X2
258       CALL GAMMA_LHA(X3,G3,IER)
259       IF(IER.NE.0) write(16,*) 'GAMMA_LHA ERROR: IER= ',IER,X1,X2
260       BETA_LHA=G1*G2/G3
261       RETURN
262       END
263
264       SUBROUTINE GAMMA_LHA(XX,GX,IER)
265       IF(XX-34.5)6,6,4
266     4 IER=2
267       GX=1.E38
268       RETURN
269     6 X=XX
270       ERR=1.0E-6
271       IER=0
272       GX=1.0
273       IF(X-2.0)50,50,15
274    10 IF(X-2.0)110,110,15
275    15 X=X-1.0
276       GX=GX*X
277       GO TO 10
278    50 IF(X-1.0)60,120,110
279 C        SEE IF X IS NEAR NEGATIVE INTEGER OR ZERO
280    60 IF(X-ERR)62,62,80
281    62 K=X
282       Y=FLOAT(K)-X
283       IF(ABS(Y)-ERR)130,130,64
284    64 IF(1.0-Y-ERR)130,130,70
285 C        X NOT NEAR A NEGATIVE INTEGER OR ZERO
286    70 IF(X-1.0)80,80,110
287    80 GX=GX/X
288       X=X+1.0
289       GO TO 70
290   110 Y=X-1.0
291       GY=1.0+Y*(-0.5771017+Y*(+0.9858540+Y*(-0.8764218+Y*(+0.8328212+
292      1Y*(-0.5684729+Y*(+0.2548205+Y*(-0.05149930)))))))
293       GX=GX*GY
294   120 RETURN
295   130 IER=1
296       RETURN
297       END
298
299       FUNCTION  ALPHA(T,AL)
300       COMMON/AINPUT/IORD,QSCT,QSDT
301       COMMON/PARAM/PARA(40)
302       DATA PI/3.14159/
303       DATA TOL/.0005/
304       ITH=0
305       TT=T
306       qsctt=qsct/4.
307       qsdtt=qsdt/4.
308 c      AL=para(1)
309       AL2=AL*AL
310       FLAV=4.
311       QS=AL2*EXP(T)
312
313       if(qs.lt.0.5d0) then   !!  running stops below 0.5
314           qs=0.5d0
315           t=alog(qs/al2)
316           tt=t
317       endif
318
319       IF(QS.gt.QSCTT) GO        TO 12  
320       IF(QS.lt.QSDTT) GO        TO 312  
321    11 CONTINUE
322       B0=11-2.*FLAV/3. 
323       IF(IORD)1,1,2
324 c     IF(IORD)2,2,2     !TAKE CARE !!
325     1 CONTINUE
326       ALPHA=4.*PI/B0/T
327       RETURN
328     2 CONTINUE
329       X1=4.*PI/B0
330       B1=102.-38.*FLAV/3.
331       X2=B1/B0**2
332       AS=X1/T*(1.-X2*aLOG(T)/T)
333     5 CONTINUE
334       F=-T+X1/AS-X2*aLOG(X1/AS+X2)
335       FP=-X1/AS**2*(1.-X2/(X1/AS+X2))
336       AS2=AS-F/FP
337       DEL=ABS(F/FP/AS)
338       IF(DEL-TOL)3,3,4
339     3 CONTINUE
340       ALPHA=AS2
341       IF(ITH.EQ.0) RETURN
342       GO TO (13,14,15) ITH
343     4 CONTINUE
344       AS=AS2
345       GO TO 5
346    12 ITH=1
347       T=aLOG(QSCTT/AL2)
348       GO TO 11
349    13 ALFQC4=ALPHA
350       FLAV=5.   
351       ITH=2
352       GO TO 11
353    14 ALFQC5=ALPHA
354       ITH=3
355       T=TT
356       GO TO 11
357    15 ALFQS5=ALPHA
358       ALFINV=1./ALFQS5+1./ALFQC4-1./ALFQC5
359       ALPHA=1./ALFINV
360       RETURN
361
362   311 CONTINUE
363       B0=11-2.*FLAV/3. 
364       IF(IORD)31,31,32
365 c     IF(IORD)32,32,32  !TAKE CARE !!
366    31 CONTINUE
367       ALPHA=4.*PI/B0/T
368       RETURN
369    32 CONTINUE
370       X1=4.*PI/B0
371       B1=102.-38.*FLAV/3.
372       X2=B1/B0**2
373       AS=X1/T*(1.-X2*aLOG(T)/T)
374    35 CONTINUE
375       F=-T+X1/AS-X2*aLOG(X1/AS+X2)
376       FP=-X1/AS**2*(1.-X2/(X1/AS+X2))
377       AS2=AS-F/FP
378       DEL=ABS(F/FP/AS)
379       IF(DEL-TOL)33,33,34
380    33 CONTINUE
381       ALPHA=AS2
382       IF(ITH.EQ.0) RETURN
383       GO TO (313,314,315) ITH
384    34 CONTINUE
385       AS=AS2
386       GO TO 35
387   312 ITH=1
388       T=aLOG(QSDTT/AL2)
389       GO TO 311
390   313 ALFQC4=ALPHA
391       FLAV=3.   
392       ITH=2
393       GO TO 311
394   314 ALFQC3=ALPHA
395       ITH=3
396       T=TT
397       GO TO 311
398   315 ALFQS3=ALPHA
399       ALFINV=1./ALFQS3+1./ALFQC4-1./ALFQC3
400       ALPHA=1./ALFINV
401       RETURN
402       END
403
404       SUBROUTINE WATE96
405 C*******************************************************************
406 C*****                                                         *****
407 C***** THE X(I) AND W(I) ARE THE DIRECT OUTPUT FROM A PROGRAM  *****
408 C***** USING NAG ROUTINE D01BCF TO CALCULATE THE               *****
409 C***** GAUSS-LEGENDRE WEIGHTS FOR 96 POINT INTEGRATION.        *****
410 C***** THEY AGREE TO TYPICALLY 14 DECIMAL PLACES WITH THE      *****
411 C***** TABLE IN ABRAMOWITZ & STEGUN, PAGE 919.                 *****
412 C*****                                                         *****
413 C***** ---->   PETER HARRIMAN, APRIL 3RD 1990.                 *****
414 C*****                                                         *****
415 C*******************************************************************
416       DIMENSION X(48),W(48)
417       COMMON/GAUS96/XI(96),WI(96),nterms,XX(97)
418       NTERMS=96
419
420       X( 1)=   0.01627674484960183561
421       X( 2)=   0.04881298513604856015
422       X( 3)=   0.08129749546442434360
423       X( 4)=   0.11369585011066471632
424       X( 5)=   0.14597371465489567682
425       X( 6)=   0.17809688236761733390
426       X( 7)=   0.21003131046056591064
427       X( 8)=   0.24174315616383866556
428       X( 9)=   0.27319881259104774468
429       X(10)=   0.30436494435449495954
430       X(11)=   0.33520852289262397655
431       X(12)=   0.36569686147231213885
432       X(13)=   0.39579764982890709712
433       X(14)=   0.42547898840729897474
434       X(15)=   0.45470942216774136446
435       X(16)=   0.48345797392059470382
436       X(17)=   0.51169417715466604391
437       X(18)=   0.53938810832435567233
438       X(19)=   0.56651041856139533470
439       X(20)=   0.59303236477757022282
440       X(21)=   0.61892584012546672523
441       X(22)=   0.64416340378496526886
442       X(23)=   0.66871831004391424358
443       X(24)=   0.69256453664216964528
444       X(25)=   0.71567681234896561582
445       X(26)=   0.73803064374439816819
446       X(27)=   0.75960234117664555964
447       X(28)=   0.78036904386743123629
448       X(29)=   0.80030874413913884180
449       X(30)=   0.81940031073792957139
450       X(31)=   0.83762351122818502758
451       X(32)=   0.85495903343459936363
452       X(33)=   0.87138850590929436968
453       X(34)=   0.88689451740241818933
454       X(35)=   0.90146063531585023110
455       X(36)=   0.91507142312089592706
456       X(37)=   0.92771245672230655266
457       X(38)=   0.93937033975275308073
458       X(39)=   0.95003271778443564022
459       X(40)=   0.95968829144874048809
460       X(41)=   0.96832682846326217918
461       X(42)=   0.97593917458513455843
462       X(43)=   0.98251726356301274934
463       X(44)=   0.98805412632962202890
464       X(45)=   0.99254390032376081654
465       X(46)=   0.99598184298720747465
466       X(47)=   0.99836437586317963722
467       X(48)=   0.99968950388322870559
468       W( 1)=   0.03255061449236316962
469       W( 2)=   0.03251611871386883307
470       W( 3)=   0.03244716371406427668
471       W( 4)=   0.03234382256857594104
472       W( 5)=   0.03220620479403026124
473       W( 6)=   0.03203445623199267876
474       W( 7)=   0.03182875889441101874
475       W( 8)=   0.03158933077072719007
476       W( 9)=   0.03131642559686137819
477       W(10)=   0.03101033258631386231
478       W(11)=   0.03067137612366917839
479       W(12)=   0.03029991542082762553
480       W(13)=   0.02989634413632842385
481       W(14)=   0.02946108995816795100
482       W(15)=   0.02899461415055528410
483       W(16)=   0.02849741106508543861
484       W(17)=   0.02797000761684838950
485       W(18)=   0.02741296272602931385
486       W(19)=   0.02682686672559184485
487       W(20)=   0.02621234073567250055
488       W(21)=   0.02557003600534944960
489       W(22)=   0.02490063322248370695
490       W(23)=   0.02420484179236479915
491       W(24)=   0.02348339908592633665
492       W(25)=   0.02273706965832950717
493       W(26)=   0.02196664443874448477
494       W(27)=   0.02117293989219144572
495       W(28)=   0.02035679715433347898
496       W(29)=   0.01951908114014518992
497       W(30)=   0.01866067962741165898
498       W(31)=   0.01778250231604547316
499       W(32)=   0.01688547986424539715
500       W(33)=   0.01597056290256253144
501       W(34)=   0.01503872102699521608
502       W(35)=   0.01409094177231515264
503       W(36)=   0.01312822956696188190
504       W(37)=   0.01215160467108866759
505       W(38)=   0.01116210209983888144
506       W(39)=   0.01016077053500880978
507       W(40)=   0.00914867123078384552
508       W(41)=   0.00812687692569928101
509       W(42)=   0.00709647079115442616
510       W(43)=   0.00605854550423662775
511       W(44)=   0.00501420274292825661
512       W(45)=   0.00396455433844564804
513       W(46)=   0.00291073181793626202
514       W(47)=   0.00185396078894924657
515       W(48)=   0.00079679206555731759
516       DO 1 I=1,48
517       XI(I)=-X(49-I)
518       WI(I)=W(49-I)
519       XI(I+48)=X(I)
520       WI(I+48)=W(I)
521     1 CONTINUE
522       DO 2 I=1,96
523     2 XX(I)=0.5*(XI(I)+1.)
524       XX(97)=1.0
525       EXPON=1.0
526       DO 3 I=1,96
527       YI=2.*(0.5*(1.+XI(I)))**EXPON-1.
528       WI(I)=WI(I)/(1.+XI(I))*(1.+YI)*EXPON
529       XI(I)=YI
530       XX(I)=0.5*(1.+YI)
531     3 CONTINUE
532       RETURN
533       END
534       
535       subroutine gconv(x,xp,fgdis)
536       COMMON/AINPUT/IORD,QSCT,QSDT
537       common/GAUS96/XI(96),WI(96),NTERMS,XX(97)
538       dimension xp(40)
539       logical first
540       data first/.true./
541       if(first) then
542          call wate96
543          first=.false.
544       endif
545       PI = 3.14159
546       PI2 = PI*PI
547       iord = 1
548       qsdt=8.18    !!  This is the value of 4m_c^2
549       qsct=74.0    !!  This is the value of 4m_b^2
550       cf = 4./3.
551       eta4 = xp(40)
552       T=alog(1/xp(1)**2)
553 c      AL = 0.550/(4.* 3.14159)
554       AL=ALPHA(T,xp(1))/(4.* pi)
555       rx=sqrt(x)
556       FF1=BETA_LHA(XP(2),XP(3)+1.)+XP(16)*BETA_LHA(XP(2)+1.,XP(3)+1.)+
557      XXP(23)*BETA_LHA(XP(2)+0.5,XP(3)+1.)
558       FF2=BETA_LHA(XP(2)+1.,XP(3)+1.)+
559      XXP(16)*BETA_LHA(XP(2)+2.,XP(3)+1.)+
560      XXP(23)*BETA_LHA(XP(2)+1.5,XP(3)+1.)
561       FF3=BETA_LHA(XP(5),ETA4+1.)+XP(20)*BETA_LHA(XP(5)+1.,ETA4+1.)+
562      XXP(24)*BETA_LHA(XP(5)+0.5,ETA4+1.)
563       FF4=BETA_LHA(XP(5)+1.,ETA4+1.)+XP(20)*BETA_LHA(XP(5)+2.,ETA4+1.)+
564      XXP(24)*BETA_LHA(XP(5)+1.5,ETA4+1.)
565       COEFU=2.*XP(4)/FF1
566       COEFD=   XP(4)/FF3
567 c          print *,'coefu ',coefu
568 c          print *,'coefd ',coefd
569       UV=coefu*X**XP(2)*(1.-X)**XP(3)*(1.+XP(16)*X+XP(23)*SQRT(X))
570       DV=coefd*X**XP(5)*(1.-X)**ETA4*(1.+XP(20)*X+XP(24)*SQRT(X))
571       FGDIS=al*CF*(-9.-2.*PI2/3.+alog(1.-x)*(-3.+
572      .2.*alog(1.-x)))*(UV+DV)
573      
574       DO 23 M=1,NTERMS
575       Y=0.5*(1.-X)*XI(M)+0.5*(1.+X)
576       XY=X/Y
577       UVXY=coefu*XY**XP(2)*(1.-XY)**XP(3)*(1.+XP(16)*XY
578      .+XP(23)*SQRT(XY))
579       DVXY=coefd*XY**XP(5)*(1.-XY)**ETA4*(1.+XP(20)*XY
580      .+XP(24)*SQRT(XY))
581       AL1=ALOG(1.-Y)
582       C22=CF*(6.+4.*Y-2.*(1.+Y*Y)/(1.-Y)*ALOG(Y)-2.*(1.+Y)*ALOG(1.-Y))
583       C23=CF*(-3.+4.*ALOG(1.-Y))/(1.-Y)
584
585       FGDIS=FGDIS+.5*(1.-X)*WI(M)*al*
586      .(C22*(uvxy+dvxy)+C23*(uvxy+dvxy-uv-dv))
587
588    23 CONTINUE
589       
590       return
591       end