energy/03.monthly_avg.ncl
author Forrest Hoffman <forrest@climatemodeling.org>
Mon, 26 Jan 2009 22:08:20 -0500
changeset 0 0c6405ab2ff4
permissions -rw-r--r--
Initial commit of C-LAMP Diagnostics from Jeff Lee
forrest@0
     1
;************************************************
forrest@0
     2
;    Read half-hourly data and write monthly data
forrest@0
     3
; input data is  : half-hourly 
forrest@0
     4
;                                        
forrest@0
     5
; output data is :  CO2_flux, RAD_FLUX, SH_FLUX, LH_FLUX
forrest@0
     6
;                   date, lat, lon  
forrest@0
     7
;************************************************
forrest@0
     8
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"  
forrest@0
     9
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"  
forrest@0
    10
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"   
forrest@0
    11
;************************************************
forrest@0
    12
begin
forrest@0
    13
forrest@0
    14
  dir_root = "/fis/cgd/cseg/people/jeff/clamp_data/fluxnet/"
forrest@0
    15
  station_name = "Lethbridge"
forrest@0
    16
  file_name_add = "ameriflux"
forrest@0
    17
  year_start = 1999
forrest@0
    18
  year_end   = 2004
forrest@0
    19
  year_leap1 = 2000
forrest@0
    20
  year_leap2 = 2004
forrest@0
    21
forrest@0
    22
  lat_out = 49.709278
forrest@0
    23
  lon_out = -112.940167 + 360.
forrest@0
    24
   
forrest@0
    25
; final output
forrest@0
    26
  diro = dir_root + station_name + "/"
forrest@0
    27
  filo = station_name+"_"+year_start+"-"+year_end+"_monthly.nc" 
forrest@0
    28
  c = addfile(diro+filo,"c")
forrest@0
    29
  print (filo)
forrest@0
    30
forrest@0
    31
; input dir
forrest@0
    32
  diri = dir_root + station_name + "/"
forrest@0
    33
forrest@0
    34
  nyear = year_end - year_start + 1
forrest@0
    35
  nmon = 12
forrest@0
    36
  nlat = 1
forrest@0
    37
  nlon = 1
forrest@0
    38
forrest@0
    39
; day_of_month  = (/31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31./)
forrest@0
    40
  end_of_month1 = (/31.,59.,90.,120.,151.,181.,212.,243.,273.,304.,334.,365./)
forrest@0
    41
  end_of_month2 = (/31.,60.,91.,121.,152.,182.,213.,244.,274.,305.,335.,366./)
forrest@0
    42
forrest@0
    43
  data_out1 = new((/nyear,nmon/),float)
forrest@0
    44
  data_out2 = new((/nyear,nmon/),float)
forrest@0
    45
  data_out3 = new((/nyear,nmon/),float)
forrest@0
    46
  data_out4 = new((/nyear,nmon/),float)
forrest@0
    47
  time_out  = new((/nyear,nmon/),integer)
forrest@0
    48
; lat_out   = new((/nlat/),float)
forrest@0
    49
; lon_out   = new((/nlon/),float)
forrest@0
    50
forrest@0
    51
  do m = 0,nyear-1
forrest@0
    52
     year = year_start + m
forrest@0
    53
forrest@0
    54
;    if (mod(year,4) .eq. 0) then
forrest@0
    55
     if (year .eq. year_leap1 .or. year .eq. year_leap2 ) then         
forrest@0
    56
        hour_of_month = end_of_month2 * 24.
forrest@0
    57
     else        
forrest@0
    58
        hour_of_month = end_of_month1 * 24.
forrest@0
    59
     end if
forrest@0
    60
; print (hour_of_month) 
forrest@0
    61
     
forrest@0
    62
;    input file
forrest@0
    63
     fili = file_name_add+"."+station_name+"."+year+".nc"
forrest@0
    64
     b = addfile(diri+fili,"r")
forrest@0
    65
     print (fili)
forrest@0
    66
forrest@0
    67
;    co2 flux unit: umol m-2 s-1
forrest@0
    68
     data1 = b->FCO2M
forrest@0
    69
;    net radiation flux unit: W m-2 
forrest@0
    70
     data2 = b->RN
forrest@0
    71
;    sensible heat flux unit: W m-2 
forrest@0
    72
     data3 = b->H
forrest@0
    73
;    latent   heat flux unit: W m-2 
forrest@0
    74
     data4 = b->LE
forrest@0
    75
forrest@0
    76
