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.
trdmxl_trc_rst.F90 in branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/TOP_SRC/TRP – NEMO

source: branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/TOP_SRC/TRP/trdmxl_trc_rst.F90 @ 4946

Last change on this file since 4946 was 4946, checked in by cetlod, 9 years ago

2014/dev_MERGE_2014 : merge in changes from dev_CNRS_CICE

File size: 10.6 KB
Line 
1MODULE trdmxl_trc_rst
2   !!======================================================================
3   !!                       ***  MODULE  trdmxl_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_trdmxl_trc
10   !!----------------------------------------------------------------------
11   USE in_out_manager  ! I/O manager
12   USE iom             ! I/O module
13   USE trc             ! for nn_dttrc ctrcnm
14   USE trdmxl_trc_oce  ! for lk_trdmxl_trc
15
16   IMPLICIT NONE
17   PRIVATE
18 
19   PUBLIC   trd_mxl_trc_rst_read    ! routine called by trd_mxl_init
20   PUBLIC   trd_mxl_trc_rst_write   ! routine called by step.F90
21 
22   INTEGER ::   nummldw_trc               ! logical unit for mld restart
23   !!---------------------------------------------------------------------------------
24   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
25   !! $Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/TRD/trdmxl_rst.F90,v 1.6 2006/11/14 09:46:13 opalod Exp $
26   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
27   !!---------------------------------------------------------------------------------
28 
29CONTAINS
30 
31
32    SUBROUTINE trd_mxl_trc_rst_write( kt )
33      !!--------------------------------------------------------------------------------
34      !!                  ***  SUBROUTINE trd_mxl_rst_wri  ***
35      !!               
36      !! ** Purpose :   Write mixed-layer diagnostics restart fields.
37      !!--------------------------------------------------------------------------------
38      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index
39      !
40      CHARACTER(LEN=20)   ::   clkt     ! ocean time-step deine as a character
41      CHARACTER(LEN=50)   ::   clname   ! ice output restart file name
42      CHARACTER (len=35) :: charout
43      INTEGER :: jl,  jk, jn               ! loop indice
44      !!--------------------------------------------------------------------------------
45
46      IF( kt == nitrst - nn_dttrc .OR. nitend - nit000 + 1 < 2 * nn_dttrc ) 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))//"_"//TRIM(cn_trdrst_trc_out)
53         IF(lwp) WRITE(numout,*) '             open ocean restart_mld_trc NetCDF  '//clname
54         CALL iom_open( clname, nummldw_trc, ldwrt = .TRUE., kiolib = jprstlib )
55      ENDIF
56
57      IF( kt == nitend .AND. lk_trdmxl_trc ) THEN
58
59         IF( kt == nitend .AND. lwp ) THEN
60            WRITE(numout,*)
61            WRITE(numout,*) 'trdmxl_trc_rst: output for ML diags. restart, with trd_mxl_trc_rst_write routine'
62            WRITE(numout,*) '~~~~~~~~~~~~~~'
63            WRITE(numout,*)
64         ENDIF
65
66         IF( ln_trdmxl_trc_instant ) THEN 
67            !
68            DO jn = 1, jptra
69               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbb_trc_'  //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
70               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbn_trc_'  //ctrcnm(jn), tmlbn_trc  (:,:,jn) )
71               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
72               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
73            END DO
74            !
75         ELSE
76            !
77            CALL iom_rstput( kt, nitrst, nummldw_trc, 'rmldbn_trc', rmldbn_trc )  ! 2D x 1
78           
79            !                                                          ! ===========
80            DO jn = 1, jptra                                           ! tracer loop
81               !                                                       ! ===========
82
83               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc (:,:,jn) ) ! 2D x jptra
84               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbb_trc_'   //ctrcnm(jn), tmlbb_trc   (:,:,jn) ) ! 2D x jptra
85               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc (:,:,jn) ) ! 2D x jptra
86
87               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbn_trc_'   //ctrcnm(jn), tmlbn_trc   (:,:,jn) ) ! 2D x jptra
88               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) ) ! 2D x jptra
89               
90               DO jk = 1, jpltrd_trc
91                  IF( jk < 10 )   THEN
92                     WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
93                  ELSE
94                     WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
95                  ENDIF
96                  CALL iom_rstput( kt, nitrst, nummldw_trc, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
97               END DO
98               
99               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
100                    &           tmltrd_atf_sumb_trc(:,:,jn) ) ! 2D x jptra
101
102               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
103                    &           tmltrd_rad_sumb_trc(:,:,jn) ) ! 2D x jptra
104               !                                                       ! ===========
105            END DO                                                     ! tracer loop
106            !                                                          ! ===========
107#if defined key_pisces_reduced
108            DO jl = 1, jp_pisces_trd
109               CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) )
110            ENDDO
111#endif
112
113         ENDIF
114         
115         CALL iom_close( nummldw_trc )
116         lrst_trc = .TRUE.
117
118      ENDIF
119
120    END SUBROUTINE trd_mxl_trc_rst_write
121
122
123    SUBROUTINE trd_mxl_trc_rst_read
124      !!----------------------------------------------------------------------------
125      !!                   ***  SUBROUTINE trd_mxl_rst_lec  ***
126      !!                   
127      !! ** Purpose :   Read file for mixed-layer diagnostics restart.
128      !!----------------------------------------------------------------------------
129      INTEGER  ::  inum       ! temporary logical unit
130      !
131      CHARACTER (len=35) :: charout
132      INTEGER ::  jk, jn, jl     ! loop indice
133      INTEGER ::  jlibalt = jprstlib
134      LOGICAL ::  llok
135      !!-----------------------------------------------------------------------------
136     
137      IF(lwp)  THEN
138         WRITE(numout,*)
139         WRITE(numout,*) ' trd_mxl_trc_rst_read : read the NetCDF MLD restart file'
140         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~'
141      ENDIF
142     
143      IF ( jprstlib == jprstdimg ) THEN
144        ! eventually read netcdf file (monobloc)  for restarting on different number of processors
145        ! if {cn_trdrst_trc_in}.nc exists, then set jlibalt to jpnf90
146        INQUIRE( FILE = TRIM(cn_trdrst_trc_in)//'.nc', EXIST = llok )
147        IF ( llok ) THEN ; jlibalt = jpnf90  ; ELSE ; jlibalt = jprstlib ; ENDIF
148      ENDIF
149
150      CALL iom_open( cn_trdrst_trc_in, inum, kiolib = jlibalt ) 
151     
152      IF( ln_trdmxl_trc_instant ) THEN
153         
154         DO jn = 1, jptra
155            CALL iom_get( inum, jpdom_autoglo, 'tmlbb_trc_'  //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
156            CALL iom_get( inum, jpdom_autoglo, 'tmlbn_trc_'  //ctrcnm(jn), tmlbn_trc  (:,:,jn) )
157            CALL iom_get( inum, jpdom_autoglo, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
158            CALL iom_get( inum, jpdom_autoglo, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
159         END DO
160         
161      ELSE
162         CALL iom_get( inum, jpdom_autoglo, 'rmldbn_trc', rmldbn_trc ) ! needed for rmld_sum
163         
164         !                                                          ! ===========
165         DO jn = 1, jptra                                           ! tracer loop
166            !                                                       ! ===========
167            CALL iom_get( inum, jpdom_autoglo, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc(:,:,jn) )
168            CALL iom_get( inum, jpdom_autoglo, 'tmlbb_trc_'   //ctrcnm(jn), tmlbb_trc  (:,:,jn) )
169            CALL iom_get( inum, jpdom_autoglo, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc(:,:,jn) )
170
171            CALL iom_get( inum, jpdom_autoglo, 'tmlbn_trc_'   //ctrcnm(jn), tmlbn_trc   (:,:,jn) ) ! needed for tml_sum
172            CALL iom_get( inum, jpdom_autoglo, '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_autoglo, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
181            END DO
182           
183            CALL iom_get( inum, jpdom_autoglo, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
184                 &        tmltrd_atf_sumb_trc(:,:,jn) )
185
186            CALL iom_get( inum, jpdom_autoglo, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
187                 &        tmltrd_rad_sumb_trc(:,:,jn) )
188            !                                                       ! ===========
189         END DO                                                     ! tracer loop
190         !                                                          ! ===========
191
192#if defined key_pisces_reduced
193         DO jl = 1, jp_pisces_trd
194            CALL iom_get( inum, jpdom_autoglo, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) )
195         ENDDO
196#endif
197         
198         CALL iom_close( inum )
199      ENDIF
200     
201    END SUBROUTINE trd_mxl_trc_rst_read
202 
203#else
204  !!=================================================================================
205  !!                       ***  MODULE  trdmxl_rst  ***
206  !! Ocean dynamic :  Input/Output files for restart on mixed-layer diagnostics
207  !!=================================================================================
208CONTAINS
209  SUBROUTINE trd_mxl_trc_rst_opn( kt )
210    WRITE(*,*) 'trd_mxl_trc_rst_opn: You should not have seen this print! error?', kt
211  END SUBROUTINE trd_mxl_trc_rst_opn
212  SUBROUTINE trd_mxl_trc_rst_write( kt )           !  No ML diags ==> empty routine
213    WRITE(*,*) 'trd_mxl_trc_rst_wri: You should not have seen this print! error?', kt
214  END SUBROUTINE trd_mxl_trc_rst_write
215  SUBROUTINE trd_mxl_trc_rst_read                  !  No ML Diags ==> empty routine
216  END SUBROUTINE trd_mxl_trc_rst_read
217#endif
218
219  !!=================================================================================
220END MODULE trdmxl_trc_rst
Note: See TracBrowser for help on using the repository browser.