Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
MODULE trdmxl_trc_rst
!!======================================================================
!! *** MODULE trdmxl_rst ***
!! Ocean dynamic : Input/Output files for restart on mixed-layer diagnostics
!!======================================================================
!! History : 9.0 ! 07-03 (C. Deltel) Original code
!!----------------------------------------------------------------------
#if defined key_top && defined key_trdmxl_trc
!!----------------------------------------------------------------------
USE in_out_manager ! I/O manager
USE iom ! I/O module
USE trc ! for ctrcnm
USE trdtrc_oce ! for lk_trdmxl_trc
IMPLICIT NONE
PRIVATE
PUBLIC trd_mxl_trc_rst_read ! routine called by trd_mxl_init
PUBLIC trd_mxl_trc_rst_write ! routine called by step.F90
INTEGER :: nummldw_trc ! logical unit for mld restart
!!---------------------------------------------------------------------------------
!! NEMO/TOP 4.0 , NEMO Consortium (2018)
!! $Id: trdmxl_trc_rst.F90 15090 2021-07-06 14:25:18Z cetlod $
!! Software governed by the CeCILL license (see ./LICENSE)
!!---------------------------------------------------------------------------------
CONTAINS
SUBROUTINE trd_mxl_trc_rst_write( kt )
!!--------------------------------------------------------------------------------
!! *** SUBROUTINE trd_mxl_rst_wri ***
!!
!! ** Purpose : Write mixed-layer diagnostics restart fields.
!!--------------------------------------------------------------------------------
INTEGER, INTENT( in ) :: kt ! ocean time-step index
!
CHARACTER(LEN=20) :: clkt ! ocean time-step deine as a character
CHARACTER(LEN=50) :: clname ! output restart file name
CHARACTER(LEN=256) :: clpath ! full path to restart file
CHARACTER (len=35) :: charout
INTEGER :: jl, jk, jn ! loop indice
!!--------------------------------------------------------------------------------
IF( kt == nitrst - 1 .OR. nitend - nit000 + 1 < 2 ) THEN ! idem trcrst.F90
IF( nitrst > 1.0e9 ) THEN
WRITE(clkt,*) nitrst
ELSE
WRITE(clkt,'(i8.8)') nitrst
ENDIF
clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_"//TRIM(cn_trdrst_trc_out)
clpath = TRIM(cn_trcrst_outdir)
IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/'
IF(lwp) WRITE(numout,*) ' open ocean restart_mld_trc NetCDF ', TRIM(clpath)//TRIM(clname)
CALL iom_open( TRIM(clpath)//TRIM(clname), nummldw_trc, ldwrt = .TRUE. )
ENDIF
IF( kt == nitend .AND. lk_trdmxl_trc ) THEN
IF( kt == nitend .AND. lwp ) THEN
WRITE(numout,*)
WRITE(numout,*) 'trdmxl_trc_rst: output for ML diags. restart, with trd_mxl_trc_rst_write routine'
WRITE(numout,*) '~~~~~~~~~~~~~~'
WRITE(numout,*)
ENDIF
IF( ln_trdmxl_trc_instant ) THEN
!
DO jn = 1, jptra
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbb_trc_' //ctrcnm(jn), tmlbb_trc (:,:,jn) )
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbn_trc_' //ctrcnm(jn), tmlbn_trc (:,:,jn) )
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
END DO
!
ELSE
!
CALL iom_rstput( kt, nitrst, nummldw_trc, 'rmldbn_trc', rmldbn_trc ) ! 2D x 1
! ! ===========
DO jn = 1, jptra ! tracer loop
! ! ===========
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc (:,:,jn) ) ! 2D x jptra
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbb_trc_' //ctrcnm(jn), tmlbb_trc (:,:,jn) ) ! 2D x jptra
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc (:,:,jn) ) ! 2D x jptra
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmlbn_trc_' //ctrcnm(jn), tmlbn_trc (:,:,jn) ) ! 2D x jptra
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) ) ! 2D x jptra
DO jk = 1, jpltrd_trc
IF( jk < 10 ) THEN
WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
ELSE
WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
ENDIF
CALL iom_rstput( kt, nitrst, nummldw_trc, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
END DO
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
& tmltrd_atf_sumb_trc(:,:,jn) ) ! 2D x jptra
CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
& tmltrd_rad_sumb_trc(:,:,jn) ) ! 2D x jptra
! ! ===========
END DO ! tracer loop
! ! ===========
ENDIF
CALL iom_close( nummldw_trc )
lrst_trc = .TRUE.
ENDIF
END SUBROUTINE trd_mxl_trc_rst_write
SUBROUTINE trd_mxl_trc_rst_read
!!----------------------------------------------------------------------------
!! *** SUBROUTINE trd_mxl_rst_lec ***
!!
!! ** Purpose : Read file for mixed-layer diagnostics restart.
!!----------------------------------------------------------------------------
INTEGER :: inum ! temporary logical unit
!
CHARACTER (len=35) :: charout
INTEGER :: jk, jn, jl ! loop indice
LOGICAL :: llok
CHARACTER(LEN=256) :: clpath ! full path to restart file
!!-----------------------------------------------------------------------------
IF(lwp) THEN
WRITE(numout,*)
WRITE(numout,*) ' trd_mxl_trc_rst_read : read the NetCDF MLD restart file'
WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~'
ENDIF
clpath = TRIM(cn_trcrst_indir)
IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/'
CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_trc_in), inum )
IF( ln_trdmxl_trc_instant ) THEN
DO jn = 1, jptra
CALL iom_get( inum, jpdom_auto, 'tmlbb_trc_' //ctrcnm(jn), tmlbb_trc (:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmlbn_trc_' //ctrcnm(jn), tmlbn_trc (:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmlatfb_trc_'//ctrcnm(jn), tmlatfb_trc(:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmlradb_trc_'//ctrcnm(jn), tmlradb_trc(:,:,jn) )
END DO
ELSE
CALL iom_get( inum, jpdom_auto, 'rmldbn_trc', rmldbn_trc ) ! needed for rmld_sum
! ! ===========
DO jn = 1, jptra ! tracer loop
! ! ===========
CALL iom_get( inum, jpdom_auto, 'tmlatfb_trc_' //ctrcnm(jn), tmlatfb_trc(:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmlbb_trc_' //ctrcnm(jn), tmlbb_trc (:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmlradb_trc_' //ctrcnm(jn), tmlradb_trc(:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmlbn_trc_' //ctrcnm(jn), tmlbn_trc (:,:,jn) ) ! needed for tml_sum
CALL iom_get( inum, jpdom_auto, 'tml_sumb_trc_'//ctrcnm(jn), tml_sumb_trc(:,:,jn) )
DO jk = 1, jpltrd_trc
IF( jk < 10 ) THEN
WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I1)") ctrcnm(jn), jk
ELSE
WRITE(charout,FMT="('tmltrd_csum_ub_trc_', A3, '_', I2)") ctrcnm(jn), jk
ENDIF
CALL iom_get( inum, jpdom_auto, charout, tmltrd_csum_ub_trc(:,:,jk,jn) )
END DO
CALL iom_get( inum, jpdom_auto, 'tmltrd_atf_sumb_trc_'//ctrcnm(jn) , &
& tmltrd_atf_sumb_trc(:,:,jn) )
CALL iom_get( inum, jpdom_auto, 'tmltrd_rad_sumb_trc_'//ctrcnm(jn) , &
& tmltrd_rad_sumb_trc(:,:,jn) )
! ! ===========
END DO ! tracer loop
! ! ===========
CALL iom_close( inum )
ENDIF
END SUBROUTINE trd_mxl_trc_rst_read
#else
!!=================================================================================
!! *** MODULE trdmxl_rst ***
!! Ocean dynamic : Input/Output files for restart on mixed-layer diagnostics
!!=================================================================================
CONTAINS
SUBROUTINE trd_mxl_trc_rst_opn( kt )
IMPLICIT NONE
INTEGER, INTENT( in ) :: kt
WRITE(*,*) 'trd_mxl_trc_rst_opn: You should not have seen this print! error?', kt
END SUBROUTINE trd_mxl_trc_rst_opn
SUBROUTINE trd_mxl_trc_rst_write( kt ) ! No ML diags ==> empty routine
IMPLICIT NONE
INTEGER, INTENT( in ) :: kt
WRITE(*,*) 'trd_mxl_trc_rst_wri: You should not have seen this print! error?', kt
END SUBROUTINE trd_mxl_trc_rst_write
SUBROUTINE trd_mxl_trc_rst_read ! No ML Diags ==> empty routine
IMPLICIT NONE
END SUBROUTINE trd_mxl_trc_rst_read
#endif
!!=================================================================================
END MODULE trdmxl_trc_rst