Ignore:
Timestamp:
Mar 29, 2023, 3:14:27 PM (20 months ago)
Author:
lguez
Message:

Sync latest trunk changes to branch LMDZ_ECRad

Location:
LMDZ6/branches/LMDZ_ECRad
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ_ECRad

  • LMDZ6/branches/LMDZ_ECRad/libf/phylmdiso/pbl_surface_mod.F90

    r4143 r4482  
    1414  USE mod_grid_phy_lmdz,   ONLY : klon_glo
    1515  USE ioipsl
    16   USE surface_data,        ONLY : type_ocean, ok_veget
     16  USE surface_data,        ONLY : type_ocean, ok_veget, landice_opt
    1717  USE surf_land_mod,       ONLY : surf_land
    1818  USE surf_landice_mod,    ONLY : surf_landice
     
    2323  USE climb_wind_mod,      ONLY : climb_wind_down, climb_wind_up
    2424  USE coef_diff_turb_mod,  ONLY : coef_diff_turb
     25  USE atke_exchange_coeff_mod, ONLY :  atke_compute_km_kh
    2526  USE ioipsl_getin_p_mod,  ONLY : getin_p
    2627  USE cdrag_mod
     
    406407#endif
    407408    USE ioipsl_getin_p_mod, ONLY : getin_p
    408     use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, zsig, zmea
    409     use phys_output_var_mod, only: dter, dser, tkt, tks, taur, sss
     409    use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, dter, &
     410         dser, dt_ds, zsig, zmea
     411    use phys_output_var_mod, only: tkt, tks, taur, sss
    410412#ifdef CPP_XIOS
    411413    USE wxios, ONLY: missing_val
     
    10281030    REAL, DIMENSION(klon)              :: yrmu0
    10291031    ! Martin
    1030 
    1031     REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, ydser, &
    1032          ytkt, ytks, ytaur, ysss
    1033     ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, tkt, tks,
    1034     ! taur, sss on ocean points
     1032    REAL, DIMENSION(klon)              :: yri0
     1033    REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, &
     1034         ydser, ydt_ds, ytkt, ytks, ytaur, ysss
     1035    ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser,
     1036    ! dt_ds, tkt, tks, taur, sss on ocean points
    10351037
    10361038#ifdef ISO
     
    12771279
    12781280    ytke=0.
     1281    yri0(:)=0.
    12791282!FC
    12801283    y_treedrg=0.
     
    18131816             ydelta_sal(:knon) = delta_sal(ni(:knon))
    18141817             ydelta_sst(:knon) = delta_sst(ni(:knon))
     1818             ydter(:knon) = dter(ni(:knon))
     1819             ydser(:knon) = dser(ni(:knon))
     1820             ydt_ds(:knon) = dt_ds(ni(:knon))
    18151821          end if
    18161822         
     
    18441850        CALL cdrag(knon, nsrf, &
    18451851            speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1),&
    1846             yts, yqsurf, yz0m, yz0h, &
     1852            yts, yqsurf, yz0m, yz0h, yri0, 0, &
    18471853            ycdragm, ycdragh, zri1, pref )
    18481854
     
    18781884            CALL cdrag(knon, nsrf, &
    18791885            speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1),&
    1880             yts_x, yqsurf_x, yz0m, yz0h, &
     1886            yts_x, yqsurf_x, yz0m, yz0h, yri0, 0, &
    18811887            ycdragm_x, ycdragh_x, zri1_x, pref_x )
    18821888
     
    19051911        CALL cdrag(knon, nsrf, &
    19061912            speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),&
    1907             yts_w, yqsurf_w, yz0m, yz0h, &
     1913            yts_w, yqsurf_w, yz0m, yz0h, yri0, 0, &
    19081914            ycdragm_w, ycdragh_w, zri1_w, pref_w )
    19091915!
     
    19471953
    19481954       ENDIF
     1955
     1956        IF (iflag_pbl>=50) THEN
     1957
     1958        CALL atke_compute_km_kh(knon,klev,yu,yv,yt, &
     1959             ypplay,ypaprs,ytke,ycoefm, ycoefh)
     1960
     1961        ELSE
     1962
     1963
    19491964        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    19501965            ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, &
     
    19621977       ENDDO
    19631978       ENDIF
     1979
     1980       ENDIF ! iflag_pbl >= 50
     1981
    19641982        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh
    19651983!
     
    19771995
    19781996       ENDIF
     1997
     1998        IF (iflag_pbl>=50) THEN
     1999
     2000        CALL atke_compute_km_kh(knon,klev,yu_x,yv_x,yt_x, &
     2001             ypplay,ypaprs,ytke_x,ycoefm_x, ycoefh_x)
     2002
     2003        ELSE
     2004
     2005
    19792006        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    19802007            ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf_x, ycdragm_x, &
     
    19922019       ENDDO
    19932020       ENDIF
     2021
     2022       ENDIF ! iflag_pbl >= 50
     2023
    19942024        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x
    19952025!
     
    20052035      print *,' args coef_diff_turb: ytke_w ', ytke_w
    20062036       ENDIF
     2037
     2038        IF (iflag_pbl>=50) THEN
     2039
     2040        CALL atke_compute_km_kh(knon,klev,yu_w,yv_w,yt_w, &
     2041             ypplay,ypaprs,ytke_w,ycoefm_w, ycoefh_w)
     2042
     2043        ELSE
     2044
     2045
    20072046        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    20082047            ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf_w, ycdragm_w, &
     
    20192058       ENDDO
    20202059       ENDIF
     2060
     2061       ENDIF ! iflag_pbl >= 50
     2062
    20212063        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w
    20222064!
     
    23822424       CASE(is_lic)
    23832425          ! Martin
    2384           CALL surf_landice(itap, dtime, knon, ni, &
    2385                rlon, rlat, debut, lafin, &
    2386                yrmu0, ylwdown, yalb, zgeo1, &
    2387                ysolsw, ysollw, yts, ypplay(:,1), &
    2388 !!jyg               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2389                ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
    2390                AcoefH, AcoefQ, BcoefH, BcoefQ, &
    2391                AcoefU, AcoefV, BcoefU, BcoefV, &
    2392                ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2393                ysnow, yqsurf, yqsol, yagesno, &
    2394                ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
    2395                ytsurf_new, y_dflux_t, y_dflux_q, &
    2396                yzmea, yzsig, ycldt, &
    2397                ysnowhgt, yqsnow, ytoice, ysissnow, &
    2398                yalb3_new, yrunoff, &
    2399                y_flux_u1, y_flux_v1 &
    2400 #ifdef ISO
    2401            &    ,yxtrain_f, yxtsnow_f,yxt1,yRland_ice &
    2402            &    ,yxtsnow,yxtsol,yxtevap &
     2426          IF (landice_opt .LT. 2) THEN
     2427             ! Land ice is treated by LMDZ and not by ORCHIDEE
     2428             
     2429             CALL surf_landice(itap, dtime, knon, ni, &
     2430                  rlon, rlat, debut, lafin, &
     2431                  yrmu0, ylwdown, yalb, zgeo1, &
     2432                  ysolsw, ysollw, yts, ypplay(:,1), &
     2433                  !!jyg               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
     2434                  ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2435                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
     2436                  AcoefU, AcoefV, BcoefU, BcoefV, &
     2437                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
     2438                  ysnow, yqsurf, yqsol, yagesno, &
     2439                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
     2440                  ytsurf_new, y_dflux_t, y_dflux_q, &
     2441                  yzmea, yzsig, ycldt, &
     2442                  ysnowhgt, yqsnow, ytoice, ysissnow, &
     2443                  yalb3_new, yrunoff, &
     2444                  y_flux_u1, y_flux_v1 &
     2445#ifdef ISO
     2446                  &    ,yxtrain_f, yxtsnow_f,yxt1,yRland_ice &
     2447                  &    ,yxtsnow,yxtsol,yxtevap &
    24032448#endif             
    2404            &    )
    2405 
    2406 !jyg<
    2407 !!          alb3_lic(:)=0.
    2408 !>jyg
    2409           DO j = 1, knon
    2410              i = ni(j)
    2411              alb3_lic(i) = yalb3_new(j)
    2412              snowhgt(i)   = ysnowhgt(j)
    2413              qsnow(i)     = yqsnow(j)
    2414              to_ice(i)    = ytoice(j)
    2415              sissnow(i)   = ysissnow(j)
    2416              runoff(i)    = yrunoff(j)
    2417           ENDDO
    2418           ! Martin
    2419 ! Special DICE MPL 05082013 puis BOMEX MPL 20150410
    2420        IF (ok_prescr_ust) THEN
    2421           DO j=1,knon
    2422           y_flux_u1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yu(j,1)*ypplay(j,1)/RD/yt(j,1)
    2423           y_flux_v1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yv(j,1)*ypplay(j,1)/RD/yt(j,1)
    2424           ENDDO
    2425       ENDIF
    2426 
     2449                  &    )
     2450             
     2451             !jyg<
     2452             !!          alb3_lic(:)=0.
     2453             !>jyg
     2454             DO j = 1, knon
     2455                i = ni(j)
     2456                alb3_lic(i) = yalb3_new(j)
     2457                snowhgt(i)   = ysnowhgt(j)
     2458                qsnow(i)     = yqsnow(j)
     2459                to_ice(i)    = ytoice(j)
     2460                sissnow(i)   = ysissnow(j)
     2461                runoff(i)    = yrunoff(j)
     2462             ENDDO
     2463             ! Martin
     2464             ! Special DICE MPL 05082013 puis BOMEX MPL 20150410
     2465             IF (ok_prescr_ust) THEN
     2466                DO j=1,knon
     2467                   y_flux_u1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yu(j,1)*ypplay(j,1)/RD/yt(j,1)
     2468                   y_flux_v1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yv(j,1)*ypplay(j,1)/RD/yt(j,1)
     2469                ENDDO
     2470             ENDIF
     2471             
    24272472#ifdef ISOVERIF
    2428         do j=1,knon
    2429           do ixt=1,ntraciso
    2430             call iso_verif_noNaN(yxtevap(ixt,j), &
    2431          &      'pbl_surface 1095a: apres surf_landice')
    2432             call iso_verif_noNaN(yxtsol(ixt,j), &
    2433          &      'pbl_surface 1095b: apres surf_landice')
    2434           enddo
    2435         enddo
     2473             do j=1,knon
     2474                do ixt=1,ntraciso
     2475                   call iso_verif_noNaN(yxtevap(ixt,j), &
     2476                        &      'pbl_surface 1095a: apres surf_landice')
     2477                   call iso_verif_noNaN(yxtsol(ixt,j), &
     2478                        &      'pbl_surface 1095b: apres surf_landice')
     2479                enddo
     2480             enddo
    24362481#endif
    24372482#ifdef ISOVERIF
    2438         !write(*,*) 'pbl_surface_mod 1060: sortie surf_landice'
    2439         do j=1,knon
    2440           if (iso_eau.gt.0) then     
    2441                  call iso_verif_egalite(yxtsnow(iso_eau,j), &
    2442      &                  ysnow(j),'pbl_surf_mod 1064')
    2443            endif !if (iso_eau.gt.0) then
    2444         enddo !do i=1,klon
    2445 #endif
    2446          
     2483             !write(*,*) 'pbl_surface_mod 1060: sortie surf_landice'
     2484             do j=1,knon
     2485                if (iso_eau.gt.0) then     
     2486                   call iso_verif_egalite(yxtsnow(iso_eau,j), &
     2487                        &                  ysnow(j),'pbl_surf_mod 1064')
     2488                endif !if (iso_eau.gt.0) then
     2489             enddo !do i=1,klon
     2490#endif
     2491          END IF
    24472492       CASE(is_oce)
    24482493           CALL surf_ocean(rlon, rlat, ysolsw, ysollw, yalb_vis, &
     
    24592504               y_flux_u1, y_flux_v1, ydelta_sst(:knon), ydelta_sal(:knon), &
    24602505               yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), &
    2461                ytkt(:knon), ytks(:knon), ytaur(:knon), ysss &
     2506               ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss &
    24622507#ifdef ISO
    24632508         &      ,yxtrain_f, yxtsnow_f,yxt1,Roce, &
     
    33913436          taur(ni(:knon)) = ytaur(:knon)
    33923437          sss(ni(:knon)) = ysss(:knon)
     3438
     3439          if (activate_ocean_skin == 2 .and. type_ocean == "couple") then
     3440             dt_ds = missing_val
     3441             dt_ds(ni(:knon)) = ydt_ds(:knon)
     3442          end if
    33933443       end if
    33943444
     
    41284178
    41294179    USE indice_sol_mod
    4130     use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst
     4180    use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst, dter, &
     4181         dser, dt_ds
    41314182    use config_ocean_skin_m, only: activate_ocean_skin
    41324183
     
    42344285                         delta_sal(i) = 0.
    42354286                         delta_sst(i) = 0.
     4287                         dter(i) = 0.
     4288                         dser(i) = 0.
     4289                         dt_ds(i) = 0.
    42364290                      end if
    42374291                     
Note: See TracChangeset for help on using the changeset viewer.