[ncl-talk] averaging of height levels

Gurer, Kemal@ARB kemal.gurer at arb.ca.gov
Wed Oct 21 09:35:38 MDT 2020


Hello Dennis,

Thank you very much for the solution that you offered. It works now. With my sincere regards,

Kemal.

From: Dennis Shea <shea at ucar.edu>
Sent: Tuesday, October 20, 2020 7:06 PM
To: Gurer, Kemal at ARB <kemal.gurer at arb.ca.gov>
Cc: ncl-talk at ucar.edu
Subject: Re: [ncl-talk] averaging of height levels

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
The following is what I would do.
=====

The 'zfull' has lat and lon coordinate variables.
'zfull' does not have any vertical coordinate variable.
"nVertLevelsP" is the name of the interface level dimension
However, it no values are associated with it.

Further, based upon the 'zfulls  long name ... the variable contains *INTERFACE* values.
There is one more interface level than "mid levels".

===============================================
;   zfull(latitude,longitude,nVertLevelsP)      ; (98,108,54)
;        Coordinates:
;           latitude: [31.6178..42.50189]
;           longitude: [-129.0292..-113.0208]
;           long_name: Geometric height of layer INTERFACES
;           units :       m MSL

    dims_zfull = dimsizes(zfull)
    nlat   = dims_zfull(0)
    mlon = dims_zfull(1)
    klevi = dims_zfull(2)         ; number of *INTERFACE* levels

; Compute heights at mid-levels using interface values

    zmid           = 0.5*( zfull(:,:,0:klevi-2)+zfull(:,:,1:klevi-1) )
    zmid at long_name = "Geometric height of mid-levels"
    zmid at units     = zfull at units
    copy_VarCoords(zfull(:,:,0), zmid(:,:,0))
    zmid!2 = "levz_mid"        ; name vertical coordinate variable

    printVarSummary(zmid)  ; zmid(latitude,longitude,levz_mid)      ; (98,108,53)
    printMinMax(zmid,1)
    print("==========")

