New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
ctlopn.f90 in tags/nemo_dev_x3/NEMO/OPA_SRC – NEMO

source: tags/nemo_dev_x3/NEMO/OPA_SRC/ctlopn.f90 @ 105

Last change on this file since 105 was 105, checked in by cvs2svn, 20 years ago

This commit was manufactured by cvs2svn to create tag 'nemo_dev_x3'.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1   SUBROUTINE ctlopn ( knum, cdfile, cdstat, cdform, cdacce,   &
2                       klengh, kout, ldwp, krequ )
3      !!----------------------------------------------------------------------
4      !!                  ***  ROUTINE ctlopn  ***
5      !!
6      !! ** Purpose :   Open file and check if required file is available.
7      !!
8      !! ** Method  :   Fortan open
9      !!
10      !! History :
11      !!        !  95-12  (G. Madec)  Original code
12      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module
13      !!----------------------------------------------------------------------
14      IMPLICIT NONE
15
16      INTEGER, INTENT( in ) ::   &
17         knum,     & ! logical unit to open
18         krequ,    & ! =1 file required (stop if not exist)
19         !           ! =0 file not required (create the file if does not exist)
20         kout,     & ! number of logical units for write
21         klengh      ! record length
22
23      INTEGER ::   iost
24      CHARACTER (len=* ), INTENT( in ) ::   &
25         cdacce,   & ! access specifier
26         cdform,   & ! formatting specifier
27         cdstat      ! disposition specifier
28      CHARACTER (len=* ), INTENT( in ) ::   &
29         cdfile      ! file name to open
30
31      LOGICAL ::  ldwp   ! boolean term for print
32      !!----------------------------------------------------------------------
33      !!  OPA 8.5, LODYC-IPSL (2002)
34      !!----------------------------------------------------------------------
35
36
37      ! 1. Required file
38      ! ----------------
39
40      IF( krequ == 1 ) THEN
41
42         iost=0
43         IF( cdacce(1:6) == 'DIRECT' )  THEN
44            OPEN( UNIT=knum, FILE=cdfile, FORM=cdform, ACCESS=cdacce,   &
45               STATUS=cdstat, RECL=klengh, ERR=100, IOSTAT=iost )
46         ELSE
47            OPEN( UNIT=knum, FILE=cdfile, FORM=cdform, ACCESS=cdacce,   &
48               STATUS=cdstat, ERR=100, IOSTAT=iost)
49         ENDIF
50         IF( iost == 0 ) THEN
51            IF(ldwp) THEN
52               WRITE(kout,*) '     file   : ', cdfile,' open ok'
53               WRITE(kout,*) '     unit   = ', knum
54               WRITE(kout,*) '     status = ', cdstat
55               WRITE(kout,*) '     form   = ', cdform
56               WRITE(kout,*) '     access = ', cdacce
57               WRITE(kout,*)
58            ENDIF
59         ENDIF
60100      CONTINUE
61         IF( iost /= 0 ) THEN
62            IF(ldwp) THEN
63               WRITE(kout,*)
64               WRITE(kout,*) ' ===>>>> : bad opening file: ', cdfile
65               WRITE(kout,*) ' =======   ===  '
66               WRITE(kout,*) '           unit   = ', knum
67               WRITE(kout,*) '           status = ', cdstat
68               WRITE(kout,*) '           form   = ', cdform
69               WRITE(kout,*) '           access = ', cdacce
70               WRITE(kout,*) '           iostat = ', iost
71               WRITE(kout,*) '           we stop. verify the file '
72               WRITE(kout,*)
73            ENDIF
74            STOP 'ctlopn bad opening'
75         ENDIF
76         
77         
78         ! 2. Not required, file create if not exist
79         ! -----------------------------------------
80         
81      ELSEIF( krequ == 0 ) THEN
82
83         iost = 0
84         IF( cdacce(1:6) == 'DIRECT' ) THEN
85            OPEN( UNIT=knum, FILE=cdfile, FORM=cdform, ACCESS=cdacce,   &
86               STATUS=cdstat, RECL=klengh, ERR=200, IOSTAT=iost )
87         ELSE
88            OPEN( UNIT=knum, FILE=cdfile, FORM=cdform, ACCESS=cdacce,   &
89               STATUS=cdstat, ERR=200, IOSTAT=iost )
90         ENDIF
91         IF(iost == 0) THEN
92            IF(ldwp) THEN
93               WRITE(kout,*) '     file   : ', cdfile,' open ok'
94               WRITE(kout,*) '     unit   = ', knum
95               WRITE(kout,*) '     status = ', cdstat
96               WRITE(kout,*) '     form   = ', cdform
97               WRITE(kout,*) '     access = ', cdacce
98               WRITE(kout,*)
99            ENDIF
100         ENDIF
101200      CONTINUE
102         IF( iost /= 0 ) THEN
103            iost = 0
104            IF(ldwp) THEN
105               WRITE(kout,*)
106               WRITE(kout,*) '     ===>>>> : file ', cdfile,   &
107                  ' does not exist: it is created'
108               WRITE(kout,*) ' =======   ===  '
109            ENDIF
110            IF( cdacce(1:6) == 'DIRECT' ) THEN
111               OPEN( UNIT=knum, FILE=cdfile, FORM=cdform,   &
112                  ACCESS=cdacce, STATUS=cdstat,   &
113                  RECL=klengh, ERR=210, IOSTAT=iost )
114            ELSE
115               OPEN( UNIT=knum, FILE=cdfile, FORM=cdform,   &
116                  ACCESS=cdacce, STATUS=cdstat, ERR=210,   &
117                  IOSTAT=iost )
118            ENDIF
119            IF(ldwp) THEN
120               WRITE(kout,*) '     file   : ', cdfile,' open ok'
121               WRITE(kout,*) '     unit   = ', knum
122               WRITE(kout,*) '     status = ', cdstat
123               WRITE(kout,*) '     form   = ', cdform
124               WRITE(kout,*) '     access = ', cdacce
125               WRITE(kout,*)
126            ENDIF
127210         CONTINUE
128            IF( iost /= 0 ) THEN
129               IF(ldwp) THEN
130                  WRITE(kout,*) ' logical unit ',knum,' iostat = ', iost
131                  WRITE(kout,*) ' we stop. verify the file ', cdfile
132                  WRITE(kout,*)
133               ENDIF
134               STOP '001'
135            ENDIF
136         ENDIF
137         
138      ELSE
139         
140         IF(ldwp) THEN
141            WRITE(kout,*)
142            WRITE(kout,*) ' ctlopn : invalid option, krequ = ', krequ
143            WRITE(kout,*) ' ~~~~~~   call for file ', cdfile
144            WRITE(kout,*)
145         ENDIF
146
147
148         STOP 'ctlopn invalid option'
149      ENDIF
150     
151   END SUBROUTINE ctlopn
Note: See TracBrowser for help on using the repository browser.