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

Last change on this file since 1258 was 1258, checked in by cetlod, 15 years ago

minor modifications in TOP transport model, see ticket:301

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