LMDZ
legtri.F90
Go to the documentation of this file.
1 SUBROUTINE legtri (PSIN,KCP,KDIM,PALP)
2 
3 !**** *LEGTRI* - *LEGENDRE FUNCTIONS FOR A TRIANGULAR TRUNCATION.
4 
5 ! J.F.GELEYN E.C.M.W.F. 03/06/82.
6 
7 ! PURPOSE.
8 ! --------
9 
10 ! THIS ROUTINE COMPUTES THE VALUES *PALP* FOR THE ARGUMENT
11 ! *PSIN* OF THE NORMALISED *LEGENDRE ASSOCIATED FUNCTIONS IN THE
12 ! ORDER ((JN1=JM1,KCP),JM1=1,KCP) FOR JN=JN1-1 AND JM=JM1-1 .
13 
14 !** INTERFACE.
15 ! ----------
16 
17 ! *LEGTRI* IS CALLED FROM *RADMOD*.
18 ! THERE ARE THREE DUMMY ARGUMENTS: *PSIN* IS THE SINE OF
19 ! LATITUDE.
20 ! *KCP* IS ONE PLUS THE LIMIT
21 ! WAVE NUMBER.
22 ! *PALP* IS THE ARRAY OF THE
23 ! RESULTS.
24 
25 ! METHOD.
26 ! -------
27 
28 ! SIMPLE RECURENCE FORMULA.
29 
30 ! EXTERNALS.
31 ! ----------
32 
33 ! NONE.
34 
35 ! REFERENCE.
36 ! ----------
37 
38 ! NONE.
39 
40 
41 #include "tsmbkind.h"
42 
43 IMPLICIT NONE
44 
45 
46 ! DUMMY INTEGER SCALARS
47 integer_m :: kcp
48 integer_m :: kdim
49 
50 ! DUMMY REAL SCALARS
51 real_b :: psin
52 
53 real_b :: palp(kdim)
54 
55 ! LOCAL INTEGER SCALARS
56 integer_m :: ic, icp, ii, im, im2, jm1, jn
57 
58 ! LOCAL REAL SCALARS
59 real_b :: z2m, zcos, ze1, ze2, zf1m, zf2m, zm, zn, zn2, zre1, zsin
60 
61 
62 ! ------------------------------------------------------------------
63 
64 !* 1. PRELIMINARY SETTING.
65 ! ----------- --------
66 
67 
68 zsin=psin
69 icp=kcp
70 
71 ! ------------------------------------------------------------------
72 
73 !* 2. COMPUTATIONS.
74 ! -------------
75 
76 
77 ic=icp-1
78 zcos=sqrt(_one_-zsin**2)
79 ii=2
80 palp(1)=_one_
81 zf1m=sqrt(3._jprb)
82 palp(2)=zf1m*zsin
83 DO jm1=1,icp
84  im=jm1-1
85  zm=im
86  z2m=zm+zm
87  zre1=sqrt(z2m+3._jprb)
88  ze1=_one_/zre1
89  IF(im == 0) GO TO 201
90  zf2m=zf1m*zcos/sqrt(z2m)
91  zf1m=zf2m*zre1
92  ii=ii+1
93  palp(ii)=zf2m
94  IF(im == ic) GO TO 203
95  ii=ii+1
96  palp(ii)=zf1m*zsin
97  IF(jm1 == ic) GO TO 203
98  201 CONTINUE
99  im2=im+2
100  DO jn=im2,ic
101  zn=jn
102  zn2=zn**2
103  ze2=sqrt((4._jprb*zn2-_one_)/(zn2-zm**2))
104  ii=ii+1
105  palp(ii)=ze2*(zsin*palp(ii-1)-ze1*palp(ii-2))
106  ze1=_one_/ze2
107  ENDDO
108  203 continue
109 ENDDO
110 
111 ! ------------------------------------------------------------------
112 
113 !* 3. RETURN.
114 ! -------
115 
116 
117 RETURN
118 END SUBROUTINE legtri
119 
120 
121 
!$Id mode_top_bound COMMON comconstr omeg dissip_zref ihf INTEGER im
Definition: comconst.h:7
subroutine legtri(PSIN, KCP, KDIM, PALP)
Definition: legtri.F90:2