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 NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/TOP/TRP – NEMO

source: NEMO/branches/2020/dev_r12563_ASINTER-06_ABL_improvement/src/TOP/TRP/trdmxl_trc_rst.F90 @ 12808

Last change on this file since 12808 was 12377, checked in by acc, 4 years ago

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

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