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.
sedwri.F90 in trunk/NEMO/TOP_SRC/SED – NEMO

source: trunk/NEMO/TOP_SRC/SED/sedwri.F90 @ 1250

Last change on this file since 1250 was 1250, checked in by cetlod, 15 years ago

update modules of sediment model to take into account minor modifications, see ticket:297

File size: 10.3 KB
Line 
1MODULE sedwri
2#if defined key_sed
3   !!======================================================================
4   !!                     ***  MODULE  sedwri  ***
5   !!         Sediment diagnostics :  write sediment output files
6   !!======================================================================
7   USE sed
8   USE sedarr
9
10   IMPLICIT NONE
11   PRIVATE
12
13   !! * Accessibility
14   PUBLIC sed_wri 
15
16CONTAINS
17
18   !!----------------------------------------------------------------------
19   !!                                                   NetCDF output file
20   !!----------------------------------------------------------------------
21   SUBROUTINE sed_wri( kt )
22      !!----------------------------------------------------------------------
23      !!                   ***  ROUTINE sed_wri  ***
24      !!
25      !! ** Purpose :  output of sediment passive tracer
26      !!
27      !!   History :
28      !!        !  06-07  (C. Ethe)  original
29      !!----------------------------------------------------------------------
30      !! * Local variables
31      USE ioipsl
32      USE dianam    ! build name of file (routine)
33
34      INTEGER, INTENT(in) :: kt
35
36      CHARACTER(len = 60)  ::  clhstnam, clop
37      INTEGER , SAVE :: nised, nhorised, ndimt52, ndimt51, ndepsed
38      REAL(wp), SAVE :: zjulian
39      INTEGER , DIMENSION(jpij*jpksed) , SAVE :: ndext52 
40      INTEGER , DIMENSION(jpij) , SAVE :: ndext51
41      REAL(wp) :: zsto,zout, zdt
42      INTEGER :: iimi, iima, ijmi, ijma,ipk, it
43      INTEGER :: jn
44      CHARACTER(len = 20)  ::  cltra , cltrau
45      CHARACTER(len = 80)  ::  cltral
46
47      INTEGER   :: ji, jk, js, jw
48      REAL(wp)  :: zrate
49      REAL(wp), DIMENSION(:,:) , ALLOCATABLE  :: zdta, zflx
50
51      !!-------------------------------------------------------------------
52
53
54      ! Initialisation
55      ! -----------------
56
57
58      ! Define frequency of output and means
59      zdt = dtsed
60#if defined key_diainstant
61      zsto = nwrised * zdt
62!!      clop = "inst(x)"           ! no use of the mask value (require less cpu time)
63      clop="inst(only(x))"   ! put 1.e+20 on land (very expensive!!)
64#else
65      zsto = zdt
66!!      clop = "ave(x)"              ! no use of the mask value (require less cpu time)
67      clop="ave(only(x))"    ! put 1.e+20 on land (very expensive!!)
68#endif
69      zout = nwrised * zdt
70
71      ! Define indices of the horizontal output zoom and vertical limit storage
72      iimi = 1      ;      iima = jpi
73      ijmi = 1      ;      ijma = jpj
74      ipk = jpksed
75
76      ! define time axis
77      it = kt - nitsed000 + 1
78
79
80      ! 1.  Initilisations
81      ! -----------------------------------------------------------------
82      WRITE(numsed,*) ' '
83      WRITE(numsed,*) 'sed_wri kt = ', kt
84      WRITE(numsed,*) ' '
85     
86      ALLOCATE( zdta(jpoce,jpksed) )    ;   ALLOCATE( zflx(jpoce,jpwatp1) )
87
88
89      ! 2.  Back to 2D geometry
90      ! -----------------------------------------------------------------
91      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,1) , iarroce(1:jpoce), &
92         &                    solcp(1:jpoce,1:jpksed,jsopal ) )
93     
94      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,2) , iarroce(1:jpoce), &
95         &                    solcp(1:jpoce,1:jpksed,jsclay ) )
96     
97      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,3) , iarroce(1:jpoce), &
98         &                    solcp(1:jpoce,1:jpksed,jspoc  ) )
99     
100      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,4) , iarroce(1:jpoce), &
101         &                    solcp(1:jpoce,1:jpksed,jscal  ) )   
102           
103      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,5) , iarroce(1:jpoce), &
104         &                    pwcp(1:jpoce,1:jpksed,jwsil  )  )
105     
106      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,6)  , iarroce(1:jpoce), &
107         &                    pwcp(1:jpoce,1:jpksed,jwoxy  ) )
108     
109      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,7)  , iarroce(1:jpoce), &
110         &                    pwcp(1:jpoce,1:jpksed,jwdic  ) )
111     
112      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,8)  , iarroce(1:jpoce), &
113         &                    pwcp(1:jpoce,1:jpksed,jwno3  ) )
114     
115      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,9)  , iarroce(1:jpoce), &
116         &                    pwcp(1:jpoce,1:jpksed,jwpo4  ) )
117     
118      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,10)  , iarroce(1:jpoce), &
119         &                    pwcp(1:jpoce,1:jpksed,jwalk  ) )
120     
121      CALL unpack_arr( jpoce, trcsedi(1:jpi,1:jpj,1:jpksed,11)  , iarroce(1:jpoce), &
122         &                    pwcp(1:jpoce,1:jpksed,jwc13  ) )
123     
124      ! porosity
125      zdta(:,:) = 0.
126      DO jk = 1, jpksed
127         DO ji = 1, jpoce
128            zdta(ji,jk) = -LOG10( hipor(ji,jk) / densSW(ji) )
129         ENDDO
130      ENDDO
131      CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,1)  , iarroce(1:jpoce), &
132         &                   zdta(1:jpoce,1:jpksed)  )
133     
134      CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,2)  , iarroce(1:jpoce), &
135         &                   co3por(1:jpoce,1:jpksed)  )
136     
137     
138      ! computation of delta 13C
139      zdta(:,:) = 0.
140      DO jk = 1, jpksed
141         DO ji = 1, jpoce
142            zdta(ji,jk) = ( ( pwcp(ji,jk,jwc13) / pwcp(ji,jk,jwdic) / pdb ) - 1. ) &
143               &              * 1000.
144         ENDDO
145      ENDDO
146      CALL unpack_arr( jpoce, flxsedi3d(1:jpi,1:jpj,1:jpksed,3)  , iarroce(1:jpoce), &
147         &                   zdta(1:jpoce,1:jpksed)  )
148     
149 
150      zflx(:,:) = 0.   
151      ! Calculation of fluxes mol/cm2/s
152      DO jw = 1, jpwat
153         DO ji = 1, jpoce
154            zflx(ji,jw) = ( pwcp(ji,1,jw) - pwcp_dta(ji,jw) ) &
155               &         * 1.e-3 * dzkbot(ji) / dtsed
156         ENDDO
157      ENDDO
158      ! Calculation of accumulation rate per dt
159      DO js = 1, jpsol
160         zrate =  mol_wgt(js) / ( dens * por1(jpksed) ) / dtsed
161         DO ji = 1, jpoce
162            zflx(ji,jpwatp1) = zflx(ji,jpwatp1) + ( tosed(ji,js) - fromsed(ji,js) ) * zrate
163         ENDDO
164      ENDDO
165
166      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,1), iarroce(1:jpoce), zflx(1:jpoce,1)  )
167      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,2), iarroce(1:jpoce), zflx(1:jpoce,2)  )
168      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,3), iarroce(1:jpoce), zflx(1:jpoce,3)  )
169      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,4), iarroce(1:jpoce), zflx(1:jpoce,4)  )
170      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,5), iarroce(1:jpoce), zflx(1:jpoce,5)  )
171      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,6), iarroce(1:jpoce), zflx(1:jpoce,6)  )
172      CALL unpack_arr( jpoce, flxsedi2d(1:jpi,1:jpj,7), iarroce(1:jpoce), zflx(1:jpoce,8)  )
173
174
175      ! 3. Define NETCDF files and fields at beginning of first time step
176      ! -----------------------------------------------------------------
177
178      IF( kt == nitsed000 ) THEN
179
180         ! Define the NETCDF files       
181         CALL ymds2ju ( nyear, nmonth, nday, 0.0, zjulian )
182         CALL dia_nam ( clhstnam, nwrised, 'sed_T' )
183         CALL histbeg ( clhstnam, jpi, glamt, jpj, gphit,     &
184            &             iimi, iima-iimi+1, ijmi, ijma-ijmi+1,         &
185            &             0, zjulian, zdt,  nhorised, nised , domain_id=nidom )
186         CALL histvert( nised,'deptht','Vertic.sed.T levels','m',ipk, profsed, ndepsed )
187         CALL wheneq  ( jpi*jpj*ipk, tmasksed, 1, 1., ndext52, ndimt52 )
188         CALL wheneq  ( jpi*jpj, tmasksed(:,:,1), 1, 1., ndext51, ndimt51 )
189
190         ! Declare all the output fields as NETCDF variables
191
192         DO jn = 1, jptrased
193            cltra  = sedtrcd(jn)   ! short title for sediment variable
194            cltral = sedtrcl(jn)   ! long title for  sediment variable
195            cltrau = sedtrcu(jn)   ! unit for  sediment variable
196
197            CALL histdef( nised, cltra,cltral,cltrau, jpi, jpj, nhorised, &
198               &          ipk, 1, ipk, ndepsed, 32, clop, zsto, zout )
199         ENDDO
200
201         ! 3D diagnostic
202         DO jn = 1, jpdia3dsed
203            cltra  = seddia3d(jn)   ! short title for 3D diagnostic
204            cltral = seddia3l(jn)   ! long title for 3D diagnostic
205            cltrau = seddia3u(jn)   ! UNIT for 3D diagnostic
206
207            CALL histdef( nised, cltra,cltral,cltrau, jpi, jpj, nhorised, &
208               &          ipk, 1, ipk, ndepsed, 32, clop, zsto, zout  )
209         ENDDO
210
211         !Fluxes
212         DO jn = 1, jpdia2dsed
213            cltra  = seddia2d(jn)   ! short title for 2D diagnostic
214            cltral = seddia2l(jn)   ! long title for 2D diagnostic
215            cltrau = seddia2u(jn)   ! UNIT for 2D diagnostic
216           
217            CALL histdef( nised, cltra,cltral,cltrau, jpi, jpj, nhorised, &
218               &          1, 1, 1, -99, 32, clop, zsto, zout )
219         ENDDO
220
221
222         CALL histend( nised )
223
224         WRITE(numsed,*)
225         WRITE(numsed,*) 'End of NetCDF sediment output file Initialization'
226
227      ELSE
228
229
230         ! Start writing data
231         ! ---------------------
232          DO jn = 1, jptrased
233             cltra = sedtrcd(jn) ! short title for 3D diagnostic
234             CALL histwrite( nised, cltra, it, trcsedi(:,:,:,jn), ndimt52, ndext52 )
235          END DO
236
237          DO jn = 1, jpdia3dsed
238             cltra = seddia3d(jn) ! short title for 3D diagnostic
239             CALL histwrite( nised, cltra, it, flxsedi3d(:,:,:,jn), ndimt52, ndext52 )
240          END DO
241
242          DO jn = 1, jpdia2dsed
243             cltra = seddia2d(jn) ! short title for 2D diagnostic
244             CALL histwrite( nised, cltra, it, flxsedi2d(:,:,jn  ), ndimt51, ndext51 )
245          END DO
246
247
248         !!
249         !! synchronise FILE
250         !
251         IF( MOD( kt, nwrised ) == 0 ) THEN
252              WRITE(numsed,*)  '**** sedwri : write NetCDF aditional arrays'
253              CALL histsync( nised )
254          ENDIF
255
256      ENDIF
257
258! 3. Closing all files
259! --------------------
260      IF( kt == nitsedend  ) THEN
261          CALL histclo( nised )
262      ENDIF
263
264      DEALLOCATE( zdta )    ;   DEALLOCATE( zflx )
265
266   END SUBROUTINE sed_wri
267
268#else
269   !!======================================================================
270   !! MODULE sedwri  :   Dummy module
271   !!======================================================================
272CONTAINS
273   SUBROUTINE sed_wri( kt )         ! Empty routine
274      INTEGER, INTENT(in) :: kt
275      WRITE(*,*) 'sed_adv: You should not have seen this print! error?', kt
276   END SUBROUTINE sed_wri
277
278   !!======================================================================
279#endif
280
281END MODULE sedwri
Note: See TracBrowser for help on using the repository browser.