!-------------------------------------- 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 --------------------------------------
!
*
***S/R AJHUM - PURPOSE: AJUSTER LE PROFIL D'ANALYSE D HUMIDITE.
* Calculer la temperature vituelle TV.
* S'assurer que minHU et maxHU sont a l'interieur des
* limites utilisees par le modele radiatif des TOVS(voir comtov.cdk)
* S'assurer que l'analyse HU n'est pas sur sur-saturee.
*
SUBROUTINE AJHUM(PX,TT,HU,TV,WRK1,NISIG,NJSIG,NLSIG,PLEVS, 4,4
1 HUMIN2,QCLIP)
*
IMPLICIT NONE
*
INTEGER NISIG,NJSIG,NLSIG
REAL*8 HUMIN,HUMIN2(NLSIG)
REAL*8 PLEVS(NLSIG)
REAL*8 PX(NISIG*NJSIG,NLSIG),TT(NISIG*NJSIG,NLSIG)
REAL*8 HU(NISIG*NJSIG,NLSIG),TV(NISIG*NJSIG,NLSIG)
REAL*8 WRK1(NISIG*NJSIG,NLSIG)
LOGICAL QCLIP
*
*AUTHOR - J. MORNEAU OCTOBRE 1998
*
*LANGUAGE - FORTRAN
* Revision:
* S. Pellerin *ARMA/SMC May 2000
* .Introduction into 3DVAR
*
* JM Belanger CMDA/SMC Aug 2000
* . 32 bits conversion
* (REAL*8 thermo. functions, generic intrinsic
* functions)
* P KOCLAS JAN 2003: IFIX --> IDINT (AIX)
*
* J Halle CMDA/SMC April 2003
* . replace 300 HPA limit by variable LIMLVHU, which
* defines the upper level of the moisture analysis.
*
* C Charette ARMA Jan 2004
* . Constrains HU within the limits used for the TOVS
* The limits are contained in comtov.cdk. LINTV2
* is used to interpolate to the model pressure levels.
* The extrapolation of HU above LIMLVHU is removed.
* Variable LEVS which contained the list of IP1 of
* RPN standard file is replaced by PLEVS which now
* contains the list of model levels.
* C.Charette Y.Rochon - ARMA/SMC - Sept 2004
* Options for cvcord = CMAM
* J. Halle CMDA/SMC June 2005
* Adapt for RTTOV-8
* S. Pellerin ARMA August 2008
* Call to optimized LINTV_MINMAX
*LIBRAIRIES
* - RPN SOURCE RCS /users/dor/arma/ccc/oi3d (pollux)
* - OBJET LB /home/3rarm/arma/ccc/oilib/liboa64multi_r6.2.a (sx3r)
* - ABSOLUS REP /home/3rarm/arma/ccc/oilib/abs_liboa64multi_r6.2 (sx3r)
* - OBJET LB /data/rpn02/ccc/ao_lib/liboa64_r6.2.a (sx3)
* - ABSOLUS REP /data/rpn02/ccc/ao_lib/abs_liboa64_r6.2 (sx3)
CHARACTER *(*) VERSION
PARAMETER ( VERSION = 'OASRT10N' )
*
*ARGUMENTS-
* E - PX - "ANALYSED" PRESSURE ON MODEL LEVELS
* E - TT - ANALYSED TT ON MODEL LEVES
* E - TV - TV CALCULATED ON MODEL LEVES
* E
* E - NISIG,
* NJSIG - RESOLUTION OF THE MODEL FIELDS GRID
* E - NLSIG - NUMBER OF MODEL LEVELS
* E - PLEVS - MODEL LEVELS
* E - HUMIN2 - Minimun a chaque niveau pour le champs d'essai
* E - WRK1 - WORK ARRAYS
*
*MODULES
#include "comlun.cdk"
#include "pardim.cdk"
#include "comdimo.cdk"
#include "comdim.cdk"
#include "comgem.cdk"
#include "partov.cdk"
#include "comtov.cdk"
*
REAL*8 SFOEW8, SFOQST8, SFOQST8_CMAM
EXTERNAL SFOEW8, SFOQST8, MFOTVT8, SFOQST8_CMAM
**
*-----------------------------------------------------------------------
*
INTEGER I,J,NP,L,PNHUMIN,PNHUMAX,PNHUSAT
REAL*8 ZHUMIN8(NISIG*NJSIG,NLSIG),ZHUMAX8(NISIG*NJSIG,NLSIG)
REAL*8 ZPO(NLSIG),ZMIN(NLSIG),ZMAX(NLSIG)
REAL*8 T0, HUSAT
DATA T0 /273.16/
*
*
*_____PRINT TABLE MAX/MIN OF HU (FROM COMTOV.CDK)
*
WRITE(NULOUT,618)
DO J = 1,NLEVELS1
WRITE(NULOUT,620) J,XPRES(J),OQMIN(J),OQMAX(J)
ENDDO
*
*_____INTERPOLATE MAX/MIN OF HU TO ANALYSIS LEVELS
*
NP = NISIG*NJSIG
CALL LINTV_MINMAX
(XPRES,OQMIN,OQMAX,JPLEVMAX,NLEVELS1,NP,NLSIG,PX
& ,ZHUMIN8,ZHUMAX8)
*
*
*_____IMPOSE MAX/MIN
*
WRITE(NULOUT,600) QCLIP
DO I=NLSIG,1,-1
PNHUMIN = 0
PNHUMAX = 0
PNHUSAT = 0
DO J=1,NP
IF (QCLIP) THEN
IF (cvcord(1:3).ne.'MAM') THEN
HU(J,I)= MAX ( ZHUMIN8(J,I), HU(J,I) )
PNHUMIN= PNHUMIN + IDINT(ZHUMIN8(J,I)/HU(J,I))
HU(J,I)= MIN ( ZHUMAX8(J,I) , HU(J,I))
PNHUMAX= PNHUMAX + IDINT(HU(J,I)/ZHUMAX8(J,I))
HUSAT= SFOQST8
(TT(J,I)+T0,PX(J,I)*100.0)
ELSE
HUSAT= SFOQST8_CMAM
(TT(J,I)+T0,PX(J,I)*100.0)
HU(J,I)= MAX(MIN(ZHUMIN8(J,I),HUMIN2(I)),HU(J,I))
PNHUMIN= PNHUMIN + IDINT(HUMIN2(I)/HU(J,I))
END IF
HU(J,I)= MIN ( husat , HU(J,I))
PNHUSAT= PNHUSAT + IDINT(HU(J,I)/HUSAT)
IF (cvcord(1:3).eq.'MAM') PNHUMAX=PNHUSAT
ENDIF
*
140 enddo
WRITE(NULOUT,610)PLEVS(I) ,ZHUMIN8(1,I),(FLOAT(PNHUMIN)/NP)*100
& ,ZHUMAX8(1,I),(FLOAT(PNHUMAX)/NP)*100,(FLOAT(PNHUSAT)/NP)
& *100
150 enddo
DO I=1,NLSIG
DO J=1,NP
WRK1(J,I)=TT(J,I)+T0
200 enddo
210 enddo
CALL MFOTVT8
(TV,WRK1,HU,NP,NLSIG,NP)
DO I=1,NLSIG
DO J=1,NP
TV(J,I)=TV(J,I)-T0
ENDDO
ENDDO
600 FORMAT('-AJHUM-TRAITEMENT DE L HUMIDITE L ANALYSE AVEC ',
1 'CLIP=',L3//)
610 FORMAT('-AJHUM-NIV =',E13.6,', % points .LT. HUMIN(',E10.2,') ='
& ,f7.2,', % points .GT. HUMAX(',E10.2,') =',f7.2
& ,'%, Au-dessus de HUSAT =',f7.2,'%',/)
618 FORMAT('-AJHUM-TABLEAU MIN/MAX DE HU LU DE COMTOV.CDK')
620 FORMAT('-AJHUM-NIV =',I4,', PRES =',F7.2,', HUMIN ='
& ,E10.2,', HUMAX =',E10.2)
RETURN
END