[ncl-talk] Daily averaged ozone concentration

Dennis Shea shea at ucar.edu
Sat Aug 12 14:08:00 MDT 2017


Hello Carlos

Please post all questions to ncl-talk. That is important. This response
includes ncl-talk.
I asked you to look at the tutorial. It contains a lot of useful material.

[1]
As noted in many graphic examples and the tutorial, you can set the
min/max/interval. For example:

    res at cnLevelSelectionMode = "ManualLevels" ; set manual contour levels
    res at cnMinLevelValF = 0.                                 ; set min
contour level
    res at cnMaxLevelValF = 90.                             ; set max contour
level
    res at cnLevelSpacingF = 5.                               ; set contour
spacing

Actually, since the O3 are never below zero. Maybe


  res at cnMinLevelValF       = 5.               ; set min contour level
  res at cnMaxLevelValF       = 90.               ; set max contour level
  res at cnLevelSpacingF      =  5.               ; set contour spacing

[2]

You can easily change the units yourself. This is very basic.

   diri  = "./"
   fili  = "o3.day.nc"
   pthi  = diri+fili
   f     = addfile(pthi, "r")
   x     = f->o3DayAvg

   x       = x*1000         ; change units
   x at units = "ppbv"         ; update units metadata

[3]
Comment: Usually a 'white-in-the-middle' colormap
is used for anomalies (eg: -50 to +50) where near-zero
values are not so important.

Assuming that low O3 values are not so important, I suggest
a colormap that starts with white or some 'light' color

http://www.ncl.ucar.edu/Document/Graphics/color_table_gallery.shtml

res at cnFillPalette = "WhiteBlueGreenYellowRed"

Use color emphasize important features.


[4] animation: Please read and experiment

https://www.ncl.ucar.edu/Applications/animate.shtml

See Examples 2 & 4

Again, please respond to ncl-talk only. Further, it is best to not
include any salutation (Hi/Dear/... Dennis). Once you do that
      'your problem is now my problem'

I am not a animation expert.


On Fri, Aug 11, 2017 at 7:30 PM, Bucaram Carbo, Carlos <
carlos.bucaramcarbo at und.edu> wrote:

