[ncl-talk] wrf-ncl titles and subtitles

Dave Allured - NOAA Affiliate dave.allured at noaa.gov
Tue Apr 12 10:18:31 MDT 2022


Zilore, it is easier for people to answer one question at a time, and not
have to analyze long scripts.  When possible, post the shortest possible
script or code snippet that illustrates the problem.

> Not knowing how to extract part of a file name in ncl,
> I have used perl to extract yyyy-mm-dd and hh from
> wrfout_d01_yyy-mm-dd_hh:mm:ss. These are written
> to files and are like below

I suggest learn how to do this in NCL, it is not hard.  External scripts
and files are more complicated than necessary, and can cause additional
problems.  There are many string functions, and more than one way to do
this.  Please examine the string functions on the NCL string manipulators
category page, they are extremely useful for many situations.

I suggest use *str_get_fields* three times.  The first two times, use
delimiter "_" which gets you yyy-mm-dd and hh:mm:ss separately.  The third
time, input substring hh:mm:ss and use delimiter ":", which gets you hh.
That function will handle an array of strings in a single call, which is
what you want for this application.


On Thu, Apr 7, 2022 at 1:36 PM Zilore Mumba via ncl-talk <
ncl-talk at mailman.ucar.edu> wrote:

> The attached graphics should have accompanied my earlier mail. One has the
> usual wrf-ncl graphics titling and the other has titling from my
> modified script.
>
> <#m_3476672490321337477_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
> On Thu, Apr 7, 2022 at 9:13 PM Zilore Mumba <zmumba at gmail.com> wrote:
>
>> Firstly, my sincere apologies for this very long mail.
>>
>> Coming from a weather forecasting background, it is preferable to have
>> the title on the graphic as, e.g.
>>
>> WRF Surface Pressure, Winds and Temperatures
>>
>> Valid at 06Z on 2022-04-07, From 00Z on 2022-04-07"
>>
>> This quickly tells the forecaster 1) what he/she is looking at, 2) the
>> validity time and date, and 3) the model initiation time and date.
>>
>> The current titling and subtitling in wrf-ncl scripts is not convenient
>> for a forecasting setup.
>>
>> In the script below I have stripped off the ncl hard-coded titles, mainly
>> with ”opts at FieldTitle = " " and opts at PlotLevelID = " ", and then setting
>> all units to “”
>>
>> Not knowing how to extract part of a file name in ncl, I have used perl
>> to extract yyyy-mm-dd and hh from wrfout_d01_yyy-mm-dd_hh:mm:ss. These are
>> written to files and are like below
>>
>> Variable: data1
>>
>> Type: string
>>
>> Total Size: 104 bytes
>>
>>             13 values
>>
>> Number of Dimensions: 1
>>
>> Dimensions and sizes:        [13]
>>
>> Coordinates:
>>
>> Number Of Attributes: 1
>>
>>   _FillValue :  missing
>>
>> (0)       2022-03-28
>>
>> (1)       2022-03-28
>>
>> (2)       2022-03-28
>>
>> (3)       2022-03-28
>>
>> (4)       2022-03-28
>>
>> (5)       2022-03-28
>>
>> (6)       2022-03-28
>>
>> (7)       2022-03-28
>>
>> (8)       2022-03-28
>>
>> (9)       2022-03-28
>>
>>
>>
>> Variable: data2
>>
>> Type: string
>>
>> Total Size: 104 bytes
>>
>>             13 values
>>
>> Number of Dimensions: 1
>>
>> Dimensions and sizes:        [13]
>>
>> Coordinates:
>>
>> Number Of Attributes: 1
>>
>>   _FillValue :  missing
>>
>> (0)       00
>>
>> (1)       01
>>
>> (2)       02
>>
>> (3)       03
>>
>> (4)       04
>>
>> (5)       05
>>
>> (6)       06
>>
>> (7)       07
>>
>> (8)       08
>>
>> (9)       09
>>
>> (10)     10
>>
>> (11)     11
>>
>> (12)     12
>>
>> If anyone can assist
>>
>> 1.     how to read data1 and data2 into 1d subscripted arrays
>>
>> 2.     how to correctly position the main title, if possible
>>
>>
>>
>> I know ncl scripts are being migrated to python, so this may not be
>> interesting.
>>
>>
>> ;   Example script to produce plots for a WRF real-data run,
>> ;   with the ARW coordinate dynamics option.
>> ;   Interpolating to specified pressure levels
>>
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
>>
>> begin
>> ;
>> ; The WRF ARW input file.
>>      DATADir = "/home/zmumba/DA/OUTPUT/2022022800/noda/"
>>      FILES = systemfunc (" ls -1 " + DATADir + "wrfout_d01* ")
>>      numFILES = dimsizes(FILES)
>>
>>      files_all = addfiles(FILES+".nc","r")
>>
>>
>> ; Perl script takes the files and extracts yyyy-mm-dd and hh
>> ;-----------------------------------------------------------
>>   system("perl /home/zmumba/DA/SCRIPTS/03_Ncl_Scripts/sort_files.pl")
>>
>>   data1 =
>> asciiread("/home/zmumba/DA/SCRIPTS/03_Ncl_Scripts/datesfile.txt",-1,"string")
>>   data2 =
>> asciiread("/home/zmumba/DA/SCRIPTS/03_Ncl_Scripts/timesfile.txt",-1,"string")
>>
>>
>> ; Need to read files above into a 1d array to be used in title
>> ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
>>
>>
>> ;Code below does not work
>> ;-------------------------
>>   ; Init_date = date1(0)
>>   ; Init_time = date2(0)
>> ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
>>   ;do i = 0, numFILES-1
>>   ;   valid_date(i) = data1(i)
>>   ;   valid_time(i) = data2(i)
>>   ;   print(valid_time(i))
>>   ;end do
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> ; We generate plots, but what kind do we prefer?
>> ;  type = "x11"
>> ;  type = "pdf"
>> ; type = "ps"
>> ; type = "ncgm"
>>   type = "png"
>> ;  wks = gsn_open_wks(type,"plt_PressureLevel1")
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> ; What times and how many time steps are in the data set?
>> ; get time information and strip out the day and hour
>>   times_in_file = files_all[:]->Times
>>
>>   dims = dimsizes (times_in_file)
>>   ntimes = dims(0)
>>
>>   times_to_use = new(dims(0),string)     ;create empty array
>>
>>   do i=0,dims(0)-1
>>     times_to_use(i) = chartostring(times_in_file(i,8:12))
>>     print(times_to_use(i))
>>   end do
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> ; Set some Basic Plot options
>>   res = True
>>   ;res at NoHeaderFooter = True
>>
>>   res at MainTitle  = "WRF Surface Pressure, Winds and Temperatures ~C~
>> Valid at Valid_time(i)Z on Valid_date(i) From Init_time Z on Init_date"
>>   res at tiMainOffsetXF = 6.0
>>   res at InitTime   = False
>>   res at Footer = False
>>
>>   pltres = True
>>   mpres = True
>>   mpres at mpFillOn                    = False        ; turn off gray fill
>>   mpres at mpOutlineBoundarySets       = "National"   ; turn on country
>> boundaries
>>   mpres at mpGeophysicalLineColor      = "Navy"       ; color of cont.
>> outlines
>>   mpres at mpGeophysicalLineThicknessF = 1.5          ; thickness of
>> outlines
>>   mpres at mpNationalLineColor         = "Black"
>>   mpres at mpNationalLineThicknessF    = 2.5          ; turn on country
>> boundaries
>>
>>   mpres at mpDataBaseVersion           = "MediumRes"  ; choose higher
>> resolution
>>   mpres at mpDataSetName               = "Earth..4"   ; choose most recent
>> boundaries
>>
>>   mpres at mpMaxLatF                   = -4           ; choose subregion
>>   mpres at mpMinLatF                   = -21
>>   mpres at mpMaxLonF                   =  37
>>   mpres at mpMinLonF                   =  21
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> ; The specific pressure levels that we want the data interpolated to.
>>   pressure_levels = (/ 850., 700., 500., 300./)   ; pressure levels to
>> plot
>>   nlevels         = dimsizes(pressure_levels)     ; number of pressure
>> levels
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> ;  VTlab = (/ "T+00", T+00", "T+06", "T+12", "T+18", "T+24", "T+30",
>> "T+36", "T+42", "T+48"/)   ; Validity for file name
>>
>>   do it = 0,ntimes(0)-1,2             ; TIME LOOP
>>
>>     print("Working on time: " +  times_to_use(it) )
>>     ;res at TimeLabel =  times_to_use(it)   ; Set Valid time to use on plots
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>> ; First get the variables we will need
>>
>>     tc = wrf_user_getvar(files_all,"tc",it)        ; T in C
>>     u  = wrf_user_getvar(files_all,"ua",it)        ; u averaged to mass
>> points
>>     v  = wrf_user_getvar(files_all,"va",it)        ; v averaged to mass
>> points
>>     p  = wrf_user_getvar(files_all, "pressure",it) ; pressure is our
>> vertical coordinate
>>     z  = wrf_user_getvar(files_all, "z",it)        ; grid point height
>>     rh = wrf_user_getvar(files_all,"rh",it)        ; relative humidity
>>
>>     tc at units = ""
>> u at units = ""
>> v at units = ""
>> p at units = ""
>> z at units = ""
>> rh at units = ""
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>>     do level = 0,nlevels-1                 ; LOOP OVER LEVELS
>>
>>       pressure = pressure_levels(level)
>>
>>       tc_plane = wrf_user_intrp3d(tc,p,"h",pressure,0.,False)
>>       z_plane  = wrf_user_intrp3d( z,p,"h",pressure,0.,False)
>>       rh_plane = wrf_user_intrp3d(rh,p,"h",pressure,0.,False)
>>       u_plane  = wrf_user_intrp3d( u,p,"h",pressure,0.,False)
>>       v_plane  = wrf_user_intrp3d( v,p,"h",pressure,0.,False)
>>
>>       spd     = (u_plane*u_plane + v_plane*v_plane)^(0.5) ; m/sec
>>       spd at description = "Wind Speed"
>>       ;spd at units = "m/s"
>>       spd at units = ""
>>       u_plane = u_plane*1.94386     ; kts
>>       v_plane = v_plane*1.94386     ; kts
>>       ;u_plane at units = "kts"
>>       ;v_plane at units = "kts"
>>       u_plane at units = ""
>>       v_plane at units = ""
>>
>>       wks = gsn_open_wks(type,"Plots00-" + "P" + pressure_levels(level) +
>> "_" + times_to_use(it) + "Z")
>>
>>       ; Plotting options for T
>>         opts = res
>>
>>         opts at cnLineColor = "Red"
>>         opts at ContourParameters = (/ 5.0 /)
>>         opts at cnInfoLabelOrthogonalPosF = 0.07  ; offset second label
>> information
>>         opts at gsnContourLineThicknessesScale = 2.0
>>         opts at FieldTitle = ""       ; overwrite Field Title
>> opts at PlotLevelID = ""
>> opts at cnInfoLabelString = ""
>>         contour_tc = wrf_contour(files_all[it],wks,tc_plane,opts)
>>         delete(opts)
>>
>>       ; Plotting options for RH
>>         opts = res
>>         opts at cnFillOn = True
>>         opts at pmLabelBarOrthogonalPosF = -0.1
>>         opts at ContourParameters = (/ 10., 90., 10./)
>>         opts at FieldTitle = ""       ; overwrite Field Title
>> opts at PlotLevelID = ""
>>         opts at cnInfoLabelString = ""
>>         opts at cnFillColors = (/"White","White","White", \
>>                               "White","Chartreuse","Green",\
>>                               "Green3","Green4", \
>>                               "ForestGreen","PaleGreen4"/)
>>         contour_rh = wrf_contour(files_all[it],wks,rh_plane,opts)
>>         delete(opts)
>>
>>       ; Plotting options for Wind Speed
>>         opts = res
>>         opts at cnLineColor = "MediumSeaGreen"
>>         opts at ContourParameters = (/ 10. /)
>>         opts at cnInfoLabelOrthogonalPosF = 0.07  ; offset second label
>> information
>>         opts at FieldTitle = ""       ; overwrite Field Title
>> opts at PlotLevelID = ""
>>         opts at cnInfoLabelString = ""
>>         opts at gsnContourLineThicknessesScale = 3.0
>>         contour_spd = wrf_contour(files_all[it],wks,spd,opts)
>>         delete(opts)
>>
>>       ; Plotting options for Wind Vectors
>>         opts = res
>>         ;opts at FieldTitle = "Wind"   ; overwrite Field Title
>>         opts at FieldTitle = ""       ; overwrite Field Title
>> opts at PlotLevelID = ""
>>         ;opts at cnInfoLabelString = ""
>>         opts at NumVectors = 47       ; wind barb density
>>         vector = wrf_vector(files_all[it],wks,u_plane,v_plane,opts)
>>         delete(opts)
>>
>>
>>       ; Plotting options for Geopotential Heigh
>>         opts_z = res
>>         opts_z at cnLineColor = "Blue"
>>         opts_z at FieldTitle = ""       ; overwrite Field Title
>> opts_z at PlotLevelID = ""
>>         ;opts at cnInfoLabelString = ""
>>         opts_z at gsnContourLineThicknessesScale = 3.0
>>
>>
>>       ; MAKE PLOTS
>>
>> ;        wks = gsn_open_wks(type,"plt_PressureLevel1"+level+it)
>>
>>         if ( pressure .eq. 850 ) then   ; plot temp, rh, height, wind
>> barbs
>>           opts_z at ContourParameters = (/ 20.0 /)
>>           contour_height = wrf_contour(files_all[it],wks,z_plane,opts_z)
>>           plot =
>> wrf_map_overlays(files_all[it],wks,(/contour_rh,contour_tc,contour_height, \
>>                                     vector/),pltres,mpres)
>>         end if
>>
>>         if ( pressure .eq. 700 ) then   ; plot temp, height, wind barbs
>>           opts_z at ContourParameters = (/ 30.0 /)
>>           contour_height = wrf_contour(files_all[it],wks, z_plane,opts_z)
>>           plot =
>> wrf_map_overlays(files_all[it],wks,(/contour_tc,contour_height, \
>>                                     vector/),pltres,mpres)
>>         end if
>>
>>         if ( pressure .eq. 500 ) then   ; plot temp, height, wind barbs
>>           opts_z at ContourParameters = (/ 60.0 /)
>>           contour_height = wrf_contour(files_all[it],wks, z_plane,opts_z)
>>           plot =
>> wrf_map_overlays(files_all[it],wks,(/contour_tc,contour_height, \
>>                                     vector/),pltres,mpres)
>>         end if
>>
>>         if ( pressure .eq. 300 ) then   ; plot windspeed, height, wind
>> barbs
>>           opts_z at ContourParameters = (/ 60.0 /)
>>           contour_height = wrf_contour(files_all[it],wks, z_plane,opts_z)
>>           plot =
>> wrf_map_overlays(files_all[it],wks,(/contour_spd,contour_height, \
>>                                     vector/),pltres,mpres)
>>         end if
>>         delete(opts_z)
>> ;        delete(wks)
>>
>>     end do      ; END OF LEVEL LOOP
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>>   end do        ; END OF TIME LOOP
>>
>> end
>>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at mailman.ucar.edu
> List instructions, subscriber options, unsubscribe:
> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20220412/4ee7147e/attachment.html>


More information about the ncl-talk mailing list