Ignore:
Timestamp:
Aug 19, 2025, 10:22:45 AM (9 days ago)
Author:
emillour
Message:

Venus PCM:
More cleanup and prettyfying and preparing things for OpenMP.
Turned clmain_ideal into a module; added intent() to arguments.
Added THREADPRIVATE clause for saved variables, and English comments,
in radlwsw_NewtonCool and soil routines.
EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/clmain_ideal.F

    r3884 r3898  
    1 !
    2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/clmain.F,v 1.3 2005/02/07 16:41:35 fairhead Exp $
    3 !
     1      MODULE clmain_ideal_mod
     2     
     3      IMPLICIT NONE
     4     
     5      CONTAINS
    46c
    57c
     
    1921
    2022c---------------------------------------------------------------
    21 c POUR VENUS
    22 c
    23 c Routine pour une Couche Limite ultra-simple:
    24 c  - Rayleigh friction dans la couche la plus basse, tau=3Ed=2.6e5s
     23c VENUS
     24c Routine for a very simple idealized Planetary Boundary layer scheme:
     25c  - Rayleigh friction in the lowest atmospheric layer, tau=3Ed=2.6e5s
    2526c  - Kedd=0.15 m^2/s
    2627
    2728c S Lebonnois, 10/11/08
    2829c---------------------------------------------------------------
    29       USE ioipsl
    30       use dimphy
    31       use mod_grid_phy_lmdz, only: nbp_lev
     30
     31      use dimphy, only: klon, klev
    3232      use soil_mod, only: nsoilmx
    33       use clesphys_mod
    34       use YOMCST_mod
     33
    3534      IMPLICIT none
    3635c======================================================================
    37 c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
    38 c Objet: interface de "couche limite" (diffusion verticale)
    39 c Arguments:
    40 c dtime----input-R- interval du temps (secondes)
    41 c itap-----input-I- numero du pas de temps
    42 c t--------input-R- temperature (K)
    43 c u--------input-R- vitesse u
    44 c v--------input-R- vitesse v
    45 c ts-------input-R- temperature du sol (en Kelvin)
    46 c paprs----input-R- pression a intercouche (Pa)
    47 c pplay----input-R- pression au milieu de couche (Pa)
    48 c radsol---input-R- flux radiatif net (positif vers le sol) en W/m**2
    49 c rlat-----input-R- latitude en degree
    50 c cufi-----input-R- resolution des mailles en x (m)
    51 c cvfi-----input-R- resolution des mailles en y (m)
    52 c
    53 c d_t------output-R- le changement pour "t"
    54 c d_u------output-R- le changement pour "u"
    55 c d_v------output-R- le changement pour "v"
    56 c d_ts-----output-R- le changement pour "ts"
    57 c flux_t---output-R- flux de chaleur sensible (CpT) J/m**2/s (W/m**2)
    58 c                    (orientation positive vers le bas)
    59 c flux_u---output-R- tension du vent X: (kg m/s)/(m**2 s) ou Pascal
    60 c flux_v---output-R- tension du vent Y: (kg m/s)/(m**2 s) ou Pascal
    61 c dflux_t derive du flux sensible
    62 cAA on rajoute en output yu1 et yv1 qui sont les vents dans
    63 cAA la premiere couche
    64 c======================================================================
    65 #include "iniprint.h"
    66 #include "compbl.h"
    67 c
    68       REAL dtime
    69       integer itap
    70       REAL t(klon,klev)
    71       REAL u(klon,klev), v(klon,klev)
    72       REAL paprs(klon,klev+1), pplay(klon,klev), radsol(klon)
    73 ! ADAPTATION GCM POUR CP(T)
    74       real ppk(klon,klev)
    75       REAL rlon(klon), rlat(klon), cufi(klon), cvfi(klon)
    76       REAL d_t(klon, klev)
    77       REAL d_u(klon, klev), d_v(klon, klev)
    78       REAL flux_t(klon,klev)
    79       REAL dflux_t(klon)
    80 
    81       REAL flux_u(klon,klev), flux_v(klon,klev)
    82       REAL cdragh(klon), cdragm(klon)
    83       real rmu0(klon)         ! cosinus de l'angle solaire zenithal
    84       LOGICAL debut, lafin
    85 c
    86       REAL ts(klon)
    87       REAL d_ts(klon)
    88       REAL albe(klon)
     36c
     37      REAL,INTENT(IN) :: dtime ! physics time step (s)
     38      integer,intent(in) :: itap ! physics time step counter
     39      REAL,INTENT(IN) :: t(klon,klev) ! atmospheric temperature (K)
     40      REAL,INTENT(IN) :: u(klon,klev) ! zonal wind (m/s)
     41      REAL,INTENT(IN) :: v(klon,klev) ! meridional wind (m/s)
     42      REAL,INTENT(IN) :: paprs(klon,klev+1) ! pressure at layer boundaries (Pa)
     43      REAL,INTENT(IN) :: pplay(klon,klev) ! pressure at mid-layer (Pa)
     44      REAL,INTENT(IN) :: radsol(klon) ! Net radiative flux (positive downwards) in W/m2
     45! ADAPTATION GCM FOR CP(T)
     46      real,intent(in) :: ppk(klon,klev)
     47      real,intent(in) :: rlon(klon) ! longitudes (deg)
     48      real,intent(in) :: rlat(klon) ! latitudes (deg)
     49      real,intent(in) :: cufi(klon) ! mesh resolution (m)
     50      real,intent(in) :: cvfi(klon) ! mesh resolution (m)
     51      REAL,INTENT(OUT) :: d_t(klon, klev) ! temperature increment (K)
     52      REAL,INTENT(OUT) :: d_u(klon, klev) ! zonal wind increment (m/s)
     53      REAL,INTENT(OUT) :: d_v(klon, klev) ! meridional wind increment (m/s)
     54      REAL,INTENT(OUT) :: flux_t(klon,klev) ! latent heat flux (CpT) J/m**2/s (W/m**2)
     55                                            ! (positive when downwards)
     56      REAL,INTENT(OUT) :: dflux_t(klon) ! derivative of sensible heat flux
     57
     58      REAL,INTENT(OUT) :: flux_u(klon,klev) ! zonal wind stress (kg m/s)/(m**2 s) or Pa
     59      REAL,INTENT(OUT) :: flux_v(klon,klev) ! meridional wind stress (kg m/s)/(m**2 s) or Pa
     60      REAL,INTENT(OUT) :: cdragh(klon)
     61      REAL,INTENt(OUT) :: cdragm(klon)
     62      real,intent(in) :: rmu0(klon)         ! cosine of solar zenithal angle
     63      LOGICAL,INTENT(IN) :: debut ! .true. if first call to physics
     64      LOGICAL,INTENT(IN) :: lafin ! .true. if last call to physics
     65c
     66      REAL,INTENT(IN) :: ts(klon) ! surface temperature (K)
     67      REAL,INTENT(OUT) :: d_ts(klon) ! surface temperature increment (K)
     68      REAL,INTENT(INOUT) :: albe(klon) ! albedo of the surface
    8969C
    90       REAL fder(klon)
    91       REAL sollw(klon), solsw(klon), sollwdown(klon)
     70      REAL,INTENT(IN) :: fder(klon)
     71      REAL,INTENT(IN) :: sollw(klon), solsw(klon), sollwdown(klon)
    9272cAA
    93       REAL zcoefh(klon,klev)
    94       REAL zu1(klon)
    95       REAL zv1(klon)
     73      REAL,INTENT(OUT) :: zcoefh(klon,klev)
     74      REAL,INTENT(OUT) :: zu1(klon) ! zonal wind in 1st layer (m/s)
     75      REAL,INTENT(OUT) :: zv1(klon) ! meridional wind in 1st layer (m/s)
    9676cAA
    9777c$$$ PB ajout pour soil
    98       REAL ftsoil(klon,nsoilmx)
     78      REAL,INTENT(INOUT) :: ftsoil(klon,nsoilmx) ! subsurface temperatures (K)
     79
    9980      REAL ytsoil(klon,nsoilmx)
    100 c======================================================================
    101       EXTERNAL clqh, clvent, coefkz
    10281c======================================================================
    10382      REAL yts(klon)
     
    127106      real yustar(klon),y_cd_m(klon),y_cd_h(klon)
    128107c
    129 c#include "YOMCST.h"
    130108      REAL u1lay(klon), v1lay(klon)
    131109      REAL delp(klon,klev)
     
    134112     
    135113c======================================================================
    136       REAL zx_alf1, zx_alf2 !valeur ambiante par extrapola.
     114      REAL zx_alf1, zx_alf2 ! ambient values used for extrapolation
    137115c======================================================================
    138 c
    139       LOGICAL zxli ! utiliser un jeu de fonctions simples
    140       PARAMETER (zxli=.FALSE.)
    141116c
    142117      REAL zt, zdelta, zcor
     
    148123c=========================================================
    149124         
    150       DO k = 1, klev   ! epaisseur de couche
     125      DO k = 1, klev   ! thickness of atmospheric layers
    151126      DO i = 1, klon
    152127         delp(i,k) = paprs(i,k)-paprs(i,k+1)
    153128      ENDDO
    154129      ENDDO
    155       DO i = 1, klon  ! vent de la premiere couche
     130      DO i = 1, klon  ! wind in the first layer
    156131ccc         zx_alf1 = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2))
    157132         zx_alf1 = 1.0
     
    212187      ENDDO
    213188c
    214 c chercher les indices:
     189c identify indexes:
    215190      DO j = 1, klon
    216191         ni(j) = j
     
    255230c
    256231cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    257 c RAYLEIGH FRICTION (implicit scheme) dans 1ere couche
    258 c Ref: th�se de C. Lee Oxford 2006
     232c RAYLEIGH FRICTION (implicit scheme) in the first layer
     233c Ref: PhD of C. Lee Oxford 2006
    259234cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    260235
     
    266241
    267242cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    268 c Coefficient de diffusion verticale
     243c Coefficient for vertical diffusion
    269244cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    270245
     
    272247
    273248cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    274 c calculer la diffusion des vitesses "u" et "v"
     249c compute diffusion for winds "u" and "v"
    275250cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    276251
     
    280255     s            y_d_v,y_flux_v)
    281256
    282 c pour le couplage
     257c for the coupling
    283258      ytaux = y_flux_u(:,1)
    284259      ytauy = y_flux_v(:,1)
    285260
    286261cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    287 c pas de diffusion de "q" et de "h"
     262c no diffusion for "q" and "h"
    288263cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    289264
     
    291266
    292267c=========================
    293 c FIN: tendances
     268c END: compute tendencies
    294269c=========================
    295270
     
    336311c     print*,"y_d_t apres clqh=",y_d_t(klon/2,:)
    337312
    338       RETURN
    339       END
    340 
     313      END SUBROUTINE clmain_ideal
     314
     315      END MODULE clmain_ideal_mod
Note: See TracChangeset for help on using the changeset viewer.