!copyright (C) 2001 MSC-RPN COMM %%%RPNPHY%%% ***S/P LIN_PRECIP1_AD *SUBROUTINE LIN_PRECIP1_AD ( D, DSIZ, F, FSIZ, V, VSIZ, 1,3 $ G, GSIZ, GZM5, GZM, $ DT, NI, N, NK, $ KOUNT, J, ITASK ) * #include "impnone.cdk"
INTEGER :: FSIZ,NI,N,NK,KOUNT,J,ITASK,GSIZ,VSIZ,DSIZ REAL, DIMENSION (DSIZ) :: D REAL, DIMENSION (FSIZ) :: F REAL, DIMENSION (VSIZ) :: V REAL, DIMENSION (GSIZ) :: G REAL, DIMENSION (N,NK) :: GZM5, GZM REAL :: DT * *Author * J.-F. Mahfouf RPN (September 2002) * *Revision * *Object * Simplified moist physics for TL/AD versions * to produce tendencies and precipitation from * deep convection and large scale condensation * * =============== * Adjoint version * =============== * *Arguments * * - Input/Output - * F field for permanent physics variables * V volatile bus * D dynamic bus * G work space * * - Input - * DSIZ dimension of D * FSIZ dimension of F * VSIZ dimension of V * GSIZ dimension of G * * - Input - * GZM height * * - Input - * DT timestep * NI 1st horizontal dimension * N first dimension of T,Q,etc. * NK vertical dimension * KOUNT timestep number * J index of the row for which calculations are done * (used only for zonal diagnostics extraction) * ITASK task number * * *IMPLICITES #include "options.cdk"
#include "consphy.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
* *MODULES * REAL :: HEURSER,CDT1 INTEGER :: IERGET, ICPU, IK, I, K LOGICAL :: L_CONV,L_COND ** * VARIABLES ALLOCATION DYNAMIQUE * AUTOMATIC ( ILAB , REAL , (NI,NK ) ) AUTOMATIC ( ZCTE , REAL , (NI,NK ) ) AUTOMATIC ( ZCQE , REAL , (NI,NK ) ) AUTOMATIC ( ZSTE , REAL , (NI,NK ) ) AUTOMATIC ( ZSQE , REAL , (NI,NK ) ) * AUTOMATIC ( ZCTE5 , REAL , (NI,NK ) ) AUTOMATIC ( ZCQE5 , REAL , (NI,NK ) ) AUTOMATIC ( ZCCF5 , REAL , (NI,NK ) ) AUTOMATIC ( ZQPLUS5, REAL , (NI,NK ) ) AUTOMATIC ( ZTPLUS5, REAL , (NI,NK ) ) AUTOMATIC ( ZCRR5 , REAL , (NI ) ) AUTOMATIC ( ZCSR5 , REAL , (NI ) ) AUTOMATIC ( DBDT5 , REAL , (NI ) ) * FONCTION-FORMULE POUR L'ADRESSAGE IK(I,K) = (K-1)*NI + I - 1 * CDT1 = FACTDT * DT ICPU = ITASK * * POSSIBLE OPTIONS FOR MOIST PHYSICS * IF (LIN_LSC .EQ. 100) THEN L_CONV = .FALSE. L_COND = .TRUE. ELSE IF (LIN_LSC .EQ. 200) THEN L_CONV = .TRUE. L_COND = .FALSE. ELSE IF (LIN_LSC .EQ. 300) THEN L_CONV = .TRUE. L_COND = .TRUE. ELSE L_CONV = .FALSE. L_COND = .FALSE. ENDIF * * ================== * 1. TRAJECTORY PART * ================== * ******************************************************************* * CONVECTION * * ---------- * ******************************************************************* * IF (L_CONV) THEN CALL LIN_KUOSYM
(ZCTE5, ZCQE5, ILAB, ZCCF5, DBDT5, $ ZCRR5, ZCSR5, $ D(TTRAJP), D(TTRAJM), D(HUTRAJP), D(HUTRAJM), $ GZM5, D(PTRAJP), $ D(SIGM), CDT1, NI, NK ) ELSE ZCQE5(:,:) = 0.0 ZCTE5(:,:) = 0.0 ENDIF * * ******************************************************************* * APPLICATION DES TENDANCES CONVECTIVES * * ------------------------------------- * ******************************************************************* * DO K=1,NK *VDIR NODEP DO I=1,NI ZQPLUS5(I,K) = D(HUTRAJP + IK(I,K)) + $ CDT1 * ZCQE5(I,K) ZTPLUS5(I,K) = D(TTRAJP + IK(I,K)) + $ CDT1 * ZCTE5(I,K) END DO END DO * * * =============== * 2. ADJOINT PART * =============== * * * INITIALISATION TABLEAUX LOCAUX * ZCTE(:,:) = 0.0 ZCQE(:,:) = 0.0 ZSTE(:,:) = 0.0 ZSQE(:,:) = 0.0 * * ******************************************************************* * TENDANCES TOTALES POUR LES PROCESSUS HUMIDES * * -------------------------------------------- * ******************************************************************* * DO K=1,NK *VDIR NODEP DO I=1,NI ZCQE(I,K) = ZCQE(I,K) + V(HUCOND + IK(I,K)) ZSQE(I,K) = ZSQE(I,K) + V(HUCOND + IK(I,K)) V(HUCOND + IK(I,K)) = 0.0 ZCTE(I,K) = ZCTE(I,K) + V(TCOND + IK(I,K)) ZSTE(I,K) = ZSTE(I,K) + V(TCOND + IK(I,K)) V(TCOND + IK(I,K)) = 0.0 END DO END DO * ******************************************************************* * CONDENSATION STRATIFORME * * ------------------------ * ******************************************************************* * IF (L_COND) THEN CALL LIN_CONDS1_AD
(ZSTE, ZSQE, F(TLS), F(TSS), $ D(TPLUS), D(HUPLUS), D(PPLUS), $ ZTPLUS5,ZQPLUS5,D(PTRAJP), $ D(SIGM) , CDT1, NI, NK ) ENDIF * ******************************************************************* * APPLICATION DES TENDANCES CONVECTIVES * * ------------------------------------- * ******************************************************************* * DO K=1,NK *VDIR NODEP DO I=1,NI ZCQE(I,K) = ZCQE(I,K) + CDT1*D(HUPLUS + IK(I,K)) ZCTE(I,K) = ZCTE(I,K) + CDT1*D(TPLUS + IK(I,K)) END DO END DO * ******************************************************************* * CONVECTION * * ---------- * ******************************************************************* * IF (L_CONV) THEN CALL LIN_KUOSYM_AD
(ZCTE5, ZCQE5, ILAB, ZCCF5, DBDT5, $ ZCRR5, ZCSR5, $ ZCTE , ZCQE, F(TLC), F(TSC), $ D(TTRAJP), D(TTRAJM), D(HUTRAJP), D(HUTRAJM), $ GZM5, D(PTRAJP), $ D(TPLUS), D(TMOINS), D(HUPLUS), D(HUMOINS), $ GZM, D(PPLUS), $ D(SIGM), CDT1, NI, NK ) ENDIF * RETURN END SUBROUTINE LIN_PRECIP1_AD