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.
diaptr.F90 in trunk/NEMO/OPA_SRC/DIA – NEMO

source: trunk/NEMO/OPA_SRC/DIA/diaptr.F90 @ 352

Last change on this file since 352 was 352, checked in by opalod, 18 years ago

nemo_v1_update_033 : CT : Switch to IOIPSL-3-0 new library

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.7 KB
Line 
1MODULE diaptr
2   !!======================================================================
3   !!                       ***  MODULE  diaptr  ***
4   !! Ocean physics:  brief description of the purpose of the module
5   !!                 (please no more than 2 lines)
6   !!=====================================================================
7   !!----------------------------------------------------------------------
8   !!   dia_ptr      : Poleward Transport Diagnostics module
9   !!   dia_ptr_init : Initialization, namelist read
10   !!   dia_ptr_wri  : Output of poleward fluxes
11   !!   ptr_vjk      : "zonal" sum computation of a "meridional" flux array
12   !!   ptr_vtjk     : "zonal" mean computation of a tracer field
13   !!   ptr_vj       : "zonal" and vertical sum computation of a "meridional"
14   !!                : flux array; Generic interface: ptr_vj_3d, ptr_vj_2d
15   !!----------------------------------------------------------------------
16   !! * Modules used
17   USE oce           ! ocean dynamics and active tracers
18   USE dom_oce       ! ocean space and time domain
19   USE ldftra_oce    ! ???
20   USE lib_mpp
21   USE in_out_manager
22   USE dianam
23   USE phycst
24
25   IMPLICIT NONE
26   PRIVATE
27
28   INTERFACE ptr_vj
29      MODULE PROCEDURE ptr_vj_3d, ptr_vj_2d
30   END INTERFACE
31
32   !! *  Routine accessibility
33   PUBLIC dia_ptr_init   ! call in opa module
34   PUBLIC dia_ptr        ! call in step module
35   PUBLIC ptr_vj         ! call by tra_ldf & tra_adv routines
36   PUBLIC ptr_vjk        ! call by tra_ldf & tra_adv routines
37
38   !! * Share Module variables
39   LOGICAL, PUBLIC ::   & !!! ** init namelist (namptr) **
40      ln_diaptr = .FALSE.   !: Poleward transport flag (T) or not (F)
41   INTEGER, PUBLIC ::   &  !!: ** ptr namelist (namptr) **
42      nf_ptr = 15           !: frequency of ptr computation
43   REAL(wp), PUBLIC, DIMENSION(jpj) ::   &   ! poleward transport
44      pht_adv, pst_adv,  &  !: heat and salt: advection
45      pht_ove, pst_ove,  &  !: heat and salt: overturning
46      pht_ldf, pst_ldf,  &  !: heat and salt: lateral diffusion
47      pht_eiv, pst_eiv      !: heat and salt: bolus advection
48
49   !! Module variables
50   REAL(wp), DIMENSION(jpj,jpk) ::   & 
51      tn_jk  , sn_jk  ,  &  ! "zonal" mean temperature and salinity
52      v_msf           ,  &  ! "meridional" Stream-Function
53#if defined key_diaeiv
54      v_msf_eiv       ,  &  ! bolus "meridional" Stream-Function
55#endif
56      surf_jk_r             ! inverse of the ocean "zonal" section surface
57
58   !! * Substitutions
59#  include "domzgr_substitute.h90"
60#  include "vectopt_loop_substitute.h90"
61   !!----------------------------------------------------------------------
62   !!   OPA 9.0 , LOCEAN-IPSL (2005)
63   !! $Header$
64   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
65   !!----------------------------------------------------------------------
66
67CONTAINS
68
69   FUNCTION ptr_vj_3d( pva )   RESULT ( p_fval )
70      !!----------------------------------------------------------------------
71      !!                    ***  ROUTINE ptr_vj_3d  ***
72      !!
73      !! ** Purpose :   "zonal" and vertical sum computation of a "meridional"
74      !!      flux array
75      !!
76      !! ** Method  : - i-k sum of pva using the interior 2D vmask (vmask_i).
77      !!      pva is supposed to be a masked flux (i.e. * vmask*e1v*e3v)
78      !!
79      !! ** Action  : - p_fval: i-k-mean poleward flux of pva
80      !!
81      !! History :
82      !!   9.0  !  03-09  (G. Madec)  Original code
83      !!----------------------------------------------------------------------
84      !! * arguments
85      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   &
86         pva                         ! mask flux array at V-point
87
88      !! * local declarations
89      INTEGER  ::   ji, jj, jk        ! dummy loop arguments
90      INTEGER  ::   ijpj = jpj        ! ???
91      REAL(wp),DIMENSION(jpj) ::   &
92         p_fval                       ! function value
93      !!--------------------------------------------------------------------
94
95      p_fval(:) = 0.e0
96      DO jk = 1, jpkm1
97         DO jj = 2, jpjm1
98            DO ji = fs_2, fs_jpim1   ! Vector opt.
99               p_fval(jj) = p_fval(jj) + pva(ji,jj,jk) * tmask_i(ji,jj+1) * tmask_i(ji,jj) 
100            END DO
101         END DO
102      END DO
103
104      IF( lk_mpp )   CALL mpp_sum( p_fval, ijpj )     !!bug  I presume
105
106   END FUNCTION ptr_vj_3d
107
108
109
110   FUNCTION ptr_vj_2d( pva )   RESULT ( p_fval )
111      !!----------------------------------------------------------------------
112      !!                    ***  ROUTINE ptr_vj_2d  ***
113      !!
114      !! ** Purpose :   "zonal" and vertical sum computation of a "meridional"
115      !!      flux array
116      !!
117      !! ** Method  : - i-k sum of pva using the interior 2D vmask (vmask_i).
118      !!      pva is supposed to be a masked flux (i.e. * vmask*e1v*e3v)
119      !!
120      !! ** Action  : - p_fval: i-k-mean poleward flux of pva
121      !!
122      !! History :
123      !!   9.0  !  03-09  (G. Madec)  Original code
124      !!----------------------------------------------------------------------
125      !! * arguments
126      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) ::   &
127         pva                         ! mask flux array at V-point
128
129      !! * local declarations
130      INTEGER  ::   ji,jj             ! dummy loop arguments
131      INTEGER  ::   ijpj = jpj        ! ???
132      REAL(wp),DIMENSION(jpj) ::   &
133         p_fval                       ! function value
134      !!--------------------------------------------------------------------
135 
136      p_fval(:) = 0.e0
137      DO jj = 2, jpjm1
138         DO ji = fs_2, fs_jpim1   ! Vector opt.
139            p_fval(jj) = p_fval(jj) + pva(ji,jj) * tmask_i(ji,jj+1) * tmask_i(ji,jj)
140         END DO
141      END DO
142
143      IF( lk_mpp )   CALL mpp_sum( p_fval, ijpj )     !!bug  I presume
144 
145    END FUNCTION ptr_vj_2d
146
147
148
149   FUNCTION ptr_vjk( pva )   RESULT ( p_fval )
150      !!----------------------------------------------------------------------
151      !!                    ***  ROUTINE ptr_vjk  ***
152      !!
153      !! ** Purpose :   "zonal" sum computation of a "meridional" flux array
154      !!
155      !! ** Method  : - i-sum of pva using the interior 2D vmask (vmask_i).
156      !!      pva is supposed to be a masked flux (i.e. * vmask*e1v*e3v)
157      !!
158      !! ** Action  : - p_fval: i-k-mean poleward flux of pva
159      !!
160      !! History :
161      !!   9.0  !  03-09  (G. Madec)  Original code
162      !!----------------------------------------------------------------------
163      !! * arguments
164      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   &
165         pva                         ! mask flux array at V-point
166
167      !! * local declarations
168      INTEGER  ::   ji, jj, jk        ! dummy loop arguments
169      INTEGER, DIMENSION (1) :: ish
170      INTEGER, DIMENSION (2) :: ish2
171      REAL(wp),DIMENSION(jpj*jpk) ::   &
172         zwork                        ! temporary vector for mpp_sum
173      REAL(wp),DIMENSION(jpj,jpk) ::   &
174         p_fval                       ! return function value
175      !!--------------------------------------------------------------------
176 
177      p_fval(:,:) = 0.e0
178      DO jk = 1, jpkm1
179         DO jj = 2, jpjm1
180            DO ji = fs_2, fs_jpim1   ! Vector opt.
181               p_fval(jj,jk) = p_fval(jj,jk) + pva(ji,jj,jk) * tmask_i(ji,jj+1) * tmask_i(ji,jj)
182            END DO
183         END DO
184      END DO
185      IF( lk_mpp)   THEN
186          ish(1) = jpj*jpk ; ish2(1)=jpj ; ish2(2)=jpk
187          zwork(:)= RESHAPE(p_fval, ish )
188          CALL mpp_sum(zwork, jpj*jpk )
189          p_fval(:,:)= RESHAPE(zwork,ish2)
190      END IF
191
192   END FUNCTION ptr_vjk
193
194   FUNCTION ptr_vtjk( pva )   RESULT ( p_fval )
195      !!----------------------------------------------------------------------
196      !!                    ***  ROUTINE ptr_vtjk  ***
197      !!
198      !! ** Purpose :   "zonal" mean computation of a tracer field
199      !!
200      !! ** Method  : - i-sum of mj(pva) using the interior 2D vmask (vmask_i)
201      !!      multiplied by the inverse of the surface of the "zonal" ocean
202      !!      section
203      !!
204      !! ** Action  : - p_fval: i-k-mean poleward flux of pva
205      !!
206      !! History :
207      !!   9.0  !  03-09  (G. Madec)  Original code
208      !!----------------------------------------------------------------------
209      !! * arguments
210      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   &
211         pva                         ! mask flux array at V-point
212 
213      !! * local declarations
214      INTEGER  ::   ji, jj, jk        ! dummy loop arguments
215      INTEGER, DIMENSION (1) :: ish
216      INTEGER, DIMENSION (2) :: ish2
217      REAL(wp),DIMENSION(jpj*jpk) ::   &
218         zwork                        ! temporary vector for mpp_sum
219      REAL(wp),DIMENSION(jpj,jpk) ::   &
220         p_fval                       ! return function value
221      !!--------------------------------------------------------------------
222
223      p_fval(:,:) = 0.e0
224      DO jk = 1, jpkm1
225         DO jj = 2, jpjm1
226            DO ji = fs_2, fs_jpim1   ! Vector opt.
227               p_fval(jj,jk) = p_fval(jj,jk) + ( pva(ji,jj,jk) + pva(ji,jj+1,jk) )              &
228                  &                          * e1v(ji,jj) * fse3v(ji,jj,jk) * vmask(ji,jj,jk)   &
229                  &                          * tmask_i(ji,jj+1) * tmask_i(ji,jj)
230            END DO
231         END DO
232      END DO
233      p_fval(:,:) = p_fval(:,:) * 0.5
234      IF( lk_mpp)   THEN
235          ish(1) = jpj*jpk ; ish2(1)=jpj ; ish2(2)=jpk
236          zwork(:)= RESHAPE(p_fval, ish )
237          CALL mpp_sum(zwork, jpj*jpk )
238          p_fval(:,:)= RESHAPE(zwork,ish2)
239      END IF
240
241   END FUNCTION ptr_vtjk
242
243
244   SUBROUTINE dia_ptr( kt )
245      !!----------------------------------------------------------------------
246      !!                  ***  ROUTINE dia_ptr  ***
247      !!----------------------------------------------------------------------
248      !! * Argument
249      INTEGER, INTENT(in) ::   kt   ! ocean time step index
250
251      !! * Local variables
252      INTEGER ::   jk               ! dummy loop
253      REAL(wp) ::    &
254         zsverdrup,  &              ! conversion from m3/s to Sverdrup
255         zpwatt,     &              ! conversion from W    to PW
256         zggram                     ! conversion from g    to Pg
257      !!----------------------------------------------------------------------
258      zsverdrup = 1.e-6
259      zpwatt    = 1.e-15
260      zggram    = 1.e-6
261
262      ! "zonal" mean temperature and salinity at V-points
263      tn_jk(:,:) = ptr_vtjk( tn(:,:,:) ) * surf_jk_r(:,:)
264      sn_jk(:,:) = ptr_vtjk( sn(:,:,:) ) * surf_jk_r(:,:)
265
266      ! "zonal" mean mass flux at V-points
267      v_msf(:,:) = ptr_vjk( vn(:,:,:) ) 
268#if defined key_diaeiv
269      ! "zonal" mean bolus mass flux at V-points
270      v_msf_eiv(:,:) = ptr_vjk( v_eiv(:,:,:) ) 
271      ! Bolus "Meridional" Stream-Function
272      DO jk = jpkm1, 1 , -1
273         v_msf_eiv(:,jk) = v_msf_eiv(:,jk-1) + v_msf_eiv(:,jk)
274      END DO
275      v_msf_eiv(:,:) = v_msf_eiv(:,:) * zsverdrup
276#endif
277
278      ! poleward transport: overturning component
279      pht_ove(:) = SUM( v_msf(:,:) * tn_jk(:,:), 2 )   ! SUM over jk
280      pst_ove(:) = SUM( v_msf(:,:) * sn_jk(:,:), 2 )   ! SUM over jk
281
282      ! conversion in PW and G g
283      zpwatt = zpwatt * rau0 * rcp
284      pht_adv(:) = pht_adv(:) * zpwatt
285      pht_ove(:) = pht_ove(:) * zpwatt
286      pht_ldf(:) = pht_ldf(:) * zpwatt
287      pht_eiv(:) = pht_eiv(:) * zpwatt
288      pst_adv(:) = pst_adv(:) * zggram
289      pst_ove(:) = pst_ove(:) * zggram
290      pst_ldf(:) = pst_ldf(:) * zggram
291      pst_eiv(:) = pst_eiv(:) * zggram
292
293      ! "Meridional" Stream-Function
294      DO jk = jpkm1, 1, -1
295         v_msf(:,jk) = v_msf(:,jk-1) + v_msf(:,jk)
296      END DO
297      v_msf(:,:) = v_msf(:,:) * zsverdrup
298
299      ! output
300      CALL dia_ptr_wri( kt )
301
302   END SUBROUTINE dia_ptr
303
304
305   SUBROUTINE dia_ptr_init
306      !!----------------------------------------------------------------------
307      !!                  ***  ROUTINE dia_ptr_init  ***
308      !!                   
309      !! ** Purpose :   Initialization, namelist read
310      !!
311      !! ** Method  :   
312      !!
313      !! ** input   :   Namlist namptr
314      !!
315      !! ** Action  : 
316      !!
317      !! history :
318      !!   9.0  !  03-08  (Autor Names)  Original code
319      !!----------------------------------------------------------------------
320      !! * local declarations
321      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &
322         z_1             ! temporary workspace
323
324      NAMELIST/namptr/ ln_diaptr, nf_ptr
325      !!----------------------------------------------------------------------
326
327      ! Read Namelist namptr : poleward transport parameters
328      REWIND ( numnam )
329      READ   ( numnam, namptr )
330
331
332      ! Control print
333      IF(lwp) THEN
334         WRITE(numout,*)
335         WRITE(numout,*) 'dia_ptr_init : poleward transport and msf initialization'
336         WRITE(numout,*) '~~~~~~~~~~~~'
337         WRITE(numout,*) '          Namelist namptr : set ptr parameters'
338         WRITE(numout,*) '             Switch for ptr diagnostic (T) or not (F) ln_diaptr = ', ln_diaptr
339         WRITE(numout,*) '             Frequency of computation                    nf_ptr = ', nf_ptr
340      ENDIF
341
342      ! inverse of the ocean "zonal" v-point section
343      z_1(:,:,:) = 1.e0
344      surf_jk_r(:,:) = ptr_vtjk( z_1(:,:,:) )
345      WHERE( surf_jk_r(:,:) /= 0.e0 )   surf_jk_r(:,:) = 1.e0 / surf_jk_r(:,:)
346
347   END SUBROUTINE dia_ptr_init
348
349   !!---------------------------------------------------------------------
350   !!   Default option :                                       NetCDF file
351   !!---------------------------------------------------------------------
352
353   SUBROUTINE dia_ptr_wri( kt )
354      !!---------------------------------------------------------------------
355      !!                ***  ROUTINE dia_ptr_wri  ***
356      !!
357      !! ** Purpose :   output of poleward fluxes
358      !!
359      !! ** Method  :   NetCDF file
360      !!
361      !! History :
362      !!   9.0  !  03-09  (G. Madec)  Original code
363      !!----------------------------------------------------------------------
364      USE ioipsl          ! NetCDF IPSL library
365      USE daymod
366
367      !! * Arguments
368      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
369
370      !! * Save variables   
371      INTEGER, SAVE ::   nhoridz, ndepidzt, ndepidzw   &
372          , ndex(1)
373
374      !! * Local variables
375      CHARACTER (len=40) ::   &
376         clhstnam, clop             ! temporary names
377      INTEGER ::   iline, it, ji    !
378      REAL(wp) ::   &
379         zsto, zout, zdt, zmax, &   ! temporary scalars
380         zjulian
381      REAL(wp), DIMENSION(jpj) ::   zphi, zfoo
382      !!----------------------------------------------------------------------
383     
384      ! Define frequency of output and means
385      zdt = rdt
386      IF( nacc == 1 ) zdt = rdtmin
387#if defined key_diainstant
388         zsto = nf_ptr * zdt
389         clop = "inst(x)"               ! no use of the mask value (require less cpu time)
390         !!! clop="inst(only(x))"       ! put 1.e+20 on land (very expensive!!)
391#else
392         zsto = zdt
393         clop = "ave(x)"                ! no use of the mask value (require less cpu time)
394         !!! clop="ave(only(x))"        ! put 1.e+20 on land (very expensive!!)
395#endif
396      zout = nf_ptr * zdt
397      zmax = ( nitend - nit000 + 1 ) * zdt
398     
399         
400      ! define time axis
401      it = kt - nit000 + 1
402
403      ! Initialization
404      ! --------------
405      IF( kt == nit000 ) THEN
406     
407      zdt = rdt
408      IF( nacc == 1 ) zdt = rdtmin
409
410         ! Reference latitude
411         ! ------------------
412         !                                           ! =======================
413         IF( cp_cfg == "orca" ) THEN                 !   ORCA configurations
414            !                                        ! =======================
415
416            IF( jp_cfg == 05  )   iline = 192   ! i-line that passes near the North Pole
417            IF( jp_cfg == 025 )   iline = 384   ! i-line that passes near the North Pole
418            IF( jp_cfg == 2   )   iline =  48   ! i-line that passes near the North Pole
419            IF( jp_cfg == 4   )   iline =  24   ! i-line that passes near the North Pole
420            zphi(:) = 0.e0
421            DO ji = mi0(iline), mi1(iline) 
422               zphi(:) = gphiv(ji,:)         ! if iline is in the local domain
423            END DO
424            ! provide the correct zphi to all local domains
425            IF( lk_mpp )   CALL mpp_sum( zphi, jpj )       
426
427            !                                        ! =======================
428         ELSE                                        !   OTHER configurations
429            !                                        ! =======================
430            zphi(:) = gphiv(1,:)             ! assume lat/lon coordinate, select the first i-line
431            !
432         ENDIF
433
434         ! OPEN netcdf file
435         ! ----------------
436         ! Define frequency of output and means
437         zsto = nf_ptr * zdt
438         clop = "ave(x)"
439         zout = nf_ptr * zdt
440         zfoo(:) = 0.e0
441
442         ! Compute julian date from starting date of the run
443
444         CALL ymds2ju( nyear, nmonth, nday, 0.e0, zjulian )
445
446         CALL dia_nam( clhstnam, nwrite, 'diaptr' )
447         IF(lwp)WRITE( numout,*)" Name of diaptr NETCDF file ",clhstnam
448
449         ! Horizontal grid : zphi()
450         CALL histbeg(clhstnam, 1, zfoo, jpj, zphi,   &
451            1, 1, 1, jpj, 0, zjulian, zdt, nhoridz, numptr, domain_id=nidom )
452         ! Vertical grids : gdept, gdepw
453         CALL histvert( numptr, "deptht", "Vertical T levels",   &
454            "m", jpk, gdept, ndepidzt )
455         CALL histvert( numptr, "depthw", "Vertical W levels",   &
456            "m", jpk, gdepw, ndepidzw )
457         
458         !  Zonal mean T and S
459         
460         CALL histdef( numptr, "zotemglo", "Zonal Mean Temperature","C" ,   &
461            1, jpj, nhoridz, jpk, 1, jpk, ndepidzt, 32, clop, zsto, zout )
462         CALL histdef( numptr, "zosalglo", "Zonal Mean Salinity","PSU"  ,   &
463            1, jpj, nhoridz, jpk, 1, jpk, ndepidzt, 32, clop, zsto, zout )
464
465         !  Meridional Stream-Function (eulerian and bolus)
466         
467         CALL histdef( numptr, "zomsfglo", "Meridional Stream-Function: global","Sv" ,   &
468            1, jpj, nhoridz, jpk, 1, jpk, ndepidzw, 32, clop, zsto, zout )
469
470         !  Heat transport
471
472         CALL histdef( numptr, "sophtadv", "Advective Heat Transport"      ,   &
473            "PW", 1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
474         CALL histdef( numptr, "sophtldf", "Diffusive Heat Transport"      ,   &
475            "PW",1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
476         CALL histdef( numptr, "sophtove", "Overturning Heat Transport"    ,   &
477            "PW",1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
478
479         !  Salt transport
480
481         CALL histdef( numptr, "sopstadv", "Advective Salt Transport"      ,   &
482            "Giga g/s", 1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
483         CALL histdef( numptr, "sopstldf", "Diffusive Salt Transport"      ,   &
484            "Giga g/s", 1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
485         CALL histdef( numptr, "sopstove", "Overturning Salt Transport"    ,   &
486            "Giga g/s", 1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
487
488#if defined key_diaeiv
489         ! Eddy induced velocity
490         CALL histdef( numptr, "zomsfeiv", "Bolus Meridional Stream-Function: global",   &
491            "Sv"      , 1, jpj, nhoridz, jpk, 1, jpk, ndepidzw, 32, clop, zsto, zout )
492         CALL histdef( numptr, "sophteiv", "Bolus Advective Heat Transport",   &
493            "PW"      , 1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
494         CALL histdef( numptr, "sopsteiv", "Bolus Advective Salt Transport",   &
495            "Giga g/s", 1, jpj, nhoridz, 1, 1, 1, -99, 32, clop, zsto, zout )
496#endif
497
498         CALL histend( numptr )
499
500      ENDIF
501
502      IF( MOD( kt, nf_ptr ) == 0 ) THEN
503
504         ! define time axis
505         it= kt - nit000 + 1
506         ndex(1) = 1
507         CALL histwrite( numptr, "zotemglo", it, tn_jk    , jpj*jpk, ndex )
508         CALL histwrite( numptr, "zosalglo", it, sn_jk    , jpj*jpk, ndex )
509         CALL histwrite( numptr, "zomsfglo", it, v_msf    , jpj*jpk, ndex )
510         CALL histwrite( numptr, "sophtadv", it, pht_adv  , jpj    , ndex )
511         CALL histwrite( numptr, "sophtldf", it, pht_ldf  , jpj    , ndex )
512         CALL histwrite( numptr, "sophtove", it, pht_ove  , jpj    , ndex )
513         CALL histwrite( numptr, "sopstadv", it, pst_adv  , jpj    , ndex )
514         CALL histwrite( numptr, "sopstldf", it, pst_ldf  , jpj    , ndex )
515         CALL histwrite( numptr, "sopstove", it, pst_ove  , jpj    , ndex )
516#if defined key_diaeiv
517         CALL histwrite( numptr, "zomsfeiv", it, v_msf_eiv, jpj*jpk, ndex )
518         CALL histwrite( numptr, "sophteiv", it, pht_eiv  , jpj    , ndex )
519         CALL histwrite( numptr, "sopsteiv", it, pst_eiv  , jpj    , ndex )
520#endif
521 
522      ENDIF
523
524      ! Close the file
525      IF( kt == nitend )   CALL histclo( numptr )           ! Netcdf write
526
527   END SUBROUTINE dia_ptr_wri
528
529   !!======================================================================
530END MODULE diaptr
Note: See TracBrowser for help on using the repository browser.