!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
!
SUBROUTINE SULEG(KULOUT) 2,2
#if defined (DOC)
*
***s/r SULEG - Initialisation of Gaussian latitudes, weights and related
* . quantities
*
*Author : P. Gauthier *ARMA/AES June 9, 1992
*Revision:
* . L. Fillion *RPN/AES Feb 93 - Include overdimensioning
* . P. Gauthier *ARMA/MSC May 2002. Definitions of staggered grid latitude parameters
* . and weights for a quadrature adapted to it
*Arguments
* i KULOUT: unit used for optional printing
*
#endif
use modstag
, only: rmu_s, rlati_s, rwt_s, r1mu2_s, lstagwinds
S , rsqm2_s, r1qm2_s, r1mui_s, r1mua_s, nj_s, njlath_s
IMPLICIT NONE
*implicits
#include "comdim.cdk"
#include "comcst.cdk"
#include "comleg.cdk"
#include "comlun.cdk"
*
INTEGER KULOUT, JLAT, JM
REAL*8 ZPISU2
EXTERNAL GAUSS
C
WRITE(NULOUT,FMT='(//,6(" ***********"))')
WRITE(NULOUT,*)' SULEG: initialisation of Gaussian',
S ' latitudes, weights, etc...'
WRITE(NULOUT,FMT='(6(" ***********"))')
C
C 1. GAUSSIAN LATITUDES AND WEIGHTS OVER AN HEMISPHERE
C -------------------------------------------------
100 CONTINUE
CALL GAUSS8
(NJLATH,RMU(1),RWT(1),RSQM2(1),RCOLAT(1),RWOCS(1)
S ,R1QM2(1),R1MUI(1),R1MU2(1))
C
DO 101 JLAT = 1, NJLATH
RLATI(JLAT) = ASIN(RMU(JLAT))
R1MUA(JLAT) = R1SA*R1MUI(JLAT)
101 CONTINUE
C
C 2. COMPLETION FOR THE SOUTHERN HEMISPHERE
C --------------------------------------
200 CONTINUE
DO 201 JLAT = NJLATH +1, NJ
RMU(JLAT) = -RMU(2*NJLATH +1 - JLAT)
RWOCS(JLAT) = RWOCS(2*NJLATH +1 - JLAT)
R1MU2(JLAT) = R1MU2(2*NJLATH +1 - JLAT)
RSQM2(JLAT) = RSQM2(2*NJLATH +1 - JLAT)
R1QM2(JLAT) = R1QM2(2*NJLATH +1 - JLAT)
R1MUI(JLAT) = R1MUI(2*NJLATH +1 - JLAT)
R1MUA(JLAT) = R1MUA(2*NJLATH +1 - JLAT)
RWT(JLAT) = RWT(2*NJLATH +1 - JLAT)
RLATI(JLAT) = - RLATI (2*NJLATH +1 - JLAT)
201 CONTINUE
C
ZPISU2 = RPI/2.
DO 202 JLAT = 1, NJ
RCOLAT(JLAT) = ZPISU2 - RLATI(JLAT)
202 CONTINUE
C
C* 3. Overdimensioning for interpolation
C
300 CONTINUE
C
IF(NJSUR.GE.2) THEN
RMU (-1) = RMU (1)
R1MU2(-1) = R1MU2(1)
RSQM2(-1) = RSQM2(1)
R1QM2(-1) = R1QM2(1)
R1MUI(-1) = R1MUI(1)
R1MUA(-1) = R1MUA(1)
RLATI(-1) = RPI-RLATI(1)
C
RMU (0) = 1.
R1MU2(0) = 0.
RSQM2(0) = 0.
R1QM2(0) = RINFINI
R1MUI(0) = RINFINI
R1MUA(0) = RINFINI
RLATI(0) = RPI*.5
C
RMU (NJ+1) = -1.
R1MU2(NJ+1) = 0.
RSQM2(NJ+1) = 0.
R1QM2(NJ+1) = RINFINI
R1MUI(NJ+1) = RINFINI
R1MUA(NJ+1) = RINFINI
RLATI(NJ+1) = -RPI*.5
C
RMU (NJ+2) = RMU (NJ)
R1MU2(NJ+2) = R1MU2(NJ)
RSQM2(NJ+2) = RSQM2(NJ)
R1QM2(NJ+2) = R1QM2(NJ)
R1MUI(NJ+2) = R1MUI(NJ)
R1MUA(NJ+2) = R1MUA(NJ)
RLATI(NJ+2) = -RPI-RLATI(NJ)
END IF
C
C* 4. Print the content of GAUS
C
400 CONTINUE
WRITE(NULOUT,FMT='(" JLAT:",4X," RLATI",8X
S ,"RCOLAT",8X,"RMU",10X ,"RWT",12X,"RW0CS")')
DO 403 JLAT = 1, NJ
cjmb WRITE(NULOUT,FMT='(2X,I4,5(2X,G12.6))')
WRITE(NULOUT,FMT='(2X,I4,5(2X,G23.16))')
S JLAT,RLATI(JLAT),RCOLAT(JLAT), RMU(JLAT)
S ,RWT(JLAT),RWOCS(JLAT)
403 CONTINUE
C
WRITE(KULOUT,FMT='(//," JLAT:",4X,"R1MU2",8X
S ,"RSQM2",9X,"R1QM2",10X,"R1MUI",10X,"R1MUA")')
C
DO 404 JLAT = 1, NJ
cjmb WRITE(KULOUT,FMT='(2X,I4,5(2X,G12.6))')
WRITE(KULOUT,FMT='(2X,I4,5(2X,G23.16))')
S JLAT,R1MU2(JLAT),RSQM2(JLAT),R1QM2(JLAT)
S ,R1MUI(JLAT),R1MUA(JLAT)
404 CONTINUE
C
C* 5. Positioning within spectral arrays
C
DO JM = 0, NTRUNC
NIND(JM) = JM*(NTRUNC+1) - (JM*(JM-1))/2 + 1
NINDRH(JM) = JM*(NTRUNC+1) + 1
NCLM(JM) = NTRUNC - JM + 1
end do
C
WRITE(NULOUT,FMT='(/," NIND(0:NTRUNC):",/,10(2X,I6))')
S (NIND(JM),JM=0,NTRUNC)
WRITE(NULOUT,FMT='(" NINDRH(0:NTRUNC):",/,10(2X,I6))')
S (NINDRH(JM),JM=0,NTRUNC)
WRITE(NULOUT,FMT='(" NCLM(0:NTRUNC):",/,10(2X,I6))')
S (NCLM(JM),JM=0,NTRUNC)
C
C 6. Staggered grid latitude parameters
C
if (lstagwinds) then
allocate(rmu_s(njbeg:njend),rwt_s(njbeg:njend), rlati_s(njbeg:njend)
S ,r1mu2_s(njbeg:njend),rsqm2_s(njbeg:njend)
S ,r1qm2_s(njbeg:njend),r1mui_s(njbeg:njend), r1mua_s(njbeg:njend))
!
rmu_s(:) = 0.d0
rwt_s(:) = 0.d0
rlati_s(:) = 0.d0
r1mu2_s(:) = 0.d0
rsqm2_s(:) = 0.d0
r1qm2_s(:) = 0.d0
r1mui_s(:) = 0.d0
r1mua_s(:) = 0.d0
!
write(kulout, fmt='(/,4x,A,/,2x,A,6(8x,A))')
S 'Staggered grid in latitudes are defined','Lat.No.'
S ,'Lat. Stag.','Gaus Lat.','Mu','MU staggered','RWT','RWT_S'
do jlat = 1, nj-1
rlati_s(jlat) = (rlati(jlat) + rlati(jlat+1))/2.d0
rwt_s(jlat) = (rwt(jlat) + rwt(jlat+1))/2.d0
end do
!
do jlat = 1, nj-1
rmu_s(jlat) = sin(rlati_s(jlat))
r1mu2_s(jlat) = 1.d0 - rmu_s(jlat)*rmu_s(jlat)
rsqm2_s(jlat) = sqrt(r1mu2_s(jlat))
r1qm2_s(jlat) = 1.d0/rsqm2_s(jlat)
r1mui_s(jlat) = 1.d0/(r1mu2_s(jlat))
r1mua_s(jlat) = 1.d0/(ra*r1mu2_s(jlat))
end do
do jlat = 1, nj-1
write(kulout,fmt='(4x,i3,6(8x,g12.6))')jlat,rlati_S(jlat)
S , rlati(jlat), rmu_S(jlat),rmu(jlat),rwt(jlat),rwt_s(jlat)
end do
write(kulout, fmt='(/,4x,A,/,1x,A,4x,6(4x,A))')'Staggered grid parameters'
S ,'Lat.No.','MU','(1-MU**2)','RSQM2','R1QM2','R1MUI','R1MUA'
do jlat = 1, nj-1
WRITE(KULOUT,FMT='(1X,I3,6(4X,G12.6))')jlat,rmu_s(jlat),r1mu2_s(jlat)
S ,rsqm2_s(jlat),r1qm2_s(jlat),r1mui_s(jlat),r1mua_s(jlat)
end do
end if
END subroutine suleg