mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ;*****************************************************
 | |
| ; mcsst_1.ncl
 | |
| ;
 | |
| ; Concepts illustrated:
 | |
| ;   - Plotting NAVO MCSST data
 | |
| ;   - Using fbindirread to read in fortran binary data
 | |
| ;   - Converting "byte" data to "float"
 | |
| ;   - Adding meta data (attributes and coordinates) to a variable
 | |
| ;   - Adding gray to an existing color map
 | |
| ;   - Spanning all but the last two colors in a color map for contour fill
 | |
| ;   - Drawing raster contours
 | |
| ;
 | |
| ;*****************************************************
 | |
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
 | |
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
 | |
| ;***************************************
 | |
| ; type of data available on file
 | |
| ;***************************************
 | |
| ; ipar=0  Weekly Binned Sea Surface Temperature 
 | |
| ; ipar=1  Number of Points in Bin 
 | |
| ; ipar=2  Weekly Binned Sea Surface Temperature Anomaly 
 | |
| ; ipar=3  Interpolated Sea Surface Temperature 
 | |
| ; ipar=4  Interpolated Sea Surface Temperature Anomaly 
 | |
| ;***************************************
 | |
| begin
 | |
|   ipar  = 3
 | |
|   fname = "2001311d18N16.dat"
 | |
|   tmp   = fbindirread(fname,ipar,(/1024,2048/),"byte")
 | |
| ;***************************************
 | |
| ; convert to float and then change to true SST
 | |
| ;***************************************
 | |
|   xslope = 0.15
 | |
|   if(ipar.eq.4.or.ipar.eq.2)then               ; anom has different intercept
 | |
|     yint = -20.0
 | |
|   end if
 | |
|   if(ipar.eq.3.or.ipar.eq.0)then
 | |
|     yint = -3.0 
 | |
|   end if
 | |
|   sst  = new((/1024,2048/),"float")            ; create float var
 | |
|   sst  = tmp*xslope+yint                       ; convert to float
 | |
|   delete(tmp)                                  ; delete unecessary array
 | |
| ;***************************************
 | |
| ; assign missing values. The original missing value was zero, but since it was
 | |
| ; not assigned in NCL, it was not recognized. The new missing values are 
 | |
| ; listed below. These will be changed later.
 | |
| ;***************************************
 | |
|   if(ipar.eq.4)then
 | |
|      sst@_FillValue = -20                    
 | |
|   end if
 | |
|   if(ipar.eq.3.or.ipar.eq.0)then
 | |
|      sst@_FillValue = -3                     
 | |
|   end if
 | |
| ;***************************************
 | |
| ;   create coordinate variables
 | |
| ;***************************************
 | |
|   nlat      = 1024
 | |
|   dy        = 180./nlat
 | |
|   lat       = (90. -(ispan(0,1023,1)*dy))-dy/2
 | |
|   lat!0     = "lat"
 | |
|   lat&lat   = lat
 | |
|   lat@units = "degrees_north"
 | |
| 
 | |
|   nlon      = 2048
 | |
|   dx        = 360./nlon
 | |
|   lon       = (ispan(0,2047,1)*dx)+dx/2-180. ; note -180. added by sjm to align
 | |
|   lon!0     = "lon"
 | |
|   lon&lon   = lon
 | |
|   lon@units = "degrees_east"   
 | |
| ;***************************************
 | |
| ;   fill out the netCDF data model
 | |
| ;***************************************
 | |
|   sst!0          = "lat"               ; name dimensions
 | |
|   sst!1          = "lon"               ; ditto
 | |
|   sst            = sst(::-1,:)         ; reverse lat orientation
 | |
|   sst@long_name  = "NAVO MCSST"        ; assign long_name
 | |
|   sst@units      = "deg C"             ; assign units
 | |
|   sst&lat        = lat                 ; assign lat cv
 | |
|   sst&lon        = lon	               ; assign lon cv
 | |
|   sst@_FillValue = -999.               ; assign missing value   
 | |
| ;***************************************
 | |
| ;   get year and day from filename
 | |
| ;***************************************
 | |
|   res   = True                          ; plot mods desired
 | |
|   title = stringtochar(fname)           ; parse file name to get date
 | |
|   year  = title(0:3)
 | |
|   jday  = title(4:6)
 | |
|   res@gsnCenterString = year+" "+jday   ; create center string
 | |
| ;***************************************
 | |
| ;   create plot
 | |
| ;***************************************
 | |
|   wks  = gsn_open_wks("ps","mcsst")    ; open workstation (plot destination)
 | |
|   gsn_define_colormap(wks,"BlGrYeOrReVi200") ; choose colormap  
 | |
| ;
 | |
| ; This will not be necessary in V6.1.0 and later. Named colors can
 | |
| ; be used without having to first add them to the color map.
 | |
| ;
 | |
|   d    = NhlNewColor(wks,0.8,0.8,0.8)   ; add gray to colormap
 | |
| 
 | |
| 
 | |
|   res@cnFillOn             = True        ; turn on color
 | |
|   res@gsnSpreadColors      = True        ; use full range of colormap
 | |
|   res@gsnSpreadColorStart  = 2           ; start at color 2
 | |
|   res@gsnSpreadColorEnd    = -3          ; don't use added gray
 | |
|   res@cnLinesOn            = False       ; no contour lines
 | |
|   res@cnFillDrawOrder      = "PreDraw"   ; draw contours before continents
 | |
|   res@gsnMaximize          = True        ; maximize plot
 | |
| 
 | |
| 
 | |
| ; For a grid this size, it is better to use raster mode. It will be 
 | |
| ; significantly faster, and will not go over NCL's 16mb default plot size.
 | |
|   res@cnFillMode           = "RasterFill"       ; turn on raster mode
 | |
| 
 | |
|   plot = gsn_csm_contour_map_ce(wks,sst,res) ; contour the variable
 | |
| 
 | |
| end
 |