* ***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,QCLIP) 4 * IMPLICIT NONE * INTEGER NISIG,NJSIG,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 * Y.J. Rochon, AQRX Jan 2010 * Updated the CMAM part according to approach * agreed upon and implemented in * 3D-Var-Chem in April 2006. * *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 - 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"
#include "comcst.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 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 150 I=NLSIG,1,-1 PNHUMIN = 0 PNHUMAX = 0 PNHUSAT = 0 DO 140 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 HU(J,I)= MAX(RMINHU,HU(J,I)) HUSAT= SFOQST8_CMAM(TT(J,I)+T0,PX(J,I)*100.0) PNHUMIN= PNHUMIN + IDINT(RMINHU/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 CONTINUE WRITE(NULOUT,610)PLEVS(I) ,ZHUMIN8(1,I), 1 (FLOAT(PNHUMIN)/NP)*100,ZHUMAX8(1,I),(FLOAT(PNHUMAX)/NP) & *100,(FLOAT(PNHUSAT)/NP)*100 150 CONTINUE DO 210 I=1,NLSIG DO 200 J=1,NP WRK1(J,I)=TT(J,I)+T0 200 CONTINUE 210 CONTINUE 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