Changeset 4229


Ignore:
Timestamp:
Aug 1, 2022, 5:58:28 PM (2 years ago)
Author:
oboucher
Message:

Cleaning up the energy and humidity diag transport routine

Location:
LMDZ6/trunk/libf
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4224 r4229  
    50435043    ! Calculer le transport de l'eau et de l'energie (diagnostique)
    50445044    !
    5045     CALL transp (paprs,zxtsol, &
    5046          t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zphi, &
    5047          ve, vq, ue, uq, vwat, uwat)
     5045    CALL transp (paprs,zxtsol, t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zphi, &
     5046                 ue, ve, uq, vq, uwat, vwat)
    50485047    !
    50495048    !IM global posePB BEG
    50505049    IF(1.EQ.0) THEN
    50515050       !
    5052        CALL transp_lay (paprs,zxtsol, &
    5053             t_seri, q_seri, u_seri, v_seri, zphi, &
     5051       CALL transp_lay (paprs,zxtsol, t_seri, q_seri, u_seri, v_seri, zphi, &
    50545052            ve_lay, vq_lay, ue_lay, uq_lay)
    50555053       !
    50565054    ENDIF !(1.EQ.0) THEN
    50575055    !IM global posePB END
     5056    !
    50585057    ! Accumuler les variables a stocker dans les fichiers histoire:
    50595058    !
  • LMDZ6/trunk/libf/phylmd/transp.F90

    r3257 r4229  
    22! $Id$
    33
    4 SUBROUTINE transp(paprs, tsol, t, q, ql, qs, u, v, geom, vtran_e, vtran_q, utran_e, &
    5     utran_q, vtran_w, utran_w)
     4SUBROUTINE transp(paprs, tsol, t, q, ql, qs, u, v, geom, &
     5                  utran_e, vtran_e, utran_q, vtran_q, utran_w, vtran_w)
    66
    77  USE dimphy
     
    1515  include "YOMCST.h"
    1616
    17   REAL paprs(klon, klev+1), tsol(klon)
    18   REAL t(klon, klev), q(klon, klev), ql(klon, klev), qs(klon, klev)
    19   REAL u(klon, klev), v(klon, klev)
    20   REAL utran_e(klon), utran_q(klon), vtran_e(klon), vtran_q(klon)
    21   REAL utran_w(klon), vtran_w(klon)
     17  !--inputs
     18  REAL, INTENT(IN)  :: paprs(klon, klev+1), tsol(klon), geom(klon, klev)
     19  REAL, INTENT(IN)  :: t(klon, klev), q(klon, klev), ql(klon, klev), qs(klon, klev)
     20  REAL, INTENT(IN)  :: u(klon, klev), v(klon, klev)
     21  !--outputs
     22  REAL, INTENT(OUT) :: utran_e(klon), vtran_e(klon) !--lateral flux of dry static energy (J m-1 s-1)
     23  REAL, INTENT(OUT) :: utran_q(klon), vtran_q(klon) !--lateral flux of water vapour (kg m-1 s-1)
     24  REAL, INTENT(OUT) :: utran_w(klon), vtran_w(klon) !--lateral flux of total water (kg m-1 s-1)
     25  !--local variables
     26  INTEGER i, l
     27  REAL e, dm
     28  ! ------------------------------------------------------------------
    2229
    23   INTEGER i, l
    24   ! ------------------------------------------------------------------
    25   REAL geom(klon, klev), e
    26   ! ------------------------------------------------------------------
    27   DO i = 1, klon
    28     utran_e(i) = 0.0
    29     utran_q(i) = 0.0
    30     vtran_e(i) = 0.0
    31     vtran_q(i) = 0.0
    32     utran_w(i) = 0.0
    33     vtran_w(i) = 0.0
    34   END DO
     30  !--initialisations
     31  utran_e(:) = 0.0
     32  utran_q(:) = 0.0
     33  vtran_e(:) = 0.0
     34  vtran_q(:) = 0.0
     35  utran_w(:) = 0.0
     36  vtran_w(:) = 0.0
    3537
     38  !--vertical integration of diagnostics
    3639  DO l = 1, klev
    3740    DO i = 1, klon
     41      dm= (paprs(i,l)-paprs(i,l+1))/RG  !--mass of layer kg m-2
     42      !--moist static energy
    3843!      e = rcpd*t(i, l) + rlvtt*q(i, l) + geom(i, l)
     44      !--dry static energy
    3945      e = rcpd*t(i, l) + geom(i, l)
    40       utran_e(i) = utran_e(i) + u(i, l)*e*(paprs(i,l)-paprs(i,l+1))/rg
    41       utran_q(i) = utran_q(i) + u(i, l)*q(i, l)*(paprs(i,l)-paprs(i,l+1))/rg
    42       utran_w(i) = utran_w(i) + u(i, l)*(q(i, l)+ql(i, l)+qs(i, l))           &
    43                                        *(paprs(i,l)-paprs(i,l+1))/rg
    44       vtran_e(i) = vtran_e(i) + v(i, l)*e*(paprs(i,l)-paprs(i,l+1))/rg
    45       vtran_q(i) = vtran_q(i) + v(i, l)*q(i, l)*(paprs(i,l)-paprs(i,l+1))/rg
    46       vtran_w(i) = vtran_w(i) + v(i, l)*(q(i, l)+ql(i, l)+qs(i, l))           &
    47                                        *(paprs(i,l)-paprs(i,l+1))/rg
    48     END DO
    49   END DO
     46      utran_e(i) = utran_e(i) + u(i, l)*e*dm
     47      vtran_e(i) = vtran_e(i) + v(i, l)*e*dm
     48      !--water vapour
     49      utran_q(i) = utran_q(i) + u(i, l)*q(i,l)*dm
     50      vtran_q(i) = vtran_q(i) + v(i, l)*q(i,l)*dm
     51      !--total water
     52      utran_w(i) = utran_w(i) + u(i, l)*(q(i,l)+ql(i,l)+qs(i,l))*dm
     53      vtran_w(i) = vtran_w(i) + v(i, l)*(q(i,l)+ql(i,l)+qs(i,l))*dm
     54    ENDDO
     55  ENDDO
    5056
    5157  RETURN
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r4170 r4229  
    63626362    ! Calculer le transport de l'eau et de l'energie (diagnostique)
    63636363    !
    6364     CALL transp (paprs,zxtsol, &
    6365          t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zphi, &
    6366          ve, vq, ue, uq, vwat, uwat)
     6364    CALL transp (paprs, zxtsol, t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zphi, &
     6365                 ue, ve, uq, vq, uwat, vwat)
    63676366    !
    63686367    !IM global posePB BEG
     
    63756374    ENDIF !(1.EQ.0) THEN
    63766375    !IM global posePB END
     6376    !
    63776377    ! Accumuler les variables a stocker dans les fichiers histoire:
    63786378    !
Note: See TracChangeset for help on using the changeset viewer.