>
> Hi Dennis,
>
>
> Thank you for your comments and observations. They have all been very
> helpful. As you might see on the attached *wrf_hrly_to_daily.out* file
> the *wrf_hrly_to_daily.ncl* script worked very well, as well as the new
> *plot_o3.ncl* script for visualization. We renamed the *plot_o3.ncl*
> script *plot_max_o3.ncl*, since we switched from average values to
> maximum values on the *wrf_hrly_to_daily.ncl *script. Now attached you
> will also find two .pdf files, where the corresponding full set of data for *2010-07-18
> *and *2010-07-19* were processed, using the scripts we received. On that
> note we have two small inquires regarding the results obtained so far:
>
>
>
>    1. We have observed that the plot scale of ground level o3 varies
>    sometimes from 0 - 80 ppbv to 0 - 90 ppbv. It would be ideal to fix the
>    scale to a specific range of values, say 0 - 90 ppbv for example
>    2. The o3 mixing ratio is expressed in ppmv, while the actual values
>    are intentionally expressed in ppbv, which is 1000 greater. Would
>    appreciate if the ppmv units could be changed to ppbv units, or if they
>    were erase altogether
>
>
> Also at this stage we could start gathering the maximum daily o3 values
> for every month of interest, so as to create an monthly animation month
> consisting of 30 or 31 .png files. If possible we would appreciate an
> animation script to visualize the 30 or 31 resulting .png plots in
> sequential manner, which would represent any specific month of interest.
>
>
> As before thanks for your help and feedback throughout this process.
>
>
>
> Carlos
>
> ------------------------------
> *From:* Dennis Shea <shea at ucar.edu>
> *Sent:* Friday, August 11, 2017 11:48 AM
> *To:* Bucaram Carbo, Carlos
>
> *Subject:* Re: [ncl-talk] Daily averaged ozone concentration
>
> This is offline.
>
> Some minor additional changes.
>
> =====
> wrf_hrly_to_daily.ncl
>
> The 'description' attribute is quite long. Maybe, it should be shorter ...
>
>    o3DayAvg at description = "Surface O3 Mixing Ratio"
> or
>    o3DayAvg at description = "Near Surface O3 Mixing Ratio"
>
> ====
>
> plot_o3.ncl
>
> For both loops:
>
> Replace
>    res at tiMainString  = fili+": nt="+nt
>
> With, the more meaningful
>
>    date = cd_calendar(x&Time(nt),0)
>    DATE = toint(date(0,1))+"-"+toint(date(0,2))+"-"+toint(date(0,0))  ;
> mm-dd-yyyy
>    res at tiMainString  = fili+": "+DATE
>
> ====
> There is a very good NCL tutorial at:
>    https://www.ncl.ucar.edu/Document/Manuals/NCL_User_Guide/
>
> D
>
>
>
>
>
>
> On Thu, Aug 10, 2017 at 10:31 PM, Dennis Shea <shea at ucar.edu> wrote:
>
>> Sigh!
>>
>> Apologies ... I attached the wrong scrip/plots
>>
>> On Thu, Aug 10, 2017 at 9:34 PM, Dennis Shea <shea at ucar.edu> wrote:
>>
>>> re:
>>>
>>>
>>>
>>> *fatal:Dimension sizes of left hand side do not match right hand side
>>> fatal:["Execute.c":8640]:Execute: Error occurred at or near line 99 in file
>>> wrf_hrly_to_daily.ncl*
>>>
>>> Line 99:
>>> *fnc->o3DayAvg = (o3DayAvg) *
>>>
>>> The (...) should not affect the array. Actually I have no idea why used
>>> the (...). I looked at the output and I think the issue is related to the
>>> first two lines.
>>>
>>> Replace
>>>
>>>   fnc->Time     = Time
>>>   fnc->Times    = Times                       ; original character
>>>   fnc->XLAT     = f[0]->XLAT(0,:,:)           ; no 'Time' dimension
>>>   fnc->XLONG    = f[0]->XLONG(0,:,:)
>>>   fnc->o3DayAvg = (o3DayAvg)
>>>
>>> With
>>>
>>>   fnc->o3DayAvg = o3DayAvg           ; write meta data associated with
>>> daily avg
>>>   fnc->XLAT         = f[0]->XLAT(0,:,:)  ; no 'Time' dimension
>>>   fnc->XLONG     = f[0]->XLONG(0,:,:)
>>>
>>> ========
>>>
>>> re: the plot
>>>
>>> You must look at the data.
>>> The lat/lon arrays are not global yet you have a global plot background.
>>> That should provide you with some information to investigate.
>>>
>>>
>>> *WRF files place the necessary graphic projection information with the
>>> file attributes. That is why the WRF file's attributes were copied to the
>>> 'o3.day.nc <http://o3.day.nc>' file.*
>>>
>>> ncl 0> f = addfile("o3.day.nc","r")
>>> ncl 1> xlat = f->XLAT
>>> ncl 2> printMinMax(xlat,0)
>>>
>>> (0)     LATITUDE, SOUTH IS NEGATIVE (degree_north) : min=24.4541
>>> max=52.7485
>>>
>>> ncl 3> xlon = f->XLONG
>>> ncl 4> printMinMax(xlon,0)
>>>
>>> (0)     LONGITUDE, WEST IS NEGATIVE (degree_east) : min=-115.097
>>> max=-74.9647
>>>
>>> ncl 5> print(f)
>>>
>>> variable: f
>>> Type: file
>>> filename:       o3.day
>>> path:   o3.day.nc
>>>    file global attributes:
>>> [snip]
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *MAP_PROJ_CHAR : Lambert Conformal       MAP_PROJ : 1 ...       POLE_LON
>>> :  0       POLE_LAT : 90       STAND_LON : -95.031       MOAD_CEN_LAT :
>>> 39.072       TRUELAT2 : 39.072       TRUELAT1 : 39.072       CEN_LON :
>>> -95.03101       CEN_LAT : 39.072*
>>> [snip]
>>>
>>>
>>>
>>> ============================================
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Aug 9, 2017 at 7:22 PM, Bucaram Carbo, Carlos <
>>> carlos.bucaramcarbo at und.edu> wrote:
>>>
>>>>
>>>> HI Dennis,
>>>>
>>>>
>>>> Thank for your quick reply and feedback. Attached you will see the
>>>> *wrf_hrly_to_daily.ncl* script we used to run the full set of data for
>>>> one day, as well as the small variant we used to run only one 1-hour of
>>>> data. As you might see from the corresponding* wrf_hrly_to_daily.out *files,
>>>> an error occurred when we processed the full 24-hour set of
>>>> *wrfout_d01** files. That error reads as follows:
>>>>
>>>>
>>>>
>>>>
>>>> *fatal:Dimension sizes of left hand side do not match right hand side
>>>> fatal:["Execute.c":8640]:Execute: Error occurred at or near line 99 in file
>>>> wrf_hrly_to_daily.ncl*
>>>>
>>>>
>>>> Line 99 of the *wrf_hrly_to_daily.ncl *reads as follows:
>>>>
>>>>
>>>> *fnc->o3DayAvg = (o3DayAvg) *
>>>>
>>>>
>>>> On another note when we ran the same script to process only one 1--hour
>>>> *wrfout_d01* file, the out file completes the running of the script
>>>> with no issues. Then the *o3.day.nc <http://o3.day.nc>* is created
>>>> correctly, and thus we visualize an image similar to the attached one.
>>>>
>>>>
>>>> Also we appreciate your advise regarding the commands for
>>>> the visualization script. We might get to work on that as soon as the 24
>>>> 1-hour *wrfout_d01** gridded o3 concentration values are
>>>> correspondingly gridded on the daily average 1-frame file.
>>>>
>>>>
>>>> Once again thanks for your help and feedback on the above issue,
>>>>
>>>>
>>>>
>>>> Carlos
>>>>
>>>>
>>>> ------------------------------
>>>> *From:* Dennis Shea <shea at ucar.edu>
>>>> *Sent:* Monday, August 7, 2017 7:42:37 PM
>>>> *To:* Bucaram Carbo, Carlos
>>>> *Cc:* ncl-talk at ucar.edu
>>>> *Subject:* Re: [ncl-talk] Daily averaged ozone concentration
>>>>
>>>> Your original email had:
>>>>
>>>> "find a script that would read 24 individual 1-hour wrfout_d01* output
>>>> files for every day of an entire month of the year"
>>>>
>>>> [1]++++++++++++++++++++++++++++++++++++++++++++++
>>>> Did anybody look at the .out file?
>>>>
>>>>
>>>>   filw = systemfunc("cd "+dirw+" ; ls wrfout_d01_2010-07-15_*.nc"
>>>>   pthw = dirw+filw
>>>>
>>>> ;---https://www.ncl.ucar.edu/Document/Functions/Built-in/addfiles.shtml
>>>> addfiles - University Corporation for Atmospheric Research
>>>> <https://www.ncl.ucar.edu/Document/Functions/Built-in/addfiles.shtml>
>>>> www.ncl.ucar.edu
>>>> NCL Home > Documentation > Functions > File I/O addfiles. Creates a
>>>> reference that spans multiple data files. Prototype function addfiles (
>>>> file_path [*] : string ...
>>>>
>>>>   f    = addfiles(pthw, "r")                    ; 'f' is type list
>>>>
>>>>   Times= f[:]->Times                            ; char Times(Time,
>>>> DateStrLen)
>>>>   Times_str= tostring( Times )
>>>>   print(Times_str)
>>>>
>>>> ===========
>>>> You only have **one** time step. Likely only one file!
>>>> ===========
>>>> Variable: Times_str
>>>> Type: string
>>>> Total Size: 8 bytes
>>>>             1 values
>>>> Number of Dimensions: 1
>>>> Dimensions and sizes:   [1]    <========
>>>> Coordinates:
>>>> (0)     2010-07-15_19:00:00
>>>> (0)     -----
>>>>
>>>> =====
>>>> I provided an outline of how to proceed. The 'file name string' was a
>>>> place holder for you to change for your needs
>>>> You should have used something like the following  unix style
>>>> expansions which NCL understands.
>>>>
>>>>     wrfout_d01_2010-*00.nc        ; all  wrfout_d01_2010 files for
>>>> 2010 that end with 00.nc
>>>> or
>>>>    wrfout_d01_2010-0[6-8]*00.nc     ; all wrfout_d01_2010 files for
>>>> June-Aug that end with 00.nc
>>>> or
>>>>    wrfout_d01_*00.nc     ; all wrfout_d01 files that end with 00.nc
>>>>
>>>>   filw = systemfunc("cd "+dirw+" ; ls wrfout_d01_2010-*00.nc"
>>>>   pthw = dirw+filw
>>>>   print(pthw)      ; <====== LOOK at this
>>>>
>>>>
>>>>   f    = addfiles(pthw, "r")                    ; 'f' is type list
>>>>   Times= f[:]->Times                            ; char Times(Time,
>>>> DateStrLen)
>>>>   Times_str= tostring( Times )
>>>>   print(Times_str)
>>>>
>>>> exit  ;
>>>> ========
>>>>
>>>> [2]+++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>  The netCDF file looks fine. It has only one time step because you
>>>> provided only one file.
>>>>
>>>> ========
>>>> [3] I did not provide any graphic code. I speculate you are using some
>>>> of the code you included with the original post. This included u10/v10 data
>>>> which was overlaid onto O3. There is no u10/v10 on the daily mean o3 file.
>>>> If you need a daily mean u10/v10, you will have to add more code to the NCL
>>>> script. to calculate and  output daily mean u10/v10.
>>>>
>>>> The plot code with the original email used:  It used the following to
>>>> plot the o3 value.
>>>>
>>>>
>>>> plot = wrf_contour(a,wks,o3(nl,:,:),res)   ; <=== nl ... level index
>>>>
>>>> ===
>>>>
>>>> Your scalar code for o3 would be
>>>>
>>>>   a = addfile("o3.day.ncl", "r")
>>>>
>>>>   plot = wrf_contour(a,wks,o3(nt,:,:),res)    ; nt refers to the daily
>>>> time index
>>>>
>>>> =================================
>>>>
>>>> ALl of the necessary plot information is on the o3.day.nc file as file
>>>> attributes.
>>>>
>>>>
>>>>
>>>> On Mon, Aug 7, 2017 at 5:03 PM, Bucaram Carbo, Carlos <
>>>> carlos.bucaramcarbo at und.edu> wrote:
>>>>
>>>>>
>>>>> Hi Dennis,
>>>>>
>>>>>
>>>>> Thank you for your reply, and comments. We proceeded as you
>>>>> recommended, and then tried to visualize the output on a second NCL script.
>>>>> The end result could be seen on the attached .pdf file. A few thoughts on
>>>>> what we have found out so far:
>>>>>
>>>>>
>>>>>
>>>>>    1. We can process a single *wrfout_d01** file at a time, with the *Wrf_hrly_to_daily.ncl
>>>>>    *script. However when we have tried to process a *wrfout_d01**
>>>>>    file with multiple hours of data, we observe errors on the terminal screen
>>>>>    and virtually no data on the resulting *o3.day.nc
>>>>>    <http://o3.day.nc>* netcdf file. Also the script will not read
>>>>>    multiple *wrfout_d01** single hour data files, and just pick and
>>>>>    process the very last hour of such batch of data files.
>>>>>    2. The visual output is very appealing, but it would be desirable
>>>>>    to have a visual representation within the domain area of study
>>>>>
>>>>>
>>>>> Attached you will find the NCL scripts we have used, the resulting
>>>>> o3.day.nc netcdf file, as well as the .pdf post-processed image. Also
>>>>> we would be glad to share the *wrfout_d01* *files we have used so
>>>>> far, through Dropbox, if you think it might help.
>>>>>
>>>>>
>>>>> As before we do appreciate your help and feedback with this issue.
>>>>>
>>>>>
>>>>> Best regards,
>>>>>
>>>>>
>>>>>
>>>>> Carlos
>>>>> ------------------------------
>>>>> *From:* Dennis Shea <shea at ucar.edu>
>>>>> *Sent:* Friday, August 4, 2017 9:23:24 PM
>>>>>
>>>>> *To:* Bucaram Carbo, Carlos
>>>>> *Cc:* ncl-talk at ucar.edu
>>>>> *Subject:* Re: [ncl-talk] Daily averaged ozone concentration
>>>>>
>>>>> After
>>>>>
>>>>>   filAtt = 0
>>>>>   filAtt at title = "O3: Daily Mean"
>>>>>   filAtt at Conventions = "None"
>>>>>   filAtt at creation_date = systemfunc("date")
>>>>>   filAtt at NCL    = get_ncl_version()
>>>>>
>>>>> Add the following line:
>>>>>
>>>>>   copy_VarAtts(f[0], filAtt)                  ; copy WRF file
>>>>> attributes
>>>>>
>>>>> Cheers
>>>>> D
>>>>>
>>>>>
>>>>> On Fri, Aug 4, 2017 at 7:25 PM, Bucaram Carbo, Carlos <
>>>>> carlos.bucaramcarbo at und.edu> wrote:
>>>>>
>>>>>>
>>>>>> Hi Dennis,
>>>>>>
>>>>>>
>>>>>> Thank you for your quick reply. Upon your suggestion we downloaded
>>>>>> the pre-compiled binaries of NCl 6.4.0 for our Linux distribution
>>>>>> configuration , openSUSE Leap 42.1_x86_64, and thankfully got it to work.
>>>>>>
>>>>>>
>>>>>> We also used your script and and it work very well to give us an
>>>>>> average of the ground level o3 values on a new netcdf file, as well as on
>>>>>> the terminal screen. However for some reason the new NCL image appear to
>>>>>> revert to polar coordinates, and not to the original Lambert Conformal ones
>>>>>> of the original wrfout_d01* file.
>>>>>>
>>>>>>
>>>>>> Below you will see the message which we received on our terminal
>>>>>> screen:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *Bucaram at linux-vx3k:~/Documents2/ncl_ncarg-6.4.0.Linux_CentOS7.3_x86_64_nodap_gnu485/bin>
>>>>>> ./ncl ozone_script.ncl  Copyright (C) 1995-2017 - All Rights Reserved
>>>>>>  University Corporation for Atmospheric Research  NCAR Command Language
>>>>>> Version 6.4.0  The use of this software is governed by a License Agreement.
>>>>>>  See http://www.ncl.ucar.edu/ <http://www.ncl.ucar.edu/> for more details. **(0)
>>>>>> wrf_map: Error: no MAP_PROJ attribute in input file*
>>>>>>
>>>>>> It appears that since a map projection is not found on the newly prod
>>>>>> uced *o3.day.nc <http://o3.day.nc>* file, the NCL post-processed
>>>>>> image shows (North) polar coordinates.
>>>>>>
>>>>>> Also attached you will find the script as well as the pdf
>>>>>> post-processed file from NCL 6.4.0. Please let me know if you think it
>>>>>> might be possible to include the original map projection on the
>>>>>> post-processed image, so as to visualize the average ground level o3
>>>>>> concentration in the original domain.
>>>>>>
>>>>>> Thanks again for your help and best regards,
>>>>>>
>>>>>>
>>>>>> Carlos
>>>>>>
>>>>>> ------------------------------
>>>>>> *From:* Dennis Shea <shea at ucar.edu>
>>>>>> *Sent:* Thursday, August 3, 2017 8:38:11 PM
>>>>>> *To:* Bucaram Carbo, Carlos
>>>>>> *Cc:* ncl-talk at ucar.edu
>>>>>> *Subject:* Re: [ncl-talk] Daily averaged ozone concentration
>>>>>>
>>>>>> What version of NCL do you have?
>>>>>>
>>>>>> The attached script  uses a 6.4.0 function: calculate_daily_values
>>>>>> It is untested ... don't have multiple hourly files.
>>>>>>
>>>>>> https://www.ncl.ucar.edu/Document/Functions/Contributed/calc
>>>>>> ulate_daily_values.shtml
>>>>>> calculate_daily_values - CISL's NCAR Command Language (NCL)
>>>>>> <https://www.ncl.ucar.edu/Document/Functions/Contributed/calculate_daily_values.shtml>
>>>>>> www.ncl.ucar.edu
>>>>>> NCL Home > Documentation > Functions > General applied math
>>>>>> calculate_daily_values. Calculate daily values [avg, sum, min, max] from
>>>>>> high frequency temporal values.
>>>>>>
>>>>>>
>>>>>> On Thu, Aug 3, 2017 at 1:44 PM, Bucaram Carbo, Carlos <
>>>>>> carlos.bucaramcarbo at und.edu> wrote:
>>>>>>
>>>>>>>
>>>>>>> Dear NCL Support,
>>>>>>>
>>>>>>>
>>>>>>> We are trying to find a script that would read 24 individual 1-hour
>>>>>>> wrfout_d01* output files for every day of an entire month of the year, then average
>>>>>>> the individual hourly ground level ozone (o3) concentrations data over each
>>>>>>> daily 24-hour period (at lowest level nl=0), and write a new netcdf file
>>>>>>> with an gridded o3 average concentration for that specific day. The end
>>>>>>> result would be a visual representation of a gridded o3 average
>>>>>>> concentration for any specific day, if possible.
>>>>>>>
>>>>>>>
>>>>>>> When searching on previous archives we found the following response
>>>>>>> to a somewhat similar inquire back in 2011, but we are not sure if it would
>>>>>>> apply in our case:
>>>>>>>
>>>>>>>
>>>>>>> https://www.ncl.ucar.edu/Support/talk_archives/2011/1358.html
>>>>>>>
>>>>>>> NCL:
>>>>>>>
>>>>>>>     x3 = f->X ; (time,lat,lon) time is 3-hrly
>>>>>>>     dimx3 = dimsizes(x3)
>>>>>>>     ntim3 = dimx3(0)
>>>>>>>
>>>>>>>     nsd = 8 ; number of samples per day
>>>>>>>
>>>>>>>     xday = x3(::nsd,:,:) ; create array with meta data
>>>>>>>
>>>>>>>     do nt=0,ntim3-1,nsd
>>>>>>>        xday(nt/nsd,:,:) = (/ dum_avg_n(nt:nt+nsd-1,:,:) /)
>>>>>>>     end do
>>>>>>>
>>>>>>>     diro = "./" ; output directory
>>>>>>>     filo = "day.nc"
>>>>>>>     system ("/bin/rm -f "+diro+filo)
>>>>>>>     fnc = addfile (diro+filo, "c")
>>>>>>>
>>>>>>>     filAtt = 0
>>>>>>>     filAtt at title = "..."
>>>>>>>     filAtt at Conventions = "None"
>>>>>>>     filAtt at creation_date = systemfunc("date")
>>>>>>>     fileattdef( fnc, filAtt ) ; create file attributes
>>>>>>>     filedimdef(ncdf,"time",-1,True) ; make time UNLIMITED
>>>>>>>     fnc->XDAY = xday
>>>>>>>
>>>>>>> Also attached you will find the current *wrf_ozone.ncl* script
>>>>>>> which we  use to post-process each individual 1-hour wrfout_d01* file for o3,
>>>>>>> as a well as a sample post-processed image for a specific day and hour of
>>>>>>> 2010.
>>>>>>>
>>>>>>> Any specific direction from your side regarding this issue would be
>>>>>>> greatly appreciated.
>>>>>>>
>>>>>>> With best regards,
>>>>>>>
>>>>>>>
>>>>>>> Carlos J. Bucaram
>>>>>>> Graduate Research Assistant
>>>>>>> University of North Dakota
>>>>>>> Department of Chemical Engineering
>>>>>>>
>>>>>>> Harrington Hall Room 223
>>>>>>> 241 Centennial Dr., Grand Forks, ND
>>>>>>>
>>>>>>> 58202-7101
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> ncl-talk mailing list
>>>>>>> ncl-talk at ucar.edu
>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170812/4365b64a/attachment.html 


More information about the ncl-talk mailing list