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 @ 1174

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

New trends diagnostics organization in TOP, see ticket:248

File size: 10.5 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 ::   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         ENDIF
123         
124         CALL iom_close( nummldw_trc )
125         lrst_trc = .TRUE.
126
127      ENDIF
128
129    END SUBROUTINE trd_mld_trc_rst_write
130
131
132    SUBROUTINE trd_mld_trc_rst_read
133      !!----------------------------------------------------------------------------
134      !!                   ***  SUBROUTINE trd_mld_rst_lec  ***
135      !!                   
136      !! ** Purpose :   Read file for mixed-layer diagnostics restart.
137      !!----------------------------------------------------------------------------
138      INTEGER  ::  inum       ! temporary logical unit
139      !
140      CHARACTER (len=35) :: charout
141      INTEGER ::   jk, jn     ! loop indice
142      !!-----------------------------------------------------------------------------
143     
144      IF(lwp)  THEN
145         WRITE(numout,*)
146         WRITE(numout,*) ' trd_mld_trc_rst_read : read the NetCDF MLD restart file'
147         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~'
148      ENDIF
149     
150      CALL iom_open( 'restart_mld_trc', inum, kiolib = jprstlib ) 
151     
152      IF( ln_trdmld_trc_instant ) THEN
153         
154         DO jn = 1, jptra
155            CALL iom_get( inum, jpdom_local, 'tmlbb_trc_'  //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
156            CALL iom_get( inum, jpdom_local, 'tmlbn_trc_'  //ctrcnm(jn), tmlbn_trc  (:,:,jn) )
157            CALL iom_get( inum, jpdom_local, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
158            CALL iom_get( inum, jpdom_local, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
159         END DO
160         
161      ELSE
162         CALL iom_get( inum, jpdom_local, 'rmldbn_trc', rmldbn_trc ) ! needed for rmld_sum
163         
164         !                                                          ! ===========
165         DO jn = 1, jptra                                           ! tracer loop
166            !                                                       ! ===========
167            CALL iom_get( inum, jpdom_local, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc(:,:,jn) )
168            CALL iom_get( inum, jpdom_local, 'tmlbb_trc_'   //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
169            CALL iom_get( inum, jpdom_local, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc(:,:,jn) )
170
171            CALL iom_get( inum, jpdom_local, 'tmlbn_trc_'   //ctrcnm(jn), tmlbn_trc   (:,:,jn) ) ! needed for tml_sum
172            CALL iom_get( inum, jpdom_local, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) )
173           
174            DO jk = 1, jpltrd_trc
175               IF( jk < 10 )   THEN
176                  WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
177               ELSE
178                  WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
179               ENDIF
180               CALL iom_get( inum, jpdom_local, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
181            END DO
182           
183            CALL iom_get( inum, jpdom_local, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
184                 &        tmltrd_atf_sumb_trc(:,:,jn) )
185
186            CALL iom_get( inum, jpdom_local, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
187                 &        tmltrd_rad_sumb_trc(:,:,jn) )
188            !                                                       ! ===========
189         END DO                                                     ! tracer loop
190         !                                                          ! ===========
191         
192         CALL iom_close( inum )
193      ENDIF
194     
195    END SUBROUTINE trd_mld_trc_rst_read
196 
197#else
198  !!=================================================================================
199  !!                       ***  MODULE  trdmld_rst  ***
200  !! Ocean dynamic :  Input/Output files for restart on mixed-layer diagnostics
201  !!=================================================================================
202CONTAINS
203  SUBROUTINE trd_mld_trc_rst_opn( kt )
204    WRITE(*,*) 'trd_mld_trc_rst_opn: You should not have seen this print! error?', kt
205  END SUBROUTINE trd_mld_trc_rst_opn
206  SUBROUTINE trd_mld_trc_rst_write( kt )           !  No ML diags ==> empty routine
207    WRITE(*,*) 'trd_mld_trc_rst_wri: You should not have seen this print! error?', kt
208  END SUBROUTINE trd_mld_trc_rst_write
209  SUBROUTINE trd_mld_trc_rst_read                  !  No ML Diags ==> empty routine
210  END SUBROUTINE trd_mld_trc_rst_read
211#endif
212
213  !!=================================================================================
214END MODULE trdmld_trc_rst
Note: See TracBrowser for help on using the repository browser.