Project

General

Profile

Download (1.77 KB) Statistics
| Branch: | Revision:
1
##
2
##
3
##
4

    
5
rm(list=ls(all=TRUE))
6

    
7
setwd("C:\\Users\\Frank\\Documents\\Data\\Climate_data\\CRU_TS_3.0")
8

    
9
library(ncdf)
10

    
11
vrb<-c("pre","tmn","tmp","tmx")
12
for(v in 4:4){
13
  # open data file
14
  nc<-open.ncdf(paste("cru_ts_3_00.1901.2006.",vrb[v],".nc",sep=""))           # open datafile
15

    
16
  nodata<-nc$var$tas$missval                                   # nodata value
17
  time.dim<-nc$dim$time$len                                    # time dimension
18
  time.base<-as.numeric(substr(nc$dim$time$units,14,17))       # base year
19
  time.start<-round(nc$dim$time$vals[1]/12)+time.base         # year simulation started
20
  time.end<-floor(nc$dim$time$vals[time.dim]/12)+time.base    # year simulation ended
21

    
22
  # build flip matrix
23
  I<-matrix(0,360,360)
24
  y<-360
25
  for(x in 1:360){
26
    I[x,y]<-1
27
    y<-y-1
28
  }
29

    
30
  ## extract data for 1968 to 2006 and output as ESRI ASCII files
31
  for(i in 1:time.dim){
32
    # define year and month
33
    if(trunc(i/12)!=i/12){
34
      year<-floor(i/12)+time.start
35
      month<-round((i/12-trunc(i/12))*12)
36
    }else{
37
      year<-floor(i/12)+time.start-1
38
      month<-12
39
    }
40
    if(year<2005) next
41

    
42
   # read data
43
    ncd<-get.var.ncdf(nc,start=c(1,1,i),count=c(720,360,1))
44

    
45
    # flip matrix
46
    grd<-I%*%(t(ncd))
47

    
48
    # ouput to file in ESRI ASCII format
49
    esri<-c(paste("ncols",720),
50
            paste("nrows",360),
51
            paste("xllcorner",-180),
52
            paste("yllcorner",-90),
53
            paste("cellsize",0.5),
54
            paste("nodata_value",-99.9))
55
        path2<-paste("cru_ts_3.0_",vrb[v],"_",year,"_",month,".asc",sep="")
56
        write.table(esri,path2,row.names=F,col.names=F,quote=F,append=F)
57
        write.table(data.frame(grd),path2,row.names=F,col.names=F,quote=F,append=T)
58
  }
59
  close.ncdf(nc) # close datafile
60
}
61

    
(6-6/6)