Changeset 2535
- Timestamp:
- Jun 10, 2021, 11:42:13 AM (4 years ago)
- Location:
- trunk/LMDZ.VENUS/libf/phyvenus
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/clmain.F
r2048 r2535 12 12 . solsw, sollw, sollwdown, fder, 13 13 . rlon, rlat, dx, dy, 14 . q2, 14 15 . debut, lafin, 15 16 . d_t,d_u,d_v,d_ts, … … 32 33 cAA il faudra sortir ces memes champs en leur ajoutant une dimension, 33 34 cAA c'est a dire nbsrf (nbre de subsurface). 34 USE ioipsl35 USE interface_surf36 use dimphy 35 ! USE ioipsl 36 ! USE interface_surf 37 use dimphy, only: klon, klev 37 38 use mod_grid_phy_lmdz, only: nbp_lev 38 39 use cpdet_phy_mod, only: t2tpot 39 40 use turb_mod, only :yustar 41 42 #ifdef CPP_XIOS 43 use xios_output_mod, only: send_xios_field 44 #endif 45 40 46 IMPLICIT none 41 47 c====================================================================== … … 56 62 c dy-----input-R- resolution des mailles en y (m) 57 63 c 64 c q2-----inoutput-R- $q^2$ TKE at inter-layers 65 c 58 66 c d_t------output-R- le changement pour "t" 59 67 c d_u------output-R- le changement pour "u" … … 69 77 c====================================================================== 70 78 c$$$ PB ajout pour soil 71 #include "dimsoil.h" 72 #include "iniprint.h" 73 #include "clesphys.h" 74 #include "compbl.h" 75 c 76 REAL dtime 77 integer itap 78 REAL t(klon,klev) 79 REAL u(klon,klev), v(klon,klev) 80 REAL paprs(klon,klev+1), pplay(klon,klev), radsol(klon) 81 ! ADAPTATION GCM POUR CP(T) 82 real ppk(klon,klev) 83 REAL rlon(klon), rlat(klon), dx(klon), dy(klon) 84 REAL d_t(klon, klev) 85 REAL d_u(klon, klev), d_v(klon, klev) 86 REAL flux_t(klon,klev) 87 REAL dflux_t(klon) 88 89 REAL flux_u(klon,klev), flux_v(klon,klev) 90 REAL cdragh(klon), cdragm(klon) 91 real rmu0(klon) ! cosinus de l'angle solaire zenithal 92 LOGICAL debut, lafin 93 c 94 REAL ts(klon) 95 REAL d_ts(klon) 96 REAL albe(klon) 97 C 98 REAL fder(klon) 99 REAL sollw(klon), solsw(klon), sollwdown(klon) 79 include "dimsoil.h" 80 include "iniprint.h" 81 include "clesphys.h" 82 include "compbl.h" 83 c 84 c Parametres d'entree 85 REAL, INTENT(IN) :: dtime 86 INTEGER, INTENT(IN) :: itap 87 REAL, INTENT(IN) :: t(klon,klev) 88 REAL, INTENT(IN) :: u(klon,klev), v(klon,klev) 89 REAL, INTENT(IN) :: paprs(klon,klev+1), pplay(klon,klev) 90 ! ADAPTATION GCM POUR CP(T) 91 REAL, INTENT(IN) :: ppk(klon,klev) 92 REAL, INTENT(IN) :: rlon(klon), rlat(klon), dx(klon), dy(klon) 93 REAL, INTENT(IN) :: rmu0(klon) ! cosine of solar zenith angle 94 LOGICAL, INTENT(IN) :: debut, lafin 95 REAL, INTENT(IN) :: ts(klon) 96 REAL, INTENT(IN) :: sollw(klon), solsw(klon), sollwdown(klon) 97 98 c Paramètres IN/OUT 99 REAL, INTENT(INOUT) :: fder(klon) 100 REAL, INTENT(INOUT) :: flux_u(klon,klev), flux_v(klon,klev) 101 REAL, INTENT(INOUT) :: radsol(klon) 102 REAL, INTENT(INOUT) :: q2(klon,klev+1) 103 104 c Parametres de sorties 105 REAL, INTENT(OUT) :: d_t(klon, klev) 106 REAL, INTENT(OUT) :: d_u(klon, klev), d_v(klon, klev) 107 REAL, INTENT(OUT) :: flux_t(klon,klev) 108 REAL, INTENT(OUT) :: dflux_t(klon) 109 REAL, INTENT(OUT) :: cdragh(klon), cdragm(klon) 110 REAL, INTENT(OUT) :: d_ts(klon) 111 REAL, INTENT(OUT) :: albe(klon) 100 112 cAA 101 REAL zcoefh(klon,klev)102 REAL zu1(klon)103 REAL zv1(klon)113 REAL, INTENT(OUT) :: zcoefh(klon,klev) 114 REAL, INTENT(OUT) :: zu1(klon) 115 REAL, INTENT(OUT) :: zv1(klon) 104 116 cAA 105 117 c$$$ PB ajout pour soil 106 REAL ftsoil(klon,nsoilmx) 118 REAL, INTENT(INOUT) :: ftsoil(klon,nsoilmx) 119 120 c====================================================================== 121 EXTERNAL clqh, clvent, coefkz 122 c====================================================================== 123 c Parametre locaux 107 124 REAL ytsoil(klon,nsoilmx) 108 c======================================================================109 EXTERNAL clqh, clvent, coefkz110 c======================================================================111 125 REAL yts(klon) 112 126 REAL yalb(klon) … … 135 149 real y_cd_m(klon),y_cd_h(klon) 136 150 c 137 #include "YOMCST.h"151 include "YOMCST.h" 138 152 REAL u1lay(klon), v1lay(klon) 139 153 REAL delp(klon,klev) 140 154 INTEGER i, k 141 INTEGER ni(klon), knon, j 142 155 INTEGER ni(klon), knon, j 143 156 c====================================================================== 144 157 REAL zx_alf1, zx_alf2 !valeur ambiante par extrapola. … … 200 213 y_flux_u = 0.0 201 214 y_flux_v = 0.0 215 ycoefh=0.0 216 ycoefm=0.0 202 217 C$$ PB 203 218 y_dflux_t = 0.0 … … 360 375 call yamada4(knon,dtime,rg,rd,ypaprs,yt 361 376 s ,yzlev,yzlay,yu,yv,yteta 362 s ,y_cd_m, ykmm,ykmn,ykmq,yustar,377 s ,y_cd_m,q2,ykmm,ykmn,ykmq,yustar, 363 378 s iflag_pbl) 364 379 endif … … 383 398 CALL clvent(knon,dtime,yu1,yv1,ycoefm,yt,yv,ypaprs,ypplay,ydelp, 384 399 s y_d_v,y_flux_v) 385 400 386 401 c pour le couplage 387 402 ytaux = y_flux_u(:,1) … … 447 462 ENDDO 448 463 449 c --------------------450 c TEST!!!!! PAS DE MELANGE PAR TURBULENCE !!!451 c d_u = 0.452 c d_v = 0.453 c flux_u = 0.454 c flux_v = 0.455 c --------------------456 457 c print*,"y_d_t apres clqh=",y_d_t(klon/2,:)458 459 RETURN460 464 END 461 465 … … 478 482 s flux_t, dflux_s) 479 483 480 USE interface_surf481 use dimphy 484 use interface_surf, only: interfsurf_hq 485 use dimphy, only: klon, klev 482 486 use mod_grid_phy_lmdz, only: nbp_lon, nbp_lat, nbp_lev 483 487 use cpdet_phy_mod, only: t2tpot,tpot2t,cpdet … … 488 492 c Objet: diffusion verticale de "h" 489 493 c====================================================================== 490 #include "YOMCST.h"491 #include "dimsoil.h"492 #include "iniprint.h"494 include "YOMCST.h" 495 include "dimsoil.h" 496 include "iniprint.h" 493 497 494 498 c Arguments: 495 INTEGER knon 496 REAL dtime ! intervalle du temps (s) 497 REAL u1lay(klon) ! vitesse u de la 1ere couche (m/s) 498 REAL v1lay(klon) ! vitesse v de la 1ere couche (m/s) 499 REAL coef(klon,klev) ! le coefficient d'echange (m**2/s) 499 c Parametres d'entree 500 INTEGER, INTENT(IN) :: knon 501 REAL, INTENT(IN) :: dtime ! intervalle du temps (s) 502 REAL, INTENT(IN) :: u1lay(klon) ! vitesse u de la 1ere couche (m/s) 503 REAL, INTENT(IN) :: v1lay(klon) ! vitesse v de la 1ere couche (m/s) 504 REAL, INTENT(IN) :: coef(klon,klev) ! le coefficient d'echange (m**2/s) 500 505 c multiplie par le cisaillement du 501 506 c vent (dV/dz); la premiere valeur 502 507 c indique la valeur de Cdrag (sans unite) 503 REAL t(klon,klev) ! temperature (K) 504 REAL ts(klon) ! temperature du sol (K) 505 REAL paprs(klon,klev+1) ! pression a inter-couche (Pa) 506 REAL pplay(klon,klev) ! pression au milieu de couche (Pa) 507 ! ADAPTATION GCM POUR CP(T) 508 REAL ppk(klon,klev) ! fonction d'Exner milieu de couche 509 REAL delp(klon,klev) ! epaisseur de couche en pression (Pa) 510 REAL radsol(klon) ! ray. net au sol (Solaire+IR) W/m2 511 REAL albedo(klon) ! albedo de la surface 512 real rmu0(klon) ! cosinus de l'angle solaire zenithal 513 real rlon(klon), rlat(klon), dx(klon), dy(klon) 514 c 515 REAL d_t(klon,klev) ! incrementation de "t" 516 REAL d_ts(klon) ! incrementation de "ts" 517 REAL flux_t(klon,klev) ! (diagnostic) flux de la chaleur 508 REAL, INTENT(IN) :: t(klon,klev) ! temperature (K) 509 REAL, INTENT(IN) :: ts(klon) ! temperature du sol (K) 510 REAL, INTENT(IN) :: paprs(klon,klev+1) ! pression a inter-couche (Pa) 511 REAL, INTENT(IN) :: pplay(klon,klev) ! pression au milieu de couche (Pa) 512 ! ADAPTATION GCM POUR CP(T) 513 REAL, INTENT(IN) :: ppk(klon,klev) ! fonction d'Exner milieu de couche 514 REAL, INTENT(IN) :: delp(klon,klev) ! epaisseur de couche en pression (Pa) 515 REAL, INTENT(INOUT) :: radsol(klon) ! ray. net au sol (Solaire+IR) W/m2 516 REAL, INTENT(IN) :: rmu0(klon) ! cosinus de l'angle solaire zenithal 517 REAL, INTENT(IN) :: rlon(klon), rlat(klon), dx(klon), dy(klon) 518 INTEGER, INTENT(IN) :: itime 519 LOGICAL, INTENT(IN) :: debut, lafin 520 REAL, INTENT(INOUT) :: fder(klon) 521 REAL, INTENT(IN) :: taux(klon), tauy(klon) 522 REAL, INTENT(IN) :: sollw(klon), sollwdown(klon) 523 REAL, INTENT(IN) :: swnet(klon) 524 525 526 c$$$C PB ajout pour soil 527 LOGICAL, INTENT(IN) :: soil_model 528 REAL, INTENT(IN) :: tsoil(klon, nsoilmx) 529 c 530 c Parametre de sorties 531 REAL, INTENT(OUT) :: albedo(klon) ! albedo de la surface 532 REAL, INTENT(OUT) :: d_t(klon,klev) ! incrementation de "t" 533 REAL, INTENT(OUT) :: d_ts(klon) ! incrementation de "ts" 534 REAL, INTENT(OUT) :: flux_t(klon,klev) ! (diagnostic) flux de la chaleur 518 535 c sensible, flux de Cp*T, positif vers 519 536 c le bas: j/(m**2 s) c.a.d.: W/m2 520 REAL dflux_s(klon) ! derivee du flux sensible dF/dTs 521 c====================================================================== 537 REAL, INTENT(OUT) :: dflux_s(klon) ! derivee du flux sensible dF/dTs 538 c====================================================================== 539 c Variables locales 522 540 INTEGER i, k 523 541 REAL zx_ch(klon,klev) … … 527 545 REAL local_h(klon,klev) ! enthalpie potentielle 528 546 REAL local_ts(klon) 547 REAL swdown(klon) 529 548 c====================================================================== 530 549 c contre-gradient pour la chaleur sensible: Kelvin/metre … … 534 553 REAL zdelz 535 554 c====================================================================== 536 #include "compbl.h"555 include "compbl.h" 537 556 c====================================================================== 538 557 c Rajout pour l'interface 539 integer itime540 logical debut, lafin541 558 real zlev1(klon) 542 real fder(klon), taux(klon), tauy(klon)543 559 real temp_air(klon) 544 560 real epot_air(klon) 545 561 real tq_cdrag(klon), petAcoef(klon) 546 562 real petBcoef(klon) 547 real sollw(klon), sollwdown(klon), swnet(klon), swdown(klon) 548 real p1lay(klon),pkh1(klon) 549 c$$$C PB ajout pour soil 550 LOGICAL soil_model 551 REAL tsoil(klon, nsoilmx) 563 real p1lay(klon), pkh1(klon) 552 564 553 565 ! Parametres de sortie … … 777 789 c 778 790 779 RETURN780 791 END 781 792 … … 791 802 s d_ven,flux_v) 792 803 793 use dimphy 804 use dimphy, only: klon, klev 794 805 IMPLICIT none 795 806 c====================================================================== … … 814 825 c flux_v---output-R- (diagnostic) flux du vent: (kg m/s)/(m**2 s) 815 826 c====================================================================== 816 #include "iniprint.h" 817 INTEGER knon 818 REAL dtime 819 REAL u1lay(klon), v1lay(klon) 820 REAL coef(klon,klev) 821 REAL t(klon,klev), ven(klon,klev) 822 REAL paprs(klon,klev+1), pplay(klon,klev), delp(klon,klev) 823 REAL d_ven(klon,klev) 824 REAL flux_v(klon,klev) 825 c====================================================================== 826 #include "YOMCST.h" 827 c====================================================================== 827 include "iniprint.h" 828 829 c Parametres d'entree 830 INTEGER, INTENT(IN) :: knon 831 REAL, INTENT(IN) :: dtime 832 REAL, INTENT(IN) :: u1lay(klon) , v1lay(klon) 833 REAL, INTENT(IN) :: coef(klon, klev) 834 REAL, INTENT(IN) :: t(klon, klev), ven(klon, klev) 835 REAL, INTENT(IN) :: paprs(klon, klev+1), pplay(klon, klev) 836 REAL, INTENT(IN) :: delp(klon, klev) 837 838 c Parametres de sorties 839 REAL, INTENT(OUT) :: d_ven(klon, klev) 840 REAL, INTENT(OUT) :: flux_v(klon, klev) 841 c====================================================================== 842 include "YOMCST.h" 843 c====================================================================== 844 c Parametres locaux 828 845 INTEGER i, k 829 846 REAL zx_cv(klon,2:klev) … … 905 922 ENDDO 906 923 c 907 RETURN908 924 END 909 925 … … 919 935 . pcfm, pcfh) 920 936 921 use dimphy 937 use dimphy, only: klon, klev 922 938 use cpdet_phy_mod, only: cpdet,t2tpot 923 939 #ifdef CPP_XIOS … … 944 960 c pcfh-----output-R- coefficients a calculer (chaleur et humidite) 945 961 c====================================================================== 946 #include "YOMCST.h"947 #include "iniprint.h"948 #include "compbl.h"949 #include "clesphys.h"962 include "YOMCST.h" 963 include "iniprint.h" 964 include "compbl.h" 965 include "clesphys.h" 950 966 c 951 967 c Arguments: 952 968 c 953 INTEGER knon 954 REAL ts(klon) 955 REAL paprs(klon,klev+1), pplay(klon,klev) 956 ! ADAPTATION GCM POUR CP(T) 957 real ppk(klon,klev) 958 REAL u(klon,klev), v(klon,klev), t(klon,klev) 959 c 960 REAL pcfm(klon,klev), pcfh(klon,klev) 961 INTEGER itop(klon) 969 c Parametres d'entree 970 INTEGER, INTENT(IN) :: knon 971 REAL, INTENT(IN) :: ts(klon) 972 REAL, INTENT(IN) :: pplay(klon, klev) 973 REAL, INTENT(IN) ::paprs(klon, klev+1) 974 ! ADAPTATION GCM POUR CP(T) 975 REAL, INTENT(IN) :: ppk(klon, klev) 976 REAL, INTENT(IN) :: u(klon, klev), v(klon, klev), t(klon, klev) 977 978 c Parametre de sorties 979 REAL, INTENT(OUT) :: pcfm(klon, klev), pcfh(klon, klev) 962 980 c 963 981 c Quelques constantes et options: 964 982 c 965 REAL cepdu2, ckap, cb, cc, cd, clam 983 REAL, PARAMETER :: cepdu2=((1.e-5)**2) 984 c REAL, PARAMETER :: cepdu2 =(0.1)**2 985 REAL, PARAMETER :: ckap=0.4 986 REAL, PARAMETER :: cb=5.0 987 REAL, PARAMETER :: cc=5.0 988 REAL, PARAMETER :: cd=5.0 989 REAL, PARAMETER :: clam=160.0 990 REAL, PARAMETER :: ric=0.4 ! nombre de Richardson critique 991 REAL, PARAMETER :: prandtl=0.4 992 INTEGER isommet ! le sommet de la couche limite 993 994 LOGICAL, PARAMETER :: tvirtu=.TRUE. ! calculer Ri d'une maniere plus performante 995 LOGICAL, PARAMETER :: opt_ec=.FALSE. ! formule du Centre Europeen dans l'atmosphere 996 997 c REAL cepdu2, ckap, cb, cc, cd, clam 966 998 c TEST VENUS 967 999 c PARAMETER (cepdu2 =(0.1)**2) 968 PARAMETER (cepdu2 =(1.e-5)**2) 969 970 PARAMETER (CKAP=0.4) 971 PARAMETER (cb=5.0) 972 PARAMETER (cc=5.0) 973 PARAMETER (cd=5.0) 974 PARAMETER (clam=160.0) 975 REAL ric ! nombre de Richardson critique 976 PARAMETER(ric=0.4) 977 REAL prandtl 978 PARAMETER (prandtl=0.4) 979 INTEGER isommet ! le sommet de la couche limite 980 981 LOGICAL tvirtu ! calculer Ri d'une maniere plus performante 982 PARAMETER (tvirtu=.TRUE.) 983 LOGICAL opt_ec ! formule du Centre Europeen dans l'atmosphere 984 PARAMETER (opt_ec=.FALSE.) 1000 c PARAMETER (cepdu2 =(1.e-5)**2) 1001 c PARAMETER (CKAP=0.4) 1002 c PARAMETER (cb=5.0) 1003 c PARAMETER (cc=5.0) 1004 c PARAMETER (cd=5.0) 1005 c PARAMETER (clam=160.0) 1006 c REAL ric ! nombre de Richardson critique 1007 c PARAMETER(ric=0.4) 1008 c REAL prandtl 1009 c PARAMETER (prandtl=0.4) 1010 c INTEGER isommet ! le sommet de la couche limite 1011 1012 c LOGICAL tvirtu ! calculer Ri d'une maniere plus performante 1013 c PARAMETER (tvirtu=.TRUE.) 1014 c LOGICAL opt_ec ! formule du Centre Europeen dans l'atmosphere 1015 c PARAMETER (opt_ec=.FALSE.) 985 1016 986 1017 c 987 1018 c Variables locales: 988 1019 c 1020 INTEGER itop(klon) 989 1021 INTEGER i, k 990 1022 REAL zgeop(klon,klev) … … 1001 1033 REAL z2geomf, zalh2, zalm2, zscfh, zscfm 1002 1034 cIM 1003 LOGICAL check 1004 PARAMETER (check=.false.) 1035 LOGICAL, PARAMETER :: check=.false. 1005 1036 c 1006 1037 c contre-gradient pour la chaleur sensible: Kelvin/metre … … 1008 1039 REAL gamh(2:klev) 1009 1040 c 1010 LOGICAL appel1er 1011 SAVE appel1er 1041 LOGICAL, SAVE :: appel1er = .TRUE. 1012 1042 c 1013 1043 c Fonctions thermodynamiques et fonctions d'instabilite 1014 1044 REAL fsta, fins, x 1015 LOGICAL zxli ! utiliser un jeu de fonctions simples 1016 PARAMETER (zxli=.FALSE.) 1045 LOGICAL, PARAMETER :: zxli=.FALSE. ! utiliser un jeu de fonctions simples PARAMETER (zxli=.FALSE.) 1017 1046 c 1018 1047 fsta(x) = 1.0 / (1.0+10.0*x*(1+8.0*x)) 1019 1048 fins(x) = SQRT(1.0-18.0*x) 1020 c1021 DATA appel1er /.TRUE./1022 1049 c 1023 1050 c---------------------- … … 1228 1255 c#endif 1229 1256 1230 RETURN1231 1257 END 1232 1258 … … 1239 1265 . pcfm, pcfh) 1240 1266 1241 use dimphy 1267 use dimphy, only: klon, klev 1242 1268 use mod_grid_phy_lmdz, only: nbp_lev 1243 1269 use cpdet_phy_mod, only: cpdet … … 1257 1283 c pcfh-----output-R- coefficients a calculer (chaleur et humidite) 1258 1284 c====================================================================== 1259 #include "YOMCST.h"1260 #include "iniprint.h"1285 include "YOMCST.h" 1286 include "iniprint.h" 1261 1287 c 1262 1288 c Arguments: 1263 1289 c 1264 INTEGER knon 1265 REAL paprs(klon,klev+1), pplay(klon,klev) 1266 REAL t(klon,klev) 1267 c 1268 REAL pcfm(klon,klev), pcfh(klon,klev) 1290 INTEGER,INTENT(IN) :: knon 1291 REAL,INTENT(IN) :: paprs(klon,klev+1) 1292 REAL,INTENT(IN) :: pplay(klon,klev) 1293 REAL,INTENT(IN) :: t(klon,klev) 1294 c 1295 REAL,INTENT(OUT) :: pcfm(klon,klev), pcfh(klon,klev) 1269 1296 c 1270 1297 c Variables locales: … … 1304 1331 ENDDO 1305 1332 c 1306 RETURN1307 1333 END 1308 1334 -
trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F
r2523 r2535 1277 1277 $ paprs,pplay,ppk,radsol,falbe, 1278 1278 e solsw, sollw, sollwdown, fder, 1279 e longitude_deg, latitude_deg, dx, dy, 1279 e longitude_deg, latitude_deg, dx, dy, 1280 & q2, 1280 1281 e debut, lafin, 1281 1282 s d_t_vdf,d_u_vdf,d_v_vdf,d_ts, -
trunk/LMDZ.VENUS/libf/phyvenus/yamada4.F
r2534 r2535 3 3 ! 4 4 SUBROUTINE yamada4(ngrid,dt,g,rconst,plev,temp 5 c s ,zlev,zlay,u,v,teta,cd,q2,km,kn,kq,ustar 6 s ,zlev,zlay,u,v,teta,cd,km,kn,kq,ustar 5 s ,zlev,zlay,u,v,teta,cd,q2,km,kn,kq,ustar 7 6 s ,iflag_pbl) 8 7 c....................................................................... 9 use dimphy 10 use turb_mod, only: q2,l0 8 use dimphy, only: klon, klev 9 use turb_mod, only: l0 10 11 #ifdef CPP_XIOS 12 use xios_output_mod, only: send_xios_field 13 #endif 14 11 15 IMPLICIT NONE 12 16 c....................................................................... … … 40 44 41 45 c....................................................................... 42 REAL dt,g,rconst 43 real plev(klon,klev+1),temp(klon,klev) 44 real ustar(klon) 46 REAL, INTENT(IN) :: dt,g,rconst 47 REAL, INTENT(IN) :: plev(klon,klev+1),temp(klon,klev) 48 REAL, INTENT(IN) :: ustar(klon) 49 REAL, INTENT(INOUT) :: zlev(klon,klev+1) 50 REAL, INTENT(IN) :: zlay(klon,klev) 51 REAL, INTENT(IN) :: u(klon,klev) 52 REAL, INTENT(IN) :: v(klon,klev) 53 REAL, INTENT(IN) :: teta(klon,klev) 54 REAL, INTENT(IN) :: cd(klon) 55 INTEGER, INTENT(IN) :: iflag_pbl,ngrid 56 57 REAL, INTENT(OUT) :: km(klon,klev+1) 58 REAL, INTENT(OUT) :: kn(klon,klev+1) 59 REAL, INTENT(OUT) :: kq(klon,klev+1) 60 61 REAL, INTENT(INOUT) :: q2(klon,klev+1) 62 c Variables locales: 45 63 real kmin,qmin,pblhmin(klon),coriol(klon) 46 REAL zlev(klon,klev+1)47 REAL zlay(klon,klev)48 REAL u(klon,klev)49 REAL v(klon,klev)50 REAL teta(klon,klev)51 REAL cd(klon)52 64 REAL qpre 53 65 REAL unsdz(klon,klev) 54 66 REAL unsdzdec(klon,klev+1) 55 67 56 REAL km(klon,klev+1)57 68 REAL kmpre(klon,klev+1),tmp2 58 69 REAL mpre(klon,klev+1) 59 REAL kn(klon,klev+1) 60 REAL kq(klon,klev+1) 70 61 71 real ff(klon,klev+1),delta(klon,klev+1) 62 72 real aa(klon,klev+1),aa0,aa1 63 integer iflag_pbl,ngrid 64 65 73 66 74 integer nlay,nlev 67 75 68 logical first 69 integer ipas 70 save first,ipas 71 data first,ipas/.true.,0/ 76 logical,save :: first=.false. ! not neede any more 77 integer,save :: ipas=0 72 78 73 79 … … 82 88 real m2cstat,mcstat,kmcstat 83 89 real l(klon,klev+1) 84 !real,save,allocatable :: l0(:)85 c ATTENTION! mis ici car j'ai enlevé q2 des arguments...86 c sinon, c'est au-dessus que ça se passe...87 !REAL,save,allocatable :: q2(:,:)88 90 89 91 real sq(klon),sqz(klon),zz(klon,klev+1) … … 97 99 real frif,falpha,fsm 98 100 real fl,zzz,zl0,zq2,zn2 99 101 100 102 c real rino(klon,klev+1),smyam(klon,klev),styam(klon,klev) 101 103 c s ,lyam(klon,klev),knyam(klon,klev) … … 109 111 s ,0.5*sqrt(q2(ig,k))/sqrt(max(n2(ig,k),1.e-10))) ,1.) 110 112 113 111 114 if (.not.(iflag_pbl.ge.6.and.iflag_pbl.le.9)) then 112 115 stop'probleme de coherence dans appel a MY' … … 118 121 nlev=klev+1 119 122 120 if (first) then 121 ! IF (.not.ALLOCATED(l0)) allocate(l0(klon)) 122 ! IF (.not.ALLOCATED(q2)) allocate(q2(klon,klevp1)) 123 124 c (surtout pour k=1, à cause diagnostiques...) 125 q2 = 0. 126 endif 123 c if (first) then 124 c IF (.not.ALLOCATED(l0)) allocate(l0(klon)) 125 c IF (.not.ALLOCATED(q2)) allocate(q2(klon,klev+1)) 126 c endif 127 127 c=================================== 128 128 129 129 ipas=ipas+1 130 if (0.eq.1.and.first) then131 do ig=1,1000132 ri=(ig-800.)/500.133 if (ri.lt.ric) then134 zrif=frif(ri)135 else136 zrif=rifc137 endif138 if(zrif.lt.0.16) then139 zalpha=falpha(zrif)140 zsm=fsm(zrif)141 else142 zalpha=1.12143 zsm=0.085144 endif130 ! if (0.eq.1.and.first) then 131 ! do ig=1,1000 132 ! ri=(ig-800.)/500. 133 ! if (ri.lt.ric) then 134 ! zrif=frif(ri) 135 ! else 136 ! zrif=rifc 137 ! endif 138 ! if(zrif.lt.0.16) then 139 ! zalpha=falpha(zrif) 140 ! zsm=fsm(zrif) 141 ! else 142 ! zalpha=1.12 143 ! zsm=0.085 144 ! endif 145 145 c print*,ri,rif,zalpha,zsm 146 enddo147 endif148 146 c enddo 147 c endif 148 149 149 c....................................................................... 150 150 c les increments verticaux 151 151 c....................................................................... 152 152 c 153 c!!!!! allerte !!!!!c154 c!!!!! zlev n'est pas declare a nlev !!!!!c155 c!!!!! ---->156 DO ig=1,ngrid157 zlev(ig,nlev)=zlay(ig,nlay)158 & +( zlay(ig,nlay) - zlev(ig,nlev-1) )159 ENDDO160 c!!!!! <----161 c!!!!! allerte !!!!!c162 c163 153 DO k=1,nlay 164 154 DO ig=1,ngrid 165 155 unsdz(ig,k)=1.E+0/(zlev(ig,k+1)-zlev(ig,k)) 166 156 ENDDO 167 157 ENDDO 168 158 DO ig=1,ngrid 169 159 unsdzdec(ig,1)=1.E+0/(zlay(ig,1)-zlev(ig,1)) 170 160 ENDDO 171 161 DO k=2,nlay 172 162 DO ig=1,ngrid 173 163 unsdzdec(ig,k)=1.E+0/(zlay(ig,k)-zlay(ig,k-1)) 174 164 ENDDO 175 165 ENDDO 176 166 DO ig=1,ngrid 177 167 unsdzdec(ig,nlay+1)=1.E+0/(zlev(ig,nlay+1)-zlay(ig,nlay)) 178 179 c 180 c....................................................................... 181 168 ENDDO 169 c 170 c....................................................................... 171 182 172 c=================================== 183 173 c INITIALISATIONS (surtout pour k=1, à cause diagnostiques...) 184 dz = 0. 185 m2 = 0. 186 dtetadz = 0. 187 n2 = 0. 188 rif = 0. 189 alpha = 0. 190 sm = 0. 191 zz = 0. 192 l = 0. 174 dz(:,:) = 0. 175 m2(:,:) = 0. 176 dtetadz(:,:) = 0. 177 n2(:,:) = 0. 178 rif(:,:) = 0. 179 alpha(:,:) = 0. 180 sm(:,:) = 0. 181 zz(:,:) = 0. 182 l(:,:) = 0. 183 km(:,:) = 0. 184 kn(:,:) = 0. 185 kmpre(:,:) = 0. 186 mpre(:,:) = 0. 187 193 188 c=================================== 194 189 do k=2,klev 195 190 do ig=1,ngrid 196 191 dz(ig,k)=zlay(ig,k)-zlay(ig,k-1) 197 192 m2(ig,k)=((u(ig,k)-u(ig,k-1))**2+(v(ig,k)-v(ig,k-1))**2) … … 216 211 c print*,'RIF L=',k,rif(ig,k),ri*alpha(ig,k) 217 212 218 219 enddo 220 enddo 221 213 enddo 214 enddo 222 215 223 216 c==================================================================== … … 259 252 260 253 c print*,'Fin de l initialisation de q2 et l0' 261 262 endif ! first 263 254 endif ! of if (first.or.iflag_pbl.eq.6) 255 264 256 c==================================================================== 265 257 c Calcul de la longueur de melange. … … 292 284 enddo 293 285 enddo 294 295 286 c==================================================================== 296 287 c Yamada 2.0 … … 402 393 403 394 endif ! Fin du cas 8 404 405 c print*,'OK8'406 407 395 c==================================================================== 408 396 c Calcul des coefficients de mélange … … 466 454 endif 467 455 468 c print*,'YAMADA4 1'469 470 456 c Estimations de w'2 et T'2 d'apres Abdela et McFarlane 471 457 … … 481 467 c print*,'OKFIN' 482 468 first=.false. 483 return469 484 470 end
Note: See TracChangeset
for help on using the changeset viewer.