Ignore:
Timestamp:
Nov 21, 2025, 3:58:45 PM (3 months ago)
Author:
yann meurdesoif
Message:

GPU port of cdrag + call_atke + coef_diff_turb

YM

Location:
LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/cdrag_mod.f90

    r5873 r5876  
    99!
    1010  IMPLICIT NONE
     11 
     12  PRIVATE
     13
     14  LOGICAL, SAVE :: firstcall = .TRUE.
     15  !$OMP THREADPRIVATE(firstcall)
     16  INTEGER, SAVE :: iflag_corr_sta
     17  !$OMP THREADPRIVATE(iflag_corr_sta)
     18  INTEGER, SAVE :: iflag_corr_insta
     19  !$OMP THREADPRIVATE(iflag_corr_insta)
     20  LOGICAL, SAVE :: ok_cdrag_iter
     21  !$OMP THREADPRIVATE(ok_cdrag_iter)
     22 
     23  PUBLIC :: cdrag_init, cdrag
    1124
    1225CONTAINS
     
    1629!r original routine svn3623
    1730!
     31  SUBROUTINE cdrag_init
     32  USE ioipsl_getin_p_mod, ONLY : getin_p
     33  USE modd_csts, ONLY : ini_csts
     34  IMPLICIT NONE
     35
     36! On choisit les fonctions de stabilite utilisees au premier appel
     37!**************************************************************************
     38    IF (firstcall) THEN
     39      iflag_corr_sta=2
     40      iflag_corr_insta=2
     41      ok_cdrag_iter = .FALSE.
     42 
     43      CALL getin_p('iflag_corr_sta',iflag_corr_sta)
     44      CALL getin_p('iflag_corr_insta',iflag_corr_insta)
     45      CALL getin_p('ok_cdrag_iter',ok_cdrag_iter)
     46 
     47      CALL ini_csts
     48
     49      firstcall = .FALSE.
     50    ENDIF
     51   
     52
     53  END SUBROUTINE cdrag_init
     54
     55
    1856 SUBROUTINE cdrag(knon,  nsrf,   &
    1957     speed, t1,    q1,    zgeop1, &
     
    2159     ri_in, iri_in, &
    2260     cdm,  cdh,  zri,   pref, prain, tsol , pat1)
     61!$gpum horizontal knon
    2362
    2463  USE coare_cp_mod, ONLY: coare_cp
     
    2665  USE indice_sol_mod
    2766  USE print_control_mod, ONLY: lunout, prt_level
    28   USE ioipsl_getin_p_mod, ONLY : getin_p
    2967  USE lmdz_atke_turbulence_ini, ONLY : smmin, ric, cinf, cepsilon, pr_slope, pr_asym, pr_neut
    3068  USE yomcst_mod_h
    3169  USE clesphys_mod_h
    3270  USE yoethf_mod_h
     71  USE clc_core_cp_mod, ONLY : clc_core_cp
     72  USE ecumev6_flux_mod, ONLY : ecumev6_flux
    3373  IMPLICIT NONE
    3474! ================================================================= c
     
    169209
    170210
    171 
    172   LOGICAL, SAVE :: firstcall = .TRUE.
    173   !$OMP THREADPRIVATE(firstcall)
    174   INTEGER, SAVE :: iflag_corr_sta
    175   !$OMP THREADPRIVATE(iflag_corr_sta)
    176   INTEGER, SAVE :: iflag_corr_insta
    177   !$OMP THREADPRIVATE(iflag_corr_insta)
    178   LOGICAL, SAVE :: ok_cdrag_iter
    179   !$OMP THREADPRIVATE(ok_cdrag_iter)
    180211
    181212!===================================================================c
     
    249280!=============================================================================c
    250281
    251 ! On choisit les fonctions de stabilite utilisees au premier appel
    252 !**************************************************************************
    253  IF (firstcall) THEN
    254    iflag_corr_sta=2
    255    iflag_corr_insta=2
    256    ok_cdrag_iter = .FALSE.
    257  
    258    CALL getin_p('iflag_corr_sta',iflag_corr_sta)
    259    CALL getin_p('iflag_corr_insta',iflag_corr_insta)
    260    CALL getin_p('ok_cdrag_iter',ok_cdrag_iter)
    261 
    262    firstcall = .FALSE.
    263  ENDIF
    264 
    265282!------------------ Rajout (OT2018) --------------------
    266283!---------    Rajout pour itération sur rugosité     ----------------
     
    302319            mixte = .true.
    303320         ENDIF
     321
    304322         call clc_core_cp ( sqrt(zdu2),t1(i)-tsurf(i),q1(i)-qsurf(i),t1(i),q1(i),&
    305323             zgeop1(i)/RG, zgeop1(i)/RG,  zgeop1(i)/RG,&
     
    320338           PSSS = 0.0
    321339         ENDIF
    322          call ini_csts
    323          call ecumev6_flux( z_0m,t1(i),tsurf(i),&
     340!         call ini_csts
     341!$gpum nocall
     342          call ecumev6_flux( knon, 1, z_0m,t1(i),tsurf(i),&
    324343             q1(i),qsurf(i),sqrt(zdu2),zgeop1(i)/RG,PSSS,zgeop1(i)/RG,&
    325344             psol(i),pat1(i), OPRECIP, OPWEBB,&
     
    339358         LPRECIP = .false.
    340359         LPWG    = .false.
    341          call ini_csts
     360!ym         call ini_csts
    342361
    343362           z0m_1d = z0m
     
    345364           sqrt_zdu2_1d = sqrt(zdu2)
    346365           zgeop1_rg_1d=zgeop1(i)/RG
    347            call coare30_flux_cnrm(z0m_1d,t1(i),tsurf(i), q1(i),  &
     366
     367!$gpum nocall
     368           call coare30_flux_cnrm(1, z0m_1d,t1(i),tsurf(i), q1(i),  &
    348369               sqrt_zdu2_1d,zgeop1_rg_1d,zgeop1_rg_1d,psol(i),qsurf(i),PQSAT, &
    349370               PSFTH,PFSTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI, &
     
    362383         ENDIF
    363384         write(*,*) "debug size",size(coeffs)
     385
     386!$gpum nocall
    364387         call coare_cp(sqrt(zdu2),t1(i)-tsurf(i),q1(i)-qsurf(i),&
    365388               t1(i),q1(i),&
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/clc_core_cp.f90

    r5268 r5876  
     1MODULE clc_core_cp_mod
    12!
    23! $Id$
    34!
     5CONTAINS
     6
    47      SUBROUTINE clc_core_cp(du, dt, dq, t1, q1, &
    58                                zu, zt, zq, &
     
    231234      RETURN
    232235      END subroutine clc_core_cp
     236
     237END MODULE clc_core_cp_mod
     238
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/coare30_flux_cnrm_mod.f90

    r5285 r5876  
    1313
    1414
    15 SUBROUTINE COARE30_FLUX_CNRM(PZ0SEA,PTA,PSST,PQA,  &
     15SUBROUTINE COARE30_FLUX_CNRM(klon, PZ0SEA,PTA,PSST,PQA,  &
    1616            PVMOD,PZREF,PUREF,PPS,PQSATA,PQSAT,PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI,&
    1717            PRESA,PRAIN,PPA,PZ0HSEA,LPRECIP, LPWG,coeffs )
     
    7575
    7676!----------Rajout Olive ---------
    77 USE dimphy
    7877USE indice_sol_mod
    7978USE coare_cp_mod, ONLY: PSIFCTT=>psit_30, PSIFCTU=>psiuo
     
    8180!--------------------------------
    8281
    83 USE MODD_CSTS,       ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, &
     82USE modd_csts,       ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, &
    8483                            XLVTT, XCL, XCPD, XCPV, XRHOLW, XTT, &
    8584                            XP00
     
    111110!TYPE(SEAFLUX_t), INTENT(INOUT) :: S
    112111!
     112INTEGER, INTENT(IN)                     :: klon  ! horizontal dim
    113113REAL, DIMENSION(klon), INTENT(IN)       :: PTA   ! air temperature at atm. level (K)
    114114REAL, DIMENSION(klon), INTENT(IN)       :: PQA   ! air humidity at atm. level (kg/kg)
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/coare_cp_mod.f90

    r5268 r5876  
    6161  !taylor and yelland  zo=1200 h*(L/h)**4.5 jwave=2
    6262  !
    63   USE MODD_CSTS,       ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, &
     63  USE modd_csts,       ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, &
    6464                            XLVTT, XCL, XCPD, XCPV, XRHOLW, XTT, &
    6565                            XP00
     
    100100  real old_usr, old_tsr, old_qsr,tmp
    101101
    102   real, external :: grv
     102!  real, external :: grv
    103103  integer i,j,k
    104104!---------------- Rajout pour prendre en compte différent Z0 --------------------------------!
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/coef_diff_turb_mod.f90

    r5868 r5876  
    66! at surface(cdrag)
    77!
    8   USE clesphys_mod_h
    98    IMPLICIT NONE
    109
     
    1615       ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, &
    1716       ycoefm, ycoefh ,yq2, yeps, ydrgpro)
    18 
     17!$gpum horizontal knon
    1918    USE dimphy, ONLY : klev
    2019    USE mod_grid_phy_lmdz, ONLY: klon_glo
     
    2423    USE yoethf_mod_h
    2524    USE compbl_mod_h
     25    USE yamada4_mod, ONLY : yamada4
     26    USE ustarhb_mod, ONLY : ustarhb
     27    USE vdif_kcay_mod, ONLY : vdif_kcay
     28    USE coefkzmin_mod, ONLY : coefkzmin
     29    USE clesphys_mod_h, ONLY : ksta, ksta_ter, ok_kzmin
     30
    2631!
    2732! Calculate coefficients(ycoefm, ycoefh) for turbulent diffusion in the
     
    206211       qsurf, &
    207212       pcfm, pcfh)
    208    
     213!$gpum horizontal knon   
    209214    USE yomcst_mod_h
    210     USE dimphy
     215    USE dimphy, ONLY : klev
    211216    USE indice_sol_mod
    212217    USE print_control_mod, ONLY: prt_level, lunout
     
    254259! Quelques constantes et options:
    255260!
    256     REAL, PARAMETER :: cepdu2=0.1**2
     261    REAL, PARAMETER :: cepdu2=0.1*0.1
    257262    REAL, PARAMETER :: CKAP=0.4
    258263    REAL, PARAMETER :: cb=5.0
     
    295300    REAL gamt(2:klev)
    296301
    297     LOGICAL, SAVE :: appel1er=.TRUE.
    298     !$OMP THREADPRIVATE(appel1er)
    299302!
    300303! Fonctions thermodynamiques et fonctions d'instabilite
     
    306309    isommet=klev
    307310     
    308     IF (appel1er) THEN
    309        IF (prt_level > 9) THEN
    310           WRITE(lunout,*)'coefkz, opt_ec:', opt_ec
    311           WRITE(lunout,*)'coefkz, richum:', richum
    312           IF (richum) WRITE(lunout,*)'coefkz, ratqs:', ratqs
    313           WRITE(lunout,*)'coefkz, isommet:', isommet
    314           WRITE(lunout,*)'coefkz, tvirtu:', tvirtu
    315           appel1er = .FALSE.
    316        ENDIF
    317     ENDIF
    318311!
    319312! Initialiser les sorties
     
    496489  SUBROUTINE coefkz2(nsrf, knon, paprs, pplay,t, &
    497490       pcfm, pcfh)
    498 
     491!$gpum horizontal knon
    499492    USE yomcst_mod_h
    500 USE dimphy
     493    USE dimphy, ONLY : klev
    501494    USE indice_sol_mod
    502495
     
    522515    REAL, DIMENSION(knon, klev+1), INTENT(IN) ::  paprs
    523516    REAL, DIMENSION(knon, klev), INTENT(IN)   ::  pplay
    524     REAL, DIMENSION(knon, klev), INTENT(IN)   :: t(klon,klev)
     517    REAL, DIMENSION(knon, klev), INTENT(IN)   ::  t
    525518
    526519    REAL, DIMENSION(knon, klev), INTENT(OUT)  :: pcfm, pcfh
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/coefkzmin.f90

    r5868 r5876  
     1MODULE coefkzmin_mod
     2
     3CONTAINS
    14
    25SUBROUTINE coefkzmin(knon, ypaprs, ypplay, yu, yv, yt, yq, ycdragm, km, kn)
    3 
     6!$gpum horizontal knon
    47  USE dimphy, ONLY: klev
    58  USE yomcst_mod_h
     
    131134  RETURN
    132135END SUBROUTINE coefkzmin
     136
     137END MODULE coefkzmin_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/ecumev6_flux.f90

    r5285 r5876  
     1MODULE ecumev6_flux_mod
     2
     3CONTAINS
    14!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
    25!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
     
    47!SFX_LIC for details. version 1.
    58!     #########
    6     SUBROUTINE ECUMEV6_FLUX(PZ0SEA,PTA,PSST,PQA,PQSAT,PVMOD, &
     9    SUBROUTINE ecumev6_flux(knon, klon, PZ0SEA,PTA,PSST,PQA,PQSAT,PVMOD, &
    710                            PZREF,PSSS,PUREF,PPS,PPA,OPRECIP,OPWEBB,        &
    811                            PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE,        &
    912                            PRI,PRESA,PRAIN,PZ0HSEA,OPERTFLUX,coeffs   )
     13!$gpum horizontal knon
    1014!###############################################################################
    1115!!
     
    8488!            ------------
    8589!
    86 USE dimphy
    8790USE indice_sol_mod
    8891USE MODD_CSTS,             ONLY : XPI, XDAY, XKARMAN, XG, XP00, XSTEFAN, XRD, XRV,   &
     
    104107USE yomcst_mod_h
    105108USE clesphys_mod_h
     109USE qsat_seawater_mod,  ONLY : qsat_seawater
     110USE qsat_seawater2_mod, ONLY : qsat_seawater2
    106111IMPLICIT NONE
    107112!
    108113!       0.1. Declarations of arguments
    109114!
     115INTEGER, INTENT(IN)                  :: knon       ! horizontal indice (compressed ? )
     116INTEGER, INTENT(IN)                  :: klon       ! horizontal indice (fake == 1?)
    110117REAL, DIMENSION(klon), INTENT(IN)    :: PVMOD      ! module of wind at atm level (m/s)
    111118REAL, DIMENSION(klon), INTENT(IN)    :: PTA        ! air temperature at atm level (K)
     
    151158!
    152159! specif SB
    153 INTEGER, DIMENSION(SIZE(PTA))     :: JCV        ! convergence index
    154 INTEGER, DIMENSION(SIZE(PTA))     :: JITER      ! nb of iterations to converge
     160INTEGER, DIMENSION(klon)     :: JCV        ! convergence index
     161INTEGER, DIMENSION(klon)     :: JITER      ! nb of iterations to converge
    155162!rajout
    156 REAL, DIMENSION(SIZE(PTA))        :: PEXNA      ! Exner function at atm level
    157 REAL, DIMENSION(SIZE(PTA))       :: PEXNS      ! Exner function at atm level
    158 !
    159 REAL, DIMENSION(SIZE(PTA))        :: ZTAU       ! momentum flux (N/m2)
    160 REAL, DIMENSION(SIZE(PTA))        :: ZHF        ! sensible heat flux (W/m2)
    161 REAL, DIMENSION(SIZE(PTA))        :: ZEF        ! latent heat flux (W/m2)
    162 REAL, DIMENSION(SIZE(PTA))        :: ZTAUR      ! momentum flx due to rain (N/m2)
    163 REAL, DIMENSION(SIZE(PTA))        :: ZRF        ! sensible flx due to rain (W/m2)
    164 REAL, DIMENSION(SIZE(PTA))        :: ZEFWEBB    ! Webb corr. on latent flx (W/m2)
    165 
    166 REAL, DIMENSION(SIZE(PTA))        :: ZVMOD      ! wind intensity at atm level (m/s)
    167 REAL, DIMENSION(SIZE(PTA))        :: ZQSATA     ! sat.spec.hum. at atm level (kg/kg)
    168 REAL, DIMENSION(SIZE(PTA))        :: ZLVA       ! vap.heat of pure water at atm level (J/kg)
    169 REAL, DIMENSION(SIZE(PTA))        :: ZLVS       ! vap.heat of seawater at sea surface (J/kg)
    170 REAL, DIMENSION(SIZE(PTA))        :: ZCPA       ! specif.heat moist air (J/kg/K)
    171 REAL, DIMENSION(SIZE(PTA))        :: ZVISA      ! kinemat.visc. of dry air (m2/s)
    172 REAL, DIMENSION(SIZE(PTA))        :: ZDU        ! U   vert.grad. (real atm)
    173 REAL, DIMENSION(SIZE(PTA))        :: ZDT,ZDQ    ! T,Q vert.grad. (real atm)
    174 REAL, DIMENSION(SIZE(PTA))        :: ZDDU       ! U   vert.grad. (real atm + gust)
    175 REAL, DIMENSION(SIZE(PTA))        :: ZDDT,ZDDQ  ! T,Q vert.grad. (real atm + WL/CS)
    176 REAL, DIMENSION(SIZE(PTA))        :: ZUSR       ! velocity scaling param. (m/s)
     163REAL, DIMENSION(klon)        :: PEXNA      ! Exner function at atm level
     164REAL, DIMENSION(klon)       :: PEXNS      ! Exner function at atm level
     165!
     166REAL, DIMENSION(klon)        :: ZTAU       ! momentum flux (N/m2)
     167REAL, DIMENSION(klon)        :: ZHF        ! sensible heat flux (W/m2)
     168REAL, DIMENSION(klon)        :: ZEF        ! latent heat flux (W/m2)
     169REAL, DIMENSION(klon)        :: ZTAUR      ! momentum flx due to rain (N/m2)
     170REAL, DIMENSION(klon)        :: ZRF        ! sensible flx due to rain (W/m2)
     171REAL, DIMENSION(klon)        :: ZEFWEBB    ! Webb corr. on latent flx (W/m2)
     172
     173REAL, DIMENSION(klon)        :: ZVMOD      ! wind intensity at atm level (m/s)
     174REAL, DIMENSION(klon)        :: ZQSATA     ! sat.spec.hum. at atm level (kg/kg)
     175REAL, DIMENSION(klon)        :: ZLVA       ! vap.heat of pure water at atm level (J/kg)
     176REAL, DIMENSION(klon)        :: ZLVS       ! vap.heat of seawater at sea surface (J/kg)
     177REAL, DIMENSION(klon)        :: ZCPA       ! specif.heat moist air (J/kg/K)
     178REAL, DIMENSION(klon)        :: ZVISA      ! kinemat.visc. of dry air (m2/s)
     179REAL, DIMENSION(klon)        :: ZDU        ! U   vert.grad. (real atm)
     180REAL, DIMENSION(klon)        :: ZDT,ZDQ    ! T,Q vert.grad. (real atm)
     181REAL, DIMENSION(klon)        :: ZDDU       ! U   vert.grad. (real atm + gust)
     182REAL, DIMENSION(klon)        :: ZDDT,ZDDQ  ! T,Q vert.grad. (real atm + WL/CS)
     183REAL, DIMENSION(klon)        :: ZUSR       ! velocity scaling param. (m/s)
    177184                                                ! =friction velocity
    178 REAL, DIMENSION(SIZE(PTA))        :: ZTSR       ! temperature scaling param. (K)
    179 REAL, DIMENSION(SIZE(PTA))        :: ZQSR       ! humidity scaling param. (kg/kg)
    180 REAL, DIMENSION(SIZE(PTA))        :: ZDELTAU10N,ZDELTAT10N,ZDELTAQ10N
     185REAL, DIMENSION(klon)        :: ZTSR       ! temperature scaling param. (K)
     186REAL, DIMENSION(klon)        :: ZQSR       ! humidity scaling param. (kg/kg)
     187REAL, DIMENSION(klon)        :: ZDELTAU10N,ZDELTAT10N,ZDELTAQ10N
    181188                                                ! U,T,Q vert.grad. (10m, neutral atm)
    182 REAL, DIMENSION(SIZE(PTA))        :: ZUSR0,ZTSR0,ZQSR0    ! ITERATIVE PROCESS
    183 REAL, DIMENSION(SIZE(PTA))        :: ZDUSTO,ZDTSTO,ZDQSTO ! ITERATIVE PROCESS
    184 REAL, DIMENSION(SIZE(PTA))        :: ZPSIU,ZPSIT! PSI funct for U, T/Q (Z0 comp)
    185 REAL, DIMENSION(SIZE(PTA))        :: ZCHARN     ! Charnock parameter   (Z0 comp)
    186 
    187 REAL, DIMENSION(SIZE(PTA))        :: ZUSTAR2    ! square of friction velocity
    188 REAL, DIMENSION(SIZE(PTA))        :: ZAC        ! aerodynamical conductance
    189 REAL, DIMENSION(SIZE(PTA))        :: ZDIRCOSZW  ! orography slope cosine
     189REAL, DIMENSION(klon)        :: ZUSR0,ZTSR0,ZQSR0    ! ITERATIVE PROCESS
     190REAL, DIMENSION(klon)        :: ZDUSTO,ZDTSTO,ZDQSTO ! ITERATIVE PROCESS
     191REAL, DIMENSION(klon)        :: ZPSIU,ZPSIT! PSI funct for U, T/Q (Z0 comp)
     192REAL, DIMENSION(klon)        :: ZCHARN     ! Charnock parameter   (Z0 comp)
     193
     194REAL, DIMENSION(klon)        :: ZUSTAR2    ! square of friction velocity
     195REAL, DIMENSION(klon)        :: ZAC        ! aerodynamical conductance
     196REAL, DIMENSION(klon)        :: ZDIRCOSZW  ! orography slope cosine
    190197                                                ! (=1 on water!)
    191 REAL, DIMENSION(SIZE(PTA))        :: ZPARUN,ZPARTN,ZPARQN ! neutral parameter for U,T,Q
     198REAL, DIMENSION(klon)        :: ZPARUN,ZPARTN,ZPARQN ! neutral parameter for U,T,Q
    192199
    193200!-- rajout pour la pression saturante
    194 REAL, DIMENSION(SIZE(PPA))        :: ZFOES                                 ! [OPWEBB]
    195 REAL, DIMENSION(SIZE(PPA))        :: ZWORK1
    196 REAL, DIMENSION(SIZE(PPA))        :: ZWORK2 
    197 REAL, DIMENSION(SIZE(PPS))        :: ZWORK1A
    198 REAL, DIMENSION(SIZE(PPS))        :: ZWORK2A
     201REAL, DIMENSION(klon)        :: ZFOES                                 ! [OPWEBB]
     202REAL, DIMENSION(klon)        :: ZWORK1
     203REAL, DIMENSION(klon)        :: ZWORK2 
     204REAL, DIMENSION(klon)        :: ZWORK1A
     205REAL, DIMENSION(klon)        :: ZWORK2A
    199206!#####################
    200207
     
    202209
    203210!--------- Modif Olive -----------------
    204 REAL, DIMENSION(SIZE(PTA))        :: PRHOA
     211REAL, DIMENSION(klon)        :: PRHOA
    205212REAL, PARAMETER                   :: XUNDEF = 1.E+20
    206213
     
    244251REAL, DIMENSION(klon)    :: PQSATA      ! sea surface spec. hum. (kg/kg)
    245252
    246 REAL    :: qsat_seawater2,qsat_seawater
    247 
    248253!REAL(KIND=JPRB) :: ZHOOK_HANDLE
    249254!
     
    366371!
    367372WHERE(PSSS(:)>0.0.AND.PSSS(:)/=XUNDEF)
    368   PQSATA = QSAT_SEAWATER2 (PSST(:),PPS(:),PSSS(:))    !at sea surface
     373  PQSATA = QSAT_SEAWATER2 (knon, klon, PSST(:),PPS(:),PSSS(:))    !at sea surface
    369374ELSEWHERE
    370   PQSATA (:) = QSAT_SEAWATER (PSST(:),PPS(:))            !at sea surface
     375  PQSATA (:) = QSAT_SEAWATER (knon, klon, PSST(:),PPS(:))            !at sea surface
    371376ENDWHERE
    372377
     
    403408!PQSAT  = ZWORK2*ZWORK1 / (1.+(ZWORK2-1.)*ZWORK1)
    404409!ZQSATA = ZWORK2A*ZWORK1A / (1.+(ZWORK2A-1.)*ZWORK1A)
    405 ZQSATA = QSAT_SEAWATER (PTA(:),PPA(:))            !at sea surface
     410ZQSATA = QSAT_SEAWATER (knon, klon, PTA(:),PPA(:))            !at sea surface
    406411
    407412
     
    773778!
    774779!-------------------------------------------------------------------------------
    775    END SUBROUTINE ECUMEV6_FLUX
     780   END SUBROUTINE ecumev6_flux
     781
     782END MODULE ecumev6_flux_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/lmdz_call_atke.f90

    r5268 r5876  
    1414
    1515
    16 
     16!$gpum horizontal ngrid
    1717USE lmdz_atke_turbulence_ini, ONLY : iflag_num_atke, rg, rd
    1818USE phys_local_var_mod, ONLY: tke_shear, tke_buoy, tke_trans
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/modd_csts.f90

    r5484 r5876  
    44!SFX_LIC for details. version 1.
    55!     ###############
    6       MODULE MODD_CSTS     
     6      MODULE modd_csts     
    77!     ###############
    88!
     
    9595!$OMP THREADPRIVATE(XSURF_TINY,XSURF_TINY_12,XSURF_EPSILON)
    9696
    97 END MODULE MODD_CSTS
    98 
     97CONTAINS
     98 
     99
     100!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
     101!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
     102!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt 
     103!SFX_LIC for details. version 1.
     104!     #########
     105SUBROUTINE ini_csts
     106!     ##################
     107!
     108!!****  *INI_CSTS * - routine to initialize the module MODD_CST
     109!!
     110!!    PURPOSE
     111!!    -------
     112!       The purpose of this routine is to initialize  the physical constants
     113!     stored in  module MODD_CST.
     114!     
     115!
     116!!**  METHOD
     117!!    ------
     118!!      The physical constants are set to their numerical values
     119!!     
     120!!
     121!!    EXTERNAL
     122!!    --------
     123!!      FMLOOK : to retrieve logical unit number associated to a file
     124!!
     125!!    IMPLICIT ARGUMENTS
     126!!    ------------------
     127!!      Module MODD_CST     : contains physical constants
     128!!
     129!!    REFERENCE
     130!!    ---------
     131!!      Book2 of the documentation (module MODD_CST, routine INI_CSTS)
     132!!     
     133!!
     134!!    AUTHOR
     135!!    ------
     136!!      V. Ducrocq       * Meteo France *
     137!!
     138!!    MODIFICATIONS
     139!!    -------------
     140!!      Original    18/05/94
     141!!      J. Stein    02/01/95  add the volumic mass of liquid water
     142!!      J.-P. Pinty 13/12/95  add the water vapor pressure over solid ice
     143!!      J. Stein    29/06/97  add XTH00
     144!!      V. Masson   05/10/98  add XRHOLI
     145!!      C. Mari     31/10/00  add NDAYSEC
     146!!      V. Masson   01/03/03  add XCONDI
     147!!      A. Voldoire 01/12/09  add XTTSI, XICEC, XTTS for ESM
     148!!      J. Escobar  28/03/2014 for pb with emissivity/aerosol reset XSURF_TINY=1.0e-80 in real8 case
     149!!
     150!-------------------------------------------------------------------------------
     151!
     152!*       0.    DECLARATIONS
     153!              ------------
     154!
     155!USE MODD_CSTS
     156!
     157!
     158!USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
     159!USE PARKIND1  ,ONLY : JPRB
     160!
     161!USE MODI_INI_CTURBS
     162!
     163!USE MODI_INI_OCEAN_CSTS
     164!
     165!USE MODI_INI_SURF_CSTS
     166!
     167IMPLICIT NONE
     168
     169!-------------------------------------------------------------------------------
     170!
     171!*       1.     FUNDAMENTAL CONSTANTS
     172!               ---------------------
     173!
     174
     175!REAL(KIND=JPRB) :: ZHOOK_HANDLE
     176
     177!IF (LHOOK) CALL DR_HOOK('INI_CSTS',0,ZHOOK_HANDLE)
     178
     179!#ifdef SFX_MNH
     180!#ifdef MNH_MPI_DOUBLE_PRECISION
     181XSURF_TINY    = 1.0e-80
     182!#else
     183!XSURF_TINY    = TINY    (XSURF_TINY    )
     184!#endif
     185!#else
     186XSURF_TINY    = 1.0e-80
     187!#endif
     188XSURF_TINY_12 = SQRT    (XSURF_TINY    )
     189XSURF_EPSILON = EPSILON (XSURF_EPSILON ) * 10.0
     190
     191XPI         = 2.*ASIN(1.)
     192XKARMAN     = 0.4
     193XBOLTZ      = 1.380658E-23
     194XLIGHTSPEED = 299792458.
     195XPLANCK     = 6.6260755E-34
     196XAVOGADRO   = 6.0221367E+23
     197!
     198!-------------------------------------------------------------------------------
     199!
     200!*       2.     ASTRONOMICAL CONSTANTS
     201!               ----------------------
     202!
     203XDAY   = 86400.
     204XSIYEA = 365.25*XDAY*2.*XPI/ 6.283076
     205XSIDAY = XDAY/(1.+XDAY/XSIYEA)
     206XOMEGA = 2.*XPI/XSIDAY
     207NDAYSEC = 24*3600 ! Number of seconds in a day
     208!
     209!-------------------------------------------------------------------------------!
     210!
     211!
     212!*       3.     TERRESTRIAL GEOIDE CONSTANTS
     213!               ----------------------------
     214!
     215XRADIUS = 6371229.
     216XG      = 9.80665
     217!
     218!-------------------------------------------------------------------------------
     219!
     220!*       4.     REFERENCE PRESSURE
     221!               -------------------
     222!
     223XP00 = 1.E5
     224XTH00 = 300.
     225!-------------------------------------------------------------------------------
     226!
     227!*       5.     RADIATION CONSTANTS
     228!               -------------------
     229!
     230!JUAN OVERFLOW XSTEFAN = 2.* XPI**5 * XBOLTZ**4 / (15.* XLIGHTSPEED**2 * XPLANCK**3)
     231XSTEFAN = ( 2.* XPI**5 / 15. ) * ( (XBOLTZ / XPLANCK)* XBOLTZ ) * (XBOLTZ/(XLIGHTSPEED*XPLANCK))**2
     232XI0     = 1370.
     233!
     234!-------------------------------------------------------------------------------
     235!
     236!*       6.     THERMODYNAMIC CONSTANTS
     237!               -----------------------
     238!
     239XMD    = 28.9644E-3
     240XMV    = 18.0153E-3
     241XRD    = XAVOGADRO * XBOLTZ / XMD
     242XRV    = XAVOGADRO * XBOLTZ / XMV
     243XCPD   = 7.* XRD /2.
     244XCPV   = 4.* XRV
     245XRHOLW = 1000.
     246XRHOLI = 917.
     247XCONDI = 2.22
     248XCL    = 4.218E+3
     249XCI    = 2.106E+3
     250XTT    = 273.16
     251XTTSI  = XTT - 1.8
     252XICEC  = 0.5
     253XTTS   = XTT*(1-XICEC) + XTTSI*XICEC
     254XLVTT  = 2.5008E+6
     255XLSTT  = 2.8345E+6
     256XLMTT  = XLSTT - XLVTT
     257XESTT  = 611.14
     258XGAMW  = (XCL - XCPV) / XRV
     259XBETAW = (XLVTT/XRV) + (XGAMW * XTT)
     260XALPW  = LOG(XESTT) + (XBETAW /XTT) + (XGAMW *LOG(XTT))
     261XGAMI  = (XCI - XCPV) / XRV
     262XBETAI = (XLSTT/XRV) + (XGAMI * XTT)
     263XALPI  = LOG(XESTT) + (XBETAI /XTT) + (XGAMI *LOG(XTT))
     264!
     265!-------------------------------------------------------------------------------
     266!
     267!*       7.     TURBULENCE CONSTANTS
     268!               --------------------
     269!
     270! CALL INI_CTURBS
     271!-------------------------------------------------------------------------------
     272!
     273!*       8.     OCEAN CONSTANTS
     274!               ---------------
     275!
     276! CALL INI_OCEAN_CSTS
     277!
     278!*       9.     SURFACE CONSTANTS
     279!               -----------------
     280!
     281! CALL INI_SURF_CSTS
     282!IF (LHOOK) CALL DR_HOOK('INI_CSTS',1,ZHOOK_HANDLE)
     283!
     284!-------------------------------------------------------------------------------
     285!
     286
     287END SUBROUTINE ini_csts
     288
     289
     290
     291END MODULE modd_csts
     292
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/pbl_surface_mod.F90

    r5875 r5876  
    108108    USE dimsoil_mod_h, ONLY: nsoilmx
    109109    USE flux_arp_mod_h
     110    USE cdrag_mod, ONLY : cdrag_init
    110111    IMPLICIT NONE
    111112 
     
    260261    CALL wx_pbl_init
    261262!>jyg
     263
     264    CALL cdrag_init
    262265
    263266  END SUBROUTINE pbl_surface_init
     
    16451648    USE surf_param_mod, ONLY: eff_surf_param  !AM
    16461649    USE yomcst_mod_h
    1647     USE phys_local_var_mod, only: l_mixmin, l_mix
     1650    USE phys_local_var_mod, only: l_mixmin, l_mix, wprime
    16481651IMPLICIT NONE
    16491652
     
    20152018 runoff(:)=0. ; icesub_lic(:)=0.
    20162019 l_mixmin(:,:,:)=0.
    2017  l_mix(:,:,:)=0.
     2020 l_mix(:,:,:) = 0.
     2021 wprime(:,:,:) = 0
    20182022#ifdef ISO
    20192023zxxtevap(:,:)=0.
     
    23242328       delp, d_t_diss_x, d_t_diss_w, flux_t_x, flux_q_x, flux_t_w, flux_q_w,&
    23252329       flux_u_x, flux_v_x, flux_u_w, flux_v_w, fluxlat_x, fluxlat_w)
     2330!$gpum horizontal knon
     2331
     2332
    23262333!****************************************************************************************
    23272334! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
     
    24352442    USE lmdz_checksum, ONLY : checksum
    24362443    USE mod_phys_lmdz_para, ONLY : is_master
     2444    USE cdrag_mod, ONLY : cdrag
     2445
    24372446IMPLICIT NONE
    24382447
     
    32723281            ENDDO
    32733282            !
     3283
    32743284            CALL eff_surf_param(knon, nbtersrf, yz0m_tersrf, yfrac_tersrf, 'CDN', yz0m, zgeo1/RG)
    32753285            CALL eff_surf_param(knon, nbtersrf, yz0h_tersrf, yfrac_tersrf, 'CDN', yz0h, zgeo1/RG)
     
    32803290!
    32813291        ypblh_tmp(:)=s_pblh(ni(:))
     3292
    32823293        CALL cdrag(knon, nsrf, &
    32833294            speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), ypblh_tmp, &
     
    33273338
    33283339        ypblh_tmp(:)=s_pblh_w(ni(:))
     3340
    33293341        CALL cdrag(knon, nsrf, &
    33303342            speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),s_pblh_w,&
     
    33723384
    33733385        IF (iflag_pbl>=50) THEN
     3386
    33743387        CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm, ycdragh,yus0,yvs0,yts, &
    33753388                  yu, yv,yt,yq,ypplay,ypaprs,       &
     
    33773390
    33783391        ELSE
     3392
    33793393
    33803394        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
     
    34213435
    34223436        ELSE
     3437
    34233438
    34243439        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
     
    34563471        IF (iflag_pbl>=50) THEN
    34573472       
    3458         CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), &
    3459                 yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),      &
    3460                 ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:))
     3473
     3474        CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm_w,ycdragh_w,yus0,yvs0,yts_w, &
     3475                yu_w, yv_w, yt_w, yq_w, ypplay, ypaprs,      &
     3476                ytke_w, yeps_w, ycoefm_w, ycoefh_w)
    34613477
    34623478        ELSE
     
    35193535         &   )
    35203536       ELSE  !(iflag_split .eq.0)
     3537
    35213538        CALL climb_hq_down(knon, ni, ycoefh_x, ypaprs, ypplay, &
    35223539            ydelp, yt_x, yq_x, dtime, &
     
    35363553       ENDIF
    35373554
     3555
    35383556        CALL climb_hq_down(knon, ni, ycoefh_w, ypaprs, ypplay, &
    35393557            ydelp, yt_w, yq_w, dtime, &
     
    35583576! - Calculate the coefficients Ccoef_U, Ccoef_V, Dcoef_U and Dcoef_V
    35593577       IF (iflag_split .eq.0) THEN
     3578
    35603579        CALL climb_wind_down(knon, ni, dtime, ycoefm, ypplay, ypaprs, yt, ydelp, yu, yv, &
    35613580            CcoefU, CcoefV, DcoefU, DcoefV, &
     
    35633582            AcoefU, AcoefV, BcoefU, BcoefV)
    35643583       ELSE  ! (iflag_split .eq.0)
     3584
    35653585        CALL climb_wind_down(knon, ni, dtime, ycoefm_x, ypplay, ypaprs, yt_x, ydelp, yu_x, yv_x, &
    35663586            CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x, &
     
    35843604        enddo
    35853605     enddo
     3606
    35863607     CALL climb_qbs_down(knon, ni, ycoefqbs, ypaprs, ypplay, &
    35873608     ydelp, yt, yqbs, dtime, &
     
    36543675    ENDIF  ! ( f_z0qh_oce .ne. 1. .and. nsrf .eq.is_oce)
    36553676!
     3677
    36563678         CALL wx_pbl_prelim_0(knon, nsrf, dtime, ypplay, ypaprs, ywake_s,  &
    36573679                         yts, y_delta_tsurf, ygustiness, &
     
    36693691                         BcoefQ_x, BcoefQ_w  &
    36703692                         )
     3693
    36713694         CALL wx_pbl0_merge(knon, ypplay, ypaprs,  &
    36723695                         ywake_s, ydTs0, ydqs0, &
     
    36853708                         )
    36863709         IF (iflag_split .eq. 2 .AND. nsrf .ne. is_oce) THEN
     3710
    36873711           CALL wx_pbl_dts_merge(knon, dtime, ypplay, ypaprs, &
    36883712                           ywake_s, ybeta, ywake_cstar, ywake_dens, &
     
    37433767          ! Calculate the temperature et relative humidity at 2m and the wind at 10m
    37443768          IF (iflag_new_t2mq2m==1) THEN
    3745            CALL stdlevvarn(knon, knon, is_ter, zxli, &
     3769
     3770         CALL stdlevvarn(knon, knon, is_ter, zxli, &
    37463771               yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, &
    37473772               yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), &
     
    37493774               yn2mout)
    37503775          ELSE
     3776
    37513777          CALL stdlevvar(knon, knon, is_ter, zxli, &
    37523778               yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, &
     
    37673793     
    37683794       CASE(is_ter)
     3795
    37693796          CALL surf_land(itap, dtime, date0, jour, knon, ni,&
    37703797               rlon, rlat, yrmu0, &
     
    37923819
    37933820            IF (ifl_pbltree .ge. 1) THEN
     3821
    37943822              CALL   freinage(knon, knon, yu, yv, yt, &
    37953823                yveget,ylai, yheight,ypaprs,ypplay,y_treedrg, y_d_u_frein,y_d_v_frein)
     
    38303858          IF (landice_opt .LT. 2) THEN
    38313859             ! Land ice is treated by LMDZ and not by ORCHIDEE
     3860
    38323861             CALL surf_landice(itap, dtime, knon, ni, &
    38333862                  rlon, rlat, debut, lafin, &
     
    39163945        ENDDO
    39173946
    3918         DO j = 1, knon
    3919              k= minloc(abs(ypphii(j,:)-300),1)
    3920              ydthetadz300(j)=ydthetadz(j,k)
     3947!ym  minloc does't work on GPU (nvfortran + openacc)
     3948!        DO j = 1, knon
     3949!             k= minloc(abs(ypphii(j,:)-300),1)
     3950!             ydthetadz300(j)=ydthetadz(j,k)
     3951!        ENDDO
     3952
     3953        ydthetadz300(1:knon) = ydthetadz(1:knon,1)
     3954        DO k=2, klev
     3955          DO j=1,knon
     3956            IF (abs(ypphii(j,k)-300) < ydthetadz300(j)) ydthetadz300(j) = abs(ypphii(j,k)-300)
     3957          ENDDO
    39213958        ENDDO
     3959
    39223960        end if
    39233961
     
    39423980#endif               
    39433981         &      )
     3982!$gpum nocall
    39443983           CALL checksum("yalb_dir_new_ocean",yalb_dir_new(1:knon,:))
    39453984      IF (prt_level >=10) THEN
     
    39674006         
    39684007       CASE(is_sic)
     4008
    39694009          CALL surf_seaice( &
    39704010               rlon, rlat, ysolsw, ysollw, yalb_vis, yfder, &
     
    41354175                        BcoefQ_x, BcoefQ_w  &
    41364176                        )
     4177
    41374178        CALL wx_pbl0_merge(knon, ypplay, ypaprs,  &
    41384179                          ywake_s, ydTs0, ydqs0, &
     
    41514192                          )
    41524193          IF (iflag_split .eq. 2) THEN
     4194
    41534195            CALL wx_pbl_dts_merge(knon, dtime, ypplay, ypaprs, &
    41544196                            ywake_s, ybeta, ywake_cstar, ywake_dens, &
     
    42194261
    42204262         IF (nsrf .ne. is_oce) THEN
     4263
    42214264           CALL wx_pbl_dts_check(knon, dtime, ypplay, ypaprs, ywake_s, ybeta, iflag_split, &
    42224265                         yTs, y_delta_tsurf,  &
     
    42824325        &    )   
    42834326       ELSE  !(iflag_split .eq.0)
     4327
    42844328        CALL climb_hq_up(knon, ni, dtime, yt_x, yq_x, &
    42854329            y_flux_q1_x, y_flux_t1_x, ypaprs, ypplay, &
     
    42954339        &    )   
    42964340!
     4341
    42974342       CALL climb_hq_up(knon, ni, dtime, yt_w, yq_w, &
    42984343            y_flux_q1_w, y_flux_t1_w, ypaprs, ypplay, &
     
    43614406     y_d_t_diss(:,:)=0.
    43624407     IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
     4408
    43634409        CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
    43644410    &   ,yu,yv,yt,y_d_u,y_d_v,y_d_t,ycdragm,ytke,ycoefm,ycoefh,ycoefq,y_d_t_diss,yustar &
     
    43674413
    43684414       ELSE  !(iflag_split .eq.0)
     4415
    43694416        CALL climb_wind_up(knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, &
    43704417            AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x, &
     
    43754422     y_d_t_diss_x(:,:)=0.
    43764423     IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
     4424
    43774425        CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
    43784426    &   ,yu_x,yv_x,yt_x,y_d_u_x,y_d_v_x,y_d_t_x,ycdragm_x,ytke_x,ycoefm_x,ycoefh_x &
     
    43894437     y_d_t_diss_w(:,:)=0.
    43904438     IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
     4439
    43914440        CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
    43924441    &   ,yu_w,yv_w,yt_w,y_d_u_w,y_d_v_w,y_d_t_w,ycdragm_w,ytke_w,ycoefm_w,ycoefh_w &
     
    44034452
    44044453       IF (ok_bs) THEN
     4454
    44054455            CALL climb_qbs_up(knon, ni, dtime, yqbs, &
    44064456            y_flux_bs, ypaprs, ypplay, &
     
    48774927           CALL checksum("yq2m_bis", yq2m(1:knon))
    48784928        ELSE
     4929
    48794930        CALL stdlevvar(knon, knon, nsrf, zxli, &
    48804931            uzon, vmer, tair1, qair1, zgeo1, &
     
    48844935       ELSE  !(iflag_split .eq.0)
    48854936        IF (iflag_new_t2mq2m==1) THEN
     4937
    48864938         CALL stdlevvarn(knon, knon, nsrf, zxli, &
    48874939            uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, &
     
    48894941            yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, &
    48904942            yn2mout_x(:, :, :))
     4943
    48914944         CALL stdlevvarn(knon, knon, nsrf, zxli, &
    48924945            uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, &
     
    48954948            yn2mout_w(:, :, :))
    48964949        ELSE
     4950
    48974951        CALL stdlevvar(knon, knon, nsrf, zxli, &
    48984952            uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, &
    48994953            tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    49004954            yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, ypblh_x, rain_f, yzxtsol)
     4955
    49014956        CALL stdlevvar(knon, knon, nsrf, zxli, &
    49024957            uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, &
     
    50105065
    50115066       IF (iflag_split .eq.0) THEN
     5067
    50125068        CALL hbtm(knon, ypaprs, ypplay, &
    50135069            yt2m,yt10m,yq2m,yq10m,yustar,ywstar, &
     
    50295085          ENDIF
    50305086       ELSE  ! (iflag_split .eq.0)
     5087
    50315088        CALL HBTM(knon, ypaprs, ypplay, &
    50325089            yt2m_x,yt10m_x,yq2m_x,yq10m_x,yustar_x,ywstar_x, &
     
    50475104       print *,' Arg. de HBTM: yq_x ',yq_x(1:knon,:)
    50485105          ENDIF
     5106
    50495107        CALL HBTM(knon, ypaprs, ypplay, &
    50505108            yt2m_w,yt10m_w,yq2m_w,yq10m_w,yustar_w,ywstar_w, &
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/qsat_seawater.f90

    r5390 r5876  
     1MODULE qsat_seawater_mod
     2
     3CONTAINS
     4
    15!-------------------------------------------------------------------------------
    26!
    37!     ######################################
    4 REAL      FUNCTION QSAT_SEAWATER(PT,PP)
     8      FUNCTION QSAT_SEAWATER(knon, klon, PT,PP)
     9!$gpum horizontal knon
     10
    511!     ######################################
    612!
     
    6470!
    6571USE MODD_CSTS
    66 USE dimphy
    6772USE indice_sol_mod
    6873!
     
    7277!
    7378!
     79INTEGER, INTENT(IN) :: knon  ! horizontal indice compressed
     80INTEGER, INTENT(IN) :: klon  ! horizontal indice (fake can be 1)
    7481
    7582REAL, DIMENSION(klon), INTENT(IN)                :: PT     ! Temperature
     
    8895                                                        ! pressure
    8996                                                        ! (Pascal)
     97REAL :: QSAT_SEAWATER                                                       
    9098!
    9199REAL, DIMENSION(SIZE(PT))                   :: ZWORK1
     
    118126!
    119127!-------------------------------------------------------------------------------
     128END MODULE qsat_seawater_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/qsat_seawater2.f90

    r5390 r5876  
    1 !-------------------------------------------------------------------------------
    2 !
    3 !     ######################################
    4 REAL      FUNCTION QSAT_SEAWATER2(PT,PP,PSSS)
     1MODULE qsat_seawater2_mod
     2
     3
     4CONTAINS
     5
     6REAL   FUNCTION QSAT_SEAWATER2(knon, klon, PT,PP,PSSS)
     7!$gpum horizontal knon
     8
    59!     ######################################
    610!
     
    5054!
    5155USE MODD_CSTS, ONLY : XRD, XRV
    52 USE dimphy
    5356USE indice_sol_mod
    5457!
     
    5861!
    5962!
     63INTEGER, INTENT(IN) :: knon  ! horizontal indice compressed
     64INTEGER, INTENT(IN) :: klon  ! horizontal indice (fake can be 1)
     65
    6066REAL, DIMENSION(klon), INTENT(IN)                :: PT     ! Temperature
    6167                                                        ! (Kelvin)
     
    103109!
    104110!-------------------------------------------------------------------------------
     111
     112END MODULE qsat_seawater2_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/surf_land_bucket_hetero_mod.F90

    r5868 r5876  
    131131    REAL, DIMENSION(klon, nbtersrf) :: radsol_tersrf
    132132    REAL, DIMENSION(klon, nbtersrf) :: zri_tersrf
    133     REAL, PARAMETER                 :: klon_1D = 1
     133    INTEGER, PARAMETER              :: klon_1D = 1
    134134
    135135!
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/ustarhb.f90

    r5268 r5876  
    11
    22! $Header$
     3MODULE ustarhb_mod
     4
     5CONTAINS
    36
    47SUBROUTINE ustarhb(klon, klev, knon, u, v, cd_m, ustar)
     8!$gpum horizontal knon klon
    59  IMPLICIT NONE
    610  ! ======================================================================
     
    4246  RETURN
    4347END SUBROUTINE ustarhb
     48
     49END MODULE ustarhb_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/vdif_kcay.f90

    r5268 r5876  
    1 
    21! $Header$
     2MODULE vdif_kcay_mod
     3
     4CONTAINS
    35
    46SUBROUTINE vdif_kcay(klon,klev,ngrid,dt, g, rconst, plev, temp, zlev, zlay, u, v, &
    57    teta, cd, q2, q2diag, km, kn, ustar, l_mix)
     8
     9!$gpum horizontal ngrid klon
    610
    711  IMPLICIT NONE
     
    673677  RETURN
    674678END SUBROUTINE vdif_kcay
     679
     680END MODULE vdif_kcay_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/yamada4.f90

    r5868 r5876  
     1MODULE yamada4_mod
     2
     3CONTAINS
    14!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    25
    36SUBROUTINE yamada4(ni, nsrf, ngrid, dt, g, rconst, plev, temp, zlev, zlay, u, v, teta, &
    47    cd, tke, eps, km, kn, kq, ustar, iflag_pbl, drgpro)
    5 
     8!$gpum horizontal ngrid
    69  USE dimphy, only : klev
    710  USE phys_local_var_mod, only: wprime
     
    131134  REAL :: disseff
    132135
    133   REAL,SAVE :: rifc
    134   !$OMP THREADPRIVATE(rifc)
    135   REAL,SAVE :: seuilsm, seuilalpha
    136   !$OMP THREADPRIVATE(seuilsm, seuilalpha)
     136  REAL :: rifc
     137  REAL :: seuilsm, seuilalpha
    137138
    138139  REAL frif, falpha, fsm
     
    690691
    691692 eps(:,:)=0.
    692  wprime(1:ngrid,:,nsrf)=0.
     693!ym wprime(1:ngrid,:,nsrf)=0.
    693694 DO k=2,klev
    694695    DO ig=1,ngrid
     
    711712!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    712713SUBROUTINE vdif_q2(timestep, gravity, rconst, ngrid, plev, temp, kmy, q2)
    713 
     714!$gpum horizontal ngrid
    714715  USE dimphy, only : klev
    715716  IMPLICIT NONE
     
    800801!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    801802 SUBROUTINE vdif_q2e(timestep, gravity, rconst, ngrid, plev, temp, kmy, q2)
    802  
    803    USE dimphy, only : klev,klon
     803!$gpum horizontal ngrid 
     804   USE dimphy, only : klev
    804805  IMPLICIT NONE
    805806
     
    869870
    870871SUBROUTINE mixinglength(ni, nsrf, ngrid,iflag_pbl,pbl_lmixmin_alpha,lmixmin,zlay,zlev,u,v,q2,n2, lmix)
    871 
    872 
    873 
    874   USE dimphy, only : klev,klon
     872!$gpum horizontal ngrid
     873
     874
     875  USE dimphy, only : klev
    875876  USE yamada_ini_mod, only : l0
    876877  USE phys_state_var_mod, only: zstd, zsig, zmea
     
    882883 ! zsig: pente moyenne de le maille
    883884
    884   USE geometry_mod, only: cell_area
     885  !USE geometry_mod, only: cell_area
    885886  ! aire_cell: aire de la maille
    886887
     
    966967!..........................................................................
    967968
    968  fl(zzz, zl0, zq2, zn2) = max(min(l0(ig)*kap*zlev(ig, &
    969     k)/(kap*zlev(ig,k)+l0(ig)),0.5*sqrt(q2(ig,k))/sqrt( &
    970     max(n2(ig,k),1.E-10))), 1.E-5)
     969!ym il ya a des gens qui font du code avec leur pieds => n'importe quoi !
     970!ym fl(zzz, zl0, zq2, zn2) = max(min(l0(ig)*kap*zlev(ig, &
     971!ym    k)/(kap*zlev(ig,k)+l0(ig)),0.5*sqrt(q2(ig,k))/sqrt( &
     972!ym    max(n2(ig,k),1.E-10))), 1.E-5)
     973
     974 fl(zzz, zl0, zq2, zn2) = max(min(zl0*kap*zzz/(kap*zzz+zl0),0.5*sqrt(zq2)/sqrt(max(zn2,1.E-10))), 1.E-5)
     975
     976
    971977 
    972978! Fonction d'amortissement de la turbulence au dessus de la montagne
     
    11221128
    11231129END SUBROUTINE mixinglength
     1130
     1131END MODULE yamada4_mod
  • LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/yamada_c.F90

    r5868 r5876  
    88      USE print_control_mod, ONLY: prt_level
    99      USE ioipsl_getin_p_mod, ONLY : getin_p
    10 
     10      USE yamada4_mod, ONLY : vdif_q2
    1111      USE yomcst_mod_h
    1212IMPLICIT NONE
Note: See TracChangeset for help on using the changeset viewer.