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.
sedrst.F90 in branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/TOP_SRC/PISCES/SED – NEMO

source: branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedrst.F90 @ 6051

Last change on this file since 6051 was 6051, checked in by lovato, 8 years ago

Merge branches/2015/dev_r5056_CMCC4_simplification (see ticket #1456)

  • Property svn:keywords set to Id
File size: 9.8 KB
Line 
1MODULE sedrst
2#if defined key_sed
3   !!======================================================================
4   !!                       *** MODULE sedrst ***
5   !!   Read and write the restart files for sediment
6   !!======================================================================
7
8   !!----------------------------------------------------------------------
9   !! * Modules used
10   !! ==============
11   USE sed
12   USE sedarr
13
14
15   !! * Accessibility
16   IMPLICIT NONE
17   PRIVATE
18
19   !! * Accessibility
20   PUBLIC sed_rst_read
21   PUBLIC sed_rst_wri
22
23   !! * Module variables
24   INTEGER, PUBLIC ::   numrsr, numrsw   !: logical unit for sed restart (read and write)
25   
26   
27   !! $Id$
28CONTAINS
29
30
31   SUBROUTINE sed_rst_read 
32      !!----------------------------------------------------------------------
33      !!                   ***  ROUTINE sed_rst_read  ***
34      !!
35      !! ** Purpose :  Initialization of sediment module
36      !!               - sets initial sediment composition
37      !!                 ( only clay or reading restart file )
38      !!
39      !!   History :
40      !!        !  06-07  (C. Ethe)  original
41      !!----------------------------------------------------------------------
42      !! * Modules used
43      USE iom
44
45      !! * local declarations
46      INTEGER :: ji, jk, jn 
47      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zdta
48      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:  ) :: zdta1 
49      REAL(wp), ALLOCATABLE, DIMENSION(:,:    ) :: zhipor
50      REAL(wp) :: zkt
51      CHARACTER(len = 20) ::   cltra
52      INTEGER             ::   jlibalt = jprstlib
53      LOGICAL             ::   llok
54      !--------------------------------------------------------------------
55 
56
57      WRITE(numsed,*) ' '     
58      WRITE(numsed,*) ' Initilization of Sediment components from restart'
59      WRITE(numsed,*) ' '
60
61      ALLOCATE( zdta(jpi,jpj,jpksed,jptrased), zdta1(jpi,jpj,jpksed,2), zhipor(jpoce,jpksed) ) 
62
63      CALL iom_open( 'restart_sed', numrsr, kiolib = jlibalt )     
64      CALL iom_get( numrsr, 'kt'     , zkt      )   ! time-step
65 
66      DO jn = 1, jptrased
67         cltra = sedtrcd(jn)
68         CALL iom_get( numrsr, jpdom_unknown, cltra, zdta(:,:,:,jn), &
69            &          kstart=(/1,1,1/), kcount=(/jpi,jpj,jpksed/) )
70      ENDDO
71       
72
73      CALL pack_arr( jpoce, solcp(1:jpoce,1:jpksed,jsopal), &
74         &            zdta(1:jpi,1:jpj,1:jpksed,1), iarroce(1:jpoce) )
75
76      CALL pack_arr( jpoce, solcp(1:jpoce,1:jpksed,jsclay), &
77         &             zdta(1:jpi,1:jpj,1:jpksed,2), iarroce(1:jpoce) )
78
79      CALL pack_arr( jpoce, solcp(1:jpoce,1:jpksed,jspoc), &
80         &             zdta(1:jpi,1:jpj,1:jpksed,3), iarroce(1:jpoce) )
81
82      CALL pack_arr( jpoce, solcp(1:jpoce,1:jpksed,jscal), &
83         &             zdta(1:jpi,1:jpj,1:jpksed,4), iarroce(1:jpoce) )
84
85      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwsil), &
86         &             zdta(1:jpi,1:jpj,1:jpksed,5), iarroce(1:jpoce) )
87
88
89      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwoxy), &
90         &             zdta(1:jpi,1:jpj,1:jpksed,6), iarroce(1:jpoce) )
91
92
93      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwdic), &
94         &             zdta(1:jpi,1:jpj,1:jpksed,7), iarroce(1:jpoce) )
95
96      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwno3), &
97         &             zdta(1:jpi,1:jpj,1:jpksed,8), iarroce(1:jpoce) )
98
99      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwpo4), &
100         &             zdta(1:jpi,1:jpj,1:jpksed,9), iarroce(1:jpoce) )
101
102      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwalk), &
103         &             zdta(1:jpi,1:jpj,1:jpksed,10), iarroce(1:jpoce) )
104
105      CALL pack_arr( jpoce, pwcp(1:jpoce,1:jpksed,jwc13), &
106         &             zdta(1:jpi,1:jpj,1:jpksed,11), iarroce(1:jpoce) )
107
108      DO jn = 1, 2
109         cltra = seddia3d(jn)
110         CALL iom_get( numrsr, jpdom_unknown, cltra, zdta1(:,:,:,jn), &
111            &          kstart=(/1,1,1/), kcount=(/jpi,jpj,jpksed/) )
112      ENDDO
113
114      zhipor(:,:) = 0.
115      CALL pack_arr( jpoce, zhipor(1:jpoce,1:jpksed), &
116         &             zdta1(1:jpi,1:jpj,1:jpksed,1), iarroce(1:jpoce) )
117
118      ! Initialization of [h+] in mol/kg
119      DO jk = 1, jpksed
120         DO ji = 1, jpoce
121            hipor (ji,jk) = 10.**( -1. * zhipor(ji,jk) )
122         ENDDO
123      ENDDO
124     
125      CALL pack_arr( jpoce, co3por(1:jpoce,1:jpksed), &
126         &             zdta1(1:jpi,1:jpj,1:jpksed,2), iarroce(1:jpoce) )
127
128      ! Initialization of sediment composant only ie jk=2 to jk=jpksed
129      ! ( nothing in jk=1)
130      solcp(1:jpoce,1,:) = 0.
131      pwcp (1:jpoce,1,:) = 0.
132
133      DEALLOCATE( zdta   )
134      DEALLOCATE( zdta1  )
135      DEALLOCATE( zhipor )
136     
137   END SUBROUTINE sed_rst_read
138
139   SUBROUTINE sed_rst_wri( kt )
140      !!----------------------------------------------------------------------
141      !!                   ***  ROUTINE sed_rst_wri  ***
142      !!
143      !! ** Purpose :  save field which are necessary for sediment restart
144      !!
145      !!   History :
146      !!        !  06-07  (C. Ethe)  original
147      !!----------------------------------------------------------------------
148      !!* Modules used
149      USE ioipsl
150      !! *Arguments
151      INTEGER, INTENT(in) ::   kt       ! number of iteration
152      !! * local declarations
153      INTEGER  :: ji, jk
154      INTEGER  :: ic, jc, jn, itime
155      REAL(wp) :: zdate0
156      REAL(wp), DIMENSION(1) ::  zinfo
157      CHARACTER(len=50) :: clname,cln
158      CHARACTER(len=20) :: cltra 
159      REAL(wp), DIMENSION(:,:) , ALLOCATABLE  :: zdta   
160      !! -----------------------------------------------------------------------
161
162      ALLOCATE( zdta(jpoce,jpksed) )
163
164      IF( MOD(kt,nstock) == 0 .OR. kt == nitsedend ) THEN
165         
166         !! 0. initialisations
167         !! ------------------
168         
169         IF(lwp) WRITE(numsed,*) ' '
170         IF(lwp) WRITE(numsed,*) 'sed_rst_write : write the sediment restart file in NetCDF format ',   &
171            'at it= ',kt
172         IF(lwp) WRITE(numsed,*) '~~~~~~~~~'
173         
174         !! 1. WRITE in nutwrs
175         !! ------------------
176
177         ic = 1
178         DO jc = 1,16
179            IF( cexper(jc:jc) /= ' ') ic = jc
180         END DO
181         WRITE( cln,'("_",i5.5,i2.2,i2.2,"_restart.sed")') nyear, nmonth, nday
182         clname = cexper(1:ic)//cln
183         itime = 0
184         CALL ymds2ju( nyear, nmonth, nday, rdt, zdate0 )
185         zdate0 = zdate0 - adatrj   !   set calendar origin to the beginning of the experiment
186         CALL restini( 'NONE', jpi, jpj, glamt, gphit, jpksed, dz, &
187            &         clname, itime, zdate0, dtsed*nstock, numrsw, domain_id=nidom )
188         zinfo(1) = REAL( kt)
189         CALL restput( numrsw, 'kt', 1,1, 1,0, zinfo  )
190
191
192
193         ! Back to 2D geometry
194         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,1) , iarroce(1:jpoce), &
195            &                    solcp(1:jpoce,1:jpksed,jsopal ) )
196         
197         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,2) , iarroce(1:jpoce), &
198            &                    solcp(1:jpoce,1:jpksed,jsclay ) )
199         
200         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,3) , iarroce(1:jpoce), &
201            &                    solcp(1:jpoce,1:jpksed,jspoc  ) )
202         
203         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,4) , iarroce(1:jpoce), &
204            &                    solcp(1:jpoce,1:jpksed,jscal  ) )   
205         
206         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,5) , iarroce(1:jpoce), &
207            &                    pwcp(1:jpoce,1:jpksed,jwsil  )  )
208         
209         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,6)  , iarroce(1:jpoce), &
210            &                    pwcp(1:jpoce,1:jpksed,jwoxy  ) )
211         
212         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,7)  , iarroce(1:jpoce), &
213            &                    pwcp(1:jpoce,1:jpksed,jwdic  ) )
214         
215         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,8)  , iarroce(1:jpoce), &
216            &                    pwcp(1:jpoce,1:jpksed,jwno3  ) )
217         
218         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,9)  , iarroce(1:jpoce), &
219            &                    pwcp(1:jpoce,1:jpksed,jwpo4  ) )
220         
221         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,10)  , iarroce(1:jpoce), &
222            &                    pwcp(1:jpoce,1:jpksed,jwalk  ) )
223         
224         CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,11)  , iarroce(1:jpoce), &
225         &                    pwcp(1:jpoce,1:jpksed,jwc13  ) )
226         
227         ! porosity
228         zdta(:,:) = 0.
229         DO jk = 1, jpksed
230            DO ji = 1, jpoce
231               zdta(ji,jk) = -LOG10( hipor(ji,jk) / densSW(ji) )
232            ENDDO
233         ENDDO
234         CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,1)  , iarroce(1:jpoce), &
235            &                   zdta(1:jpoce,1:jpksed)  )
236         
237         CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,2)  , iarroce(1:jpoce), &
238            &                   co3por(1:jpoce,1:jpksed)  )
239     
240         ! prognostic variables
241         ! --------------------
242
243
244         DO jn = 1, jptrased
245            cltra = sedtrcd(jn)
246            CALL restput( numrsw, cltra, jpi, jpj, jpksed, 0, trcsedi(:,:,:,jn) )
247         ENDDO
248
249         DO jn = 1, 2
250            cltra = seddia3d(jn)
251            CALL restput( numrsw, cltra, jpi, jpj, jpksed, 0, flxsedi3d(:,:,:,jn) )
252         ENDDO
253
254
255         CALL restclo( numrsw )
256
257      ENDIF
258
259      DEALLOCATE( zdta ) 
260         
261   END SUBROUTINE sed_rst_wri
262#else
263   !!======================================================================
264   !! MODULE sedrst :   Dummy module
265   !!======================================================================
266   !! $Id$
267CONTAINS
268   SUBROUTINE sed_rst_read                      ! Empty routines
269   END SUBROUTINE sed_rst_read
270   SUBROUTINE sed_rst_wri( kt )
271      INTEGER, INTENT ( in ) :: kt
272      WRITE(*,*) 'sed_rst_wri: You should not have seen this print! error?', kt
273   END SUBROUTINE sed_rst_wri   
274#endif
275
276END MODULE sedrst
Note: See TracBrowser for help on using the repository browser.