Changeset 1758 in lmdz_wrf
- Timestamp:
- Jan 17, 2018, 12:42:28 PM (7 years ago)
- Location:
- trunk/tools
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/diag_tools.py
r1726 r1758 32 32 # Forcompute_clt: Function to compute the total cloud fraction following 'newmicro.F90' from LMDZ via a Fortran module 33 33 # W_diagnostic: Class to compute WRF diagnostics variables 34 # Forcompute_psl_ptarget: Function to compute the sea-level pressure following target_pressure value found in `p_interp.F' 34 35 35 36 # Others just providing variable values … … 737 738 gen.percendone(ix*dy + iy,dx*dy, 5, 'diagnosted') 738 739 if terval[iy,ix] > 0.: 739 mslpv[iy,ix] = var_mslp(pressure[:,iy,ix], psurface[iy,ix], 740 mslpv[iy,ix] = var_mslp(pressure[:,iy,ix], psurface[iy,ix], \ 740 741 terval[iy,ix], temperature[:,iy,ix], qvapor[:,iy,ix]) 741 742 else: … … 743 744 744 745 return mslpv, mslpdims, mslpvdims 746 747 def Forcompute_psl_ptarget(pa, ps, ta, hgt, qv, target_pressure, dimns, dimvns): 748 """ Function to compute the sea-level pressure following target_pressure value 749 found in `p_interp.F' 750 Forcompute_psl_ptarget(pa, ps, ta, hgt, qv, dimns, dimvns) 751 [pa]= pressure values (assuming [[t],z,y,x]) [Pa] 752 [ps]= surface pressure values (assuming [[t],y,x]) [Pa] 753 [ta]= air-temperature values (assuming [[t],z,y,x]) [K] 754 [hgt]= opography (assuming [y,x]) [m] 755 [qv]= water vapour mixing ratio (assuming [[t],z,y,x]) [kgkg-1] 756 [dimns]= list of the name of the dimensions of [pa] 757 [dimvns]= list of the name of the variables with the values of the 758 dimensions of [pa] 759 """ 760 fname = 'Forcompute_psl_ptarget' 761 762 psldims = dimns[:] 763 pslvdims = dimvns[:] 764 765 if len(pa.shape) == 4: 766 psl = np.zeros((pa.shape[0],pa.shape[2],pa.shape[3]), dtype=np.float) 767 dx = pa.shape[3] 768 dy = pa.shape[2] 769 dz = pa.shape[1] 770 dt = pa.shape[0] 771 psldims.pop(1) 772 pslvdims.pop(1) 773 774 pslt= fdin.module_fordiagnostics.compute_psl_ptarget4d2( \ 775 press=pa[:].transpose(), ps=ps[:].transpose(), hgt=hgt[:].transpose(), \ 776 ta=ta[:].transpose(), qv=qv[:].transpose(), ptarget=target_pressure, \ 777 d1=dx, d2=dy, d3=dz, d4=dt) 778 psl = pslt.transpose() 779 else: 780 print errormsg 781 print ' ' + fname + ': rank', len(pa.shape), 'not ready !!' 782 print ' it only computes 4D [t,z,y,x] rank values' 783 quit(-1) 784 785 return psl, psldims, pslvdims 745 786 746 787 def compute_OMEGAw(omega, p, t, dimns, dimvns): -
trunk/tools/diagnostics.inf
r1582 r1758 22 22 prw, WRFprw, WRFdens@QVAPOR 23 23 psl, WRFmslp, WRFp@PSFC@HGT@WRFt@QVAPOR 24 psl, WRFpsl_ptarget, WRFp@PSFC@WRFt@HGT@QVAPOR 24 25 rvor, rvor, U@V 25 26 rvors, WRFrvors, U10@V10@WRFpos -
trunk/tools/diagnostics.py
r1675 r1758 30 30 # def Forcompute_cllmh: Function to compute cllmh: low/medium/hight cloud fraction following newmicro.F90 from LMDZ via Fortran subroutine 31 31 # Forcompute_clt: Function to compute the total cloud fraction following 'newmicro.F90' from LMDZ via a Fortran module 32 # Forcompute_psl_ptarget: Function to compute the sea-level pressure following target_pressure value found in `p_interp.F' 32 33 33 34 # Others just providing variable values … … 78 79 'OMEGAw', 'RAINTOT', \ 79 80 'rvors', 'td', 'turbulence', 'WRFclivi', 'WRFclwvl', 'WRFgeop', 'WRFp', \ 80 'WRFrvors', 'ws', 'wds', 'wss', 'WRFheight', 'WRFheightrel', 'WRFua', 'WRFva'] 81 'WRFpsl_ptarget', 'WRFrvors', 'ws', 'wds', 'wss', 'WRFheight', 'WRFheightrel', \ 82 'WRFua', 'WRFva'] 81 83 82 84 methods = ['accum', 'deaccum'] … … 331 333 for idiag in range(Ndiags): 332 334 print ' diagnostic:',diags[idiag] 333 diag = diags[idiag].split('|')[0]335 diagn = diags[idiag].split('|')[0] 334 336 depvars = diags[idiag].split('|')[1].split('@') 335 337 if diags[idiag].split('|')[1].find('@') != -1: 336 338 depvars = diags[idiag].split('|')[1].split('@') 337 if depvars[0] == 'deaccum': diag ='deaccum'338 if depvars[0] == 'accum': diag ='accum'339 if depvars[0] == 'deaccum': diagn='deaccum' 340 if depvars[0] == 'accum': diagn='accum' 339 341 for depv in depvars: 340 342 if not ncobj.variables.has_key(depv) and not \ … … 356 358 quit(-1) 357 359 358 print "\n Computing '" + diag + "' from: ", depvars, '...'360 print "\n Computing '" + diagn + "' from: ", depvars, '...' 359 361 360 362 # acraintot: accumulated total precipitation from WRF RAINC, RAINNC 361 if diag == 'ACRAINTOT':363 if diagn == 'ACRAINTOT': 362 364 363 365 var0 = ncobj.variables[depvars[0]] … … 378 380 # accum: acumulation of any variable as (Variable, time [as [tunits] 379 381 # from/since ....], newvarname) 380 elif diag == 'accum':382 elif diagn == 'accum': 381 383 382 384 var0 = ncobj.variables[depvars[0]] … … 403 405 404 406 # cllmh with cldfra, pres 405 elif diag == 'cllmh':407 elif diagn == 'cllmh': 406 408 407 409 var0 = ncobj.variables[depvars[0]] … … 428 430 429 431 # clt with cldfra 430 elif diag == 'clt':432 elif diagn == 'clt': 431 433 432 434 var0 = ncobj.variables[depvars] … … 443 445 # deaccum: deacumulation of any variable as (Variable, time [as [tunits] 444 446 # from/since ....], newvarname) 445 elif diag == 'deaccum':447 elif diagn == 'deaccum': 446 448 447 449 var0 = ncobj.variables[depvars[1]] … … 465 467 466 468 # LMDZrh (pres, t, r) 467 elif diag == 'LMDZrh':469 elif diagn == 'LMDZrh': 468 470 469 471 var0 = ncobj.variables[depvars[0]][:] … … 475 477 476 478 # LMDZrhs (psol, t2m, q2m) 477 elif diag == 'LMDZrhs':479 elif diagn == 'LMDZrhs': 478 480 479 481 var0 = ncobj.variables[depvars[0]][:] … … 489 491 490 492 # mslp: mean sea level pressure (pres, psfc, terrain, temp, qv) 491 elif diag == 'mslp' or diag== 'WRFmslp':493 elif diagn == 'mslp' or diagn == 'WRFmslp': 492 494 493 495 var1 = ncobj.variables[depvars[1]][:] … … 495 497 var4 = ncobj.variables[depvars[4]][:] 496 498 497 if diag == 'WRFmslp':499 if diagn == 'WRFmslp': 498 500 var0 = WRFp 499 501 var3 = WRFt … … 518 520 519 521 # OMEGAw (omega, p, t) from NCL formulation (https://www.ncl.ucar.edu/Document/Functions/Contributed/omega_to_w.shtml) 520 elif diag == 'OMEGAw':522 elif diagn == 'OMEGAw': 521 523 522 524 var0 = ncobj.variables[depvars[0]][:] … … 532 534 533 535 # raintot: instantaneous total precipitation from WRF as (RAINC + RAINC) / dTime 534 elif diag == 'RAINTOT':536 elif diagn == 'RAINTOT': 535 537 536 538 var0 = ncobj.variables[depvars[0]] … … 585 587 586 588 # rhs (psfc, t, q) from TimeSeries files 587 elif diag == 'TSrhs':589 elif diagn == 'TSrhs': 588 590 589 591 p0=100000. … … 600 602 601 603 # td (psfc, t, q) from TimeSeries files 602 elif diag == 'TStd' or diag== 'td':604 elif diagn == 'TStd' or diagn == 'td': 603 605 604 606 var0 = ncobj.variables[depvars[0]][:] … … 614 616 615 617 # td (psfc, t, q) from TimeSeries files 616 elif diag == 'TStdC' or diag== 'tdC':618 elif diagn == 'TStdC' or diagn == 'tdC': 617 619 618 620 var0 = ncobj.variables[depvars[0]][:] … … 629 631 630 632 # wds (u, v) 631 elif diag == 'TSwds' or diag== 'wds' :633 elif diagn == 'TSwds' or diagn == 'wds' : 632 634 633 635 var0 = ncobj.variables[depvars[0]][:] … … 642 644 643 645 # wss (u, v) 644 elif diag == 'TSwss' or diag== 'wss':646 elif diagn == 'TSwss' or diagn == 'wss': 645 647 646 648 var0 = ncobj.variables[depvars[0]][:] … … 655 657 656 658 # turbulence (var) 657 elif diag == 'turbulence':659 elif diagn == 'turbulence': 658 660 659 661 var0 = ncobj.variables[depvars][:] … … 677 679 678 680 # WRFbils fom WRF as HFX + LH 679 elif diag == 'WRFbils':681 elif diagn == 'WRFbils': 680 682 681 683 var0 = ncobj.variables[depvars[0]][:] … … 689 691 690 692 # WRFclivi WRF water vapour path WRFdens, QICE, QGRAUPEL, QHAIL 691 elif diag == 'WRFclivi':693 elif diagn == 'WRFclivi': 692 694 693 695 var0 = WRFdens … … 714 716 715 717 # WRFclwvl WRF water cloud-condensed path WRFdens, QCLOUD, QICE, QGRAUPEL, QHAIL 716 elif diag == 'WRFclwvl':718 elif diagn == 'WRFclwvl': 717 719 718 720 var0 = WRFdens … … 739 741 740 742 # WRFgeop geopotential from WRF as PH + PHB 741 elif diag == 'WRFgeop':743 elif diagn == 'WRFgeop': 742 744 var0 = ncobj.variables[depvars[0]][:] 743 745 var1 = ncobj.variables[depvars[1]][:] … … 762 764 ncvar.insert_variable(ncobj, 'zg', diagout, dnames, diagoutvd, newnc) 763 765 766 # WRFmslp_ptarget sea-level pressure following ptarget method as WRFp, PSFC, WRFt, HGT, QVAPOR 767 elif diagn == 'WRFpsl_ptarget': 768 var0 = WRFp 769 var1 = ncobj.variables[depvars[1]][:] 770 var2 = WRFt 771 var3 = ncobj.variables[depvars[3]][0,:,:] 772 var4 = ncobj.variables[depvars[4]][:] 773 774 dnamesvar = list(ncobj.variables[depvars[4]].dimensions) 775 dvnamesvar = ncvar.var_dim_dimv(dnamesvar,dnames,dvnames) 776 777 print 'Lluis dnamesvar:', dnamesvar 778 print 'Lluis dvnamesvar:', dvnamesvar 779 diagout = np.zeros(var0.shape, dtype=np.float) 780 diagout, diagoutd, diagoutvd = diag.Forcompute_psl_ptarget(var0, var1, var2, \ 781 var3, var4, 700000., dnamesvar, dvnamesvar) 782 783 print 'Lluis diagoutd:', diagoutd 784 print 'Lluis diagoutvd:', diagoutvd 785 print 'Lluis shape:', diagout.shape 786 # Removing the nonChecking variable-dimensions from the initial list 787 varsadd = [] 788 for nonvd in NONchkvardims: 789 if gen.searchInlist(dvnames,nonvd): diagoutvd.remove(nonvd) 790 varsadd.append(nonvd) 791 print 'Lluis after:', diagoutvd 792 print 'Lluis diagoutd:', diagoutd 793 print 'Lluis diagoutvd:', diagoutvd 794 print 'Lluis shape:', diagout.shape 795 796 ncvar.insert_variable(ncobj, 'psl', diagout, diagoutd, diagoutvd, newnc) 797 764 798 # WRFp pressure from WRF as P + PB 765 elif diag == 'WRFp':799 elif diagn == 'WRFp': 766 800 767 801 diagout = WRFp … … 770 804 771 805 # WRFpos 772 elif diag == 'WRFpos':806 elif diagn == 'WRFpos': 773 807 774 808 dnamesvar = ncobj.variables['MAPFAC_M'].dimensions … … 778 812 779 813 # WRFprw WRF water vapour path WRFdens, QVAPOR 780 elif diag == 'WRFprw':814 elif diagn == 'WRFprw': 781 815 782 816 var0 = WRFdens … … 797 831 798 832 # WRFrh (P, T, QVAPOR) 799 elif diag == 'WRFrh':833 elif diagn == 'WRFrh': 800 834 801 835 dnamesvar = list(ncobj.variables[depvars[2]].dimensions) … … 805 839 806 840 # WRFrhs (PSFC, T2, Q2) 807 elif diag == 'WRFrhs':841 elif diagn == 'WRFrhs': 808 842 809 843 var0 = ncobj.variables[depvars[0]][:] … … 818 852 819 853 # rvors (u10, v10, WRFpos) 820 elif diag == 'WRFrvors':854 elif diagn == 'WRFrvors': 821 855 822 856 var0 = ncobj.variables[depvars[0]] … … 831 865 832 866 # WRFt (T, P, PB) 833 elif diag == 'WRFt':867 elif diagn == 'WRFt': 834 868 var0 = ncobj.variables[depvars[0]][:] 835 869 var1 = ncobj.variables[depvars[1]][:] … … 854 888 855 889 # WRFua (U, V, SINALPHA, COSALPHA) to be rotated !! 856 elif diag == 'WRFua':890 elif diagn == 'WRFua': 857 891 var0 = ncobj.variables[depvars[0]][:] 858 892 var1 = ncobj.variables[depvars[1]][:] … … 884 918 885 919 # WRFua (U, V, SINALPHA, COSALPHA) to be rotated !! 886 elif diag == 'WRFva':920 elif diagn == 'WRFva': 887 921 var0 = ncobj.variables[depvars[0]][:] 888 922 var1 = ncobj.variables[depvars[1]][:] … … 912 946 913 947 # WRFtime 914 elif diag == 'WRFtime':948 elif diagn == 'WRFtime': 915 949 916 950 diagout = WRFtime … … 922 956 923 957 # ws (U, V) 924 elif diag == 'ws':958 elif diagn == 'ws': 925 959 926 960 var0 = ncobj.variables[depvars[0]][:] … … 949 983 950 984 # wss (u10, v10) 951 elif diag == 'wss':985 elif diagn == 'wss': 952 986 953 987 var0 = ncobj.variables[depvars[0]][:] … … 962 996 963 997 # WRFheight height from WRF geopotential as WRFGeop/g 964 elif diag == 'WRFheight':998 elif diagn == 'WRFheight': 965 999 966 1000 diagout = WRFgeop/grav … … 976 1010 977 1011 # WRFheightrel relative-height from WRF geopotential as WRFgeop(PH + PHB)/g-HGT 'WRFheightrel|PH@PHB@HGT 978 elif diag == 'WRFheightrel':1012 elif diagn == 'WRFheightrel': 979 1013 var0 = ncobj.variables[depvars[0]][:] 980 1014 var1 = ncobj.variables[depvars[1]][:] … … 997 1031 else: 998 1032 print errormsg 999 print ' ' + main + ": diagnostic '" + diag + "' not ready!!!"1033 print ' ' + main + ": diagnostic '" + diagn + "' not ready!!!" 1000 1034 print ' available diagnostics: ', availdiags 1001 1035 quit(-1) … … 1024 1058 # Global attributes 1025 1059 ## 1026 add_global_PyNCplot(newnc, main, None, '2.0')1060 ncvar.add_global_PyNCplot(newnc, main, None, '2.0') 1027 1061 1028 1062 gorigattrs = ncobj.ncattrs() -
trunk/tools/module_ForDiagnostics.f90
r1608 r1758 14 14 15 15 !!!!!!! Calculations 16 ! compute_cllmh4D3: Computation of low, medium and high cloudiness from a 4D CLDFRA and pressure being 3rd dimension the z-dim 17 ! compute_cllmh3D3: Computation of low, medium and high cloudiness from a 3D CLDFRA and pressure being 3rd dimension the z-dim 16 ! compute_cllmh4D3: Computation of low, medium and high cloudiness from a 4D CLDFRA and pressure being 17 ! 3rd dimension the z-dim 18 ! compute_cllmh3D3: Computation of low, medium and high cloudiness from a 3D CLDFRA and pressure being 19 ! 3rd dimension the z-dim 18 20 ! compute_cllmh: Computation of low, medium and high cloudiness 19 21 ! compute_clt4D3: Computation of total cloudiness from a 4D CLDFRA being 3rd dimension the z-dim 20 22 ! compute_clt3D3: Computation of total cloudiness from a 3D CLDFRA being 3rd dimension the z-dim 21 23 ! compute_clt: Computation of total cloudiness 24 ! compute_psl_ptarget4d2: Compute sea level pressure using a target pressure. Similar to the Benjamin 25 ! and Miller (1990). Method found in p_interp.F90 26 ! compute_tv4d: 4D calculation of virtual temperaure 27 ! VirtualTemp1D: Function for 1D calculation of virtual temperaure 22 28 23 29 !!! … … 449 455 END SUBROUTINE compute_clt 450 456 457 SUBROUTINE compute_psl_ptarget4d2(press, ps, hgt, ta, qv, ptarget, psl, d1, d2, d3, d4) 458 ! Subroutine to compute sea level pressure using a target pressure. Similar to the Benjamin 459 ! and Miller (1990). Method found in p_interp.F90 460 461 IMPLICIT NONE 462 463 INTEGER, INTENT(in) :: d1, d2, d3, d4 464 REAL(r_k), DIMENSION(d1,d2,d3,d4), INTENT(in) :: press, ta, qv 465 REAL(r_k), DIMENSION(d1,d2,d4), INTENT(in) :: ps 466 REAL(r_k), DIMENSION(d1,d2), INTENT(in) :: hgt 467 REAL(r_k), INTENT(in) :: ptarget 468 REAL(r_k), DIMENSION(d1,d2,d4), INTENT(out) :: psl 469 470 ! Local 471 INTEGER :: i, j, it 472 INTEGER :: kin 473 INTEGER :: kupper 474 REAL(r_k) :: dpmin, dp, tbotextrap, & 475 tvbotextrap, virtual 476 ! Exponential related to standard atmosphere lapse rate r_d*gammav/g 477 REAL(r_k), PARAMETER :: expon=r_d*gammav/grav 478 479 !!!!!!! Variables 480 ! press: Atmospheric pressure [Pa] 481 ! ps: surface pressure [Pa] 482 ! hgt: surface height 483 ! ta: temperature [K] 484 ! qv: water vapor mixing ratio 485 ! dz: number of vertical levels 486 ! psl: sea-level pressure 487 488 fname = 'compute_psl_ptarget4d2' 489 490 ! Minimal distance between pressures [Pa] 491 dpmin=1.e4 492 psl=0. 493 494 DO i=1,d1 495 DO j=1,d2 496 IF (hgt(i,j) /= 0.) THEN 497 DO it=1,d4 498 499 ! target pressure to be used for the extrapolation [Pa] (defined in namelist.input) 500 ! ptarget = 70000. default value 501 502 ! We are below both the ground and the lowest data level. 503 504 ! First, find the model level that is closest to a "target" pressure 505 ! level, where the "target" pressure is delta-p less that the local 506 ! value of a horizontally smoothed surface pressure field. We use 507 ! delta-p = 150 hPa here. A standard lapse rate temperature profile 508 ! passing through the temperature at this model level will be used 509 ! to define the temperature profile below ground. This is similar 510 ! to the Benjamin and Miller (1990) method, using 511 ! 700 hPa everywhere for the "target" pressure. 512 513 kupper = 0 514 loop_kIN: DO kin=d3,1,-1 515 kupper = kin 516 dp=abs( press(i,j,kin,it) - ptarget ) 517 IF (dp .GT. dpmin) EXIT loop_kIN 518 dpmin=min(dpmin,dp) 519 ENDDO loop_kIN 520 521 tbotextrap=ta(i,j,kupper,it)*(ps(i,j,it)/ptarget)**expon 522 tvbotextrap=virtualTemp1D(tbotextrap,qv(i,j,kupper,it)) 523 524 psl(i,j,it) = ps(i,j,it)*((tvbotextrap+gammav*hgt(i,j))/tvbotextrap)**(1/expon) 525 END DO 526 ELSE 527 psl(i,j,:) = ps(i,j,:) 528 END IF 529 END DO 530 END DO 531 532 RETURN 533 534 END SUBROUTINE compute_psl_ptarget4d2 535 536 SUBROUTINE compute_tv4d(ta,qv,tv,d1,d2,d3,d4) 537 ! 4D calculation of virtual temperaure 538 539 IMPLICIT NONE 540 541 INTEGER, INTENT(in) :: d1, d2, d3, d4 542 REAL(r_k), DIMENSION(d1,d2,d3,d4), INTENT(in) :: ta, qv 543 REAL(r_k), DIMENSION(d1,d2,d3,d4), INTENT(out) :: tv 544 545 ! Variables 546 ! ta: temperature [K] 547 ! qv: mixing ratio [kgkg-1] 548 ! tv: virtual temperature 549 550 tv = ta*(oneRK+(qv/epsilonv))/(oneRK+qv) 551 552 END SUBROUTINE compute_tv4d 553 554 FUNCTION VirtualTemp1D (ta,qv) result (tv) 555 ! 1D calculation of virtual temperaure 556 557 IMPLICIT NONE 558 559 REAL(r_k), INTENT(in) :: ta, qv 560 REAL(r_k) :: tv 561 562 ! Variables 563 ! ta: temperature [K] 564 ! qv: mixing ratio [kgkg-1] 565 566 tv = ta*(oneRK+(qv/epsilonv))/(oneRK+qv) 567 568 END FUNCTION VirtualTemp1D 569 570 451 571 END MODULE module_ForDiagnostics -
trunk/tools/module_definitions.f90
r1676 r1758 26 26 ! Scientific constants 27 27 REAL(r_k), PARAMETER :: grav = 9.81 ! gravity [ms-1] 28 REAL(r_k), PARAMETER :: Cp = 29.07 ! gravity [Jmol-1K-1] 29 REAL(r_k), PARAMETER :: Cp_g = 1.0035 ! gravity [Jg-1K-1] 30 REAL(r_k), PARAMETER :: Rd = 8.3144598 ! gravity [JKgm2s-2K-1mol-1/JK-1mol-1] 31 REAL(r_k), PARAMETER :: RCp = 0.286 ! gravity [-] 32 REAL(r_k), PARAMETER :: p0ref = 100000 ! gravity [Pa] 28 REAL(r_k), PARAMETER :: Cpmol = 29.07 ! Molar gas heat capacity at constant pressure [Jmol-1K-1] 29 REAL(r_k), PARAMETER :: Cp_g = 1.0035 ! Gas heat capacity [Jg-1K-1] 30 REAL(r_k), PARAMETER :: Rstar = 8.3144621 ! Universal molar air constant [JKgm2s-2K-1mol-1/JK-1mol-1] 31 REAL(r_k), PARAMETER :: RCp = 0.286 ! R*Cp [-] 32 REAL(r_k), PARAMETER :: p0ref = 100000 ! pressure reference [Pa] 33 ! Ratio between molecular weights of water and dry air 34 REAL(r_k), PARAMETER :: mol_watdry = 0.622 35 ! Standard atmospheric lapse-rate [Km-1] 36 REAL, PARAMETER :: gammav = 6.5e-3 37 ! WRF Gas constant for dry air [JK-1kg-1] 38 REAL(r_k), PARAMETER :: r_d = 287. 39 ! WRF Gas constant for wet air [JK-1kg-1] 40 REAL(r_k), PARAMETER :: r_v = 461.6 41 ! WRF Dry air heat capacity [JK-1kg-1] 42 REAL(r_k), PARAMETER :: cp = 7.*r_d/2. 43 ! WRF p 1000 mb constant [Pa] 44 REAL(r_k), PARAMETER :: p1000mb = 100000. 45 ! WRF Latent Heat for water vapour [Jkg-1] 46 REAL(r_k), PARAMETER :: XLV = 2.5E6 47 ! epislon r_d/r_v for Virtual temperature 48 REAL(r_k), PARAMETER :: epsilonv = 0.622 33 49 34 50 END MODULE module_definitions
Note: See TracChangeset
for help on using the changeset viewer.