;    time unit: hour since 01-01 (mm-dd)
forrest@0
    77
     time = b->time
forrest@0
    78
forrest@0
    79
  do n= 0,nmon-1
forrest@0
    80
     if (n.eq.0) then
forrest@0
    81
        timeL = 0.
forrest@0
    82
        timeR = hour_of_month(0)
forrest@0
    83
     else
forrest@0
    84
        timeL = hour_of_month(n-1)
forrest@0
    85
        timeR = hour_of_month(n)
forrest@0
    86
     end if
forrest@0
    87
;    print (timeL)
forrest@0
    88
;    print (timeR)
forrest@0
    89
     
forrest@0
    90
     i = ind(time.ge.timeL .and. time.lt.timeR)
forrest@0
    91
;    print (i)
forrest@0
    92
forrest@0
    93
     data_out1(m,n) = avg(data1(i))
forrest@0
    94
     data_out2(m,n) = avg(data2(i))
forrest@0
    95
     data_out3(m,n) = avg(data3(i))
forrest@0
    96
     data_out4(m,n) = avg(data4(i))
forrest@0
    97
forrest@0
    98
     time_out(m,n) = year*100 + n + 1
forrest@0
    99
;    print (time_out(m,n))
forrest@0
   100
forrest@0
   101
     delete (i)
forrest@0
   102
  end do
forrest@0
   103
     if (m.lt.nyear-1) then  
forrest@0
   104
        delete (data1)
forrest@0
   105
        delete (data2)
forrest@0
   106
        delete (data3)
forrest@0
   107
        delete (data4)
forrest@0
   108
        delete (time)
forrest@0
   109
     end if
forrest@0
   110
  end do
forrest@0
   111
  
forrest@0
   112
  data_out1!0  = "year"
forrest@0
   113
  data_out1!1  = "month"
forrest@0
   114
  data_out1@long_name  = data1@long_name
forrest@0
   115
  data_out1@units      = data1@units
forrest@0
   116
  data_out1@_FillValue = 1.e+36
forrest@0
   117
; print (data_out1)
forrest@0
   118
forrest@0
   119
  data_out2!0  = "year"
forrest@0
   120
  data_out2!1  = "month"
forrest@0
   121
  data_out2@long_name  = data2@long_name
forrest@0
   122
  data_out2@units      = data2@units
forrest@0
   123
  data_out2@_FillValue = 1.e+36
forrest@0
   124
; print (data_out2)
forrest@0
   125
forrest@0
   126
  data_out3!0  = "year"
forrest@0
   127
  data_out3!1  = "month"
forrest@0
   128
  data_out3@long_name  = data3@long_name
forrest@0
   129
  data_out3@units      = data3@units
forrest@0
   130
  data_out3@_FillValue = 1.e+36
forrest@0
   131
; print (data_out3)
forrest@0
   132
forrest@0
   133
  data_out4!0  = "year"
forrest@0
   134
  data_out4!1  = "month"
forrest@0
   135
  data_out4@long_name  = data4@long_name
forrest@0
   136
  data_out4@units      = data4@units
forrest@0
   137
  data_out4@_FillValue = 1.e+36
forrest@0
   138
; print (data_out4)
forrest@0
   139
forrest@0
   140
  time_out!0  = "year"
forrest@0
   141
  time_out!1  = "month"
forrest@0
   142
  time_out@long_name  = "current date as yyyymm"
forrest@0
   143
  time_out@units      = "current date as yyyymm"
forrest@0
   144
  print (time_out)
forrest@0
   145
                 
forrest@0
   146
  lat_out!0  = "lat"
forrest@0
   147
  lon_out!0  = "lon"
forrest@0
   148
  lat_out@units      = "degrees_north"
forrest@0
   149
  lat_out@long_name  = "Latitude"
forrest@0
   150
  lon_out@units      = "degrees_east"
forrest@0
   151
  lon_out@long_name  = "Longitude"
forrest@0
   152
  print (lat_out)
forrest@0
   153
  print (lon_out)
forrest@0
   154
           
forrest@0
   155
  c->lat      = lat_out
forrest@0
   156
  c->lon      = lon_out
forrest@0
   157
  c->date     = time_out
forrest@0
   158
  c->CO2_FLUX = data_out1
forrest@0
   159
  c->RAD_FLUX = data_out2
forrest@0
   160
  c->SH_FLUX  = data_out3
forrest@0
   161
  c->LH_FLUX  = data_out4
forrest@0
   162
  
forrest@0
   163
end