;+
;
; @file_comments
; lit les series temporelles se rapportant a une variable
; sur maia: /u/rech/eee/reee217/TOTEM/REF/OUTPUTS
;
; @obsolete
;
; @categories
; Reading
;
; @examples
; IDL> res=nlecserie(nom, date1, date2)
;
; @param nom {in}{required}
; nom du tableau contenant le champ que l'on veut (le
; trouver avec ncdflec,fichier,/var
;
; @param date1 {in}{required}
; @param date2 {in}{required}
; les dates vermairs qui delimitent la serie temporelle
;
; @keyword BOITE
; boite sur laquelle integrer (par defaut tt le domaine)
;
; @keyword GRILLE
; impose la grille a laquelle est rapporte le champ. rq permet
; d'aller plus vite ds la lecture
;
; @keyword TOUT
; oblige a lire le tableau entier en non pas celui reduit a domdef
;
; @keyword _EXTRA
; Used to pass keywords
;
; @returns
; tableau 2d (qd la serie ne fait que 1 pas de temps) ou
; 3d (valable ds 1 premier tps que pour les tableaux 2d)
;
; @uses
; common.pro
;
; @restrictions
; appele par nlec
;
; @history
; Sebastien Masson (smasson\@lodyc.jussieu.fr)
;
; @version
; $Id$
;
;-
;------------------------------------------------------------
;------------------------------------------------------------
;REF.sss.grid.T.nc
;------------------------------------------------------------
;
function nlecserie, nom, date1, date2,BOITE = boite, GRILLE=grille,TOUT=tout, _EXTRA = ex
;
compile_opt idl2, strictarrsubs, obsolete
;
@common
;------------------------------------------------------------
;------------------------------------------------------------
res=-1
anneedepart=1979
;------------------------------------------------------------
; gestion du nom de la grille
; et ouverture du fichier
;------------------------------------------------------------
; liste des fichiers pouvant convenir
quelsfichiers = findfile(iodir+prefix+'.'+nom+'.grid.*')
IF quelsfichiers[0] EQ '' THEN BEGIN ; liste vide
; print, 'LES FICHIERS: '+iodir+prefix+'.'+nom+'.grid... n''existe pas.'
return, -1
ENDIF ELSE BEGIN
vargrid=strmid(quelsfichiers[0],strpos(quelsfichiers[0],'grid')+5,1) ;nom de grille
IF !version.OS_FAMILY EQ 'unix' THEN spawn, '\file '+quelsfichiers[0]+' > /dev/null'
cdfid=ncdf_open(quelsfichiers[0])
ENDELSE
;------------------------------------------------------------
; lecture de certains attributs et de l'axe des temps
;------------------------------------------------------------
ncdf_attget,cdfid,nom,'title',value
varname=string(value)
ncdf_attget,cdfid,nom,'units',value
varunit=string(value)
if rstrpos(varname,'(') eq -1 then varname=varname+' ('+varunit+')'
ncdf_attget,cdfid,'file_name',value,/global
varexp=string(value)
varexp=strmid(varexp, 0, strpos(varexp, '.'))
;------------------------------------------------------------
; lecture de l'axe des temps en entier on ja reperer la place des
; dates debut et fin pour faire l''extraction temporelle
;------------------------------------------------------------
ncdf_varget,cdfid,'time_counter',time
time = long(time)+julday(1, 5, 1979)
; debut = where(time EQ juldate(date1))
; fin = where(time EQ juldate(date2))
debut = where(time EQ date1)
fin = where(time EQ date2)
if debut[0] EQ -1 then $
return, report('l''axe des temps ne contient pas la date de debut '+strtrim(date1, 1))
if fin[0] EQ -1 then $
return, report('l''axe des temps ne contient pas la date de fin '+strtrim(date2, 1))
time = time[debut[0]:fin[0]]
jpt=fin[0]-debut[0]+1
IF jpt EQ 1 THEN BEGIN
caldat, time[0], month, day, year
case 1 of
year lt 10: s_year ='0'+string(format='(i1)',year)
year lt 100 and year ge 10 :s_year = string(format='(i2)',year)
year ge 100: s_year = string(format='(i2)',year-1900)
endcase
if month lt 10 then s_month='0'+string(format='(i1)',month) $
else s_month= string(format='(i2)',month)
if day lt 10 then s_day='0'+string(format='(i1)',day) $
else s_day= string(format='(i2)',day)
vardate=s_year+s_month+s_day
endif
;------------------------------------------------------------
;------------------------------------------------------------
; extraction du tableau qui nous interesse
;------------------------------------------------------------
;------------------------------------------------------------
;------------------------------------------------------------
; determination du domaine geographique
;------------------------------------------------------------
if keyword_set(tout) then begin
nx=jpi
ny=jpj
nz=jpk
premierx = 0
premiery = 0
premierz = 0
endif else BEGIN
;------------------------------------------------------------
; redefinition eventuelle du domaine ajuste a boite (a 6 elements)
; + on recupere la dim du nouveau domaine
;------------------------------------------------------------
if keyword_set(boite) then BEGIN
Case N_Elements(Boite) Of
1:Domdef, lon1, lon2, lat1, lat2, 0.,boite[0],GRILLE=vargrid, _EXTRA = ex
2:Domdef, lon1, lon2, lat1, lat2, boite[0],boite[1],GRILLE=vargrid, _EXTRA = ex
4:Domdef, [Boite, prof1, prof2],GRILLE=vargrid, _EXTRA = ex
5:Domdef, [Boite[0:3], 0, Boite[4]],GRILLE=vargrid, _EXTRA = ex
6:Domdef, Boite,GRILLE=vargrid, _EXTRA = ex
Else:return, report('Mauvaise Definition de Boite')
endcase
ENDIF
grille, mask, glam, gphi, gdep, nx, ny,nz,premierx,premiery
ENDELSE
;------------------------------------------------------------
ncdf_varget,cdfid,nom,res $
,offset=[premierx,premiery,debut[0]] $
,count=[nx,ny,fin[0]-debut[0]+1]
;------------------------------------------------------------
ncdf_close,cdfid
return,res
;------------------------------------------------------------
;------------------------------------------------------------
end