1 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_sp.fypp"
2 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 1
3 # 1 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../subr_list.fypp" 1
12 # 926 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../subr_list.fypp"
13 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp" 2
22 # 112 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/../instrumentation.fypp"
23 # 2 "/Users/miesch/JEDI/code/working_copy/internal/mpas-bundle/saber/src/saber/external/tools_sp.fypp" 2
65 integer,
intent(in) :: IDRT
66 integer,
intent(in) :: JMAX
67 real(kind_real),
intent(out) :: SLAT(JMAX)
68 real(kind_real),
intent(out) :: WLAT(JMAX)
71 real(kind_real):: PK(JMAX/2),PKM1(JMAX/2),PKM2(JMAX/2)
72 real(kind_real):: SLATD(JMAX/2),SP,SPMAX,EPS
73 integer,
parameter:: JZ=50
74 real(kind_real):: BZ(JZ)
75 real(kind_real):: DLT,D1,d,R
76 real(kind_real):: AWORK((JMAX+1)/2,((JMAX+1)/2))
77 real(kind_real):: BWORK(((JMAX+1)/2))
78 integer:: JH,JHE,JHO,J0
79 integer:: IPVT((JMAX+1)/2)
89 data bz / 2.4048255577_kind_real, 5.5200781103_kind_real, &
90 & 8.6537279129_kind_real, 11.7915344391_kind_real, &
91 & 14.9309177086_kind_real, 18.0710639679_kind_real, &
92 & 21.2116366299_kind_real, 24.3524715308_kind_real, &
93 & 27.4934791320_kind_real, 30.6346064684_kind_real, &
94 & 33.7758202136_kind_real, 36.9170983537_kind_real, &
95 & 40.0584257646_kind_real, 43.1997917132_kind_real, &
96 & 46.3411883717_kind_real, 49.4826098974_kind_real, &
97 & 52.6240518411_kind_real, 55.7655107550_kind_real, &
98 & 58.9069839261_kind_real, 62.0484691902_kind_real, &
99 & 65.1899648002_kind_real, 68.3314693299_kind_real, &
100 & 71.4729816036_kind_real, 74.6145006437_kind_real, &
101 & 77.7560256304_kind_real, 80.8975558711_kind_real, &
102 & 84.0390907769_kind_real, 87.1806298436_kind_real, &
103 & 90.3221726372_kind_real, 93.4637187819_kind_real, &
104 & 96.6052679510_kind_real, 99.7468198587_kind_real, &
105 & 102.888374254_kind_real, 106.029930916_kind_real, &
106 & 109.171489649_kind_real, 112.313050280_kind_real, &
107 & 115.454612653_kind_real, 118.596176630_kind_real, &
108 & 121.737742088_kind_real, 124.879308913_kind_real, &
109 & 128.020877005_kind_real, 131.162446275_kind_real, &
110 & 134.304016638_kind_real, 137.445588020_kind_real, &
111 & 140.587160352_kind_real, 143.728733573_kind_real, &
112 & 146.870307625_kind_real, 150.011882457_kind_real, &
113 & 153.153458019_kind_real, 156.295034268_kind_real /
124 r=
one/sqrt((real(jmax,kind_real)+
half)**2+c)
126 slatd(j)=cos(bz(j)*r)
129 slatd(j)=cos((bz(jz)+(j-jz)*
pi)*r)
142 pk(j)=real((2*n-1)*slatd(j)*pkm1(j)-(n-1)*pkm2(j),kind_real)/real(n,kind_real)
146 sp=pk(j)*(
one-slatd(j)**2)/(jmax*(pkm1(j)-slatd(j)*pk(j)))
148 spmax=max(spmax,abs(sp))
153 wlat(j)=(
two*(
one-slatd(j)**2))/(jmax*pkm1(j))**2
154 slat(jmax+1-j)=-slat(j)
155 wlat(jmax+1-j)=wlat(j)
159 wlat(jhe)=
two/jmax**2
161 wlat(jhe)=wlat(jhe)*n**2/(n-1)**2
164 else if(idrt==0)
then
172 slat(j)=cos(real((j-1),kind_real)*dlt)
176 awork(js,j)=cos(real(2*(js-1)*j,kind_real)*dlt)
180 bwork(js)=-d1/real((4*(js-1)**2-1),kind_real)
182 call ludcmp(awork,jho,jhe,ipvt)
183 call lubksb(awork,jho,jhe,ipvt,bwork)
189 slat(jmax+1-j)=-slat(j)
190 wlat(jmax+1-j)=wlat(j)
194 wlat(jhe)=
two*wlat(jhe)
196 else if(idrt==256)
then
204 slat(j)=cos((real(j,kind_real)-
half)*dlt)
208 awork(js,j)=cos(real(2*(js-1),kind_real)*(real(j,kind_real)-
half)*dlt)
212 bwork(js)=-d1/real(4*(js-1)**2-1,kind_real)
214 call ludcmp(awork,jho,jhe,ipvt,d)
215 call lubksb(awork,jho,jhe,ipvt,bwork)
221 slat(jmax+1-j)=-slat(j)
222 wlat(jmax+1-j)=wlat(j)
226 wlat(jhe)=
two*wlat(jhe)
244 integer,
intent(in):: NP
245 integer,
intent(in):: N
246 real(kind_real),
intent(in):: A(NP,NP)
247 real(kind_real),
intent(inout):: B(N)
248 integer,
intent(in):: INDX(N)
251 real(kind_real):: SUM
269 else if(abs(sum)>
zero)
then
298 integer,
intent(in):: N
299 integer,
intent(in):: NP
300 real(kind_real),
intent(inout):: A(NP,NP)
301 integer,
intent(out):: INDX(N)
302 real(kind_real),
intent(out),
optional:: D
305 real(kind_real),
parameter:: TINY=1.0e-20_kind_real
306 real(kind_real):: AAMAX,SUM,DUM
307 real(kind_real):: VV(N)
321 if(abs(a(i,j))>aamax) aamax=abs(a(i,j))
323 if(.NOT.(abs(aamax)>
zero)) print *,
'SINGULAR MATRIX.'
332 sum=sum-a(i,k)*a(k,j)
343 sum=sum-a(i,k)*a(k,j)
364 if(.NOT.(abs(a(j,j))>
zero)) a(j,j)=tiny
371 if(.NOT.(abs(a(n,n))>
zero)) a(n,n)=tiny