Ignore:
Timestamp:
Dec 18, 2025, 5:46:30 PM (2 weeks ago)
Author:
yann meurdesoif
Message:

GPU port of cdrag + call_atke + coef_diff_turb
Merge of commit r5876
YM

File:
1 edited

Legend:

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

    r5949 r5950  
    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, &
Note: See TracChangeset for help on using the changeset viewer.