!-------------------------------------- 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 CORRLENGTH(KULSTD) 2,6
#if defined (DOC)
*
***s/r corrlength: calculate and output characteristics lenght
*
*Author : M. Buehner septembre 1998
*Revision: 001 R. Sarrazin Oct. 98
* corrections
*
* JM Belanger CMDA/SMC Jul 2000
* . 32 bits conversion
*
*Arguments
* kulstd: file number
*
#endif
IMPLICIT NONE
*implicits
#include "pardim.cdk"
#include "comdim.cdk"
#include "comlun.cdk"
#include "comcst.cdk"
#include "rpnstd.cdk"
#include "comcorr.cdk"
#include "comcse1.cdk"
#include "comgdpar.cdk"
*
* Arguments
*
INTEGER KULSTD
*
* Local Variables
*
INTEGER JK, JN
REAL*8 ZLPSI(JPNFLEV), ZLCHI(JPNFLEV), ZLTT(JPNFLEV),
+ ZLLQ(JPNFLEV)
REAL*8 ZLPS,ZLTG
REAL*8 ZLN, ZLTEMP, ZLLENGTH(4*JPNFLEV),
+ ZLA(4*JPNFLEV), ZLB(4*JPNFLEV), ZLFACT
INTEGER VFSTECR
EXTERNAL VFSTECR
*
* 1. Normalization constants
* . -----------------------
*
WRITE(NULOUT,9000)'CORRLENGTH- Computing correlation lengths'
DO JK = 1, NKSDIM
ZLA(JK) = 0.0
ZLB(JK) = 0.0
END DO
*
DO JN = 0, NTRUNC
ZLN = DBLE(JN)
ZLFACT = (2.0D0*ZLN + 1.0D0)/2.0D0
DO JK = 1, NKSDIM
ZLTEMP = (RSTDDEV(JK,JN)**2) * ZLFACT
ZLA(JK) = ZLA(JK) + ZLTEMP
IF(JN.NE.0) THEN
ZLB(JK) = ZLB(JK) - ZLTEMP*ZLN*(ZLN+1)
END IF
END DO
END DO
*
DO JK = 1, NKSDIM
if(ZLA(JK).gt.0.0.and.ZLB(JK).ne.0.0) then
ZLLENGTH(JK) = RA * SQRT(-2.0D0*ZLA(JK)/ZLB(JK))
else
ZLLENGTH(JK) = 0.0
endif
END DO
*
DO JK = 1, NFLEV
ZLPSI(JK) = ZLLENGTH(JK)
ZLCHI(JK) = ZLLENGTH(JK+NFLEV)
ZLTT(JK) = ZLLENGTH(JK+2*NFLEV)
ZLLQ(JK) = ZLLENGTH(JK+3*NFLEV)
END DO
IF(NFSTVAR2D.gt.1) THEN
ZLPS = ZLLENGTH(NKSDIM-1)
ZLTG = ZLLENGTH(NKSDIM)
ELSE
ZLPS = ZLLENGTH(NKSDIM)
ENDIF
*
* PRINT THE RESULTS
*
IF(NFSTVAR2D.gt.1) THEN
WRITE(NULOUT,FMT=9006)'CHARACTERISTIC LENGTHS (KM)',
+ 'PP', 'UC', 'UT', 'LQ', 'UP', 'TG'
DO JK = 1, NFLEV
WRITE(NULOUT,FMT=9007) JK,
S ZLPSI(JK)/1000., ZLCHI(JK)/1000., ZLTT(JK)/1000.,
S ZLLQ(JK)/1000., ZLPS/1000., ZLTG/1000.
END DO
ELSE
WRITE(NULOUT,FMT=9004)'CHARACTERISTIC LENGTHS (KM)',
+ 'PP', 'UC', 'UT', 'LQ', 'UP'
DO JK = 1, NFLEV
WRITE(NULOUT,FMT=9005) JK,
S ZLPSI(JK)/1000., ZLCHI(JK)/1000., ZLTT(JK)/1000.,
S ZLLQ(JK)/1000., ZLPS/1000.
END DO
ENDIF
*
9000 FORMAT(/,8X,A,/)
9004 FORMAT(///,'%%',12X,A,/,2x,'Level (hPa)'
S ,6x,A,8x,A
S ,12x,A,10x,A,12x,A,10x,A,10x,A)
9005 FORMAT('%%',2X,I6,8X,G12.6,4X,G12.6,4X,G12.6,4X,G12.6
S ,4X,G12.6,4X,G12.6,4X,G12.6)
9006 FORMAT(///,'%%',12X,A,/,2x,'Level (hPa)'
S ,6x,A,8x,A
S ,12x,A,10x,A,12x,A,10x,A,10x,A,10x,A)
9007 FORMAT('%%',2X,I6,8X,G12.6,4X,G12.6,4X,G12.6,4X,G12.6
S ,4X,G12.6,4X,G12.6,4X,G12.6,4X,G12.6)
*
c write out the length scales
INK = NFLEV
INI = 1
INJ = 1
CLETIKET='LONGCORR'
CLGRTYP = 'X'
IP1 = 0
IP2 = 0
IP3 = nensemble
idateo = ndatestat
IDEET = 0
IPAS = 0
IG1 = 0
IG2 = 0
IG3 = 0
IG4 = 0
IDATYP = 5
CLTYPVAR = 'X'
IPAK = -32
C
IERR = FNOM(KULSTD,CFLSTDEV,'RND',0)
IERR = FSTOUV(KULSTD,'RND')
C
CLNOMVAR = CFSTVAR(1)
IERR =VFSTECR
(ZLPSI,ZLPSI,IPAK,
S KULSTD,IDATEO,IDEET,IPAS,INI,INJ,INK,IP1,IP2,IP3,
S CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP,IG1,IG2,IG3,IG4,
S IDATYP,.TRUE.)
*
CLNOMVAR = CFSTVAR(2)
IERR =VFSTECR
(ZLCHI,ZLCHI,IPAK,
S KULSTD,IDATEO,IDEET,IPAS,INI,INJ,INK,IP1,IP2,IP3,
S CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP,IG1,IG2,IG3,IG4,
S IDATYP,.TRUE.)
*
CLNOMVAR = CFSTVAR(3)
IERR =VFSTECR
(ZLTT,ZLTT,IPAK,
S KULSTD,IDATEO,IDEET,IPAS,INI,INJ,INK,IP1,IP2,IP3,
S CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP,IG1,IG2,IG3,IG4,
S IDATYP,.TRUE.)
*
if(nfstvar.ge.4) then
CLNOMVAR = CFSTVAR(4)
IERR =VFSTECR
(ZLLQ,ZLLQ,IPAK,
S KULSTD,IDATEO,IDEET,IPAS,INI,INJ,INK,IP1,IP2,IP3,
S CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP,IG1,IG2,IG3,IG4,
S IDATYP,.TRUE.)
*
endif
CLNOMVAR = CFSTVAR2D(1)
INK=1
IERR =VFSTECR
(ZLPS,ZLPS,IPAK,
S KULSTD,IDATEO,IDEET,IPAS,INI,INJ,INK,IP1,IP2,IP3,
S CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP,IG1,IG2,IG3,IG4,
S IDATYP,.TRUE.)
*
IF(NFSTVAR2D.gt.1) THEN
CLNOMVAR = CFSTVAR2D(2)
INK=1
IERR =VFSTECR
(ZLTG,ZLTG,IPAK,
S KULSTD,IDATEO,IDEET,IPAS,INI,INJ,INK,IP1,IP2,IP3,
S CLTYPVAR,CLNOMVAR,CLETIKET,CLGRTYP,IG1,IG2,IG3,IG4,
S IDATYP,.TRUE.)
ENDIF
*
IERR = FSTFRM(KULSTD)
IERR = FCLOS(KULSTD)
C
RETURN
END