;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:nlecmois.pro ; ; ; PURPOSE:lit les fichiers Net-Cdf de moyenne mensuel de ; l'experience TOTEM/ECMWF qui sont sur ; maia: /u/rech/eee/reee217/TOTEM/REF/OUTPUTS ; ; CATEGORY: ; ; CALLING SEQUENCE: ; ; INPUTS: ; ; KEYWORD PARAMETERS: ; ; BOITE: boite sur laquelle integrer (par defaut tt le domaine) ; ; GRILLE:impose la grille a laquelle est rapporte le champ. rq permet ; d'aller plus vite ds la lecture ; ; /TOUT:oblige a lire le tableau entier en non pas celui reduit a domdef ; ; OUTPUTS: ; ; COMMON BLOCKS: ; common.pro ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr) ; ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;REF.moyenne.mensuelle.79-81.grid.T.nc ;------------------------------------------------------------ function nlecmois,nom,numsortie79,nbretps ,BOITE=boite,GRILLE=grille,TOUT=tout, _EXTRA = ex @common ;------------------------------------------------------------ res =-1 ;------------------------------------------------------------ ; annee du nom du 1er fichier ;------------------------------------------------------------ annee = floor(floor((numsortie79-1)/12.)/3.)*3+79 ;------------------------------------------------------------ ; gestion du nom de la grille en testant les differentes possibilites ; et ouverture du fichier ;------------------------------------------------------------ if keyword_set(grille) then begin vargrid=grille nomfich=prefix+'.moyenne.mensuelle.'+strtrim(annee, 1)+'-'+strtrim(annee+2, 1)+'.grid.'+vargrid+'.nc' cdfid=ncdf_open(iodir+nomfich) varcontient=ncdf_varinq(cdfid,nom) endif else begin ; liste des fichiers pouvant convenir quelsfichiers = findfile(iodir+prefix+'.moyenne.mensuelle.'+strtrim(annee, 1)+'-'+strtrim(annee+2, 1)+'.grid.*') IF quelsfichiers[0] EQ '' THEN $ ; liste vide return, report('LES FICHIERS: '+iodir+prefix+'.moyenne.mensuelle.'+strtrim(annee, 1)+'-'+strtrim(annee+2, 1)+'.grid... n''existe pas.') for i=0,n_elements(quelsfichiers)-1 do begin cdfid=ncdf_open(quelsfichiers[i]) contient=ncdf_inquire(cdfid) for varid=0,contient.nvars-1 do BEGIN ; ds les fichiers existants on varcontient=ncdf_varinq(cdfid,varid) ; cherche le nom des variables if varcontient.name eq nom then BEGIN vargrid=strmid(quelsfichiers[i],strpos(quelsfichiers[i],'grid')+5,1) ;nom de grille goto, grilletrouvee ENDIF endfor ncdf_close,cdfid endfor return, report('La variable '+nom+' n''existe pas ds les fichiers'+iodir+prefix+'.moyenne.mensuelle.'+strtrim(annee, 1)+'-'+strtrim(annee+2, 1)+'grid...') endelse grilletrouvee: ;------------------------------------------------------------ ; 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+')' varexp=prefix ;------------------------------------------------------------ ; 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 no9uveau 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, premierz ENDELSE ;------------------------------------------------------------ ; determination du nombre de pas de tps a extraire ds ce fichier ;------------------------------------------------------------ numsortie = numsortie79-12.*(annee-79) if nbretps+numsortie-1 gt 36 then nt=36-numsortie+1 $ else nt=nbretps numsortie = numsortie79-12.*(annee-79) ;------------------------------------------------------------ if varcontient.ndims eq 3 then $ ncdf_varget,cdfid,nom,res,offset=[premierx,premiery,numsortie-1],count=[nx,ny,nt] else $ ncdf_varget,cdfid,nom,res,offset=[premierx,premiery,premierz,numsortie-1],count=[nx,ny,nz,nt] ;------------------------------------------------------------ ; rappel en boucle de nlec si il faut ouvrir de nouveaux fichiers ; pour constituer la serie temporelle ;------------------------------------------------------------ if nbretps gt 36-numsortie+1 then begin if varcontient.ndims eq 3 then $ res = [[[res]] $ ,[[nlecmois(nom,numsortie79+nt,nbretps-nt,tout=tout,GRILLE=vargrid,BOITE=boite)]]] $ else BEGIN res=[res[*] $ ,(nlecmois(nom,numsortie79+nt,nbretps-nt,tout=tout,GRILLE=vargrid,BOITE=boite))[*]] res=reform(res,nx,ny,nz,nbretps, /over) ENDELSE ncdf_varget,cdfid,'time_counter',temps, offset = [numsortie-1],count=[nt] time = [long(temps)+julday(12, 31, 1978), time] jpt=nt+jpt endif else BEGIN ncdf_varget,cdfid,'time_counter',temps, offset = [numsortie-1],count=[nt] time = long(temps)+julday(12, 31, 1978) jpt=nt endelse ;------------------------------------------------------------ ncdf_close,cdfid IF n_elements(time) EQ 1 THEN BEGIN caldat, time, m, d, y if m lt 10 then m='0'+string(format='(i1)',m) $ else m= string(format='(i2)',m) if n_elements(langage) EQ 0 then langage = 'non definit' if langage EQ 'gb' then vardate = strtrim(y, 1)+' '+string(format='(C(CMoA))',31*(m-1)) $ ELSE vardate = string(format='(C(CMoA))',31*(m-1))+' '+strtrim(y, 1) endif ;------------------------------------------------------------ return,res ;------------------------------------------------------------ ;------------------------------------------------------------ end