/[MITgcm]/MITgcm/pkg/mnc/mnc_var.F
ViewVC logotype

Diff of /MITgcm/pkg/mnc/mnc_var.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1 by edhill, Mon Jan 5 06:20:08 2004 UTC revision 1.17 by jmc, Thu Sep 23 16:17:57 2004 UTC
# Line 3  C $Name$ Line 3  C $Name$
3                
4  #include "MNC_OPTIONS.h"  #include "MNC_OPTIONS.h"
5                
6  C==================================================================  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    CBOP 1
8    C     !ROUTINE: MNC_VAR_INIT_DBL
9    
10    C     !INTERFACE:
11        SUBROUTINE MNC_VAR_INIT_DBL(        SUBROUTINE MNC_VAR_INIT_DBL(
      I     myThid,  
12       I     fname,       I     fname,
13       I     gname,       I     gname,
14       I     vname,       I     vname,
15       I     fillval )       I     myThid )
16    
17    C     !DESCRIPTION:
18    C     Create a double-precision real variable within a NetCDF file
19    C     context.
20          
21    C     !USES:
22          implicit none
23    #include "netcdf.inc"
24    
25    C     !INPUT PARAMETERS:
26          integer myThid
27          character*(*) fname,gname,vname
28    CEOP
29    
30          CALL MNC_VAR_INIT_ANY(fname,gname,vname, NF_DOUBLE, myThid)
31          RETURN
32          END
33    
34    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
35    CBOP 1
36    C     !ROUTINE: MNC_VAR_INIT_REAL
37    
38    C     !INTERFACE:
39          SUBROUTINE MNC_VAR_INIT_REAL(
40         I     fname,
41         I     gname,
42         I     vname,
43         I     myThid )
44    
45    C     !DESCRIPTION:
46    C     Create a single-precision real variable within a NetCDF file
47    C     context.
48          
49    C     !USES:
50          implicit none
51    #include "netcdf.inc"
52    
53    C     !INPUT PARAMETERS:
54          integer myThid
55          character*(*) fname,gname,vname
56    CEOP
57    
58          CALL MNC_VAR_INIT_ANY(fname,gname,vname, NF_FLOAT, myThid)
59          RETURN
60          END
61    
62    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
63    CBOP 1
64    C     !ROUTINE: MNC_VAR_INIT_INT
65    
66    C     !INTERFACE:
67          SUBROUTINE MNC_VAR_INIT_INT(
68         I     fname,
69         I     gname,
70         I     vname,
71         I     myThid )
72    
73    C     !DESCRIPTION:
74    C     Create an integer variable within a NetCDF file context.
75      
76    C     !USES:
77        implicit none        implicit none
78    #include "netcdf.inc"
79    
80    C     !INPUT PARAMETERS:
81          integer myThid
82          character*(*) fname,gname,vname
83    CEOP
84    
85          CALL MNC_VAR_INIT_ANY(fname,gname,vname, NF_INT, myThid)
86          RETURN
87          END
88    
89    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
90    CBOP 1
91    C     !ROUTINE: MNC_VAR_INIT_ANY
92    
93    C     !INTERFACE:
94          SUBROUTINE MNC_VAR_INIT_ANY(
95         I     fname,
96         I     gname,
97         I     vname,
98         I     vtype,
99         I     myThid )
100    
101    C     !DESCRIPTION:
102    C     General function for creating variables within a NetCDF file
103    C     context.
104          
105    C     !USES:
106          implicit none
107    #include "netcdf.inc"
108  #include "mnc_common.h"  #include "mnc_common.h"
109  #include "EEPARAMS.h"  #include "EEPARAMS.h"
110    
111    C     !INPUT PARAMETERS:
112          integer myThid
113          character*(*) fname,gname,vname
114          integer vtype
115    CEOP
116    
117    C     !LOCAL VARIABLES:
118          integer i,j,k, n, indf,indv, fid, nd, ngrid, is,ie, err
119          integer vid, nv, ind_g_finfo, needed, nvar
120          character*(MAX_LEN_MBUF) msgbuf
121          integer ids(20)
122          integer lenf,leng,lenv
123    
124    C     Functions
125          integer ILNBLNK
126    
127    C     Strip trailing spaces
128          lenf = ILNBLNK(fname)
129          leng = ILNBLNK(gname)
130          lenv = ILNBLNK(vname)
131    
132    C     Check that the file is open
133          CALL MNC_GET_IND(MNC_MAX_ID, fname, mnc_f_names, indf, myThid)
134          IF (indf .LT. 1) THEN
135            write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname,
136         &       ''' must be opened first'
137            CALL print_error(msgbuf, mythid)
138            stop 'ABNORMAL END: S/R MNC_VAR_INIT_ANY'
139          ENDIF
140          fid = mnc_f_info(indf,2)
141    
142    C     Check for sufficient storage space in mnc_fv_ids
143          needed = 1 + 3*(mnc_fv_ids(indf,1) + 1)
144          IF (needed .GE. MNC_MAX_INFO) THEN
145            write(msgbuf,'(2a,i7,a)') 'MNC ERROR: MNC_MAX_INFO exceeded',
146         &       ': please increase it to ', 2*MNC_MAX_INFO,
147         &       ' in the file ''pkg/mnc/mnc_common.h'''
148            CALL print_error(msgbuf, mythid)
149            stop 'ABNORMAL END: S/R MNC_VAR_INIT_ANY'
150          ENDIF
151    
152    C     Get the grid information
153          ngrid = mnc_f_info(indf,3)
154          IF (ngrid .LT. 1) THEN
155            write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname(1:lenf),
156         &       ''' contains NO grids'
157            CALL print_error(msgbuf, mythid)
158            stop 'ABNORMAL END: S/R MNC_VAR_INIT_ANY'
159          ENDIF
160          DO i = 1,ngrid
161            j = 4 + (i-1)*3
162            k = mnc_f_info(indf,j)
163            n = ILNBLNK(mnc_g_names(k))
164            IF ((leng .EQ. n)
165         &       .AND. (mnc_g_names(k)(1:n) .EQ. gname(1:n))) THEN
166              ind_g_finfo = j
167              is = mnc_f_info(indf,(j+1))
168              ie = mnc_f_info(indf,(j+2))
169              nd = 0
170              DO k = is,ie
171                nd = nd + 1
172                ids(nd) = mnc_d_ids(mnc_fd_ind(indf,k))
173              ENDDO
174              GOTO 10
175            ENDIF
176          ENDDO
177          write(msgbuf,'(5a)') 'MNC ERROR: file ''', fname(1:lenf),
178         &     ''' does not contain grid ''', gname(1:leng), ''''
179          CALL print_error(msgbuf, mythid)
180          stop 'ABNORMAL END: S/R MNC_VAR_INIT_ANY'
181     10   CONTINUE
182    
183    C     Check if the variable is already defined
184          nvar = mnc_fv_ids(indf,1)
185          DO i = 1,nvar
186            j = 2 + 3*(i-1)
187            IF (mnc_v_names(mnc_fv_ids(indf,j)) .EQ. vname) THEN
188              k = mnc_f_info(indf,mnc_fv_ids(indf,j+2))
189              IF (mnc_g_names(k) .NE. gname) THEN
190                write(msgbuf,'(5a)') 'MNC ERROR: variable ''',
191         &           vname(1:lenv), ''' is already defined in file ''',
192         &           fname(1:lenf), ''' but using a different grid shape'
193                CALL print_error(msgbuf, mythid)
194                stop 'ABNORMAL END: S/R MNC_VAR_INIT_ANY'
195              ELSE
196    C           Its OK, the variable and grid names are the same
197                RETURN
198              ENDIF
199            ENDIF
200          ENDDO
201    
202    C     Add the variable definition
203          CALL MNC_FILE_REDEF(fname, myThid)
204          err = NF_DEF_VAR(fid, vname, vtype, nd, ids, vid)
205          write(msgbuf,'(5a)') 'defining variable ''', vname(1:lenv),
206         &     ''' in file ''', fname(1:lenf), ''''
207          CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
208    
209    C     Success, so save the variable info
210          CALL MNC_GET_NEXT_EMPTY_IND(MNC_MAX_ID,mnc_v_names,indv, myThid)
211          mnc_v_names(indv)(1:lenv) = vname(1:lenv)
212          nv = mnc_fv_ids(indf,1)
213          i = 2 + nv*3
214          mnc_fv_ids(indf,i)   = indv
215          mnc_fv_ids(indf,i+1) = vid
216          mnc_fv_ids(indf,i+2) = ind_g_finfo
217          mnc_fv_ids(indf,1) = nv + 1
218    
219          RETURN
220          END
221    
222    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
223    CBOP 1
224    C     !ROUTINE: MNC_VAR_ADD_ATTR_STR
225    
226    C     !INTERFACE:
227          SUBROUTINE MNC_VAR_ADD_ATTR_STR(
228         I     fname,
229         I     vname,
230         I     atname,
231         I     sval,
232         I     myThid )
233    
234    C     !DESCRIPTION:
235    C     Subroutine for adding a character string attribute to a NetCDF
236    C     file.
237          
238    C     !USES:
239          implicit none
240    
241    C     !INPUT PARAMETERS:
242          integer myThid
243          character*(*) fname,vname,atname,sval
244    CEOP
245          real*8 dZero(1)
246          real*4 sZero(1)
247          integer iZero(1)
248          dZero(1) = 0.0D0
249          sZero(1) = 0.0
250          iZero(1) = 0
251    
252          CALL MNC_VAR_ADD_ATTR_ANY(fname,vname,atname,
253         &     1, sval, 0, dZero, sZero, iZero, myThid)
254          RETURN
255          END
256    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
257    CBOP 1
258    C     !ROUTINE: MNC_VAR_ADD_ATTR_DBL
259    
260    C     !INTERFACE:
261          SUBROUTINE MNC_VAR_ADD_ATTR_DBL(
262         I     fname,
263         I     vname,
264         I     atname,
265         I     nv,
266         I     dval,
267         I     myThid )
268    
269    C     !DESCRIPTION:
270    C     Subroutine for adding a double-precision real attribute to a
271    C     NetCDF file.
272      
273    C     !USES:
274          implicit none
275    
276    C     !INPUT PARAMETERS:
277          integer myThid,nv
278          character*(*) fname,vname,atname
279          REAL*8 dval(*)
280    CEOP
281          real*4 sZero(1)
282          integer iZero(1)
283          sZero(1) = 0.0
284          iZero(1) = 0
285    
286          CALL MNC_VAR_ADD_ATTR_ANY(fname,vname,atname,
287         &     2, ' ', nv, dval, sZero, iZero, myThid)
288          RETURN
289          END
290    
291    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
292    CBOP 1
293    C     !ROUTINE: MNC_VAR_ADD_ATTR_REAL
294    
295    C     !INTERFACE:
296          SUBROUTINE MNC_VAR_ADD_ATTR_REAL(
297         I     fname,
298         I     vname,
299         I     atname,
300         I     nv,
301         I     rval,
302         I     myThid )
303    
304    C     !DESCRIPTION:
305    C     Subroutine for adding a single-precision real attribute to a
306    C     NetCDF file.
307      
308    C     !USES:
309          implicit none
310    
311    C     !INPUT PARAMETERS:
312          integer myThid,nv
313          character*(*) fname,vname,atname
314          REAL*4 rval(*)
315    CEOP
316          real*8 dZero(1)
317          integer iZero(1)
318          dZero(1) = 0.0D0
319          iZero(1) = 0
320    
321          CALL MNC_VAR_ADD_ATTR_ANY(fname,vname,atname,
322         &     3, ' ', nv, dZero, rval, iZero, myThid)
323          RETURN
324          END
325    
326    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
327    CBOP 1
328    C     !ROUTINE: MNC_VAR_ADD_ATTR_INT
329    
330    C     !INTERFACE:
331          SUBROUTINE MNC_VAR_ADD_ATTR_INT(
332         I     fname,
333         I     vname,
334         I     atname,
335         I     nv,
336         I     ival,
337         I     myThid )
338    
339    C     !DESCRIPTION:
340    C     Subroutine for adding an integer attribute to a
341    C     NetCDF file.
342          
343    C     !USES:
344          implicit none
345    
346    C     !INPUT PARAMETERS:
347          integer myThid,nv
348          character*(*) fname,vname,atname
349          integer ival(*)
350    CEOP
351          real*8 dZero(1)
352          real*4 sZero(1)
353          dZero(1) = 0.0D0
354          sZero(1) = 0.0
355    
356          CALL MNC_VAR_ADD_ATTR_ANY(fname,vname,atname,
357         &     4, ' ', nv, dZero, sZero, ival, myThid)
358          RETURN
359          END
360    
361    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
362    CBOP 1
363    C     !ROUTINE: MNC_VAR_ADD_ATTR_ANY
364    
365    C     !INTERFACE:
366          SUBROUTINE MNC_VAR_ADD_ATTR_ANY(
367         I     fname,
368         I     vname,
369         I     atname,
370         I     atype, cs,len,dv,rv,iv,
371         I     myThid )
372    
373    C     !DESCRIPTION:
374    C     General subroutine for adding attributes to a NetCDF file.
375          
376    C     !USES:
377          implicit none
378    #include "netcdf.inc"
379    #include "mnc_common.h"
380    #include "EEPARAMS.h"
381    
382    C     !INPUT PARAMETERS:
383          integer myThid,atype,len
384          character*(*) fname,vname,atname
385          character*(*) cs
386          REAL*8 dv(*)
387          REAL*4 rv(*)
388          integer iv(*)
389    CEOP
390    
391    C     !LOCAL VARIABLES:
392          integer n, indf,ind_fv_ids, fid,vid, err
393          character*(MAX_LEN_MBUF) msgbuf
394          integer lenf,lenv,lenat,lens
395    
396    C     Functions
397          integer ILNBLNK
398    
399    C     Strip trailing spaces
400          lenf = ILNBLNK(fname)
401          lenv = ILNBLNK(vname)
402          lenat = ILNBLNK(atname)
403          lens = ILNBLNK(cs)
404    
405          CALL MNC_GET_FVINDS(fname, vname, indf, ind_fv_ids, myThid)
406          IF ((indf .LT. 1).OR.(ind_fv_ids .LT. 1)) THEN
407            write(msgbuf,'(5a)') 'MNC ERROR: file ''', fname(1:lenf),
408         &       ''' is not open or does not contain variable ''',
409         &       vname(1:lenv), ''''
410            CALL print_error(msgbuf, mythid)
411            stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_STR'
412          ENDIF
413          fid = mnc_f_info(indf,2)
414          vid = mnc_fv_ids(indf,(ind_fv_ids+1))
415    
416    C     Set the attribute
417          CALL MNC_FILE_REDEF(fname, myThid)
418          IF (atype .EQ. 1) THEN
419            err = NF_PUT_ATT_TEXT(fid, vid, atname, lens, cs)
420          ELSEIF (atype .EQ. 2) THEN
421            err = NF_PUT_ATT_DOUBLE(fid, vid, atname, NF_DOUBLE, len, dv)
422          ELSEIF (atype .EQ. 3) THEN
423            err = NF_PUT_ATT_REAL(fid, vid, atname, NF_FLOAT, len, rv)
424          ELSEIF (atype .EQ. 4) THEN
425            err = NF_PUT_ATT_INT(fid, vid, atname, NF_INT, len, iv)
426          ELSE
427            write(msgbuf,'(a,i10,a)') 'MNC ERROR: atype = ''', atype,
428         &       ''' is invalid--must be: [1-4]'
429            n = ILNBLNK(msgbuf)
430            CALL print_error(msgbuf(1:n), mythid)
431            stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_ANY'
432          ENDIF
433          write(msgbuf,'(5a)') 'adding attribute ''', atname(1:lenat),
434         &     ''' to file ''', fname(1:lenf), ''''
435          CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
436    
437          RETURN
438          END
439    
440    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
441    
442          SUBROUTINE MNC_VAR_WRITE_DBL(
443         I     fname,
444         I     vname,
445         I     var,
446         I     myThid )
447    
448          implicit none
449    C     Arguments
450          integer myThid
451          character*(*) fname,vname
452          REAL*8 var(*)
453    
454          CALL MNC_VAR_WRITE_ANY(fname,vname,1,0,var,0.0,0, myThid)
455          RETURN
456          END
457    
458    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
459    
460          SUBROUTINE MNC_VAR_WRITE_REAL(
461         I     fname,
462         I     vname,
463         I     var,
464         I     myThid )
465    
466          implicit none
467    C     Arguments
468          integer myThid
469          character*(*) fname,vname
470          REAL*4 var(*)
471    
472          CALL MNC_VAR_WRITE_ANY(fname,vname,2,0,0.0D0,var,0, myThid)
473          RETURN
474          END
475    
476    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
477    
478          SUBROUTINE MNC_VAR_WRITE_INT(
479         I     fname,
480         I     vname,
481         I     var,
482         I     myThid )
483    
484          implicit none
485  C     Arguments  C     Arguments
486        integer myThid        integer myThid
487        character*(*) fname        character*(*) fname,vname
488        character*(*) gname        integer var(*)
489        character*(*) vname  
490        _RL fillval        CALL MNC_VAR_WRITE_ANY(fname,vname,3,0,0.0D0,0.0,var, myThid)
491          RETURN
492          END
493    
494    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
495    
496          SUBROUTINE MNC_VAR_APPEND_DBL(
497         I     fname,
498         I     vname,
499         I     var,
500         I     append,
501         I     myThid )
502    
503          implicit none
504    C     Arguments
505          integer myThid, append
506          character*(*) fname,vname
507          REAL*8 var(*)
508    
509          CALL MNC_VAR_WRITE_ANY(fname,vname,1,append,var,0.0,0, myThid)
510          RETURN
511          END
512    
513    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
514    
515          SUBROUTINE MNC_VAR_APPEND_REAL(
516         I     fname,
517         I     vname,
518         I     var,
519         I     append,
520         I     myThid )
521    
522          implicit none
523    C     Arguments
524          integer myThid, append
525          character*(*) fname,vname
526          REAL*4 var(*)
527    
528          CALL MNC_VAR_WRITE_ANY(fname,vname,2,append,0.0D0,var,0,myThid)
529          RETURN
530          END
531    
532    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
533    
534          SUBROUTINE MNC_VAR_APPEND_INT(
535         I     fname,
536         I     vname,
537         I     var,
538         I     append,
539         I     myThid )
540    
541          implicit none
542    C     Arguments
543          integer myThid, append
544          character*(*) fname,vname
545          integer var(*)
546    
547          CALL MNC_VAR_WRITE_ANY(fname,vname,3,append,0.0D0,0.0,var,myThid)
548          RETURN
549          END
550    
551    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
552    
553          SUBROUTINE MNC_VAR_WRITE_ANY(
554         I     fname,
555         I     vname,
556         I     vtype,
557         I     append,
558         I     dv,
559         I     rv,
560         I     iv,
561         I     myThid )
562    
563          implicit none
564    #include "netcdf.inc"
565    #include "mnc_common.h"
566    #include "EEPARAMS.h"
567    
568    C     Arguments
569          integer myThid, vtype
570          character*(*) fname,vname
571          REAL*8 dv(*)
572          REAL*4 rv(*)
573          integer iv(*)
574          integer append
575    
576  C     Functions  C     Functions
577        integer ILNBLNK        integer ILNBLNK
578    
579  C     Local Variables  C     Local Variables
580        integer i, ind, fid        integer i,j,k, n, indf,ind_fv_ids, fid,vid,did, ig, err, ds,de
581        character*(MAX_LEN_MBUF) msgbuf        character*(MAX_LEN_MBUF) msgbuf
582          integer lenf,lenv, lend
583          integer vstart(100), vcount(100)
584    
585    C     Strip trailing spaces
586          lenf = ILNBLNK(fname)
587          lenv = ILNBLNK(vname)
588    
589  C     Is the file open?        CALL MNC_GET_FVINDS(fname, vname, indf, ind_fv_ids, myThid)
590        CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, ind)        IF ((indf .LT. 1).OR.(ind_fv_ids .LT. 1)) THEN
591        IF ( ind .GT. 0 ) THEN          write(msgbuf,'(5a)') 'MNC ERROR: file ''', fname(1:lenf),
592          write(msgbuf,'(3a)') 'MNC ERROR: file ''',       &       ''' is not open or does not contain variable ''',
593       &       fname, ''' must be opened first'       &       vname(1:lenv), ''''
594          CALL print_error( msgbuf, mythid )          CALL print_error(msgbuf, mythid)
595          stop 'ABNORMAL END: S/R MNC_FILE_ADD_ATTR_INT'          stop 'ABNORMAL END: S/R MNC_VAR_ADD_ATTR_STR'
596        ENDIF        ENDIF
597        fid = mnc_f_info(ind,2)        fid = mnc_f_info(indf,2)
598          vid = mnc_fv_ids(indf,(ind_fv_ids+1))
599    
600    C     Get the lengths from the dim IDs
601          ig = mnc_fv_ids(indf,(ind_fv_ids+2))
602          ds = mnc_f_info(indf,ig+1)
603          de = mnc_f_info(indf,ig+2)
604          k = 0
605          DO i = ds,de
606            k = k + 1
607            vstart(k) = 1
608            vcount(k) = mnc_d_size( mnc_fd_ind(indf,i) )
609          ENDDO
610    
611    C     Check for the unlimited dimension
612          j = mnc_d_size( mnc_fd_ind(indf,de) )
613          IF (j .LT. 1) THEN
614            did = mnc_d_ids( mnc_fd_ind(indf,de) )
615            err = NF_INQ_DIMLEN(fid, did, lend)
616            write(msgbuf,'(a)') 'reading current length of unlimited dim'
617            CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
618            IF (append .GT. 0) THEN
619              lend = lend + append
620            ENDIF
621            IF (lend .LT. 1) lend = 1
622            vstart(k) = lend
623            vcount(k) = 1
624          ENDIF
625    
626          CALL MNC_FILE_ENDDEF(fname, myThid)
627          IF (vtype .EQ. 1) THEN
628            err = NF_PUT_VARA_DOUBLE(fid, vid, vstart, vcount, dv)
629          ELSEIF (vtype .EQ. 2) THEN
630            err = NF_PUT_VARA_REAL(fid, vid, vstart, vcount, rv)
631          ELSEIF (vtype .EQ. 3) THEN
632            err = NF_PUT_VARA_INT(fid, vid, vstart, vcount, iv)
633          ELSE
634            write(msgbuf,'(a,i10,a)') 'MNC ERROR: vtype = ''', vtype,
635         &       ''' is invalid--must be: [1|2|3]'
636            n = ILNBLNK(msgbuf)
637            CALL print_error(msgbuf(1:n), mythid)
638            stop 'ABNORMAL END: S/R MNC_VAR_WRITE_ALL'
639          ENDIF  
640          write(msgbuf,'(5a)') 'writing variable ''', vname(1:lenv),
641         &     ''' to file ''', fname(1:lenf), ''''
642          CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
643    
644          RETURN
645        END        END
646    
647    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
648    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.17

  ViewVC Help
Powered by ViewVC 1.1.22