NCL Website header
NCL Home > Documentation > Functions > Climatology

smthClmDayTLLL

Calculates a smooth mean daily annual cycle for an array nominally dimensioned (Time,Level,Lat,Lon).

Prototype

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  ; This library is automatically loaded
                                                             ; from NCL V6.2.0 onward.
                                                             ; No need for user to explicitly load.

	function smthClmDayTLLL (
		clmDay [*][*][*][*] : float or double,  
		nHarm           [1] : integer           
	)

	return_val [366][*][*][*] :  typeof(clmDay)

Arguments

clmDay

A four-dimensional array (*, lev, lat, lon) output by clmDayTLLL.

nHarm

The number of harmonics that will be used to construct the smoothed mean annual cycle. Usually, nHarm is 1 to 3 with 2 being most common. A value of 2 means to use the annual and semi-annual harmonics only.

Return value

A climatological time series where the leftmost dimension refers to the sequential day of the year.

Description

Calculate a smooth annual cycle using the output from clmDayTLLL. A Fourier analysis is performed via an FFT. Next, all harmonics greater than nHarm are set to zero and a backward transform is performed.

In 6.2.1, this function was updated to work on daily SST data which have _FillValue over land.

See Also

smthClmDayTLL, clmDayTLL, clmMonTLL, clmMonTLLL, clmMonLLLT, clmMonLLT

Examples

Please see: MJO_CLIVAR: Example 2 for a visual example.

Example 1

Compute the smooth long term daily means at all 17 pressure levels. The input is daily geopotential heights. The values are packed as type short and must be unpacked. There was no calendar attribute so a gregorian calendar is assumed. Still, the code shows how to check and, subsequently, associate the calendar attribute if it is present.


;;The following library is loaded by default in NCL V6.2.0 and newer
;;load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"

   :
   :
   diri    = "./"                             ; input directory   
   fili    = "HGT.nc"                         ; input file       
   f       = addfile (diri+fili , "r")                          
;***********************************************************
; Read time and create required yyyyddd                    
;***********************************************************
   time    = f->time                          ; time:units = "hours since 1-1-1 00:00:0.0"                               
   TIME    = cd_calendar(time, 0)          ; type float 
   year    = toint( TIME(:,0) )            ; toint strips meta data
   month   = toint( TIME(:,1) )
   day     = toint( TIME(:,2) ) 
                                                                ; check for calendar attribute
   if (isatt(TIME,"calendar")) then           ; default is gregorian
       year@calendar = TIME@calendar
   end if

   ddd     = day_of_year(year, month, day)
   if (isatt(year,"calendar")) then           ; default is gregorian
       ddd@calendar = year@calendar
   end if

   yyyyddd = year*1000 + ddd                                    ; needed for input
   if (isatt(ddd,"calendar")) then           ; default is gregorian
       yyyyddd@calendar = ddd@calendar
   end if

;***********************************************************
; Read data: short2flt                                     
;*********************************************************** 
   hgt     = short2flt( f->hgt)  ; convert to float with metadata 
   printVarSummary(hgt)

;***********************************************************
; Compute raw daily climatology  
;***********************************************************
   hClmDay    = clmDayTLLL(hgt, yyyyddd)     ; daily climatology at each grid point                                      
;***********************************************************
; Compute smoothed daily climatology using 2 harmonics  
;***********************************************************
   hClmDay_sm = smthClmDayTLLL(hClmDay, 2)  
   printVarSummary(hClmDay_sm)
The (edited) output yields

Variable: hgt
Type: float
Total Size: 1305254016 bytes
            326313504 values
Number of Dimensions: 4
Dimensions and sizes:    [time | 1826] x [level | 17] x [lat | 73] x [lon | 144]
Coordinates:
            time: [17470320..17514120]
            level: [1000..10]
            lat: [90..-90]
            lon: [ 0..357.5]
Number Of Attributes: 17
  long_name :    mean Daily Geopotential height
  units :    m
[SNIP]

The smoothed variable is:
 
Variable: hClmDay_sm
Type: float
Number of Dimensions: 3
Dimensions and sizes:   [year_day | 366] x [level | 17] [lat | 73] x [lon | 144]
Coordinates: 
            year_day: [1..366]
            level: [1000..10]
            lat: [90..-90]
            lon: [ 0..357.5]
Number Of Attributes: 4
  smoothing :   FFT: 2 harmonics were retained.
  information : Smoothed daily climatological averages
  units :       m
  long_name :   Daily Climatology: mean Daily Geopotential height

Example 2

Example 5 of the Climatology Applications page shows how to apply the function(s) to 3-dimensional arrays. It is trivial to alter the script to handle 4-dimensional variables. For example, change clmDayTLL and smthClmDayTLL to clmDayTLLL and smthClmDayTLLL, respectively and make all array references 4-dimensional. For example, change

   x       =  short2flt( f->$var$(iStrt:iLast,:,:) )      ; convert to float 
to
   x       =  short2flt( f->$var$(iStrt:iLast,:,:,:) )    ; convert to float