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 tags/nemo_v3_2/nemo_v3_2/NEMO/TOP_SRC/TRP – NEMO

source: tags/nemo_v3_2/nemo_v3_2/NEMO/TOP_SRC/TRP/trdmld_trc_rst.F90 @ 1878

Last change on this file since 1878 was 1878, checked in by flavoni, 14 years ago

initial test for nemogcm

File size: 10.6 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))//"_"//TRIM(cn_trdrst_trc_out)
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      INTEGER ::  jlibalt = jprstlib
135      LOGICAL ::  llok
136      !!-----------------------------------------------------------------------------
137     
138      IF(lwp)  THEN
139         WRITE(numout,*)
140         WRITE(numout,*) ' trd_mld_trc_rst_read : read the NetCDF MLD restart file'
141         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~'
142      ENDIF
143     
144      IF ( jprstlib == jprstdimg ) THEN
145        ! eventually read netcdf file (monobloc)  for restarting on different number of processors
146        ! if {cn_trdrst_trc_in}.nc exists, then set jlibalt to jpnf90
147        INQUIRE( FILE = TRIM(cn_trdrst_trc_in)//'.nc', EXIST = llok )
148        IF ( llok ) THEN ; jlibalt = jpnf90  ; ELSE ; jlibalt = jprstlib ; ENDIF
149      ENDIF
150
151      CALL iom_open( cn_trdrst_trc_in, inum, kiolib = jlibalt ) 
152     
153      IF( ln_trdmld_trc_instant ) THEN
154         
155         DO jn = 1, jptra
156            CALL iom_get( inum, jpdom_autoglo, 'tmlbb_trc_'  //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
157            CALL iom_get( inum, jpdom_autoglo, 'tmlbn_trc_'  //ctrcnm(jn), tmlbn_trc  (:,:,jn) )
158            CALL iom_get( inum, jpdom_autoglo, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
159            CALL iom_get( inum, jpdom_autoglo, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
160         END DO
161         
162      ELSE
163         CALL iom_get( inum, jpdom_autoglo, 'rmldbn_trc', rmldbn_trc ) ! needed for rmld_sum
164         
165         !                                                          ! ===========
166         DO jn = 1, jptra                                           ! tracer loop
167            !                                                       ! ===========
168            CALL iom_get( inum, jpdom_autoglo, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc(:,:,jn) )
169            CALL iom_get( inum, jpdom_autoglo, 'tmlbb_trc_'   //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
170            CALL iom_get( inum, jpdom_autoglo, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc(:,:,jn) )
171
172            CALL iom_get( inum, jpdom_autoglo, 'tmlbn_trc_'   //ctrcnm(jn), tmlbn_trc   (:,:,jn) ) ! needed for tml_sum
173            CALL iom_get( inum, jpdom_autoglo, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) )
174           
175            DO jk = 1, jpltrd_trc
176               IF( jk < 10 )   THEN
177                  WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
178               ELSE
179                  WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
180               ENDIF
181               CALL iom_get( inum, jpdom_autoglo, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
182            END DO
183           
184            CALL iom_get( inum, jpdom_autoglo, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
185                 &        tmltrd_atf_sumb_trc(:,:,jn) )
186
187            CALL iom_get( inum, jpdom_autoglo, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
188                 &        tmltrd_rad_sumb_trc(:,:,jn) )
189            !                                                       ! ===========
190         END DO                                                     ! tracer loop
191         !                                                          ! ===========
192
193#if defined key_lobster
194         DO jl = 1, jp_lobster_trd
195            CALL iom_get( inum, jpdom_autoglo, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) )
196         ENDDO
197#endif
198         
199         CALL iom_close( inum )
200      ENDIF
201     
202    END SUBROUTINE trd_mld_trc_rst_read
203 
204#else
205  !!=================================================================================
206  !!                       ***  MODULE  trdmld_rst  ***
207  !! Ocean dynamic :  Input/Output files for restart on mixed-layer diagnostics
208  !!=================================================================================
209CONTAINS
210  SUBROUTINE trd_mld_trc_rst_opn( kt )
211    WRITE(*,*) 'trd_mld_trc_rst_opn: You should not have seen this print! error?', kt
212  END SUBROUTINE trd_mld_trc_rst_opn
213  SUBROUTINE trd_mld_trc_rst_write( kt )           !  No ML diags ==> empty routine
214    WRITE(*,*) 'trd_mld_trc_rst_wri: You should not have seen this print! error?', kt
215  END SUBROUTINE trd_mld_trc_rst_write
216  SUBROUTINE trd_mld_trc_rst_read                  !  No ML Diags ==> empty routine
217  END SUBROUTINE trd_mld_trc_rst_read
218#endif
219
220  !!=================================================================================
221END MODULE trdmld_trc_rst
Note: See TracBrowser for help on using the repository browser.