Changeset 6078 for LMDZ6/trunk/libf
- Timestamp:
- Feb 16, 2026, 6:01:58 PM (4 days ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 9 edited
-
phylmd/cdrag_mod.f90 (modified) (12 diffs)
-
phylmd/clesphys_mod_h.f90 (modified) (3 diffs)
-
phylmd/conf_phys_m.f90 (modified) (7 diffs)
-
phylmd/surf_land_mod.F90 (modified) (2 diffs)
-
phylmd/surf_landice_mod.F90 (modified) (1 diff)
-
phylmd/surf_ocean_mod.F90 (modified) (3 diffs)
-
phylmdiso/surf_land_mod.F90 (modified) (1 diff)
-
phylmdiso/surf_landice_mod.F90 (modified) (1 diff)
-
phylmdiso/surf_ocean_mod.F90 (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/cdrag_mod.f90
r5980 r6078 205 205 LOGICAL :: LPRECIP 206 206 LOGICAL :: LPWG 207 real, dimension(1) :: z0m_1d, z _0h_1d, sqrt_zdu2_1d, zgeop1_rg_1d ! Pour COARE CNRM207 real, dimension(1) :: z0m_1d, z0h_1d, sqrt_zdu2_1d, zgeop1_rg_1d ! Pour COARE CNRM 208 208 CHARACTER(len=80) :: abort_message 209 209 CHARACTER(len=20) :: modname = 'pbl_surface_newfrac' ! convert scalar to 1D for call … … 317 317 IF ((choix_bulk > 1 .AND. choix_bulk < 4) .AND. (nsrf .eq. is_oce)) THEN 318 318 IF(choix_bulk .eq. 2) THEN 319 mixte = .false.319 mixte = .false. 320 320 ELSE 321 321 mixte = .true. … … 330 330 cdm(i)=cdmm(i) 331 331 cdh(i)=cdhh(i) 332 write(*,*) "clc_core cd ch",cdmm(i),cdhh(i)333 332 334 333 !------------------ Pour ECUME -------------------- 335 ELSE IF ( (choix_bulk .eq. 4) .and. (nsrf .eq. is_oce)) THEN334 ELSE IF (choix_bulk .eq. 4) THEN 336 335 OPRECIP = .false. 337 336 OPWEBB = .false. 338 337 OPERTFLUX = .false. 339 IF (nsrf .eq. is_oce) THEN 340 PSSS = 0.0 341 ENDIF 338 PSSS = 0.0 342 339 ! call ini_csts 343 340 !!$gpum nocall … … 357 354 cdh(i)=cdhh(i) 358 355 359 write(*,*) "ecume cd ch",cdmm(i),cdhh(i)360 361 356 !------------------ Pour COARE CNRM -------------------- 362 ELSE IF ( (choix_bulk .eq. 5) .and. (nsrf .eq. is_oce)) THEN357 ELSE IF (choix_bulk .eq. 5) THEN 363 358 LPRECIP = .false. 364 359 LPWG = .false. 365 !ym call ini_csts 366 367 z0m_1d = z0m 368 z_0h_1d = z0h 369 sqrt_zdu2_1d = sqrt(zdu2) 370 zgeop1_rg_1d=zgeop1(i)/RG 360 z0m_1d = z0m 361 z0h_1d = z0h 362 sqrt_zdu2_1d = sqrt(zdu2) 363 zgeop1_rg_1d=zgeop1(i)/RG 371 364 372 365 !!$gpum nocall … … 383 376 cdm(i)=cdmm(i) 384 377 cdh(i)=cdhh(i) 385 write(*,*) "coare CNRM cd ch",cdmm(i),cdhh(i)386 378 387 379 !------------------ Pour COARE Maison -------------------- 388 ELSE IF ( (choix_bulk .eq. 1) .and. (nsrf .eq. is_oce)) THEN380 ELSE IF (choix_bulk .eq. 1) THEN 389 381 IF ( pblh(i) .eq. 0. ) THEN 390 382 pblh(i) = 1500. 391 383 ENDIF 392 write(*,*) "debug size",size(coeffs)393 384 394 385 !!$gpum nocall … … 408 399 cdm(i)=cdmm(i) 409 400 cdh(i)=cdhh(i) 410 write(*,*) "coare cd ch",cdmm(i),cdhh(i)411 401 ELSE 412 402 !------------------ Pour La param LMDZ (ocean) -------------------- … … 469 459 ! Traitement particulier des cas oceaniques 470 460 ! on applique Miller et al 1992 en l'absence de gustiness 471 IF (nsrf == is_oce) THEN472 461 ! cdh(i)=f_cdrag_oce*cdhn(i)*FH(i) 473 462 IF (iflag_gusts==0) THEN … … 477 466 cdmm(i)=MIN(cdmm(i),cdmmax) 478 467 cdhh(i)=MIN(cdhh(i),cdhmax) 479 ! write(*,*) "LMDZ cd ch",cdmm(i),cdhh(i)480 END IF481 468 ELSE 482 469 … … 527 514 ! Calcul des drags 528 515 529 cdmm(i)=cdmn(i)*FM(i)530 cdhh(i)=f_cdrag_ter*cdhn(i)*FH(i)531 532 516 IF (choix_bulk == 0) THEN 533 517 cdm(i)=cdmn(i)*FM(i) 534 518 cdh(i)=f_cdrag_ter*cdhn(i)*FH(i) 535 519 ENDIF 536 537 IF (nsrf.EQ.is_oce) THEN538 cdhh(i)=f_cdrag_oce*cdhn(i)*FH(i)539 cdmm(i)=MIN(cdmm(i),cdmmax)540 cdhh(i)=MIN(cdhh(i),cdhmax)541 ENDIF 520 521 cdmm(i)=cdmn(i)*FM(i) 522 cdhh(i)=f_cdrag_oce*cdhn(i)*FH(i) 523 cdmm(i)=MIN(cdmm(i),cdmmax) 524 cdhh(i)=MIN(cdhh(i),cdhmax) 525 542 526 IF (ok_cdrag_iter) THEN 543 527 rugos_itm(i,1) = rugos_itm(i,2) … … 546 530 + 0.11*14e-6 / SQRT(cdmm(i) * zdu2) 547 531 548 !---------- Version SEPARATION DES Z0 ---------------------- 549 IF (iflag_z0_oce==0) THEN 532 ! Version SEPARATION DES Z0 533 IF (iflag_z0_oce==1) THEN 534 rugos_ith(i,2) = 0.40*14e-6 / SQRT(cdmm(i) * zdu2) 535 ELSE 550 536 rugos_ith(i,2) = rugos_itm(i,2) 551 ELSE IF (iflag_z0_oce==1) THEN552 rugos_ith(i,2) = 0.40*14e-6 / SQRT(cdmm(i) * zdu2)553 537 ENDIF 554 ENDIF 555 ENDIF 538 539 ENDIF ! ok_cdrad_iter 540 541 ENDIF ! zri LT 0 542 556 543 IF (ok_cdrag_iter) THEN 557 544 rugos_itm(i,2) = MAX(1.5e-05,rugos_itm(i,2)) 558 545 rugos_ith(i,2) = MAX(1.5e-05,rugos_ith(i,2)) 559 546 ENDIF 547 560 548 ENDDO 549 561 550 IF (nsrf.EQ.is_oce) THEN 562 551 cdm(i)=MIN(cdmm(i),cdmmax) … … 565 554 z0m(i) = rugos_itm(i,2) 566 555 z0h(i) = rugos_ith(i,2) 556 557 !============================= 567 558 ELSE ! (nsrf == is_oce) 559 !============================= 568 560 zri(i) = zgeop1(i)*(ztvd-ztsolv)/(zdu2*ztvd) 569 561 IF (iri_in.EQ.1) THEN … … 667 659 cdh(i)=f_cdrag_ter*cdhn(i)*FH(i) 668 660 ENDIF 661 669 662 ENDIF ! fin du if (nsrf == is_oce) 663 670 664 END DO ! Fin de la boucle sur l'horizontal 671 665 -
LMDZ6/trunk/libf/phylmd/clesphys_mod_h.f90
r6059 r6078 16 16 , f_cdrag_ter, f_cdrag_oce, f_rugoro, z0min, tau_gl & 17 17 , min_wind_speed, f_gust_wk, f_gust_bl, f_qsat_oce, f_z0qh_oce & 18 , z0m_seaice, z0h_seaice, z0m_landice, ratio_z0hz0m_landice & 18 , z0m_seaice, z0h_seaice, z0m_landice, z0h_landice & 19 , z0m_ocean, z0h_ocean, z0m_land, z0h_land, iflag_z0_ter & 19 20 , freq_outNMC, freq_calNMC & 20 21 , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & … … 110 111 REAL min_wind_speed, f_gust_wk, f_gust_bl, f_qsat_oce, f_z0qh_oce 111 112 REAL z0m_seaice, z0h_seaice 112 REAL z0m_landice, ratio_z0hz0m_landice 113 INTEGER iflag_gusts, iflag_z0_oce 113 REAL z0m_landice, z0h_landice 114 REAL z0m_ocean, z0h_ocean 115 REAL z0m_land, z0h_land 116 INTEGER iflag_gusts, iflag_z0_oce, iflag_z0_ter 114 117 115 118 ! Rugoro … … 178 181 !$OMP , f_cdrag_ter, f_cdrag_oce, f_rugoro, z0min, tau_gl & 179 182 !$OMP , min_wind_speed, f_gust_wk, f_gust_bl, f_qsat_oce, f_z0qh_oce & 180 !$OMP , z0m_seaice, z0h_seaice, z0m_landice, ratio_z0hz0m_landice & 183 !$OMP , z0m_seaice, z0h_seaice, z0m_landice, z0h_landice & 184 !$OMP , z0m_ocean, z0h_ocean, z0m_land, z0h_land, iflag_z0_ter & 181 185 !$OMP , freq_outNMC, freq_calNMC & 182 186 !$OMP , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & -
LMDZ6/trunk/libf/phylmd/conf_phys_m.f90
r6075 r6078 129 129 REAL, SAVE :: f_rugoro_omp , z0min_omp 130 130 REAL, SAVE :: z0m_seaice_omp,z0h_seaice_omp 131 REAL, SAVE :: z0m_landice_omp,ratio_z0hz0m_landice_omp 131 REAL, SAVE :: z0m_landice_omp,z0h_landice_omp 132 REAL, SAVE :: z0m_ocean_omp, z0h_ocean_omp 133 REAL, SAVE :: z0m_land_omp, z0h_land_omp 134 REAL :: ratio_z0hz0m_land, ratio_z0hz0m_ocean, ratio_z0hz0m_landice, ratio_z0hz0m_seaice 132 135 REAL, SAVE :: min_wind_speed_omp,f_gust_wk_omp,f_gust_bl_omp,f_qsat_oce_omp, f_z0qh_oce_omp 133 INTEGER, SAVE :: iflag_gusts_omp,iflag_z0_oce_omp 136 INTEGER, SAVE :: iflag_gusts_omp,iflag_z0_oce_omp, iflag_z0_ter_omp 134 137 135 138 REAL :: seuil_inversion … … 1004 1007 !Config Desc = fraction of shortwave penetrating into the ice 1005 1008 !Config Def = 0.3 1006 !Config Help = pour le mod ele de glace de mer1009 !Config Help = pour le modale de glace de mer 1007 1010 si_pen_frac_omp = 0.3 1008 1011 CALL getin('si_pen_frac', si_pen_frac_omp) … … 1932 1935 iflag_z0_oce_omp=0 1933 1936 CALL getin('iflag_z0_oce',iflag_z0_oce_omp) 1937 1938 iflag_z0_ter_omp=0 1939 CALL getin('iflag_z0_ter',iflag_z0_ter_omp) 1940 1934 1941 ! 1935 1942 iflag_gusts_omp=0 … … 1939 1946 CALL getin('min_wind_speed',min_wind_speed_omp) 1940 1947 1941 z0m_seaice_omp = 0.002 ; CALL getin('z0m_seaice',z0m_seaice_omp)1942 z0h_seaice_omp = 0.002 ; CALL getin('z0h_seaice',z0h_seaice_omp)1943 1944 1945 z0m_landice_omp = 0.001 ; CALL getin('z0m_landice',z0m_landice_omp)1946 ratio_z0hz0m_landice_omp = 1. ; CALL getin('ratio_z0hz0m_landice',ratio_z0hz0m_landice_omp)1947 1948 1948 f_rugoro_omp = 0. 1949 1949 CALL getin('f_rugoro',f_rugoro_omp) … … 1952 1952 CALL getin('z0min',z0min_omp) 1953 1953 1954 ! PARAMETERS FOR SNOW AND ICE MELTING 1954 1955 1956 z0m_seaice_omp = 0.002 1957 CALL getin('z0m_seaice',z0m_seaice_omp) 1958 ratio_z0hz0m_seaice = 1. 1959 CALL getin('ratio_z0hz0m_seaice',ratio_z0hz0m_seaice) 1960 z0h_seaice_omp = z0m_seaice_omp * ratio_z0hz0m_seaice 1961 CALL getin('z0h_seaice',z0h_seaice_omp) 1962 1963 z0m_landice_omp = 0.001 1964 CALL getin('z0m_landice',z0m_landice_omp) 1965 ratio_z0hz0m_landice = 1. 1966 CALL getin('ratio_z0hz0m_landice',ratio_z0hz0m_landice) 1967 z0h_landice_omp = z0m_landice_omp * ratio_z0hz0m_landice 1968 CALL getin('z0h_landice',z0h_landice_omp) 1969 1970 z0m_ocean_omp = z0min_omp 1971 CALL getin('z0m_ocean',z0m_ocean_omp) 1972 ratio_z0hz0m_ocean = 1. 1973 CALL getin('ratio_z0hz0m_ocean',ratio_z0hz0m_ocean) 1974 z0h_ocean_omp = z0m_ocean_omp * ratio_z0hz0m_ocean 1975 CALL getin('z0h_ocean',z0h_ocean_omp) 1976 1977 z0m_land_omp = z0min_omp 1978 CALL getin('z0m_land',z0m_land_omp) 1979 ratio_z0hz0m_land = 1. 1980 CALL getin('ratio_z0hz0m_land',ratio_z0hz0m_land) 1981 z0h_land_omp = z0m_land_omp * ratio_z0hz0m_land 1982 CALL getin('z0h_land',z0h_land_omp) 1983 1984 1985 ! PARAMETERS FOR SNOW AND ICE MELTING 1955 1986 chasno_tun_omp=0.15 1956 1987 CALL getin('chasno_tun',chasno_tun_omp) … … 2379 2410 iflag_gusts=iflag_gusts_omp 2380 2411 iflag_z0_oce=iflag_z0_oce_omp 2412 iflag_z0_ter=iflag_z0_ter_omp 2381 2413 2382 2414 z0m_seaice=z0m_seaice_omp 2383 2415 z0h_seaice=z0h_seaice_omp 2384 2416 z0m_landice=z0m_landice_omp 2385 ratio_z0hz0m_landice=ratio_z0hz0m_landice_omp 2417 z0h_landice=z0h_landice_omp 2418 z0m_ocean=z0m_ocean_omp 2419 z0h_ocean=z0h_ocean_omp 2420 z0m_land=z0m_land_omp 2421 z0h_land=z0h_land_omp 2386 2422 2387 2423 chasno_tun=chasno_tun_omp … … 2682 2718 WRITE(lunout,*) ' f_rugoro = ',f_rugoro 2683 2719 WRITE(lunout,*) ' z0min = ',z0min 2720 WRITE(lunout,*) ' z0m_landice = ',z0m_landice 2721 WRITE(lunout,*) ' z0h_landice = ',z0h_landice 2722 WRITE(lunout,*) ' z0m_seaice = ',z0m_seaice 2723 WRITE(lunout,*) ' z0h_seaice = ',z0h_seaice 2724 WRITE(lunout,*) ' z0m_ocean = ',z0m_ocean 2725 WRITE(lunout,*) ' z0h_ocean = ',z0h_ocean 2726 WRITE(lunout,*) ' z0m_land = ',z0m_land 2727 WRITE(lunout,*) ' z0h_land = ',z0h_land 2684 2728 WRITE(lunout,*) ' tmax_fonte_cv = ', tmax_fonte_cv 2685 2729 WRITE(lunout,*) ' iflag_wake = ', iflag_wake -
LMDZ6/trunk/libf/phylmd/surf_land_mod.F90
r5982 r6078 76 76 77 77 USE dimpft_mod_h, ONLY: nvm_lmdz 78 USE clesphys_mod_h, ONLY : nsw, ok_bs 78 USE clesphys_mod_h, ONLY : nsw, ok_bs, z0m_land, z0h_land, iflag_z0_ter 79 79 USE yomcst_mod_h, ONLY: RCPD, RKAPPA 80 80 USE print_control_mod, ONLY: lunout … … 336 336 #endif 337 337 & ) 338 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 338 339 340 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 339 341 340 342 ENDIF ! iflag_hetero_surf 341 343 344 ! possibility to impose z0m et z0h over land 345 346 342 347 ENDIF ! ok_veget 343 348 344 ! blowing snow not treated yet over land 345 fluxbs(:)=0. 349 IF (iflag_z0_ter==-1) THEN 350 DO i = 1, knon 351 z0m(i) = z0m_land 352 z0h(i) = z0h_land 353 ENDDO 354 ENDIF 355 356 ! blowing snow not treated yet over land 357 fluxbs(:)=0. 346 358 347 359 -
LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90
r6053 r6078 470 470 if (z0m_landice .GT. 0.) then 471 471 z0m(1:knon) = z0m_landice 472 z0h(1:knon) = z0 m_landice*ratio_z0hz0m_landice472 z0h(1:knon) = z0h_landice 473 473 else 474 474 ! parameterization of z0=f(T) following measurements in Adelie Land by Amory et al 2017 -
LMDZ6/trunk/libf/phylmd/surf_ocean_mod.F90
r6070 r6078 46 46 #endif 47 47 #endif 48 USE clesphys_mod_h, ONLY: nsw, ok_bs, f_z0qh_oce, iflag_albedo, iflag_cycle_diurne, fmagic, pmagic, iflag_z0_oce, z0min 48 USE clesphys_mod_h, ONLY: nsw, ok_bs, f_z0qh_oce, iflag_albedo, iflag_cycle_diurne, fmagic, pmagic 49 USE clesphys_mod_h, ONLY: iflag_z0_oce, z0m_ocean, z0h_ocean 49 50 USE yomcst_mod_h, ONLY: rd, retv, rg, rlvtt 50 51 USE limit_read_mod, ONLY: limit_read_rug_alb … … 369 370 370 371 !****************************************************************************** 371 ! Calculate the r ugosity372 ! Calculate the roughness lengths 372 373 !****************************************************************************** 373 374 IF (iflag_z0_oce==0) THEN … … 390 391 ELSE IF (iflag_z0_oce==-1) THEN 391 392 DO i = 1, knon 392 z0m(i) = z0m in393 z0h(i) = z0 min393 z0m(i) = z0m_ocean 394 z0h(i) = z0h_ocean 394 395 ENDDO 395 396 ELSE -
LMDZ6/trunk/libf/phylmdiso/surf_land_mod.F90
r5943 r6078 346 346 ENDIF ! ok_veget 347 347 348 ! blowing snow not treated yet over land 349 fluxbs(:)=0. 348 IF (iflag_z0_ter==-1) THEN 349 DO i = 1, knon 350 z0m(i) = z0m_land 351 z0h(i) = z0h_land 352 ENDDO 353 ENDIF 354 355 ! blowing snow not treated yet over land 356 fluxbs(:)=0. 357 350 358 351 359 -
LMDZ6/trunk/libf/phylmdiso/surf_landice_mod.F90
r6028 r6078 433 433 if (z0m_landice .GT. 0.) then 434 434 z0m(1:knon) = z0m_landice 435 z0h(1:knon) = z0 m_landice*ratio_z0hz0m_landice435 z0h(1:knon) = z0h_landice 436 436 else 437 437 ! parameterization of z0=f(T) following measurements in Adelie Land by Amory et al 2017 -
LMDZ6/trunk/libf/phylmdiso/surf_ocean_mod.F90
r5943 r6078 383 383 ELSE IF (iflag_z0_oce==-1) THEN 384 384 DO i = 1, knon 385 z0m(i) = z0m in386 z0h(i) = z0 min385 z0m(i) = z0m_ocean 386 z0h(i) = z0h_ocean 387 387 ENDDO 388 388 ELSE
Note: See TracChangeset
for help on using the changeset viewer.
