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.
trdmld_trc_rst.F90 in trunk/NEMO/TOP_SRC/TRP – NEMO

source: trunk/NEMO/TOP_SRC/TRP/trdmld_trc_rst.F90 @ 1175

Last change on this file since 1175 was 1175, checked in by cetlod, 16 years ago

update transport modules to take into account new trends organization, see ticket:248

File size: 10.9 KB
Line 
1MODULE trdmld_trc_rst
2   !!======================================================================
3   !!                       ***  MODULE  trdmld_rst  ***
4   !! Ocean dynamic :  Input/Output files for restart on mixed-layer diagnostics
5   !!======================================================================
6   !! History :  9.0  ! 07-03 (C. Deltel) Original code
7   !!----------------------------------------------------------------------
8 
9#if defined key_top && defined key_trdmld_trc
10   !!----------------------------------------------------------------------
11   USE oce_trc
12   USE in_out_manager  ! I/O manager
13   USE iom             ! I/O module
14   USE trcrst          ! only for lrst_trc
15   USE trc             ! for ndttrc ctrcnm
16   USE trdmld_trc_oce  ! for lk_trdmld_trc
17
18   IMPLICIT NONE
19   PRIVATE
20 
21   PUBLIC   trd_mld_trc_rst_opn
22   PUBLIC   trd_mld_trc_rst_read    ! routine called by trd_mld_init
23   PUBLIC   trd_mld_trc_rst_write   ! routine called by step.F90
24 
25   INTEGER ::   nummldw_trc               ! logical unit for mld restart
26   !!---------------------------------------------------------------------------------
27   !! OPA 9.0 , LOCEAN-IPSL (2006)
28   !! $Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/TRD/trdmld_rst.F90,v 1.6 2006/11/14 09:46:13 opalod Exp $
29   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
30   !!---------------------------------------------------------------------------------
31 
32CONTAINS
33 
34    SUBROUTINE trd_mld_trc_rst_opn( kt )
35      !!--------------------------------------------------------------------------------
36      !!                  ***  SUBROUTINE trd_mld_trc_rst_opn  ***
37      !!               
38      !! ** Purpose :   open mixed-layer diagnostics restart fields.
39      !!--------------------------------------------------------------------------------
40      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index
41      CHARACTER(LEN=20)   ::   clkt     ! ocean time-step deine as a character
42      CHARACTER(LEN=50)   ::   clname   ! ice output restart file name
43      !!--------------------------------------------------------------------------------
44     
45      IF ( lk_trdmld_trc ) THEN
46         IF( kt == nitrst - ndttrc .OR. nitend - nit000 + 1 < 2 * ndttrc ) THEN ! idem trcrst.F90
47            IF( nitrst > 1.0e9 ) THEN   
48               WRITE(clkt,*) nitrst
49            ELSE
50               WRITE(clkt,'(i8.8)') nitrst
51            ENDIF
52            clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_restart_mld_trc"
53            IF(lwp) WRITE(numout,*) '             open ocean restart_mld_trc NetCDF file: '//clname
54            CALL iom_open( clname, nummldw_trc, ldwrt = .TRUE., kiolib = jprstlib )
55         ENDIF
56      ENDIF
57
58    END SUBROUTINE trd_mld_trc_rst_opn
59
60    SUBROUTINE trd_mld_trc_rst_write( kt )
61      !!--------------------------------------------------------------------------------
62      !!                  ***  SUBROUTINE trd_mld_rst_wri  ***
63      !!               
64      !! ** Purpose :   Write mixed-layer diagnostics restart fields.
65      !!--------------------------------------------------------------------------------
66      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index
67      !
68      CHARACTER (len=35) :: charout
69      INTEGER :: jl,  jk, jn               ! loop indice
70      !!--------------------------------------------------------------------------------
71
72      IF( kt == nitend .AND. lk_trdmld_trc ) THEN
73
74         IF( kt == nitend .AND. lwp ) THEN
75            WRITE(numout,*)
76            WRITE(numout,*) 'trdmld_trc_rst: output for ML diags. restart, with trd_mld_trc_rst_write routine'
77            WRITE(numout,*) '~~~~~~~~~~~~~~'
78            WRITE(numout,*)
79         ENDIF
80
81         IF( ln_trdmld_trc_instant ) THEN 
82            !
83            DO jn = 1, jptra
84               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbb_trc_'  //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
85               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbn_trc_'  //ctrcnm(jn), tmlbn_trc  (:,:,jn) )
86               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
87               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
88            END DO
89            !
90         ELSE
91            !
92            CALL iom_rstput( kt, nitrst, nummldw_trc, 'rmldbn_trc', rmldbn_trc )  ! 2D x 1
93           
94            !                                                          ! ===========
95            DO jn = 1, jptra                                           ! tracer loop
96               !                                                       ! ===========
97
98               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc (:,:,jn) ) ! 2D x jptra
99               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbb_trc_'   //ctrcnm(jn), tmlbb_trc   (:,:,jn) ) ! 2D x jptra
100               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc (:,:,jn) ) ! 2D x jptra
101
102               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbn_trc_'   //ctrcnm(jn), tmlbn_trc   (:,:,jn) ) ! 2D x jptra
103               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) ) ! 2D x jptra
104               
105               DO jk = 1, jpltrd_trc
106                  IF( jk < 10 )   THEN
107                     WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
108                  ELSE
109                     WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
110                  ENDIF
111                  CALL iom_rstput( kt, nitrst, nummldw_trc, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
112               END DO
113               
114               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
115                    &           tmltrd_atf_sumb_trc(:,:,jn) ) ! 2D x jptra
116
117               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
118                    &           tmltrd_rad_sumb_trc(:,:,jn) ) ! 2D x jptra
119               !                                                       ! ===========
120            END DO                                                     ! tracer loop
121            !                                                          ! ===========
122#if defined key_lobster
123            DO jl = 1, jp_lobster_trd
124               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) )
125            ENDDO
126#endif
127
128         ENDIF
129         
130         CALL iom_close( nummldw_trc )
131         lrst_trc = .TRUE.
132
133      ENDIF
134
135    END SUBROUTINE trd_mld_trc_rst_write
136
137
138    SUBROUTINE trd_mld_trc_rst_read
139      !!----------------------------------------------------------------------------
140      !!                   ***  SUBROUTINE trd_mld_rst_lec  ***
141      !!                   
142      !! ** Purpose :   Read file for mixed-layer diagnostics restart.
143      !!----------------------------------------------------------------------------
144      INTEGER  ::  inum       ! temporary logical unit
145      !
146      CHARACTER (len=35) :: charout
147      INTEGER ::  jk, jn, jl     ! loop indice
148      !!-----------------------------------------------------------------------------
149     
150      IF(lwp)  THEN
151         WRITE(numout,*)
152         WRITE(numout,*) ' trd_mld_trc_rst_read : read the NetCDF MLD restart file'
153         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~'
154      ENDIF
155     
156      CALL iom_open( 'restart_mld_trc', inum, kiolib = jprstlib ) 
157     
158      IF( ln_trdmld_trc_instant ) THEN
159         
160         DO jn = 1, jptra
161            CALL iom_get( inum, jpdom_local, 'tmlbb_trc_'  //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
162            CALL iom_get( inum, jpdom_local, 'tmlbn_trc_'  //ctrcnm(jn), tmlbn_trc  (:,:,jn) )
163            CALL iom_get( inum, jpdom_local, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
164            CALL iom_get( inum, jpdom_local, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
165         END DO
166         
167      ELSE
168         CALL iom_get( inum, jpdom_local, 'rmldbn_trc', rmldbn_trc ) ! needed for rmld_sum
169         
170         !                                                          ! ===========
171         DO jn = 1, jptra                                           ! tracer loop
172            !                                                       ! ===========
173            CALL iom_get( inum, jpdom_local, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc(:,:,jn) )
174            CALL iom_get( inum, jpdom_local, 'tmlbb_trc_'   //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
175            CALL iom_get( inum, jpdom_local, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc(:,:,jn) )
176
177            CALL iom_get( inum, jpdom_local, 'tmlbn_trc_'   //ctrcnm(jn), tmlbn_trc   (:,:,jn) ) ! needed for tml_sum
178            CALL iom_get( inum, jpdom_local, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) )
179           
180            DO jk = 1, jpltrd_trc
181               IF( jk < 10 )   THEN
182                  WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
183               ELSE
184                  WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
185               ENDIF
186               CALL iom_get( inum, jpdom_local, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
187            END DO
188           
189            CALL iom_get( inum, jpdom_local, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
190                 &        tmltrd_atf_sumb_trc(:,:,jn) )
191
192            CALL iom_get( inum, jpdom_local, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
193                 &        tmltrd_rad_sumb_trc(:,:,jn) )
194            !                                                       ! ===========
195         END DO                                                     ! tracer loop
196         !                                                          ! ===========
197
198#if defined key_lobster
199         DO jl = 1, jp_lobster_trd
200            CALL iom_get( inum, jpdom_local, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) )
201         ENDDO
202#endif
203         
204         CALL iom_close( inum )
205      ENDIF
206     
207    END SUBROUTINE trd_mld_trc_rst_read
208 
209#else
210  !!=================================================================================
211  !!                       ***  MODULE  trdmld_rst  ***
212  !! Ocean dynamic :  Input/Output files for restart on mixed-layer diagnostics
213  !!=================================================================================
214CONTAINS
215  SUBROUTINE trd_mld_trc_rst_opn( kt )
216    WRITE(*,*) 'trd_mld_trc_rst_opn: You should not have seen this print! error?', kt
217  END SUBROUTINE trd_mld_trc_rst_opn
218  SUBROUTINE trd_mld_trc_rst_write( kt )           !  No ML diags ==> empty routine
219    WRITE(*,*) 'trd_mld_trc_rst_wri: You should not have seen this print! error?', kt
220  END SUBROUTINE trd_mld_trc_rst_write
221  SUBROUTINE trd_mld_trc_rst_read                  !  No ML Diags ==> empty routine
222  END SUBROUTINE trd_mld_trc_rst_read
223#endif
224
225  !!=================================================================================
226END MODULE trdmld_trc_rst
Note: See TracBrowser for help on using the repository browser.