source: trunk/procs/maskread.pro @ 9

Last change on this file since 9 was 2, checked in by post_it, 17 years ago

Initial import from ~/POST_IT/

File size: 5.9 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME: maskread
6;   
7;
8; PURPOSE:
9;       lit un fichier bathymetry ORCA ou un mask atmos
10;
11; CATEGORY:
12;       lecture de fichier
13;
14; INPUTS:
15
16; KEYWORD PARAMETERS:
17
18; COMMON BLOCKS:
19;       common.pro
20;
21; SIDE EFFECTS:Retourne -1 en cas d'erreur.
22;
23; RESTRICTIONS:
24;
25; EXAMPLE:
26;
27; MODIFICATION HISTORY: Maurice Imbard (mimlod@ipsl.jussieu.fr)
28;                       12/05/99
29;-
30;--------------------------------------------------------------
31;--------------------------------------------------------------
32;--------------------------------------------------------------
33function maskread, bathy, model, D3 = d3
34;;
35@common
36@com_eg
37;;
38;;
39   IF n_elements(nbathys) EQ 0 THEN BEGIN
40      read_bathy = 'yes'
41   ENDIF ELSE BEGIN
42      i = 0
43      WHILE i LE nbathys-1 DO BEGIN
44         IF bathy_read[i].name EQ bathy THEN BEGIN
45            zbat = bathy_read[i].mask
46            IF keyword_set(D3) THEN BEGIN
47               zbat = 0 > zbat
48               ; Build 3D from pseudo 3D
49               zbat=reform(zbat[*]#(1./(indgen(jpkglo)+1)),(size(zbat))[1],(size(zbat))[2],jpkglo)
50               zbat=floor(zbat)<1
51            ENDIF ELSE BEGIN
52               zbat = zbat <  1
53            ENDELSE
54            return, zbat
55         ENDIF ELSE BEGIN
56            read_bathy = 'yes'
57         ENDELSE
58         i = i+1
59      ENDWHILE
60   ENDELSE
61
62   IF read_bathy EQ 'yes' THEN BEGIN
63      z = -1
64;;
65;---------------------------------------------------------------------
66; definition de la taille du fichier a aller chercher: jpidta,jpjdta,jpkdta...
67;---------------------------------------------------------------------
68      if n_elements(jpidta) EQ 0 THEN BEGIN
69         if n_elements(ixmindta) EQ 0 OR n_elements(ixmaxdta) EQ 0 then $
70          jpidta = jpiglo else jpidta = ixmaxdta-ixmindta+1
71      endif
72      if n_elements(jpjdta) EQ 0 THEN BEGIN
73         if n_elements(iymindta) EQ 0 OR n_elements(iymaxdta) EQ 0 then $
74          jpjdta = jpjglo else jpjdta = iymaxdta-iymindta+1
75      endif
76      if n_elements(jpkdta) EQ 0 THEN BEGIN
77         if n_elements(izmindta) EQ 0 OR n_elements(izmaxdta) EQ 0 then $
78          jpkdta = jpkglo else jpkdta = izmaxdta-izmindta+1
79      endif
80;--------------------------------------------------------------------
81; ouverture du fichier a l'adresse s_fichier
82;--------------------------------------------------------------------
83;;
84      iname = bathy
85      iname_file = hom_idl+'grids/'+model+'.'+iname
86      openr, iunit,  /get_lun,iname_file
87      print, '    Reading ', model+'.'+iname, ' mask '
88      print, ' '
89;---------------------------------------------------------------------
90; lecture des champs directement vers le champ
91;---------------------------------------------------------------------
92      ifreq = 40
93      ifin  = jpiglo/ifreq+1
94      irest = jpiglo-(ifin-1)*ifreq
95      zbati  = intarr(ifreq)
96      zbati2 = intarr(irest)
97      ;;
98      zbat    = intarr(jpiglo,jpjglo)
99;
100      readf, iunit, FORMAT = '(16x,2i8)', iim, ijm
101      readf, iunit, FORMAT = '(/)'
102      readf, iunit, FORMAT = '(/)'
103      il1 = 0
104      FOR jn = 1, ifin-1 DO BEGIN
105         readf, iunit, FORMAT = '(/)'
106         readf, iunit, FORMAT = '(/)'
107         il2 = min([ jpiglo-1, il1+ifreq-1] )
108         readf, iunit, FORMAT = '(/)'
109         readf, iunit, FORMAT = '(/)'
110         readf, iunit, FORMAT = '(/)'
111         il3 = il2-(jn-1)*ifreq
112         iformat = string('(', il3+2, 'i3)')
113         FOR jj =  jpjglo-1, 0, -1  DO BEGIN
114            zbati(0:ifreq-1) = 0
115            readf, iunit, FORMAT = iformat, ij, zbati
116            zbat(il1:il2, jj) = zbati(0:il3)
117         END
118         il1 = il1 + ifreq
119      END
120      readf, iunit, FORMAT = '(/)'
121      readf, iunit, FORMAT = '(/)'
122      il2 = min([ jpiglo-1, il1+ifreq-1] )
123      readf, iunit, FORMAT = '(/)'
124      readf, iunit, FORMAT = '(/)'
125      readf, iunit, FORMAT = '(/)'
126      il3 = il2-(ifin-1)*ifreq
127      iformat = string('(', il3+2, 'i3)')
128      FOR jj =  jpjglo-1, 0, -1  DO BEGIN
129         zbati2(0:irest-1) = 0
130         readf, iunit, FORMAT = iformat, ij, zbati2
131         zbat(il1:il2, jj) = zbati2(0:il3)
132      END
133      ;;
134;---------------------------------------------------------------------
135; on initialise les ixmindta, iymindta  au besoin
136;---------------------------------------------------------------------
137;;
138      ixmindta = 0
139      ixmaxdta = jpiglo-1
140      iymindta = 0
141      iymaxdta = jpjglo-1
142      izmindta = 0
143      izmaxdta = jpkglo-1
144;---------------------------------------------------------------------
145; on reduit z selon les valeurs de ixmindta, iymindta, ...+ shift
146;---------------------------------------------------------------------
147      z = zbat[ixminmesh-ixmindta:ixmaxmesh-ixmindta $
148               ,iyminmesh-iymindta:iymaxmesh-iymindta ]
149      z = shift(z,key_shift, 0)
150;---------------------------------------------------------------------
151      IF n_elements(nbathys) EQ 0 THEN BEGIN
152         nbathys = 1
153         a = z*0
154         bathy_read = {name: '', mask:a}
155         bathy_read = replicate(bathy_read, 4)
156         bathy_read[0].name = bathy
157         bathy_read[0].mask = z
158      ENDIF ELSE BEGIN
159         IF nbathys LE 3 THEN BEGIN
160            nbathys = nbathys + 1
161         ENDIF ELSE BEGIN
162            nbathys = 1
163         ENDELSE
164         bathy_read[nbathys-1].name = bathy
165         bathy_read[nbathys-1].mask = z
166      ENDELSE
167
168;---------------------------------------------------------------------
169fini:
170      free_lun,iunit
171      close, iunit
172;---------------------------------------------------------------------
173sortie:
174      zbat = z
175      IF keyword_set(D3) THEN BEGIN
176         zbat = 0 > zbat
177         ; Build 3D from pseudo 3D
178         zbat=reform(zbat[*]#(1./(indgen(jpkglo)+1)),(size(zbat))[1],(size(zbat))[2], jpkglo)
179         zbat=floor(zbat)<1
180      ENDIF ELSE BEGIN
181         zbat = zbat <  1
182      ENDELSE
183      return, zbat
184   ENDIF
185END
Note: See TracBrowser for help on using the repository browser.