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.
crs_iom.F90 in branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS – NEMO

source: branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs_iom.F90 @ 3738

Last change on this file since 3738 was 3738, checked in by cetlod, 10 years ago

dev_r3411_CNRS4_IOCRS : some corrections

  • Property svn:executable set to *
File size: 8.5 KB
Line 
1MODULE crs_iom
2   !!=====================================================================
3   !!                    ***  MODULE  crs_iom ***
4   !! Input/Output manager :  Library to read input files with NF90 (only fliocom module)
5   !!====================================================================
6   !! History :  9.0  ! 12 06  (J. Simeon) Original code
7   !!
8   !!
9   !!            kdompar_crs(1,1) = global x-dimension, jpiglo_crs
10   !!            kdompar_crs(2,1) = global y-dimension, jpjglo_crs
11   !!            kdompar_crs(:,2) 
12   !!  from dom_oce INTEGER nimpp, njmpp      !: i- & j-indexes for mpp-subdomain left bottom
13   !!
14   !!  From LBC/mppini.F90     
15   !!  ! No mpp computation
16   !!   nimpp  = 1
17   !!   njmpp  = 1
18   !!   nlci   = jpi
19   !!   nlcj   = jpj
20   !!   nldi   = 1
21   !!   nldj   = 1
22   !!   nlei   = jpi
23   !!   nlej   = jpj
24   !!   nperio = jperio
25   !!   nbondi = 2
26   !!   nbondj = 2
27   !!   nidom  = FLIO_DOM_NONE
28   !!   npolj = jperio
29   !!
30   !! jes. 28 Jun 2012. TODO. make sure of variable declarations to be placed here or crs_dom.F90
31   !!--------------------------------------------------------------------
32   USE timing
33   USE crs_dom
34   USE dom_oce         ! ocean space and time domain
35   USE iom_def         ! iom variables definitions
36   USE netcdf          ! NetCDF library
37   USE in_out_manager  ! I/O manager
38   USE lib_mpp         ! MPP library
39   USE iom             ! I/O library
40   USE par_kind, ONLY: wp   
41
42
43   IMPLICIT NONE
44   PRIVATE
45
46   PUBLIC crs_iom_open, crs_iom_close, crs_iom_rstput, crs_iom_put
47
48!   PUBLIC crs_iom_varid, crs_iom_get, crs_iom_gettime
49
50
51   INTEGER, PARAMETER ::   jpdomcrs_data          = 1   !: ( 1  :jpiglo_crs, 1  :jpjglo_crs)
52   INTEGER, PARAMETER ::   jpdomcrs_global        = 2   !: ( 1  :jpiglo_crs, 1  :jpjglo_crs)
53   INTEGER, PARAMETER ::   jpdomcrs_local         = 3   !: One of the 3 following cases
54   INTEGER, PARAMETER ::   jpdomcrs_local_full    = 4   !: ( 1  :jpi_crs   , 1  :jpj_crs   )
55   INTEGER, PARAMETER ::   jpdomcrs_local_noextra = 5   !: ( 1  :nlci_crs  , 1  :nlcj_crs  )
56   INTEGER, PARAMETER ::   jpdomcrs_local_noovlap = 6   !: (nldi_crs:nlei_crs  ,nldj_crs:nlej_crs  )
57   INTEGER, PARAMETER ::   jpdomcrs_unknown       = 7   !: No dimension checking
58   INTEGER, PARAMETER ::   jpdomcrs_autoglo       = 8   !:
59   INTEGER, PARAMETER ::   jpdomcrs_autodta       = 9   !:
60   INTEGER            ::   ipdomcrs_local_noovlap_crs, ipdomcrs_local_full_crs, idomcrs_local_noextra_crs
61
62   INTEGER                 ::   idomcrs     ! Type of domain to be written (default = jpdom_local_noovlap)
63   INTEGER, DIMENSION(2,5) ::   idompar_crs ! domain parameters:   
64   LOGICAL                 ::   llnoov      ! local definition to read overlap
65
66
67CONTAINS
68
69   SUBROUTINE crs_iom_open( cdname, kiomid, ldwrt, kdom, kiolib )
70      !!--------------------------------------------------------------------
71      !!                       ***  MODULE crs_iom_open  ***
72      !!
73      !! ** Purpose : open an input file with NF90 on coarsened grid
74      !!---------------------------------------------------------------------
75      !! Arguments
76      CHARACTER(len=*)       , INTENT(in)           ::   cdname   ! File name
77      INTEGER                , INTENT(inout)        ::   kiomid   ! nf90 identifier of the opened file
78      LOGICAL                , INTENT(in)           ::   ldwrt    ! read or write the file?
79      INTEGER                , INTENT(in), OPTIONAL ::   kdom     ! Type of domain to be written (default = jpdom_local_noovlap)
80      INTEGER                , INTENT(in), OPTIONAL ::   kiolib   ! library used to open the file (default = jpnf90)
81
82
83      CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain
84
85      llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 
86      IF( llnoov ) THEN   ;   idomcrs = jpdomcrs_local_noovlap   ! default definition
87      ELSE                ;   idomcrs = jpdomcrs_local_full      ! default definition
88      ENDIF
89      IF ( PRESENT(kdom) ) idomcrs = kdom
90
91      WRITE(numout,*) 'crs_iom_open. kiomid=', kiomid
92
93      CALL iom_open( cdname, kiomid, ldwrt, idomcrs, kiolib )
94
95      WRITE(numout,*) 'crs_iom_open. after iom_open call kiomid=', kiomid
96
97      CALL dom_grid_glo   ! Return to parent grid domain
98
99   END SUBROUTINE crs_iom_open
100
101
102   SUBROUTINE crs_iom_close( kiomid )
103      !!--------------------------------------------------------------------
104      !!                       ***  MODULE crs_iom_open  ***
105      !!
106      !! ** Purpose : open an input file with NF90 on coarsened grid
107      !!---------------------------------------------------------------------
108      !! Arguments
109      INTEGER                , INTENT(inout)           ::   kiomid      ! nf90 identifier of the opened file
110      !! Local variable
111      CHARACTER(LEN=100)  ::   clinfo   ! info character
112      !---------------------------------------------------------------------
113      !
114      WRITE(numout,*) 'crs_iom_close. kiomid=', kiomid
115
116      CALL iom_close( kiomid )
117      WRITE(numout,*) 'crs_iom_close. after iom_open call kiomid=', kiomid
118
119      !   
120   END SUBROUTINE crs_iom_close
121
122
123   SUBROUTINE crs_iom_rstput( kt, kwrite, kiomid, cdvar, pv_r0d, pv_r1d, pv_r2d, pv_r3d, ktype )
124      !!--------------------------------------------------------------------
125      !!                   ***  SUBROUTINE  crs_iom_rp0d  ***
126      !!
127      !! ** Purpose : read the time axis cdvar in the file
128      !!--------------------------------------------------------------------
129      ! Arguments
130      INTEGER          ,                                  INTENT(in) :: kt       ! ocean time-step
131      INTEGER          ,                                  INTENT(in) :: kwrite   ! writing time-step
132      INTEGER          ,                                  INTENT(in) :: kiomid   ! Identifier of the file
133      CHARACTER(len=*) ,                                  INTENT(in) :: cdvar    ! variable name
134      REAL(wp), OPTIONAL,                                 INTENT(in) :: pv_r0d   ! written Od field
135      REAL(wp), OPTIONAL, DIMENSION(jpk),                 INTENT(in) :: pv_r1d   ! written 1d field
136      REAL(wp), OPTIONAL, DIMENSION(jpi_crs,jpj_crs) ,    INTENT(in) :: pv_r2d   ! written 2d field
137      REAL(wp), OPTIONAL, DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in) :: pv_r3d   ! written 3d field
138      INTEGER,  OPTIONAL,                                 INTENT(in) :: ktype    ! variable type (default R8)
139
140      ! Local
141      INTEGER               :: ivid     ! variable id
142      INTEGER               :: itype    ! variable type
143
144      CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain
145
146      IF(     PRESENT(pv_r0d) ) THEN ; CALL iom_rstput( kt, kwrite, kiomid, cdvar, pv_r0d, ktype )
147      ELSEIF( PRESENT(pv_r1d) ) THEN ; CALL iom_rstput( kt, kwrite, kiomid, cdvar, pv_r1d, ktype )
148      ELSEIF( PRESENT(pv_r2d) ) THEN ; CALL iom_rstput( kt, kwrite, kiomid, cdvar, pv_r2d, ktype )
149      ELSEIF( PRESENT(pv_r3d) ) THEN ; CALL iom_rstput( kt, kwrite, kiomid, cdvar, pv_r3d, ktype )
150      ENDIF
151
152      CALL dom_grid_glo   ! Return to parent grid domain
153 
154   END SUBROUTINE crs_iom_rstput
155
156   SUBROUTINE crs_iom_put( cdvar , pv_r0d, pv_r1d, pv_r2d, pv_r3d )
157      !!--------------------------------------------------------------------
158      !!                   ***  SUBROUTINE  iom_put  ***
159      !!
160      !! ** Purpose : read the time axis cdvar in the file
161      !!--------------------------------------------------------------------
162      ! Arguments
163      CHARACTER(len=*)            , INTENT(in)           ::   cdvar    ! variable name
164      REAL(wp)                    , INTENT(in), OPTIONAL ::   pv_r0d   ! written Od field
165      REAL(wp), DIMENSION(      :), INTENT(in), OPTIONAL ::   pv_r1d   ! written 1d field
166      REAL(wp), DIMENSION(:, :   ), INTENT(in), OPTIONAL ::   pv_r2d   ! written 2d field
167      REAL(wp), DIMENSION(:, :, :), INTENT(in), OPTIONAL ::   pv_r3d   ! written 3d field
168
169      ! Local
170      INTEGER               :: ivid     ! variable id
171      INTEGER               :: itype    ! variable type
172
173      CALL dom_grid_crs   ! Save the parent grid information  & Switch to coarse grid domain
174
175      ! variable definition
176      IF(     PRESENT(pv_r0d) ) THEN   ;  CALL iom_put( cdvar, pv_r0d )
177      ELSEIF( PRESENT(pv_r1d) ) THEN   ;  CALL iom_put( cdvar, pv_r1d )
178      ELSEIF( PRESENT(pv_r2d) ) THEN   ;  CALL iom_put( cdvar, pv_r2d )
179      ELSEIF( PRESENT(pv_r3d) ) THEN   ;  CALL iom_put( cdvar, pv_r3d )
180      ENDIF
181
182      CALL dom_grid_glo   ! Return to parent grid domain
183
184   END SUBROUTINE crs_iom_put
185
186END MODULE crs_iom
Note: See TracBrowser for help on using the repository browser.