; Create nominal mid-level surfaces.

 ;;levz_mid    = (/.../)      ; klev = klevi-1   (one less than the number of interface levels
 ;;levz_mid!0 = "levz_mid"
 ;;levz_mid at long_name = "nominal height for mid-level surfaces"
 ;;levz_mid at units           = zmid at units
 ;;;zmid&levz_mid           = levz_mid   ; assign values to vertical coord variable

  ;;printVarSummary(zmid)
  ;;printMinMax(zmid,1)
  ;;print("==========")

On Tue, Oct 20, 2020 at 5:15 PM Gurer, Kemal at ARB <kemal.gurer at arb.ca.gov<mailto:kemal.gurer at arb.ca.gov>> wrote:
Hello again,

I forgot to include the mid-level information about the zhalf1, zhalf2:

Variable: zz1
Type: float
Total Size: 2286144 bytes
            571536 values
Number of Dimensions: 3
Dimensions and sizes:   [latitude | 98] x [longitude | 108] x [levs | 54]
Coordinates:
            latitude: [31.6178..42.50189]
            longitude: [-129.0292..-113.0208]
            levs: [9.96921e+36..9.96921e+36]
Number Of Attributes: 1
  _FillValue :  9.96921e+36
(0)     min=-64.3161   max=28858.8

Variable: zhalf1
Type: float
Total Size: 2286144 bytes
            571536 values
Number of Dimensions: 3
Dimensions and sizes:   [levs | 54] x [latitude | 98] x [longitude | 108]
Coordinates:
            levs: [9.96921e+36..9.96921e+36]
            latitude: [31.6178..42.50189]
            longitude: [-129.0292..-113.0208]
Number Of Attributes: 1
  _FillValue :  9.96921e+36

Variable: zz2
Type: float
Total Size: 2286144 bytes
            571536 values
Number of Dimensions: 3
Dimensions and sizes:   [latitude | 98] x [longitude | 108] x [levs | 54]
Coordinates:
            latitude: [31.6178..42.50189]
            longitude: [-129.0292..-113.0208]
            levs: [9.96921e+36..9.96921e+36]
Number Of Attributes: 1
  _FillValue :  9.96921e+36
(0)     min=-64.3161   max=28858.8

Variable: zhalf2
Type: float
Total Size: 2286144 bytes
            571536 values
Number of Dimensions: 3
Dimensions and sizes:   [levs | 54] x [latitude | 98] x [longitude | 108]
Coordinates:
            levs: [9.96921e+36..9.96921e+36]
            latitude: [31.6178..42.50189]
            longitude: [-129.0292..-113.0208]
Number Of Attributes: 1
  _FillValue :  9.96921e+36

---------------------------------------------------------
Also, the additional information about zfull variable:

Variable: zfull
Type: float
Total Size: 2370816 bytes
            592704 values
Number of Dimensions: 3
Dimensions and sizes:   [latitude | 98] x [longitude | 108] x [nVertLevelsP1 | 56]
Coordinates:
            latitude: [31.6178..42.50189]
            longitude: [-129.0292..-113.0208]
Number Of Attributes: 2
  long_name :   Geometric height of layer interfaces
  units :       m MSL
(0)     Geometric height of layer interfaces (m MSL) : min=-74.3167   max=29983.8

Thanks again for your help.

Kemal.

From: Gurer, Kemal at ARB
Sent: Tuesday, October 20, 2020 4:10 PM
To: Dennis Shea <shea at ucar.edu<mailto:shea at ucar.edu>>; ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
Subject: RE: [ncl-talk] averaging of height levels

Hello Dennis,

I agree with you. I always included the outcome of my code in the past, but this time knowing almost for sure that I am making an obvious error somewhere that I cannot see, I assumed someone who is more experienced than me would catch it right away. I am sorry for not sending a complete question.

Here is my code in attempting to calculate the mid-level heights from full level heights via two method:

; ------- 1st variable and method ------------------------------------------------------

    zz1 = new((/nlats, nlons, nlevs-1/),"float")

    zz1!0 = "latitude"
    zz1!1 = "longitude"
    zz1!2 = "levs"
    zz1&latitude = latitude
    zz1&longitude = longitude
    zz1&levs = levs

    do i=0,nlevs-2
      zz1(:,:,i) = 0.5 * (zfull(:,:,i)+zfull(:,:,i+1))
    end do

    printVarSummary(zz1)
    printMinMax(zz1,0)

    zhalf1 = zz1(levs|:,latitude|:,longitude|:)
    printVarSummary(zhalf1)

; ------- 2nd variable and method ------------------------------------------------------

    zz2 = new((/nlats, nlons, nlevs-1/),"float")

    zz2!0 = "latitude"
    zz2!1 = "longitude"
    zz2!2 = "levs"
    zz2&latitude = latitude
    zz2&longitude = longitude
    zz2&levs = levs

    zz2 = 0.5*( zfull(:,:,0:nlevs-2) + zfull(:,:,1:nlevs-1) )

    printVarSummary(zz2)
    printMinMax(zz2,0)

    zhalf2 = zz2(levs|:,latitude|:,longitude|:)
    printVarSummary(zhalf2)
; -------------------------------------------------------------

Here is the outcome of zfull values at zfull(0,0,:)

zfull =
  0, 20, 44, 72.8, 107.4, 148.8, 198.6, 258.3, 330, 416, 519.2, 643, 791.6,
    969.9001, 1183.9, 1440.7, 1748.8, 2118.6, 2562.3, 3094.8, 3733.8, 4483.8,
    5233.799, 5983.799, 6733.8, 7483.799, 8233.8, 8983.8, 9733.8, 10483.8,
    11233.8, 11983.8, 12733.8, 13483.8, 14233.8, 14983.8, 15733.8, 16483.8,
    17233.8, 17983.8, 18733.8, 19483.8, 20233.8, 20983.8, 21733.8, 22483.8,
    23233.8, 23983.8, 24733.8, 25483.8, 26233.8, 26983.8, 27733.8, 28483.8,
    29233.8, 29983.8, 0, 20, 44, 72.8, 107.4, 148.8, 198.6, 258.3, 330, 416,
    519.2, 643, 791.6, 969.9, 1183.9, 1440.7, 1748.8, 2118.6, 2562.3, 3094.8,
    3733.8, 4483.8, 5233.8, 5983.8, 6733.8, 7483.8, 8233.8, 8983.8, 9733.8,
    10483.8, 11233.8, 11983.8, 12733.8, 13483.8, 14233.8, 14983.8, 15733.8,
    16483.8, 17233.8, 17983.8, 18733.8, 19483.8, 20233.8, 20983.8, 21733.8,
    22483.8, 23233.8, 23983.8, 24733.8, 25483.8, 26233.8, 26983.8,
  27733.8, 28483.8, 29233.8, 29983.8

Here is the outcome of both zhalf1 and zhalf2 at (0,0,:) point:

zhalf1 and 2 =
  9.999999, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9.999999, 10, 10, 10, 10, 10,
    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
    10, 10, 10, 9.999999, 10, 10, 10, 9.999999, 10, 10, 10, 10, 10, 10, 10,
    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 423.6477,
    378.6578, 662.8945, 1097.154, 1152.52, 1072.004, 1299.672, 1005.835,
    592.6567, 270.4732, 318.5765, 13.87211, 13.37675, 10, 10, 49.30841,
    48.51982, 38.2547, 10.43509, 20.66064, 89.90919, 139.163, 114.4501,
    201.582, 276.1719,
  10, 10, 10, 10, 10, 10, 10,

Thank you for your time and expertise. With regards,

Kemal.

From: Dennis Shea <shea at ucar.edu<mailto:shea at ucar.edu>>
Sent: Tuesday, October 20, 2020 3:40 PM
To: Gurer, Kemal at ARB <kemal.gurer at arb.ca.gov<mailto:kemal.gurer at arb.ca.gov>>
Cc: ncl-talk at ucar.edu<mailto:ncl-talk at ucar.edu>
Subject: Re: [ncl-talk] averaging of height levels

CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
It is ALWAYS best to include the output from printVarSummary when submitting a question.

printVarSummary(zfull)
===
To me, what you have done is correct.

A statement like: "since the half height levels are strange"

does not tell people much. What is "strange" about the values?



On Mon, Oct 19, 2020 at 4:15 PM Gurer, Kemal at ARB via ncl-talk <ncl-talk at mailman.ucar.edu<mailto:ncl-talk at mailman.ucar.edu>> wrote:
Hi ncl’ers,

I have a 3d array for the full model height levels, say, zfull(nlat,nlon,nlevs). I want to calculate the midpoints of the height levels of the full model heights and put it into a new  array, say zhalf(nlat,nlon,nlevs-1). The following code:

    do i=0,nlevs-2
       zhalf(:,:,i) = 0.5 * (zfull(:,:,i)+zfull(:,:,i+1))
    end do

or, the following code:

   zhalf = 0.5*( zfull(:,:,0:nlevs-2) + zfull(:,:,1:nlevs-1) )

generates some data, but I don’t know and think what I am doing is right since the half height levels are strange. How can I calculate the mid-points of height levels of a 3d array of height levels?

Thank you for your help.

_______________________________________________
ncl-talk mailing list
ncl-talk at mailman.ucar.edu<mailto:ncl-talk at mailman.ucar.edu>
List instructions, subscriber options, unsubscribe:
https://mailman.ucar.edu/mailman/listinfo/ncl-talk<https://gcc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmailman.ucar.edu%2Fmailman%2Flistinfo%2Fncl-talk&data=04%7C01%7Ckemal.gurer%40arb.ca.gov%7Ca8cf3f16b19b4154b62c08d87565dc22%7C9de5aaee778840b1a438c0ccc98c87cc%7C0%7C0%7C637388427644308919%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=hrUw4N3THRTb%2BxqI0GJ2%2BCsjLf9QfuuX9%2FXBEGWuqfo%3D&reserved=0>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20201021/d3f4ebd9/attachment.html>


More information about the ncl-talk mailing list