[ncl-talk] Array reordering in OISST

Atsuyoshi MANDA am at bio.mie-u.ac.jp
Tue May 21 04:58:43 MDT 2019


Hi Dennis and Rick,

Thank you for your suggestions. I have learned how to use short2flt
and coordinate subscripting and understand I did not use
gsn_csm_contour_map() properly. These help me a lot.

The script I sent yesterday is a part of my script that preprocesses
the data for my Fortran program (I have deleted some redundant part of
the script). The program assumes (lon, lat, time) dimensions and
south-to-north direction in lat dimension. I want to analyze several
SST datasets, so I want to reorder the dimensions in the OISST dataset
to be consistent with other datasets.

Thank you,
Atsuyoshi

2019年5月21日(火) 2:17 Dennis Shea <shea at ucar.edu>:

>
> I think I understand what you want to do. You use:
>
> [A]  This following uses standard subscripting (indexing):
>
> print("sst(n,90-30,130)="+sst(n,90-30,130)+" "+lon(130)+"E "+lat(90-30)+"N")
> print("sstre(n,130,90+30-1)="+sstre(n,130,90+30-1)+" "+lon(130)+"E
> "+sstre&lat(90+30-1)+"N")
>
>
> [B] I think you intended to use coordinate subscripting which uses the following syntax: {...}
> A 'best practices' programming style is to use variables rather than hard-wiring numbers. Generally, this makes ithe intended use more clear.
>
>    LATS = 30
>    LATN = 90
>    LON = 130
>
>     SST = sst(n,{LATS:LATN},{LON})
>     printVarSummary(SST)
>
> or, say
>    LATS = 30
>    LATN = 90
>    LONW = 110
>    LONE  = 150
>
>     SST = sst(n,{LATS:LATN},{LONW:LONE})
>     printVarSummary(SST)
>
> =================================
> [1] Your file variable is:
>      short sst(time, lat, lon)
>
>      The coordinates are:
>
>        Coordinates:
>             time: [66443..80078]
>             lat: [89.5..-89.5]               ; <=== North-to-South ordering
>             lon: [0.5..359.5]
>
> [2] NCL has the short2flt function that unpacks an maintains meta data.
>
>     sst = short2flt( f->sst )   ; import and unpack the variable maintaining meta data
>     printVarSummary(sst)
>     printMinMax(sst,0)
>
> [3]  It is not necessary to explicitly read the following coordinate variables from the file. NCL imports the variable as a data structure ['object'] that contains the array values and meta data including coordinate information associated with the variable.
>
> time = sst&time
> lat    = sst&lat
> lon   = sst&lon
>
> [4] There are different methods for accessing subsets of a variable: classic indexing and coordinate variable indexing. See above.
>
> [5] Generally, NCL graphics are aware of coordinate order. Hence, no reordering is necessary.
>
> ---
> [6]
>
>
>
>
> On Sun, May 19, 2019 at 9:46 PM Atsuyoshi MANDA <am at bio.mie-u.ac.jp> wrote:
>>
>> Hi,
>>
>> I am trying to reorder the array dimensions in the monthly mean OISST
>> version 2 dataset, which was downloaded from
>> ftp://ftp.cdc.noaa.gov/Datasets/noaa.oisst.v2/sst.mnmean.nc.
>>
>> However, reordering using the named subscripting in my script does not work.
>>
>> Please see the attached files:
>> OIV2LR.sst.1982JUL.png (original data)
>> OIV2LR.sstre.1982JUL.png (reordered data)
>>
>> Any suggestions would be greatly appreciated.
>>
>> Here is my script:
>> ;=========================
>> indir="./"
>> infle="sst.mnmean.nc"
>> in=indir+"/"+infle
>>
>> script_name  = get_script_name()
>> outdir="BIN_"+systemfunc("basename "+script_name+" .ncl")
>>
>> dset="OIV2LR"
>> MM=7
>>
>> month_abbr = (/"","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP", \
>>                     "OCT","NOV","DEC"/)
>> MMM=month_abbr(MM)
>>
>> system("mkdir -vp "+outdir)
>>
>>
>> f=addfile(in, "r")
>>
>> ;printVarSummary(f)
>> ;print(f)
>>
>> lon=f->lon
>> lat=f->lat
>> sst=f->sst
>> time=f->time
>>
>> utc_date = cd_calendar(time, 0)
>>
>> year   = tointeger(utc_date(:,0))    ; Convert to integer for
>> month  = tointeger(utc_date(:,1))    ; use sprinti
>> day    = tointeger(utc_date(:,2))
>> hour   = tointeger(utc_date(:,3))
>> minute = tointeger(utc_date(:,4))
>> second = utc_date(:,5)
>> date_str = sprinti("%0.2iZ ", hour) + sprinti("%0.2i ", day) + \
>>            month_abbr(month) + " "  + sprinti("%0.4i", year)
>>
>> yyyys=1982
>> yyyye=2017
>>
>> sst_scaled=sst*sst at scale_factor + sst at add_offset
>> copy_VarAtts(sst,sst_scaled)
>> copy_VarCoords(sst,sst_scaled)
>> printVarSummary(sst_scaled)
>>
>> sstre=sst_scaled(time|:,lon|:,lat|:)
>> copy_VarAtts(sst_scaled,sst)
>> copy_VarCoords(sst_scaled,sstre)
>> printVarSummary(sstre)
>>
>>
>>
>> dim=dimsizes(year)
>> nt=dim(0)
>>
>> do n=7,7 ;0,nt-1
>>
>> if(year(n) .ge. yyyys .and. year(n) .le. yyyye .and. month(n) .eq. MM)then
>> print(n+" "+date_str(n))
>>
>>
>> figdir="FIG_"+systemfunc("basename "+script_name+" .ncl")+"_"+dset
>> system("mkdir -vp "+figdir)
>> type="png"
>>
>>
>>
>> figfle=dset+"."+"sstre."+year(n)+MMM+""
>> fig=figdir+"/"+figfle
>>
>> print("figfle="+figfle+"."+type)
>>
>> wks = gsn_open_wks(type, fig)
>>
>> res=True
>>   res at cnFillOn              = True               ; turn on color fill
>>   res at cnLinesOn             = False              ; turn off contour lines
>> plot1=gsn_csm_contour_map(wks,sstre(n,:,:),res)
>>
>>
>>
>> figfle=dset+"."+"sst."+year(n)+MMM+""
>> fig=figdir+"/"+figfle
>>
>> print("figfle="+figfle+"."+type)
>>
>> wks = gsn_open_wks(type, fig)
>>
>> res=True
>>   res at cnFillOn              = True               ; turn on color fill
>>   res at cnLinesOn             = False              ; turn off contour lines
>> plot1=gsn_csm_contour_map(wks,sst(n,:,:),res)
>>
>>
>> print("sst(n,90-30,130)="+sst(n,90-30,130)+" "+lon(130)+"E "+lat(90-30)+"N")
>> print("sstre(n,130,90+30-1)="+sstre(n,130,90+30-1)+" "+lon(130)+"E
>> "+sstre&lat(90+30-1)+"N")
>>
>> end if
>>
>> end do
>> ;=========================
>>
>> Thank you,
>> Atsuyoshi
>>
>> -
>> Atsuyoshi Manda, Ph.D
>> Associate Professor,
>> Mie University
>> 1577 Kurimamachiya-cho Tsu city, Mie 514-8507 JAPAN
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk


More information about the ncl-talk mailing list