!-------------------------------------- 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 GETCMA(PVALUES,KLIST,KFLAGS,LDFLAG,PROFIL,LDERR,LDSAT, 2,7
+ KELE,KVAL,KNT,KNDAT,KVCORD,PVCORD,KINDEX,KRVAL)
IMPLICIT NONE
*
INTEGER KNDAT,KRVAL
INTEGER KELE,KVAL,KNT,KVCORD,KINDEX
INTEGER KLIST(KELE)
INTEGER KFLAGS(KELE,KVAL,KNT)
*
REAL*8 PVALUES(KELE,KVAL,KNT),PVCORD(KVAL),PROFIL(KVAL)
*
LOGICAL LDFLAG,LDSAT,LDERR
*
#if defined (DOC)
************************************************************************
*
****s/r GETCMA -GET BODY OF CMA REPORT
*
*Author . P. KOCLAS(CMC/CMSV TEL. 4628)
*Revision:
* P. KOCLAS : November 1998
* . Update quality control flags for krval for krval .ne. ncmoma ncmomp
* JM Belanger CMDA/SMC Jan 2001
* . 32 bits conversion
* . P. Koclas *CMC/CMDA Dec 2003:
* -conversion for surface wind
* . D. Anselmo *ARMA/SMC November 2004:
* -treatment of ln specific humidity
*
* PURPOSE : TRANSFER THE IN-CORE FORMAT (CMA) OF THE 3-D VARIATIONAL
* ANALYSIS TO VECTORS DIMENSIONED FOR OUTPUT TO CMC
* BURP FILES.
*
* ARGUMENTS:
* INPUT:
*
* -PVALUES : DATA BLOCK
* -KLIST : LIST OF BUFR ELEMENTS
* -KFLAGS : QUALITY CONTROL FLAGS
*
* -LDFLAG : .TRUE. --> INSERT FLAGS IN CMA
* .FALSE. --> INSERT DUMMY VALUE(2**12)
* -LDERR : .TRUE. --> INSERT OBS ERROR IN CMA (HUMSAT...)
* -LDSAT : .TRUE. --> INSERT REFERENCE PRESURE IN CMA
* -KELE : NUMBER OF ELEMENTS IN DATA BLOCK
* -KVAL : NUMBER OF LEVELS IN DATA BLOCK
* -KNT : THIRD DIMENSION OF DATA BLOCK
* -KNDAT : THIRD DIMENSION OF DATA BLOCK
* -KVCORD : BUFR ELEMENT CODE OF VERTICAL COORDINATE
* -PVCORD : VERTICAL COORDINATE VALUES EXTRACTED FROM DATA BLOCK
* -KINDEX : THIRD DIMENSION INDEX OF DATA BLOCK
* -KRVAL : INDEX OF ELEMENT IN CMA LIST
* ( 1 ---> OBS ERROR , 2 ---> O-A )
*
* OUTPUT:
* -KNDAT : AMOUNT OF DATA INSERTED IN CMA FILE
*
************************************************************************
#endif
*
#include "comdimo.cdk"
#include "comoabdy.cdk"
#include "comoahdr.cdk"
#include "comoba.cdk"
#include "cvcord.cdk"
#include "cparbrp.cdk"
#include "comcst.cdk"
#include "comnumbr.cdk"
INTEGER IFIND
INTEGER ILEM,IND,IIND,IP,IK,IFLG
INTEGER JI,JJ,JDATA
LOGICAL LLOMAFI
*
REAL*8 ZTORAD,ZFACT
REAL*8 ZERR,ZSTAT,ZPRL
real*8 padd,pmul
*
************************************************************************
* SET BAD FLAG VALUE IIND AND UNIT CONVERSION CONSTANTS
************************************************************************
*
IIND =-1
ZTORAD=RPI/180.0D0
*
ZFACT =VCONV
*
IP =NDATA + 1
IND =0
*
************************************************************************
* PUT ALL NON MISSING DATA IN CMA FILE
* EXIT IF THERE IS MORE DATA AVAILABLE THAN ALLOCATED TO CMA FILE
* DATA IS CONVERTED TO UNITS USED BY 3D-VAR ANALYSIS.
************************************************************************
*
LLOMAFI=(KRVAL .EQ. NCMOMF) .OR. (KRVAL .EQ. NCMOMA) .OR. (KRVAL .EQ. NCMOMI)
IK= KINDEX
IF (LLOMAFI) THEN
DO JI=1,KELE
ILEM=IFIND
(KLIST(JI))
DO JJ=1,KVAL
if ( ilem .le. 0 )PVALUES (JI,JJ,IK)=PPMIS
END DO
END DO
ENDIF
DO JI=1,KELE
ILEM=IFIND
(KLIST(JI))
IF ( (ILEM .GT. 0) .AND. (KLIST(JI) .NE. KVCORD) ) THEN
DO JJ=1,KVAL
if( ldsat ) profil(jj)=ROBDATA(NCMPRL,IP+IND)
IF ( PVCORD(JJ) .NE. PPMIS ) THEN
Cpik
IF ( PVALUES (JI,JJ,IK) .NE. PPMIS ) THEN
IF ( IP + IND .LE. NDATAP ) THEN
ZERR= ROBDATA(NCMOER,IP+IND)
ZSTAT= ROBDATA(KRVAL, IP+IND)
IFLG= MOBDATA(NCMFLG,IP+IND)
*
IF ( KRVAL .EQ. NCMOMF .OR. KRVAL .EQ. NCMOMA) THEN
if (MOBDATA(NCMASS,IP+IND) .EQ. 1 .OR.
& (MOBDATA(NCMVNM,IP+IND) .EQ. NEHU .and.
& ZSTAT .NE. PPMIS) .OR.
& MOBDATA(NCMVNM,IP+IND) .EQ. NEHS) then
PVALUES (JI,JJ,IK)=-ZSTAT*ZERR
else
PVALUES (JI,JJ,IK)=PPMIS
endif
ELSE
PVALUES (JI,JJ,IK)=ZSTAT
KFLAGS (JI,JJ,IK)=IFLG
ENDIF
IF ( PVALUES (JI,JJ,IK) .NE. PPMIS) then
* CONVERT TO M/S
IF ( ILEM .EQ. 1 ) THEN
padd=0.0D0
pmul=1.0D0
CALL CVT3D
(PVALUES(JI,JJ,IK),padd,pmul,1)
ENDIF
* CONVERT TO M/S
IF ( ILEM .EQ. 2 ) THEN
padd=0.0D0
pmul=1.0D0
CALL CVT3D
(PVALUES(JI,JJ,IK),padd,pmul,1)
ENDIF
* CONVERT TO Z
IF ( ILEM .EQ. 3 ) THEN
padd=0.0D0
pmul=1.0D0/RG
CALL CVT3D
(PVALUES(JI,JJ,IK),padd,pmul,1)
ENDIF
* CONVERT TO KELVIN
IF ( ILEM .EQ. 8 ) THEN
padd=0.0D0
pmul=1.0D0
CALL CVT3D
(PVALUES(JI,JJ,IK),padd,pmul,1)
ENDIF
* CONVERT TO DEGREES
IF ( ILEM .EQ. 48 .OR. ILEM .EQ. 54 ) THEN
padd=0.0D0
pmul=1.0D0/ZTORAD
CALL CVT3D
(PVALUES(JI,JJ,IK),padd,pmul,1)
ENDIF
ENDIF
IND=IND + 1
ELSE
*==================================================
KNDAT = IND
NDATA = NDATA + KNDAT
*==================================================
RETURN
ENDIF
Cpik
ENDIF
ENDIF
END DO
ENDIF
END DO
*=============================
KNDAT = IND
NDATA = NDATA + KNDAT
*=============================
*
RETURN
*
END