Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/CONFIG/SHARED/field_def.xml
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/CONFIG/SHARED/field_def.xml (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/CONFIG/SHARED/field_def.xml (revision 7494)
@@ -25,22 +25,24 @@
-
- toce * e3t
-
- soce * e3t
-
-
- sst * sst
+
+ toce * e3t
+
+ soce * e3t
+
+
+ sst * sst
-
-
-
+
+
+
+
-
+
sss * sss
-
+
+
@@ -55,8 +57,8 @@
-
+
-
+
@@ -78,12 +80,15 @@
topthdep - pycndep
-
+
-
-
+
+
-
+
+
+ sshdyn * sshdyn
+
@@ -177,8 +182,8 @@
-
+
-
+
@@ -197,9 +202,13 @@
-
+
+
+
+
+
-
-
+
+
@@ -219,4 +228,5 @@
+
@@ -224,4 +234,5 @@
+
@@ -253,6 +264,6 @@
-
-
+
+
@@ -263,12 +274,12 @@
-
-
+
+
-
-
+
+
@@ -279,5 +290,5 @@
-
+
@@ -290,11 +301,11 @@
-
-
-
-
+
+
+
+
-
+
@@ -308,18 +319,18 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -363,5 +374,5 @@
-
+
@@ -378,6 +389,6 @@
-
-
+
+
uoce * e3u
@@ -385,6 +396,6 @@
-
-
+
+
@@ -392,5 +403,8 @@
-
+
+
+
+
@@ -402,8 +416,11 @@
-
+
+
-
+
+
+
@@ -414,6 +431,6 @@
-
-
+
+
voce * e3v
@@ -421,6 +438,6 @@
-
-
+
+
@@ -429,4 +446,7 @@
+
+
+
@@ -438,8 +458,10 @@
-
-
-
+
+
+
+
+
@@ -454,4 +476,5 @@
+
@@ -473,5 +496,4 @@
-
@@ -479,5 +501,5 @@
-
+
@@ -485,21 +507,43 @@
+
+
+
+
+
+
+ ut * e3u
+
+ us * e3u
+
+ urhop * e3u
+
+ vt * e3v
+
+ vs * e3v
+
+ vrhop * e3v
+
+
+
+
+
-
+
-
+
-
-
+
+
-
+
@@ -546,6 +590,6 @@
-
-
+
+
@@ -571,5 +615,5 @@
-
+
@@ -577,14 +621,14 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -593,7 +637,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -614,4 +714,6 @@
sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 )
sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 )
+
+
@@ -620,22 +722,82 @@
+
+
+
+
+
+
+
+
+ ttrd_iso_z1 + ttrd_zdf - ttrd_zdfp
+ strd_iso_z1 + strd_zdf - strd_zdfp
+ ttrd_ldf + ttrd_zdf - ttrd_zdfp
+ strd_ldf + strd_zdf - strd_zdfp
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ttrd_xad * e3t
+ strd_xad * e3t
+ ttrd_yad * e3t
+ strd_yad * e3t
+ ttrd_zad * e3t
+ strd_zad * e3t
+ ttrd_ad * e3t
+ strd_ad * e3t
+ ttrd_totad * e3t
+ strd_totad * e3t
+ ttrd_ldf * e3t
+ strd_ldf * e3t
+ ttrd_zdf * e3t
+ strd_zdf * e3t
+ ttrd_evd * e3t
+ strd_evd * e3t
+
+
+ ttrd_iso_x * e3t
+ strd_iso_x * e3t
+ ttrd_iso_y * e3t
+ strd_iso_y * e3t
+ ttrd_iso_z * e3t
+ strd_iso_z * e3t
+ ttrd_iso * e3t
+ strd_iso * e3t
+ ttrd_zdfp * e3t
+ strd_zdfp * e3t
+
+
+ ttrd_dmp * e3t
+ strd_dmp * e3t
+ ttrd_bbl * e3t
+ strd_bbl * e3t
+ ttrd_npc * e3t
+ strd_npc * e3t
+ ttrd_qns * e3t_surf
+ strd_cdt * e3t_surf
+ ttrd_qsr * e3t
+ ttrd_bbc * e3t
+ ttrd_atf * e3t
+ strd_atf * e3t
+ ttrd_tot * e3t
+ strd_tot * e3t
@@ -653,5 +815,5 @@
-
+
@@ -661,4 +823,5 @@
+
@@ -678,6 +841,7 @@
-
+
+ petrd_zdfp * e3t
@@ -793,7 +957,13 @@
CFC11 * e3t
+
-
- C14B * e3t
+
+ C14B * e3t
+
+
+
+ Age * e3t
+
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/CONFIG/SHARED/namelist_age_ref
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/CONFIG/SHARED/namelist_age_ref (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/CONFIG/SHARED/namelist_age_ref (revision 7494)
@@ -0,0 +1,9 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! AGE : 1 - dates (namage)
+!! namelists
+!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+&namage ! dates
+!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+ rn_age_depth = 10 ! depth over which age tracer reset to zero
+ rn_age_kill_rate = -0.000138888 ! = -1/7200 recip of relaxation timescale (s) for age tracer shallower than age_depth
+/
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90 (revision 7494)
@@ -24,4 +24,6 @@
USE phycst ! physical constant
USE in_out_manager ! I/O manager
+ USE zdfddm
+ USE zdf_oce
IMPLICIT NONE
@@ -42,4 +44,5 @@
!! * Substitutions
# include "domzgr_substitute.h90"
+# include "zdfddm_substitute.h90"
!!----------------------------------------------------------------------
!! NEMO/OPA 3.3 , NEMO Consortium (2010)
@@ -75,6 +78,8 @@
INTEGER :: ji, jj, jk ! dummy loop arguments
REAL(wp) :: zvolssh, zvol, zssh_steric, zztmp, zarho, ztemp, zsal, zmass
+ REAL(wp) :: zaw, zbw, zrw
!
REAL(wp), POINTER, DIMENSION(:,:) :: zarea_ssh , zbotpres ! 2D workspace
+ REAL(wp), POINTER, DIMENSION(:,:) :: pe ! 2D workspace
REAL(wp), POINTER, DIMENSION(:,:,:) :: zrhd , zrhop ! 3D workspace
REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztsn ! 4D workspace
@@ -82,5 +87,5 @@
IF( nn_timing == 1 ) CALL timing_start('dia_ar5')
- CALL wrk_alloc( jpi , jpj , zarea_ssh , zbotpres )
+ CALL wrk_alloc( jpi , jpj , zarea_ssh , zbotpres, pe )
CALL wrk_alloc( jpi , jpj , jpk , zrhd , zrhop )
CALL wrk_alloc( jpi , jpj , jpk , jpts , ztsn )
@@ -95,4 +100,5 @@
CALL iom_put( 'voltot', zvol )
CALL iom_put( 'sshtot', zvolssh / area_tot )
+ CALL iom_put( 'sshdyn', sshn(:,:) - (zvolssh / area_tot) )
!
@@ -190,6 +196,41 @@
CALL iom_put( 'temptot', ztemp )
CALL iom_put( 'saltot' , zsal )
- !
- CALL wrk_dealloc( jpi , jpj , zarea_ssh , zbotpres )
+
+ IF( iom_use( 'tnpeo' )) THEN
+ ! Work done against stratification by vertical mixing
+ ! Exclude points where rn2 is negative as convection kicks in here and
+ ! work is not being done against stratification
+ pe(:,:) = 0._wp
+ IF( lk_zdfddm ) THEN
+ DO ji=1,jpi
+ DO jj=1,jpj
+ DO jk=1,jpk
+ zrw = ( fsdepw(ji,jj,jk ) - fsdept(ji,jj,jk) ) &
+ & / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) )
+ !
+ zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw
+ zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw
+ !
+ pe(ji, jj) = pe(ji, jj) - MIN(0._wp, rn2(ji,jj,jk)) * &
+ & grav * (avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) ) &
+ & - fsavs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) )
+
+ ENDDO
+ ENDDO
+ ENDDO
+ ELSE
+ DO ji=1,jpi
+ DO jj=1,jpj
+ DO jk=1,jpk
+ pe(ji,jj) = pe(ji,jj) + avt(ji, jj, jk) * MIN(0._wp,rn2(ji, jj, jk)) * rau0 * fse3w(ji, jj, jk)
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDIF
+ CALL lbc_lnk(pe, 'T', 1._wp)
+ CALL iom_put( 'tnpeo', pe )
+ ENDIF
+ !
+ CALL wrk_dealloc( jpi , jpj , zarea_ssh , zbotpres, pe )
CALL wrk_dealloc( jpi , jpj , jpk , zrhd , zrhop )
CALL wrk_dealloc( jpi , jpj , jpk , jpts , ztsn )
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaprod.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaprod.F90 (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaprod.F90 (revision 7494)
@@ -0,0 +1,248 @@
+MODULE diaprod
+! Requires key_iom_put
+# if defined key_iomput
+ !!======================================================================
+ !! *** MODULE diaprod ***
+ !! Ocean diagnostics : write ocean product diagnostics
+ !!=====================================================================
+ !! History : 3.4 ! 2012 (D. Storkey) Original code
+ !!----------------------------------------------------------------------
+
+ !!----------------------------------------------------------------------
+ !! dia_prod : calculate and write out product diagnostics
+ !!----------------------------------------------------------------------
+ USE oce ! ocean dynamics and tracers
+ USE dom_oce ! ocean space and time domain
+ USE domvvl ! for thickness weighted diagnostics if key_vvl
+ USE eosbn2 ! equation of state (eos call)
+ USE phycst ! physical constants
+ USE lbclnk ! ocean lateral boundary conditions (or mpp link)
+ USE in_out_manager ! I/O manager
+ USE diadimg ! dimg direct access file format output
+ USE iom
+ USE ioipsl
+ USE lib_mpp ! MPP library
+ USE timing ! preformance summary
+ USE wrk_nemo ! working array
+ USE diaptr
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC dia_prod ! routines called by step.F90
+
+ !! * Substitutions
+# include "zdfddm_substitute.h90"
+# include "domzgr_substitute.h90"
+# include "vectopt_loop_substitute.h90"
+ !!----------------------------------------------------------------------
+ !! NEMO/OPA 3.4 , NEMO Consortium (2012)
+ !! $Id $
+ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE dia_prod( kt )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE dia_prod ***
+ !!
+ !! ** Purpose : Write out product diagnostics (uT, vS etc.)
+ !!
+ !! ** Method : use iom_put
+ !! Product diagnostics are not thickness-weighted in this routine.
+ !! They should be thickness-weighted using XIOS if key_vvl is set.
+ !!----------------------------------------------------------------------
+ !!
+ INTEGER, INTENT( in ) :: kt ! ocean time-step index
+ !!
+ INTEGER :: ji, jj, jk ! dummy loop indices
+ REAL(wp) :: zztmp, zztmpx, zztmpy !
+ !!
+ REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d ! 3D workspace
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: zrhop ! potential density
+ !!----------------------------------------------------------------------
+ !
+ IF( nn_timing == 1 ) CALL timing_start('dia_prod')
+ !
+ CALL wrk_alloc( jpi , jpj , z2d )
+ CALL wrk_alloc( jpi , jpj, jpk , z3d )
+ CALL wrk_alloc( jpi , jpj, jpk , zrhop )
+ !
+
+ IF( iom_use("urhop") .OR. iom_use("vrhop") .OR. iom_use("wrhop") &
+#if ! defined key_diaar5
+ & .OR. iom_use("rhop") &
+#endif
+ & ) THEN
+ CALL eos( tsn, z3d, zrhop ) ! now in situ and potential density
+ zrhop(:,:,:) = zrhop(:,:,:)-1000.e0 ! reference potential density to 1000 to avoid precision issues in rhop2 calculation
+ zrhop(:,:,jpk) = 0._wp
+#if ! defined key_diaar5
+ CALL iom_put( 'rhop', zrhop )
+#else
+ ! If key_diaar5 set then there is already an iom_put call to output rhop.
+ ! Really should be a standard diagnostics option?
+#endif
+ ENDIF
+
+ IF( iom_use("ut") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = un(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "ut", z3d ) ! product of temperature and zonal velocity at U points
+ ENDIF
+
+ IF( iom_use("vt") .OR. iom_use("sopht_vt") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = vn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "vt", z3d ) ! product of temperature and meridional velocity at V points
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = z3d(ji,jj,jk) * fse3v(ji,jj,jk) * e1v(ji,jj)
+ END DO
+ END DO
+ END DO
+ IF(ln_diaptr) CALL dia_ptr_ohst_components( jp_tem, 'vts', z3d)
+ ENDIF
+
+ IF( iom_use("wt") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,1) = wn(ji,jj,1) * tsn(ji,jj,1,jp_tem)
+ END DO
+ END DO
+ DO jk = 2, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = wn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk-1,jp_tem) + tsn(ji,jj,jk,jp_tem) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "wt", z3d ) ! product of temperature and vertical velocity at W points
+ ENDIF
+
+ IF( iom_use("us") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = un(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "us", z3d ) ! product of salinity and zonal velocity at U points
+ ENDIF
+
+ IF( iom_use("vs") .OR. iom_use("sopst_vs") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = vn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "vs", z3d ) ! product of salinity and meridional velocity at V points
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = z3d(ji,jj,jk) * fse3v(ji,jj,jk) * e1v(ji,jj)
+ END DO
+ END DO
+ END DO
+ IF(ln_diaptr) CALL dia_ptr_ohst_components( jp_sal, 'vts', z3d)
+ ENDIF
+
+ IF( iom_use("ws") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,1) = wn(ji,jj,1) * tsn(ji,jj,1,jp_sal)
+ END DO
+ END DO
+ DO jk = 2, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = wn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk-1,jp_sal) + tsn(ji,jj,jk,jp_sal) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "ws", z3d ) ! product of salinity and vertical velocity at W points
+ ENDIF
+
+ IF( iom_use("urhop") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = un(ji,jj,jk) * 0.5 * ( zrhop(ji,jj,jk) + zrhop(ji+1,jj,jk) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "urhop", z3d ) ! product of density and zonal velocity at U points
+ ENDIF
+
+ IF( iom_use("vrhop") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = vn(ji,jj,jk) * 0.5 * ( zrhop(ji,jj,jk) + zrhop(ji,jj+1,jk) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "vrhop", z3d ) ! product of density and meridional velocity at V points
+ ENDIF
+
+ IF( iom_use("wrhop") ) THEN
+ z3d(:,:,:) = 0.e0
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,1) = wn(ji,jj,1) * zrhop(ji,jj,1)
+ END DO
+ END DO
+ DO jk = 2, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = wn(ji,jj,jk) * 0.5 * ( zrhop(ji,jj,jk-1) + zrhop(ji,jj,jk) )
+ END DO
+ END DO
+ END DO
+ CALL iom_put( "wrhop", z3d ) ! product of density and vertical velocity at W points
+ ENDIF
+
+ !
+ CALL wrk_dealloc( jpi , jpj , z2d )
+ CALL wrk_dealloc( jpi , jpj, jpk , z3d )
+ CALL wrk_dealloc( jpi , jpj, jpk , zrhop )
+ !
+ IF( nn_timing == 1 ) CALL timing_stop('dia_prod')
+ !
+ END SUBROUTINE dia_prod
+#else
+ !!----------------------------------------------------------------------
+ !! Default option : NO diaprod
+ !!----------------------------------------------------------------------
+ LOGICAL, PUBLIC, PARAMETER :: lk_diaprod = .FALSE. ! coupled flag
+CONTAINS
+ SUBROUTINE dia_prod( kt ) ! Empty routine
+ INTEGER :: kt
+ WRITE(*,*) 'dia_prod: You should not have seen this print! error?', kt
+ END SUBROUTINE dia_prod
+#endif
+ !!======================================================================
+END MODULE diaprod
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90 (revision 7494)
@@ -9,4 +9,5 @@
!! 3.3 ! 2010-10 (G. Madec) dynamical allocation
!! 3.6 ! 2014-12 (C. Ethe) use of IOM
+ !! 3.6 ! 2016-06 (T. Graham) Addition of diagnostics for CMIP6
!!----------------------------------------------------------------------
@@ -21,4 +22,5 @@
USE dom_oce ! ocean space and time domain
USE phycst ! physical constants
+ USE ldftra_oce
!
USE iom ! IOM library
@@ -38,13 +40,15 @@
PUBLIC dia_ptr_init ! call in step module
PUBLIC dia_ptr ! call in step module
+ PUBLIC dia_ptr_ohst_components ! called from tra_ldf/tra_adv routines
! !!** namelist namptr **
- REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:) :: htr_adv, htr_ldf !: Heat TRansports (adv, diff, overturn.)
- REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:) :: str_adv, str_ldf !: Salt TRansports (adv, diff, overturn.)
-
+ REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: htr_adv, htr_ldf, htr_eiv, htr_vt !: Heat TRansports (adv, diff, Bolus.)
+ REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: str_adv, str_ldf, str_eiv, str_vs !: Salt TRansports (adv, diff, Bolus.)
+ REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: htr_ove, str_ove !: heat Salt TRansports ( overturn.)
+ REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: htr_btr, str_btr !: heat Salt TRansports ( barotropic )
LOGICAL, PUBLIC :: ln_diaptr ! Poleward transport flag (T) or not (F)
LOGICAL, PUBLIC :: ln_subbas ! Atlantic/Pacific/Indian basins calculation
- INTEGER :: nptr ! = 1 (l_subbas=F) or = 5 (glo, atl, pac, ind, ipc) (l_subbas=T)
+ INTEGER, PUBLIC :: nptr ! = 1 (l_subbas=F) or = 5 (glo, atl, pac, ind, ipc) (l_subbas=T)
REAL(wp) :: rc_sv = 1.e-6_wp ! conversion from m3/s to Sverdrup
@@ -65,5 +69,5 @@
!!----------------------------------------------------------------------
!! NEMO/OPA 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -77,10 +81,20 @@
!
INTEGER :: ji, jj, jk, jn ! dummy loop indices
- REAL(wp) :: zv, zsfc ! local scalar
+ REAL(wp) :: zsfc,zvfc ! local scalar
REAL(wp), DIMENSION(jpi,jpj) :: z2d ! 2D workspace
REAL(wp), DIMENSION(jpi,jpj,jpk) :: z3d ! 3D workspace
REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask ! 3D workspace
REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zts ! 3D workspace
- CHARACTER( len = 10 ) :: cl1
+ REAL(wp), DIMENSION(jpj) :: vsum ! 1D workspace
+ REAL(wp), DIMENSION(jpj,jpts) :: tssum ! 1D workspace
+
+ !
+ !overturning calculation
+ REAL(wp), DIMENSION(jpj,jpk,nptr) :: sjk , r1_sjk ! i-mean i-k-surface and its inverse
+ REAL(wp), DIMENSION(jpj,jpk,nptr) :: v_msf, sn_jk , tn_jk ! i-mean T and S, j-Stream-Function
+ REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvn ! 3D workspace
+
+
+ CHARACTER( len = 12 ) :: cl1
!!----------------------------------------------------------------------
!
@@ -111,4 +125,122 @@
END DO
ENDIF
+ IF( iom_use("sopstove") .OR. iom_use("sophtove") .OR. iom_use("sopstbtr") .OR. iom_use("sophtbtr") ) THEN
+ ! define fields multiplied by scalar
+ zmask(:,:,:) = 0._wp
+ zts(:,:,:,:) = 0._wp
+ zvn(:,:,:) = 0._wp
+ DO jk = 1, jpkm1
+ DO jj = 1, jpjm1
+ DO ji = 1, jpi
+ zvfc = e1v(ji,jj) * fse3v(ji,jj,jk)
+ zmask(ji,jj,jk) = vmask(ji,jj,jk) * zvfc
+ zts(ji,jj,jk,jp_tem) = (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * 0.5 * zvfc !Tracers averaged onto V grid
+ zts(ji,jj,jk,jp_sal) = (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) * 0.5 * zvfc
+ zvn(ji,jj,jk) = vn(ji,jj,jk) * zvfc
+ ENDDO
+ ENDDO
+ ENDDO
+ ENDIF
+ IF( iom_use("sopstove") .OR. iom_use("sophtove") ) THEN
+ sjk(:,:,1) = ptr_sjk( zmask(:,:,:), btmsk(:,:,1) )
+ r1_sjk(:,:,1) = 0._wp
+ WHERE( sjk(:,:,1) /= 0._wp ) r1_sjk(:,:,1) = 1._wp / sjk(:,:,1)
+
+ ! i-mean T and S, j-Stream-Function, global
+ tn_jk(:,:,1) = ptr_sjk( zts(:,:,:,jp_tem) ) * r1_sjk(:,:,1)
+ sn_jk(:,:,1) = ptr_sjk( zts(:,:,:,jp_sal) ) * r1_sjk(:,:,1)
+ v_msf(:,:,1) = ptr_sjk( zvn(:,:,:) )
+
+ htr_ove(:,1) = SUM( v_msf(:,:,1)*tn_jk(:,:,1) ,2 )
+ str_ove(:,1) = SUM( v_msf(:,:,1)*sn_jk(:,:,1) ,2 )
+
+ z2d(1,:) = htr_ove(:,1) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sophtove'
+ CALL iom_put( TRIM(cl1), z2d )
+ z2d(1,:) = str_ove(:,1) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sopstove'
+ CALL iom_put( TRIM(cl1), z2d )
+ IF( ln_subbas ) THEN
+ DO jn = 2, nptr
+ sjk(:,:,jn) = ptr_sjk( zmask(:,:,:), btmsk(:,:,jn) )
+ r1_sjk(:,:,jn) = 0._wp
+ WHERE( sjk(:,:,jn) /= 0._wp ) r1_sjk(:,:,jn) = 1._wp / sjk(:,:,jn)
+
+ ! i-mean T and S, j-Stream-Function, basin
+ tn_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) * r1_sjk(:,:,jn)
+ sn_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_sal), btmsk(:,:,jn) ) * r1_sjk(:,:,jn)
+ v_msf(:,:,jn) = ptr_sjk( zvn(:,:,:), btmsk(:,:,jn) )
+ htr_ove(:,jn) = SUM( v_msf(:,:,jn)*tn_jk(:,:,jn) ,2 )
+ str_ove(:,jn) = SUM( v_msf(:,:,jn)*sn_jk(:,:,jn) ,2 )
+
+ z2d(1,:) = htr_ove(:,jn) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sophtove_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ z2d(1,:) = str_ove(:,jn) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopstove_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ END DO
+ ENDIF
+ ENDIF
+ IF( iom_use("sopstbtr") .OR. iom_use("sophtbtr") ) THEN
+ ! Calculate barotropic heat and salt transport here
+ sjk(:,1,1) = ptr_sj( zmask(:,:,:), btmsk(:,:,1) )
+ r1_sjk(:,1,1) = 0._wp
+ WHERE( sjk(:,1,1) /= 0._wp ) r1_sjk(:,1,1) = 1._wp / sjk(:,1,1)
+
+ vsum = ptr_sj( zvn(:,:,:), btmsk(:,:,1))
+ tssum(:,jp_tem) = ptr_sj( zts(:,:,:,jp_tem), btmsk(:,:,1) )
+ tssum(:,jp_sal) = ptr_sj( zts(:,:,:,jp_sal), btmsk(:,:,1) )
+ htr_btr(:,1) = vsum * tssum(:,jp_tem) * r1_sjk(:,1,1)
+ str_btr(:,1) = vsum * tssum(:,jp_sal) * r1_sjk(:,1,1)
+ z2d(1,:) = htr_btr(:,1) * rc_pwatt ! (conversion in PW)
+ DO ji = 2, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sophtbtr'
+ CALL iom_put( TRIM(cl1), z2d )
+ z2d(1,:) = str_btr(:,1) * rc_ggram ! (conversion in Gg)
+ DO ji = 2, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sopstbtr'
+ CALL iom_put( TRIM(cl1), z2d )
+ IF( ln_subbas ) THEN
+ DO jn = 2, nptr
+ sjk(:,1,jn) = ptr_sj( zmask(:,:,:), btmsk(:,:,jn) )
+ r1_sjk(:,1,jn) = 0._wp
+ WHERE( sjk(:,1,jn) /= 0._wp ) r1_sjk(:,1,jn) = 1._wp / sjk(:,1,jn)
+ vsum = ptr_sj( zvn(:,:,:), btmsk(:,:,jn))
+ tssum(:,jp_tem) = ptr_sj( zts(:,:,:,jp_tem), btmsk(:,:,jn) )
+ tssum(:,jp_sal) = ptr_sj( zts(:,:,:,jp_sal), btmsk(:,:,jn) )
+ htr_btr(:,jn) = vsum * tssum(:,jp_tem) * r1_sjk(:,1,jn)
+ str_btr(:,jn) = vsum * tssum(:,jp_sal) * r1_sjk(:,1,jn)
+ z2d(1,:) = htr_btr(:,jn) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sophtbtr_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ z2d(1,:) = str_btr(:,jn) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopstbtr_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ ENDDO
+ ENDIF !ln_subbas
+ ENDIF !iom_use("sopstbtr....)
!
ELSE
@@ -150,5 +282,5 @@
! ! Advective and diffusive heat and salt transport
IF( iom_use("sophtadv") .OR. iom_use("sopstadv") ) THEN
- z2d(1,:) = htr_adv(:) * rc_pwatt ! (conversion in PW)
+ z2d(1,:) = htr_adv(:,1) * rc_pwatt ! (conversion in PW)
DO ji = 1, jpi
z2d(ji,:) = z2d(1,:)
@@ -156,5 +288,5 @@
cl1 = 'sophtadv'
CALL iom_put( TRIM(cl1), z2d )
- z2d(1,:) = str_adv(:) * rc_ggram ! (conversion in Gg)
+ z2d(1,:) = str_adv(:,1) * rc_ggram ! (conversion in Gg)
DO ji = 1, jpi
z2d(ji,:) = z2d(1,:)
@@ -162,8 +294,24 @@
cl1 = 'sopstadv'
CALL iom_put( TRIM(cl1), z2d )
+ IF( ln_subbas ) THEN
+ DO jn=2,nptr
+ z2d(1,:) = htr_adv(:,jn) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sophtadv_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ z2d(1,:) = str_adv(:,jn) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopstadv_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ ENDDO
+ ENDIF
ENDIF
!
IF( iom_use("sophtldf") .OR. iom_use("sopstldf") ) THEN
- z2d(1,:) = htr_ldf(:) * rc_pwatt ! (conversion in PW)
+ z2d(1,:) = htr_ldf(:,1) * rc_pwatt ! (conversion in PW)
DO ji = 1, jpi
z2d(ji,:) = z2d(1,:)
@@ -171,5 +319,5 @@
cl1 = 'sophtldf'
CALL iom_put( TRIM(cl1), z2d )
- z2d(1,:) = str_ldf(:) * rc_ggram ! (conversion in Gg)
+ z2d(1,:) = str_ldf(:,1) * rc_ggram ! (conversion in Gg)
DO ji = 1, jpi
z2d(ji,:) = z2d(1,:)
@@ -177,5 +325,87 @@
cl1 = 'sopstldf'
CALL iom_put( TRIM(cl1), z2d )
- ENDIF
+ IF( ln_subbas ) THEN
+ DO jn=2,nptr
+ z2d(1,:) = htr_ldf(:,jn) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sophtldf_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ z2d(1,:) = str_ldf(:,jn) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopstldf_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ ENDDO
+ ENDIF
+ ENDIF
+
+ IF( iom_use("sopht_vt") .OR. iom_use("sopst_vs") ) THEN
+ z2d(1,:) = htr_vt(:,1) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sopht_vt'
+ CALL iom_put( TRIM(cl1), z2d )
+ z2d(1,:) = str_vs(:,1) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sopst_vs'
+ CALL iom_put( TRIM(cl1), z2d )
+ IF( ln_subbas ) THEN
+ DO jn=2,nptr
+ z2d(1,:) = htr_vt(:,jn) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopht_vt_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ z2d(1,:) = str_vs(:,jn) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopst_vs_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ ENDDO
+ ENDIF
+ ENDIF
+
+#ifdef key_diaeiv
+ IF(lk_traldf_eiv) THEN
+ IF( iom_use("sophteiv") .OR. iom_use("sopsteiv") ) THEN
+ z2d(1,:) = htr_eiv(:,1) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sophteiv'
+ CALL iom_put( TRIM(cl1), z2d )
+ z2d(1,:) = str_eiv(:,1) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = 'sopsteiv'
+ CALL iom_put( TRIM(cl1), z2d )
+ IF( ln_subbas ) THEN
+ DO jn=2,nptr
+ z2d(1,:) = htr_eiv(:,jn) * rc_pwatt ! (conversion in PW)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sophteiv_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ z2d(1,:) = str_eiv(:,jn) * rc_ggram ! (conversion in Gg)
+ DO ji = 1, jpi
+ z2d(ji,:) = z2d(1,:)
+ ENDDO
+ cl1 = TRIM('sopsteiv_'//clsubb(jn))
+ CALL iom_put( cl1, z2d )
+ ENDDO
+ ENDIF
+ ENDIF
+ ENDIF
+#endif
!
ENDIF
@@ -256,6 +486,10 @@
! Initialise arrays to zero because diatpr is called before they are first calculated
! Note that this means diagnostics will not be exactly correct when model run is restarted.
- htr_adv(:) = 0._wp ; str_adv(:) = 0._wp
- htr_ldf(:) = 0._wp ; str_ldf(:) = 0._wp
+ htr_adv(:,:) = 0._wp ; str_adv(:,:) = 0._wp
+ htr_ldf(:,:) = 0._wp ; str_ldf(:,:) = 0._wp
+ htr_eiv(:,:) = 0._wp ; str_eiv(:,:) = 0._wp
+ htr_vt(:,:) = 0._wp ; str_vs(:,:) = 0._wp
+ htr_ove(:,:) = 0._wp ; str_ove(:,:) = 0._wp
+ htr_btr(:,:) = 0._wp ; str_btr(:,:) = 0._wp
!
ENDIF
@@ -263,4 +497,87 @@
END SUBROUTINE dia_ptr_init
+ SUBROUTINE dia_ptr_ohst_components( ktra, cptr, pva )
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE dia_ptr_ohst_components ***
+ !!----------------------------------------------------------------------
+ !! Wrapper for heat and salt transport calculations to calculate them for each basin
+ !! Called from all advection and/or diffusion routines
+ !!----------------------------------------------------------------------
+ INTEGER , INTENT(in ) :: ktra ! tracer index
+ CHARACTER(len=3) , INTENT(in) :: cptr ! transport type 'adv'/'ldf'/'eiv'
+ REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pva ! 3D input array of advection/diffusion
+ INTEGER :: jn !
+
+ IF( cptr == 'adv' ) THEN
+ IF( ktra == jp_tem ) htr_adv(:,1) = ptr_sj( pva(:,:,:) )
+ IF( ktra == jp_sal ) str_adv(:,1) = ptr_sj( pva(:,:,:) )
+ ENDIF
+ IF( cptr == 'ldf' ) THEN
+ IF( ktra == jp_tem ) htr_ldf(:,1) = ptr_sj( pva(:,:,:) )
+ IF( ktra == jp_sal ) str_ldf(:,1) = ptr_sj( pva(:,:,:) )
+ ENDIF
+ IF( cptr == 'eiv' ) THEN
+ IF( ktra == jp_tem ) htr_eiv(:,1) = ptr_sj( pva(:,:,:) )
+ IF( ktra == jp_sal ) str_eiv(:,1) = ptr_sj( pva(:,:,:) )
+ ENDIF
+ IF( cptr == 'vts' ) THEN
+ IF( ktra == jp_tem ) htr_vt(:,1) = ptr_sj( pva(:,:,:) )
+ IF( ktra == jp_sal ) str_vs(:,1) = ptr_sj( pva(:,:,:) )
+ ENDIF
+ !
+ IF( ln_subbas ) THEN
+ !
+ IF( cptr == 'adv' ) THEN
+ IF( ktra == jp_tem ) THEN
+ DO jn = 2, nptr
+ htr_adv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ IF( ktra == jp_sal ) THEN
+ DO jn = 2, nptr
+ str_adv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ ENDIF
+ IF( cptr == 'ldf' ) THEN
+ IF( ktra == jp_tem ) THEN
+ DO jn = 2, nptr
+ htr_ldf(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ IF( ktra == jp_sal ) THEN
+ DO jn = 2, nptr
+ str_ldf(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ ENDIF
+ IF( cptr == 'eiv' ) THEN
+ IF( ktra == jp_tem ) THEN
+ DO jn = 2, nptr
+ htr_eiv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ IF( ktra == jp_sal ) THEN
+ DO jn = 2, nptr
+ str_eiv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ ENDIF
+ IF( cptr == 'vts' ) THEN
+ IF( ktra == jp_tem ) THEN
+ DO jn = 2, nptr
+ htr_vt(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ IF( ktra == jp_sal ) THEN
+ DO jn = 2, nptr
+ str_vs(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) )
+ END DO
+ ENDIF
+ ENDIF
+ !
+ ENDIF
+ END SUBROUTINE dia_ptr_ohst_components
+
FUNCTION dia_ptr_alloc()
@@ -273,7 +590,11 @@
ierr(:) = 0
!
- ALLOCATE( btmsk(jpi,jpj,nptr) , &
- & htr_adv(jpj) , str_adv(jpj) , &
- & htr_ldf(jpj) , str_ldf(jpj) , STAT=ierr(1) )
+ ALLOCATE( btmsk(jpi,jpj,nptr) , &
+ & htr_adv(jpj,nptr) , str_adv(jpj,nptr) , &
+ & htr_eiv(jpj,nptr) , str_eiv(jpj,nptr) , &
+ & htr_vt(jpj,nptr) , str_vs(jpj,nptr) , &
+ & htr_ove(jpj,nptr) , str_ove(jpj,nptr) , &
+ & htr_btr(jpj,nptr) , str_btr(jpj,nptr) , &
+ & htr_ldf(jpj,nptr) , str_ldf(jpj,nptr) , STAT=ierr(1) )
!
ALLOCATE( p_fval1d(jpj), p_fval2d(jpj,jpk), Stat=ierr(2))
@@ -402,5 +723,5 @@
#endif
!!--------------------------------------------------------------------
- !
+ !
p_fval => p_fval2d
@@ -434,4 +755,5 @@
#endif
!
+
END FUNCTION ptr_sjk
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90 (revision 7494)
@@ -156,4 +156,6 @@
IF( iom_use("e3tdef") ) &
CALL iom_put( "e3tdef" , ( ( fse3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 )
+ CALL iom_put("tpt_dep", fsdept_n(:,:,:) )
+
@@ -318,10 +320,13 @@
CALL iom_put( "hdiv", hdivn ) ! Horizontal divergence
!
- IF( iom_use("u_masstr") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN
+ IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN
z3d(:,:,jpk) = 0.e0
+ z2d(:,:) = 0.e0
DO jk = 1, jpkm1
z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk)
+ z2d(:,:) = z2d(:,:) + z3d(:,:,jk)
END DO
CALL iom_put( "u_masstr", z3d ) ! mass transport in i-direction
+ CALL iom_put( "u_masstr_vint", z2d ) ! mass transport in i-direction vertical sum
ENDIF
@@ -386,4 +391,34 @@
CALL iom_put( "v_salttr", 0.5 * z2d ) ! heat transport in j-direction
ENDIF
+
+ ! Vertical integral of temperature
+ IF( iom_use("tosmint") ) THEN
+ z2d(:,:)=0._wp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z2d(ji,jj) = z2d(ji,jj) + rau0 * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_tem)
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( z2d, 'T', -1. )
+ CALL iom_put( "tosmint", z2d )
+ ENDIF
+
+ ! Vertical integral of salinity
+ IF( iom_use("somint") ) THEN
+ z2d(:,:)=0._wp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z2d(ji,jj) = z2d(ji,jj) + rau0 * fse3t(ji,jj,jk) * tsn(ji,jj,jk,jp_sal)
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( z2d, 'T', -1. )
+ CALL iom_put( "somint", z2d )
+ ENDIF
+
+ CALL iom_put( "bn2", rn2 ) !Brunt-Vaisala buoyancy frequency (N^2)
!
CALL wrk_dealloc( jpi , jpj , z2d )
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90 (revision 7494)
@@ -166,4 +166,7 @@
!
ENDIF
+ IF( l_trddyn ) THEN ! Put here so code doesn't crash when doing KE trend but needs to be done properly
+ CALL wrk_alloc( jpi, jpj, jpk, ztrdu, ztrdv )
+ ENDIF
!
ELSE ! fixed volume (add the surface pressure gradient + unweighted time stepping)
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 (revision 7494)
@@ -228,4 +228,6 @@
! automatic definitions of some of the xml attributs
CALL set_xmlatt
+
+ CALL set_1point
! end file definition
@@ -1567,6 +1569,21 @@
zz=REAL(narea,wp)
CALL iom_set_domain_attr('scalarpoint', lonvalue=zz, latvalue=zz)
-
+
END SUBROUTINE set_scalar
+
+ SUBROUTINE set_1point
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE set_1point ***
+ !!
+ !! ** Purpose : define zoom grid for scalar fields
+ !!
+ !!----------------------------------------------------------------------
+ REAL(wp), DIMENSION(1) :: zz = 1.
+ INTEGER :: ix, iy
+ !!----------------------------------------------------------------------
+ CALL dom_ngb( 180., 90., ix, iy, 'T' ) ! Nearest point to north pole should be ocean
+ CALL iom_set_domain_attr('1point', zoom_ibegin=ix, zoom_jbegin=iy)
+
+ END SUBROUTINE set_1point
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90 (revision 7494)
@@ -1422,11 +1422,17 @@
IF( iom_use('rain') ) &
& CALL iom_put( 'rain' , frcv(jpr_rain)%z3(:,:,1) ) ! liquid precipitation
+ IF( iom_use('rain_ao_cea') ) &
+ & CALL iom_put( 'rain_ao_cea' , frcv(jpr_rain)%z3(:,:,1)* p_frld(:,:) * tmask(:,:,1) ) ! liquid precipitation
IF( iom_use('hflx_rain_cea') ) &
- & CALL iom_put( 'hflx_rain_cea', frcv(jpr_rain)%z3(:,:,1) * zcptn(:,:) ) ! heat flux from liq. precip.
+ CALL iom_put( 'hflx_rain_cea', frcv(jpr_rain)%z3(:,:,1) * zcptn(:,:) * tmask(:,:,1)) ! heat flux from liq. precip.
+ IF( iom_use('hflx_prec_cea') ) &
+ CALL iom_put( 'hflx_prec_cea', ztprecip * zcptn(:,:) * tmask(:,:,1) * p_frld(:,:) ) ! heat content flux from all precip (cell avg)
+ IF( iom_use('evap_ao_cea') .OR. iom_use('hflx_evap_cea') ) &
+ ztmp(:,:) = frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:)
IF( iom_use('evap_ao_cea' ) ) &
- & CALL iom_put( 'evap_ao_cea' , frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) ) ! ice-free oce evap (cell average)
+ CALL iom_put( 'evap_ao_cea' , ztmp * tmask(:,:,1) ) ! ice-free oce evap (cell average)
IF( iom_use('hflx_evap_cea') ) &
- & CALL iom_put( 'hflx_evap_cea', ( frcv(jpr_tevp)%z3(:,:,1) - frcv(jpr_ievp)%z3(:,:,1) * zicefr(:,:) ) * zcptn(:,:) ) ! heat flux from from evap (cell average)
- CASE( 'oce and ice' ) ! received fields: jpr_sbpr, jpr_semp, jpr_oemp, jpr_ievp
+ CALL iom_put( 'hflx_evap_cea', ztmp(:,:) * zcptn(:,:) * tmask(:,:,1) ) ! heat flux from from evap (cell average)
+ CASE( 'oce and ice' ) ! received fields: jpr_sbpr, jpr_semp, jpr_oemp, jpr_ievp
zemp_tot(:,:) = p_frld(:,:) * frcv(jpr_oemp)%z3(:,:,1) + zicefr(:,:) * frcv(jpr_sbpr)%z3(:,:,1)
zemp_ice(:,:) = frcv(jpr_semp)%z3(:,:,1) * zicefr(:,:)
@@ -1491,4 +1497,6 @@
! runoffs and calving (put in emp_tot)
IF( srcv(jpr_rnf)%laction ) rnf(:,:) = frcv(jpr_rnf)%z3(:,:,1)
+ IF( iom_use('hflx_rnf_cea') ) &
+ CALL iom_put( 'hflx_rnf_cea' , rnf(:,:) * zcptn(:,:) )
IF( srcv(jpr_cal)%laction ) THEN
zemp_tot(:,:) = zemp_tot(:,:) - frcv(jpr_cal)%z3(:,:,1)
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90 (revision 7494)
@@ -91,4 +91,7 @@
CHARACTER (LEN=32) :: cvarLeff ! variable name for efficient Length scale
INTEGER :: ios ! Local integer output status for namelist read
+
+ REAL(wp), DIMENSION(:,:,:), POINTER :: zfwfisf3d, zqhcisf3d, zqlatisf3d
+ REAL(wp), DIMENSION(:,: ), POINTER :: zqhcisf2d
!
!!---------------------------------------------------------------------
@@ -273,6 +276,6 @@
! output
- IF( iom_use('qisf' ) ) CALL iom_put('qisf' , qisf)
- IF( iom_use('fwfisf') ) CALL iom_put('fwfisf', fwfisf * stbl(:,:) / soce )
+ IF( iom_use('qlatisf' ) ) CALL iom_put('qlatisf', qisf)
+ IF( iom_use('fwfisf' ) ) CALL iom_put('fwfisf' , fwfisf * stbl(:,:) / soce )
! if apply only on the trend and not as a volume flux (rdivisf = 0), fwfisf have to be set to 0 now
@@ -284,4 +287,39 @@
CALL lbc_lnk(fwfisf(:,:) ,'T',1.)
CALL lbc_lnk(qisf(:,:) ,'T',1.)
+
+!=============================================================================================================================================
+ IF ( iom_use('fwfisf3d') .OR. iom_use('qlatisf3d') .OR. iom_use('qhcisf3d') .OR. iom_use('qhcisf')) THEN
+ CALL wrk_alloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d )
+ CALL wrk_alloc( jpi,jpj, zqhcisf2d )
+
+ zfwfisf3d(:,:,:) = 0.0_wp ! 3d ice shelf melting (kg/m2/s)
+ zqhcisf3d(:,:,:) = 0.0_wp ! 3d heat content flux (W/m2)
+ zqlatisf3d(:,:,:)= 0.0_wp ! 3d ice shelf melting latent heat flux (W/m2)
+ zqhcisf2d(:,:) = fwfisf(:,:) * zt_frz * rcp ! 2d heat content flux (W/m2)
+
+ DO jj = 1,jpj
+ DO ji = 1,jpi
+ ikt = misfkt(ji,jj)
+ ikb = misfkb(ji,jj)
+ DO jk = ikt, ikb - 1
+ zfwfisf3d (ji,jj,jk) = zfwfisf3d (ji,jj,jk) + fwfisf (ji,jj) * r1_hisf_tbl(ji,jj) * fse3t(ji,jj,jk)
+ zqhcisf3d (ji,jj,jk) = zqhcisf3d (ji,jj,jk) + zqhcisf2d(ji,jj) * r1_hisf_tbl(ji,jj) * fse3t(ji,jj,jk)
+ zqlatisf3d(ji,jj,jk) = zqlatisf3d(ji,jj,jk) + qisf (ji,jj) * r1_hisf_tbl(ji,jj) * fse3t(ji,jj,jk)
+ END DO
+ zfwfisf3d (ji,jj,jk) = zfwfisf3d (ji,jj,jk) + fwfisf (ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * fse3t(ji,jj,jk)
+ zqhcisf3d (ji,jj,jk) = zqhcisf3d (ji,jj,jk) + zqhcisf2d(ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * fse3t(ji,jj,jk)
+ zqlatisf3d(ji,jj,jk) = zqlatisf3d(ji,jj,jk) + qisf (ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * fse3t(ji,jj,jk)
+ END DO
+ END DO
+
+ CALL iom_put('fwfisf3d' , zfwfisf3d (:,:,:))
+ CALL iom_put('qlatisf3d', zqlatisf3d(:,:,:))
+ CALL iom_put('qhcisf3d' , zqhcisf3d (:,:,:))
+ CALL iom_put('qhcisf' , zqhcisf2d (:,: ))
+
+ CALL wrk_dealloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d )
+ CALL wrk_dealloc( jpi,jpj, zqhcisf2d )
+ END IF
+!=============================================================================================================================================
IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 !
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90 (revision 7494)
@@ -26,4 +26,6 @@
USE cla ! cross land advection (cla_traadv routine)
USE ldftra_oce ! lateral diffusion coefficient on tracers
+ USE trd_oce ! trends: ocean variables
+ USE trdtra ! trends manager: tracers
!
USE in_out_manager ! I/O manager
@@ -79,4 +81,5 @@
INTEGER :: jk ! dummy loop index
REAL(wp), POINTER, DIMENSION(:,:,:) :: zun, zvn, zwn
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdt, ztrds ! 3D workspace
!!----------------------------------------------------------------------
!
@@ -120,5 +123,10 @@
IF( ln_diaptr ) CALL dia_ptr( zvn ) ! diagnose the effective MSF
!
-
+ IF( l_trdtra ) THEN !* Save ta and sa trends
+ CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds )
+ ztrdt(:,:,:) = tsa(:,:,:,jp_tem)
+ ztrds(:,:,:) = tsa(:,:,:,jp_sal)
+ ENDIF
+ !
SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==!
CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, nit000, 'TRA', zun, zvn, zwn, tsb, tsn, tsa, jpts ) ! 2nd order centered
@@ -151,4 +159,13 @@
END SELECT
!
+ IF( l_trdtra ) THEN ! save the advective trends for further diagnostics
+ DO jk = 1, jpkm1
+ ztrdt(:,:,jk) = tsa(:,:,jk,jp_tem) - ztrdt(:,:,jk)
+ ztrds(:,:,jk) = tsa(:,:,jk,jp_sal) - ztrds(:,:,jk)
+ END DO
+ CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt )
+ CALL trd_tra( kt, 'TRA', jp_sal, jptra_totad, ztrds )
+ CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds )
+ ENDIF
! ! print mean trends (used for debugging)
IF(ln_ctl) CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv - Ta: ', mask1=tmask, &
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90 (revision 7494)
@@ -279,8 +279,5 @@
END IF
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'adv', zwy(:,:,:) )
!
END DO
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_eiv.F90 (revision 7494)
@@ -28,4 +28,7 @@
USE wrk_nemo ! Memory Allocation
USE timing ! Timing
+ USE diaptr ! Heat/Salt transport diagnostics
+ USE trddyn
+ USE trd_oce
IMPLICIT NONE
@@ -78,4 +81,5 @@
# endif
REAL(wp), POINTER, DIMENSION(:,:) :: zu_eiv, zv_eiv, zw_eiv, z2d
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d, z3d_T
!!----------------------------------------------------------------------
!
@@ -84,4 +88,5 @@
# if defined key_diaeiv
CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d )
+ CALL wrk_alloc( jpi, jpj, jpk, z3d, z3d_T )
# else
CALL wrk_alloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv )
@@ -160,38 +165,184 @@
CALL iom_put( "voce_eiv", v_eiv ) ! j-eiv current
CALL iom_put( "woce_eiv", w_eiv ) ! vert. eiv current
- IF( iom_use('ueiv_heattr') ) THEN
- zztmp = 0.5 * rau0 * rcp
+ IF( iom_use('weiv_masstr') ) THEN ! vertical mass transport & its square value
+ z2d(:,:) = rau0 * e12t(:,:)
+ DO jk = 1, jpk
+ z3d(:,:,jk) = w_eiv(:,:,jk) * z2d(:,:)
+ END DO
+ CALL iom_put( "weiv_masstr" , z3d )
+ ENDIF
+ IF( iom_use("ueiv_masstr") .OR. iom_use("ueiv_heattr") .OR. iom_use('ueiv_heattr3d') &
+ .OR. iom_use("ueiv_salttr") .OR. iom_use('ueiv_salttr3d') ) THEN
+ z3d(:,:,jpk) = 0.e0
+ z2d(:,:) = 0.e0
+ DO jk = 1, jpkm1
+ z3d(:,:,jk) = rau0 * u_eiv(:,:,jk) * e2u(:,:) * fse3u(:,:,jk) * umask(:,:,jk)
+ z2d(:,:) = z2d(:,:) + z3d(:,:,jk)
+ END DO
+ CALL iom_put( "ueiv_masstr", z3d ) ! mass transport in i-direction
+ ENDIF
+
+ IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN
+ zztmp = 0.5 * rcp
z2d(:,:) = 0.e0
- DO jk = 1, jpkm1
- DO jj = 2, jpjm1
- DO ji = fs_2, fs_jpim1 ! vector opt.
- z2d(ji,jj) = z2d(ji,jj) + u_eiv(ji,jj,jk) &
- & * (tsn(ji,jj,jk,jp_tem)+tsn(ji+1,jj,jk,jp_tem)) * e2u(ji,jj) * fse3u(ji,jj,jk)
- END DO
- END DO
- END DO
- CALL lbc_lnk( z2d, 'U', -1. )
- CALL iom_put( "ueiv_heattr", zztmp * z2d ) ! heat transport in i-direction
+ z3d_T(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) )
+ z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ IF (iom_use('ueiv_heattr') ) THEN
+ CALL lbc_lnk( z2d, 'U', -1. )
+ CALL iom_put( "ueiv_heattr", zztmp * z2d ) ! 2D heat transport in i-direction
+ ENDIF
+ IF (iom_use('ueiv_heattr3d') ) THEN
+ CALL lbc_lnk( z3d_T, 'U', -1. )
+ CALL iom_put( "ueiv_heattr3d", zztmp * z3d_T ) ! 3D heat transport in i-direction
+ ENDIF
+ ENDIF
+
+ IF( iom_use('ueiv_salttr') .OR. iom_use('ueiv_salttr3d') ) THEN
+ zztmp = 0.5 * 0.001
+ z2d(:,:) = 0.e0
+ z3d_T(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) )
+ z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ IF (iom_use('ueiv_salttr') ) THEN
+ CALL lbc_lnk( z2d, 'U', -1. )
+ CALL iom_put( "ueiv_salttr", zztmp * z2d ) ! 2D salt transport in i-direction
+ ENDIF
+ IF (iom_use('ueiv_salttr3d') ) THEN
+ CALL lbc_lnk( z3d_T, 'U', -1. )
+ CALL iom_put( "ueiv_salttr3d", zztmp * z3d_T ) ! 3D salt transport in i-direction
+ ENDIF
+ ENDIF
+
+ IF( iom_use("veiv_masstr") .OR. iom_use("veiv_heattr") .OR. iom_use('veiv_heattr3d') &
+ .OR. iom_use("veiv_salttr") .OR. iom_use('veiv_salttr3d') ) THEN
+ z3d(:,:,jpk) = 0.e0
+ DO jk = 1, jpkm1
+ z3d(:,:,jk) = rau0 * v_eiv(:,:,jk) * e1v(:,:) * fse3v(:,:,jk) * vmask(:,:,jk)
+ END DO
+ CALL iom_put( "veiv_masstr", z3d ) ! mass transport in j-direction
ENDIF
- IF( iom_use('veiv_heattr') ) THEN
- zztmp = 0.5 * rau0 * rcp
+ IF( iom_use('veiv_heattr') .OR. iom_use('veiv_heattr3d') ) THEN
+ zztmp = 0.5 * rcp
z2d(:,:) = 0.e0
- DO jk = 1, jpkm1
- DO jj = 2, jpjm1
- DO ji = fs_2, fs_jpim1 ! vector opt.
- z2d(ji,jj) = z2d(ji,jj) + v_eiv(ji,jj,jk) &
- & * (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * e1v(ji,jj) * fse3v(ji,jj,jk)
- END DO
- END DO
- END DO
- CALL lbc_lnk( z2d, 'V', -1. )
- CALL iom_put( "veiv_heattr", zztmp * z2d ) ! heat transport in i-direction
- ENDIF
+ z3d_T(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) )
+ z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ IF (iom_use('veiv_heattr') ) THEN
+ CALL lbc_lnk( z2d, 'V', -1. )
+ CALL iom_put( "veiv_heattr", zztmp * z2d ) ! 2D heat transport in j-direction
+ ENDIF
+ IF (iom_use('veiv_heattr3d') ) THEN
+ CALL lbc_lnk( z3d_T, 'V', -1. )
+ CALL iom_put( "veiv_heattr3d", zztmp * z3d_T ) ! 3D heat transport in j-direction
+ ENDIF
+ ENDIF
+
+ IF( iom_use('veiv_salttr') .OR. iom_use('veiv_salttr3d') ) THEN
+ zztmp = 0.5 * 0.001
+ z2d(:,:) = 0.e0
+ z3d_T(:,:,:) = 0.e0
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) )
+ z2d(ji,jj) = z2d(ji,jj) + z3d_T(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ IF (iom_use('veiv_salttr') ) THEN
+ CALL lbc_lnk( z2d, 'V', -1. )
+ CALL iom_put( "veiv_salttr", zztmp * z2d ) ! 2D salt transport in i-direction
+ ENDIF
+ IF (iom_use('veiv_salttr3d') ) THEN
+ CALL lbc_lnk( z3d_T, 'V', -1. )
+ CALL iom_put( "veiv_salttr3d", zztmp * z3d_T ) ! 3D salt transport in i-direction
+ ENDIF
+ ENDIF
+
+ IF( iom_use('weiv_masstr') .OR. iom_use('weiv_heattr3d') .OR. iom_use('weiv_salttr3d')) THEN ! vertical mass transport & its square value
+ z2d(:,:) = rau0 * e12t(:,:)
+ DO jk = 1, jpk
+ z3d(:,:,jk) = w_eiv(:,:,jk) * z2d(:,:)
+ END DO
+ CALL iom_put( "weiv_masstr" , z3d ) ! mass transport in k-direction
+ ENDIF
+
+ IF( iom_use('weiv_heattr3d') ) THEN
+ zztmp = 0.5 * rcp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj,jk+1,jp_tem) )
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( z3d_T, 'T', 1. )
+ CALL iom_put( "weiv_heattr3d", zztmp * z3d_T ) ! 3D heat transport in k-direction
+ ENDIF
+
+ IF( iom_use('weiv_salttr3d') ) THEN
+ zztmp = 0.5 * 0.001
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d_T(ji,jj,jk) = z3d(ji,jj,jk) * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj,jk+1,jp_sal) )
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( z3d_T, 'T', 1. )
+ CALL iom_put( "weiv_salttr3d", zztmp * z3d_T ) ! 3D salt transport in k-direction
+ ENDIF
+
END IF
+!
+ IF( ln_diaptr .AND. cdtype == 'TRA' ) THEN
+ z3d(:,:,:) = 0._wp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) &
+ & * e1v(ji,jj) * fse3v(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ CALL dia_ptr_ohst_components( jp_tem, 'eiv', z3d )
+ z3d(:,:,:) = 0._wp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z3d(ji,jj,jk) = v_eiv(ji,jj,jk) * 0.5 * (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) &
+ & * e1v(ji,jj) * fse3v(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ CALL dia_ptr_ohst_components( jp_sal, 'eiv', z3d )
+ ENDIF
+
+ IF( ln_KE_trd ) CALL trd_dyn(u_eiv, v_eiv, jpdyn_eivke, kt )
# endif
- !
+
# if defined key_diaeiv
CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv, z2d )
+ CALL wrk_dealloc( jpi, jpj, jpk, z3d, z3d_T )
# else
CALL wrk_dealloc( jpi, jpj, zu_eiv, zv_eiv, zw_eiv )
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90 (revision 7494)
@@ -45,5 +45,5 @@
!!----------------------------------------------------------------------
!! NEMO/OPA 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -219,8 +219,5 @@
END IF
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'adv', zwy(:,:,:) )
! II. Vertical advective fluxes
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl2.F90 (revision 7494)
@@ -37,5 +37,5 @@
!!----------------------------------------------------------------------
!! NEMO/OPA 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -200,8 +200,5 @@
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'adv', zwy(:,:,:) )
! II. Vertical advective fluxes
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90 (revision 7494)
@@ -355,8 +355,5 @@
IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) )
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'adv', zwy(:,:,:) )
!
END DO
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90 (revision 7494)
@@ -34,4 +34,5 @@
USE timing ! Timing
USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)
+ USE iom
IMPLICIT NONE
@@ -42,4 +43,5 @@
LOGICAL :: l_trd ! flag to compute trends
+ LOGICAL :: l_trans ! flag to output vertically integrated transports
!! * Substitutions
@@ -85,5 +87,6 @@
REAL(wp) :: zfm_ui, zfm_vj, zfm_wk ! - -
REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwz
- REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdx, ztrdy, ztrdz
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdx, ztrdy, ztrdz, zptry
+ REAL(wp), POINTER, DIMENSION(:,:) :: z2d
!!----------------------------------------------------------------------
!
@@ -98,10 +101,18 @@
!
l_trd = .FALSE.
+ l_trans = .FALSE.
IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE.
+ IF( cdtype == 'TRA' .AND. (iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") ) ) l_trans = .TRUE.
ENDIF
!
- IF( l_trd ) THEN
+ IF( l_trd .OR. l_trans ) THEN
CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz )
ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0
+ CALL wrk_alloc( jpi, jpj, z2d )
+ ENDIF
+ !
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
+ CALL wrk_alloc( jpi, jpj, jpk, zptry )
+ zptry(:,:,:) = 0._wp
ENDIF
!
@@ -187,13 +198,10 @@
! ! trend diagnostics (contribution of upstream fluxes)
- IF( l_trd ) THEN
+ IF( l_trd .OR. l_trans ) THEN
! store intermediate advective trends
ztrdx(:,:,:) = zwx(:,:,:) ; ztrdy(:,:,:) = zwy(:,:,:) ; ztrdz(:,:,:) = zwz(:,:,:)
END IF
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) zptry(:,:,:) = zwy(:,:,:)
! 3. antidiffusive flux : high order minus low order
@@ -253,23 +261,53 @@
! ! trend diagnostics (contribution of upstream fluxes)
- IF( l_trd ) THEN
+ IF( l_trd .OR. l_trans ) THEN
ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:) ! <<< Add to previously computed
ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:) ! <<< Add to previously computed
ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:) ! <<< Add to previously computed
-
- CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) )
- CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) )
- CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) )
+ ENDIF
+
+ IF( l_trd ) THEN
+ CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) )
+ CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) )
+ CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) )
END IF
- ! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
+
+ IF( l_trans .AND. jn==jp_tem ) THEN
+ z2d(:,:) = 0._wp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z2d(ji,jj) = z2d(ji,jj) + ztrdx(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( z2d, 'U', -1. )
+ CALL iom_put( "uadv_heattr", rau0_rcp * z2d ) ! heat transport in i-direction
+ !
+ z2d(:,:) = 0._wp
+ DO jk = 1, jpkm1
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ z2d(ji,jj) = z2d(ji,jj) + ztrdy(ji,jj,jk)
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( z2d, 'V', -1. )
+ CALL iom_put( "vadv_heattr", rau0_rcp * z2d ) ! heat transport in j-direction
+ ENDIF
+ ! "Poleward" heat and salt transports (contribution of upstream fluxes)
IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) ) + htr_adv(:)
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) ) + str_adv(:)
+ zptry(:,:,:) = zptry(:,:,:) + zwy(:,:,:) ! <<< Add to previously computed
+ CALL dia_ptr_ohst_components( jn, 'adv', zptry(:,:,:) )
ENDIF
!
END DO
!
- CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwz )
- IF( l_trd ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz )
+ CALL wrk_dealloc( jpi, jpj, jpk, zwi, zwz )
+ IF( l_trd .OR. l_trans ) THEN
+ CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz )
+ CALL wrk_dealloc( jpi, jpj, z2d )
+ ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, zptry )
!
IF( nn_timing == 1 ) CALL timing_stop('tra_adv_tvd')
@@ -318,4 +356,5 @@
REAL(wp), POINTER, DIMENSION(:,:,:) :: zwi, zwz, zhdiv, zwz_sav, zwzts
REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdx, ztrdy, ztrdz
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: zptry
REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrs
!!----------------------------------------------------------------------
@@ -339,4 +378,9 @@
CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz )
ztrdx(:,:,:) = 0._wp ; ztrdy(:,:,:) = 0._wp ; ztrdz(:,:,:) = 0._wp
+ ENDIF
+ !
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
+ CALL wrk_alloc( jpi, jpj,jpk, zptry )
+ zptry(:,:,:) = 0._wp
ENDIF
!
@@ -428,8 +472,5 @@
END IF
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) zptry(:,:,:) = zwy(:,:,:)
! 3. antidiffusive flux : high order minus low order
@@ -556,6 +597,6 @@
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( zwy(:,:,:) ) + htr_adv(:)
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( zwy(:,:,:) ) + str_adv(:)
+ zptry(:,:,:) = zptry(:,:,:) + zwy(:,:,:)
+ CALL dia_ptr_ohst_components( jn, 'adv', zptry(:,:,:) )
ENDIF
!
@@ -566,4 +607,5 @@
CALL wrk_dealloc( jpi, jpj, zwx_sav, zwy_sav )
IF( l_trd ) CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz )
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL wrk_dealloc( jpi, jpj, jpk, zptry )
!
IF( nn_timing == 1 ) CALL timing_stop('tra_adv_tvd_zts')
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90 (revision 7494)
@@ -177,8 +177,5 @@
END IF
! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_adv(:) = ptr_sj( ztv(:,:,:) )
- IF( jn == jp_sal ) str_adv(:) = ptr_sj( ztv(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'adv', ztv(:,:,:) )
! TVD scheme for the vertical direction
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilap.F90 (revision 7494)
@@ -173,8 +173,5 @@
!
! "zonal" mean lateral diffusive heat and salt transport
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem ) htr_ldf(:) = ptr_sj( ztv(:,:,:) )
- IF( jn == jp_sal ) str_ldf(:) = ptr_sj( ztv(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'ldf', ztv(:,:,:) )
! ! ===========
END DO ! tracer loop
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_bilapg.F90 (revision 7494)
@@ -247,9 +247,6 @@
! ! ===============
! "Poleward" diffusive heat or salt transport
- IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( kaht == 2 ) ) THEN
- ! note sign is reversed to give down-gradient diffusive transports (#1043)
- IF( jn == jp_tem) htr_ldf(:) = ptr_sj( -zftv(:,:,:) )
- IF( jn == jp_sal) str_ldf(:) = ptr_sj( -zftv(:,:,:) )
- ENDIF
+ ! note sign is reversed to give down-gradient diffusive transports (#1043)
+ IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( kaht == 2 ) ) CALL dia_ptr_ohst_components( jn, 'ldf', -zftv(:,:,:) )
! ! ************ ! ! ===============
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90 (revision 7494)
@@ -235,9 +235,6 @@
!
! "Poleward" diffusive heat or salt transports (T-S case only)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
! note sign is reversed to give down-gradient diffusive transports (#1043)
- IF( jn == jp_tem) htr_ldf(:) = ptr_sj( -zftv(:,:,:) )
- IF( jn == jp_sal) str_ldf(:) = ptr_sj( -zftv(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'ldf', -zftv(:,:,:) )
IF( iom_use("udiff_heattr") .OR. iom_use("vdiff_heattr") ) THEN
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso_grif.F90 (revision 7494)
@@ -386,8 +386,5 @@
!
! ! "Poleward" diffusive heat or salt transports (T-S case only)
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem) htr_ldf(:) = ptr_sj( zftv(:,:,:) ) ! 3.3 names
- IF( jn == jp_sal) str_ldf(:) = ptr_sj( zftv(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'ldf', zftv(:,:,:) )
IF( iom_use("udiff_heattr") .OR. iom_use("vdiff_heattr") ) THEN
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap.F90 (revision 7494)
@@ -154,8 +154,5 @@
!
! "Poleward" diffusive heat or salt transports
- IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN
- IF( jn == jp_tem) htr_ldf(:) = ptr_sj( ztv(:,:,:) )
- IF( jn == jp_sal) str_ldf(:) = ptr_sj( ztv(:,:,:) )
- ENDIF
+ IF( cdtype == 'TRA' .AND. ln_diaptr ) CALL dia_ptr_ohst_components( jn, 'ldf', ztv(:,:,:) )
! ! ==================
END DO ! end of tracer loop
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90 (revision 7494)
@@ -33,5 +33,5 @@
# endif
! !!!* Active tracers trends indexes
- INTEGER, PUBLIC, PARAMETER :: jptot_tra = 14 !: Total trend nb: change it when adding/removing one indice below
+ INTEGER, PUBLIC, PARAMETER :: jptot_tra = 20 !: Total trend nb: change it when adding/removing one indice below
! =============== !
INTEGER, PUBLIC, PARAMETER :: jptra_xad = 1 !: x- horizontal advection
@@ -39,22 +39,25 @@
INTEGER, PUBLIC, PARAMETER :: jptra_zad = 3 !: z- vertical advection
INTEGER, PUBLIC, PARAMETER :: jptra_sad = 4 !: z- vertical advection
- INTEGER, PUBLIC, PARAMETER :: jptra_ldf = 5 !: lateral diffusion
- INTEGER, PUBLIC, PARAMETER :: jptra_zdf = 6 !: vertical diffusion
- INTEGER, PUBLIC, PARAMETER :: jptra_zdfp = 7 !: "PURE" vert. diffusion (ln_traldf_iso=T)
- INTEGER, PUBLIC, PARAMETER :: jptra_bbc = 8 !: Bottom Boundary Condition (geoth. heating)
- INTEGER, PUBLIC, PARAMETER :: jptra_bbl = 9 !: Bottom Boundary Layer (diffusive and/or advective)
- INTEGER, PUBLIC, PARAMETER :: jptra_npc = 10 !: non-penetrative convection treatment
- INTEGER, PUBLIC, PARAMETER :: jptra_dmp = 11 !: internal restoring (damping)
- INTEGER, PUBLIC, PARAMETER :: jptra_qsr = 12 !: penetrative solar radiation
- INTEGER, PUBLIC, PARAMETER :: jptra_nsr = 13 !: non solar radiation / C/D on salinity (+runoff if ln_rnf=T)
- INTEGER, PUBLIC, PARAMETER :: jptra_atf = 14 !: Asselin time filter
+ INTEGER, PUBLIC, PARAMETER :: jptra_totad = 5 !: total advection
+ INTEGER, PUBLIC, PARAMETER :: jptra_ldf = 6 !: lateral diffusion
+ INTEGER, PUBLIC, PARAMETER :: jptra_zdf = 7 !: vertical diffusion
+ INTEGER, PUBLIC, PARAMETER :: jptra_zdfp = 8 !: "PURE" vert. diffusion (ln_traldf_iso=T)
+ INTEGER, PUBLIC, PARAMETER :: jptra_evd = 9 !: EVD term (convection)
+ INTEGER, PUBLIC, PARAMETER :: jptra_bbc = 10 !: Bottom Boundary Condition (geoth. heating)
+ INTEGER, PUBLIC, PARAMETER :: jptra_bbl = 11 !: Bottom Boundary Layer (diffusive and/or advective)
+ INTEGER, PUBLIC, PARAMETER :: jptra_npc = 12 !: non-penetrative convection treatment
+ INTEGER, PUBLIC, PARAMETER :: jptra_dmp = 13 !: internal restoring (damping)
+ INTEGER, PUBLIC, PARAMETER :: jptra_qsr = 14 !: penetrative solar radiation
+ INTEGER, PUBLIC, PARAMETER :: jptra_nsr = 15 !: non solar radiation / C/D on salinity (+runoff if ln_rnf=T)
+ INTEGER, PUBLIC, PARAMETER :: jptra_atf = 16 !: Asselin time filter
+ INTEGER, PUBLIC, PARAMETER :: jptra_tot = 17 !: Model total trend
!
! !!!* Passive tracers trends indices (use if "key_top" defined)
- INTEGER, PUBLIC, PARAMETER :: jptra_sms = 15 !: sources m. sinks
- INTEGER, PUBLIC, PARAMETER :: jptra_radn = 16 !: corr. trn<0 in trcrad
- INTEGER, PUBLIC, PARAMETER :: jptra_radb = 17 !: corr. trb<0 in trcrad (like atf)
+ INTEGER, PUBLIC, PARAMETER :: jptra_sms = 18 !: sources m. sinks
+ INTEGER, PUBLIC, PARAMETER :: jptra_radn = 19 !: corr. trn<0 in trcrad
+ INTEGER, PUBLIC, PARAMETER :: jptra_radb = 20 !: corr. trb<0 in trcrad (like atf)
!
! !!!* Momentum trends indices
- INTEGER, PUBLIC, PARAMETER :: jptot_dyn = 15 !: Total trend nb: change it when adding/removing one indice below
+ INTEGER, PUBLIC, PARAMETER :: jptot_dyn = 16 !: Total trend nb: change it when adding/removing one indice below
! =============== !
INTEGER, PUBLIC, PARAMETER :: jpdyn_hpg = 1 !: hydrostatic pressure gradient
@@ -73,4 +76,5 @@
INTEGER, PUBLIC, PARAMETER :: jpdyn_spgflt = 14 !: filter contribution to surface pressure gradient (spg_flt)
INTEGER, PUBLIC, PARAMETER :: jpdyn_spgexp = 15 !: explicit contribution to surface pressure gradient (spg_flt)
+ INTEGER, PUBLIC, PARAMETER :: jpdyn_eivke = 16 !: K.E trend from Gent McWilliams scheme
!
!!----------------------------------------------------------------------
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90 (revision 7494)
@@ -91,5 +91,5 @@
!!gm end
!
- IF( lk_vvl .AND. ( l_trdtra .OR. l_trddyn ) ) CALL ctl_stop( 'trend diagnostics with variable volume not validated' )
+! IF( lk_vvl .AND. ( l_trdtra .OR. l_trddyn ) ) CALL ctl_stop( 'trend diagnostics with variable volume not validated' )
!!gm : Potential BUG : 3D output only for vector invariant form! add a ctl_stop or code the flux form case
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdken.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdken.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdken.F90 (revision 7494)
@@ -27,4 +27,5 @@
USE lib_mpp ! MPP library
USE wrk_nemo ! Memory allocation
+ USE ldfslp ! Isopycnal slopes
IMPLICIT NONE
@@ -42,4 +43,6 @@
# include "domzgr_substitute.h90"
# include "vectopt_loop_substitute.h90"
+# include "ldfeiv_substitute.h90"
+
!!----------------------------------------------------------------------
!! NEMO/OPA 3.3 , NEMO Consortium (2010)
@@ -192,4 +195,25 @@
CALL ken_p2k( kt , zke )
CALL iom_put( "ketrd_convP2K", zke ) ! conversion -rau*g*w
+ CASE( jpdyn_eivke )
+ ! CMIP6 diagnostic tknebto = tendency of KE from
+ ! parameterized mesoscale eddy advection
+ ! = vertical_integral( k (N S)^2 ) rho dz
+ ! rho = reference density
+ ! S = isoneutral slope.
+ ! Most terms are on W grid so work on this grid
+ CALL wrk_alloc( jpi, jpj, zke2d )
+ zke2d(:,:) = 0._wp
+ DO jk = 1,jpk
+ DO ji = 1,jpi
+ DO jj = 1,jpj
+ zke2d(ji,jj) = zke2d(ji,jj) + rau0 * fsaeiw(ji, jj, jk) &
+ & * ( wslpi(ji, jj, jk) * wslpi(ji,jj,jk) &
+ & + wslpj(ji, jj, jk) * wslpj(ji,jj,jk) ) &
+ & * rn2(ji,jj,jk) * fse3w(ji, jj, jk)
+ ENDDO
+ ENDDO
+ ENDDO
+ CALL iom_put("ketrd_eiv", zke2d)
+ CALL wrk_dealloc( jpi, jpj, zke2d )
!
END SELECT
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdpen.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdpen.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdpen.F90 (revision 7494)
@@ -150,5 +150,5 @@
rab_pe(:,:,:,:) = 0._wp
!
- IF ( lk_vvl ) CALL ctl_stop('trd_pen_init : PE trends not coded for variable volume')
+! IF ( lk_vvl ) CALL ctl_stop('trd_pen_init : PE trends not coded for variable volume')
!
nkstp = nit000 - 1
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90 (revision 7494)
@@ -38,5 +38,6 @@
REAL(wp) :: r2dt ! time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=0
- REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: trdtx, trdty, trdt ! use to store the temperature trends
+ REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: trdtx, trdty, trdt ! use to store the temperature trends
+ REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avt_evd ! store avt_evd to calculate EVD trend
!! * Substitutions
@@ -55,5 +56,5 @@
!! *** FUNCTION trd_tra_alloc ***
!!---------------------------------------------------------------------
- ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , STAT= trd_tra_alloc )
+ ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , avt_evd(jpi,jpj,jpk), STAT= trd_tra_alloc )
!
IF( lk_mpp ) CALL mpp_sum ( trd_tra_alloc )
@@ -104,4 +105,5 @@
ztrds(:,:,:) = 0._wp
CALL trd_tra_mng( trdt, ztrds, ktrd, kt )
+ CASE( jptra_evd ) ; avt_evd(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)
CASE DEFAULT ! other trends: masked trends
trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) ! mask & store
@@ -128,5 +130,5 @@
zwt(:,:,jpk) = 0._wp ; zws(:,:,jpk) = 0._wp
DO jk = 2, jpk
- zwt(:,:,jk) = avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk)
+ zwt(:,:,jk) = avt_k(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk)
zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk)
END DO
@@ -138,4 +140,18 @@
END DO
CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt )
+ !
+ ! ! Also calculate EVD trend at this point.
+ zwt(:,:,:) = 0._wp ; zws(:,:,:) = 0._wp ! vertical diffusive fluxes
+ DO jk = 2, jpk
+ zwt(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk)
+ zws(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk)
+ END DO
+ !
+ ztrdt(:,:,jpk) = 0._wp ; ztrds(:,:,jpk) = 0._wp
+ DO jk = 1, jpkm1
+ ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk)
+ ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk)
+ END DO
+ CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt )
!
CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt )
@@ -312,4 +328,6 @@
CALL wrk_dealloc( jpi, jpj, z2dx, z2dy )
ENDIF
+ CASE( jptra_totad ) ; CALL iom_put( "ttrd_totad" , ptrdx ) ! total advection
+ CALL iom_put( "strd_totad" , ptrdy )
CASE( jptra_ldf ) ; CALL iom_put( "ttrd_ldf" , ptrdx ) ! lateral diffusion
CALL iom_put( "strd_ldf" , ptrdy )
@@ -318,4 +336,6 @@
CASE( jptra_zdfp ) ; CALL iom_put( "ttrd_zdfp", ptrdx ) ! PURE vertical diffusion (no isoneutral contribution)
CALL iom_put( "strd_zdfp", ptrdy )
+ CASE( jptra_evd ) ; CALL iom_put( "ttrd_evd", ptrdx ) ! EVD trend (convection)
+ CALL iom_put( "strd_evd", ptrdy )
CASE( jptra_dmp ) ; CALL iom_put( "ttrd_dmp" , ptrdx ) ! internal restoring (damping)
CALL iom_put( "strd_dmp" , ptrdy )
@@ -324,10 +344,12 @@
CASE( jptra_npc ) ; CALL iom_put( "ttrd_npc" , ptrdx ) ! static instability mixing
CALL iom_put( "strd_npc" , ptrdy )
- CASE( jptra_nsr ) ; CALL iom_put( "ttrd_qns" , ptrdx ) ! surface forcing + runoff (ln_rnf=T)
- CALL iom_put( "strd_cdt" , ptrdy )
+ CASE( jptra_nsr ) ; CALL iom_put( "ttrd_qns" , ptrdx(:,:,1) ) ! surface forcing + runoff (ln_rnf=T)
+ CALL iom_put( "strd_cdt" , ptrdy(:,:,1) ) ! output as 2D surface fields
CASE( jptra_qsr ) ; CALL iom_put( "ttrd_qsr" , ptrdx ) ! penetrative solar radiat. (only on temperature)
CASE( jptra_bbc ) ; CALL iom_put( "ttrd_bbc" , ptrdx ) ! geothermal heating (only on temperature)
CASE( jptra_atf ) ; CALL iom_put( "ttrd_atf" , ptrdx ) ! asselin time Filter
CALL iom_put( "strd_atf" , ptrdy )
+ CASE( jptra_tot ) ; CALL iom_put( "ttrd_tot" , ptrdx ) ! model total trend
+ CALL iom_put( "strd_tot" , ptrdy )
END SELECT
!
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 (revision 7494)
@@ -19,4 +19,6 @@
USE zdf_oce ! ocean vertical physics variables
USE zdfkpp ! KPP vertical mixing
+ USE trd_oce ! trends: ocean variables
+ USE trdtra ! trends manager: tracers
USE in_out_manager ! I/O manager
USE iom ! for iom_put
@@ -122,4 +124,5 @@
zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:) ! change in avt due to evd
CALL iom_put( "avt_evd", zavt_evd ) ! output this change
+ IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd )
!
IF( nn_timing == 1 ) CALL timing_stop('zdf_evd')
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/step.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/step.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/step.F90 (revision 7494)
@@ -234,4 +234,5 @@
IF( lk_diaar5 ) CALL dia_ar5( kstp ) ! ar5 diag
IF( lk_diaharm ) CALL dia_harm( kstp ) ! Tidal harmonic analysis
+ CALL dia_prod( kstp ) ! ocean model: product diagnostics
CALL dia_wri( kstp ) ! ocean model: outputs
!
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/par_age.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/par_age.F90 (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/par_age.F90 (revision 7494)
@@ -0,0 +1,69 @@
+MODULE par_age
+ !!======================================================================
+ !! *** par_age ***
+ !! TOP : set the AGE parameters
+ !!======================================================================
+ !! History : 2.0 ! 2007-12 (C. Ethe, G. Madec) revised architecture
+ !!----------------------------------------------------------------------
+ !! NEMO/TOP 3.3 , NEMO Consortium (2010)
+ !! $Id$
+ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
+ !!----------------------------------------------------------------------
+ USE par_pisces , ONLY : jp_pisces !: number of tracers in PISCES
+ USE par_pisces , ONLY : jp_pisces_2d !: number of 2D diag in PISCES
+ USE par_pisces , ONLY : jp_pisces_3d !: number of 3D diag in PISCES
+ USE par_pisces , ONLY : jp_pisces_trd !: number of biological diag in PISCES
+
+ USE par_cfc , ONLY : jp_cfc !: number of tracers in CFC
+ USE par_cfc , ONLY : jp_cfc_2d !: number of tracers in CFC
+ USE par_cfc , ONLY : jp_cfc_3d !: number of tracers in CFC
+ USE par_cfc , ONLY : jp_cfc_trd !: number of tracers in CFC
+
+ USE par_c14b , ONLY : jp_c14b !: number of tracers in C14
+ USE par_c14b , ONLY : jp_c14b_2d !: number of tracers in C14
+ USE par_c14b , ONLY : jp_c14b_3d !: number of tracers in C14
+ USE par_c14b , ONLY : jp_c14b_trd !: number of tracers in C14
+
+ IMPLICIT NONE
+
+ INTEGER, PARAMETER :: jp_lm = jp_pisces + jp_cfc + jp_c14b !:
+ INTEGER, PARAMETER :: jp_lm_2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d !:
+ INTEGER, PARAMETER :: jp_lm_3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d !:
+ INTEGER, PARAMETER :: jp_lm_trd = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd !:
+
+#if defined key_age
+ !!---------------------------------------------------------------------
+ !! 'key_age' user defined tracers (AGE)
+ !!---------------------------------------------------------------------
+ LOGICAL, PUBLIC, PARAMETER :: lk_age = .TRUE. !: PTS flag
+ INTEGER, PUBLIC, PARAMETER :: jp_age = 1 !: number of PTS tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age_2d = 0 !: additional 2d output arrays ('key_trc_diaadd')
+ INTEGER, PUBLIC, PARAMETER :: jp_age_3d = 0 !: additional 3d output arrays ('key_trc_diaadd')
+ INTEGER, PUBLIC, PARAMETER :: jp_age_trd = 0 !: number of sms trends for AGE
+
+ ! assign an index in trc arrays for each PTS prognostic variables
+ INTEGER, PUBLIC, PARAMETER :: jpage1 = jp_lm + 1 !: 1st AGE tracer
+
+#else
+ !!---------------------------------------------------------------------
+ !! Default No user defined tracers (AGE)
+ !!---------------------------------------------------------------------
+ LOGICAL, PUBLIC, PARAMETER :: lk_age = .FALSE. !: AGE flag
+ INTEGER, PUBLIC, PARAMETER :: jp_age = 0 !: No AGE tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age_2d = 0 !: No AGE additional 2d output arrays
+ INTEGER, PUBLIC, PARAMETER :: jp_age_3d = 0 !: No AGE additional 3d output arrays
+ INTEGER, PUBLIC, PARAMETER :: jp_age_trd = 0 !: number of sms trends for AGE
+#endif
+
+ ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done)
+ INTEGER, PUBLIC, PARAMETER :: jp_age0 = jp_lm + 1 !: First index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age1 = jp_lm + jp_age !: Last index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age0_2d = jp_lm_2d + 1 !: First index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age1_2d = jp_lm_2d + jp_age_2d !: Last index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age0_3d = jp_lm_3d + 1 !: First index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age1_3d = jp_lm_3d + jp_age_3d !: Last index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age0_trd = jp_lm_trd + 1 !: First index of AGE passive tracers
+ INTEGER, PUBLIC, PARAMETER :: jp_age1_trd = jp_lm_trd + jp_age_trd !: Last index of AGE passive tracers
+
+ !!======================================================================
+END MODULE par_age
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcini_age.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcini_age.F90 (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcini_age.F90 (revision 7494)
@@ -0,0 +1,71 @@
+MODULE trcini_age
+ !!======================================================================
+ !! *** MODULE trcini_age ***
+ !! TOP : initialisation of the AGE tracer
+ !!======================================================================
+ !! History : 2.0 ! 2007-12 (G. Nurser, G. Madec, C. Ethe ) Original code
+ !!----------------------------------------------------------------------
+#if defined key_age
+ !!----------------------------------------------------------------------
+ !! 'key_age' AGE tracer
+ !!----------------------------------------------------------------------
+ !! trc_ini_age : MY_TRC model initialisation
+ !!----------------------------------------------------------------------
+ USE oce_trc
+ USE trc
+ USE trcsms_age
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC trc_ini_age ! called by trcini.F90 module
+
+ !!----------------------------------------------------------------------
+ !! NEMO/TOP 3.3 , NEMO Consortium (2010)
+ !! $Id$
+ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE trc_ini_age
+ !!----------------------------------------------------------------------
+ !! *** trc_ini_age ***
+ !!
+ !! ** Purpose : initialization for AGE model
+ !!
+ !!----------------------------------------------------------------------
+
+ IF(lwp) WRITE(numout,*)
+ IF(lwp) WRITE(numout,*) ' trc_ini_age: passive tracer age'
+ IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
+
+ rryear = 1._wp / ( nyear_len(1) * rday ) ! recip number of seconds in one year
+
+ !! BUG in s-coordinate this does not work!
+ nlb_age = MINLOC( gdepw_1d, mask = gdepw_1d > rn_age_depth, dim = 1 ) ! shallowest W level Below age_depth
+ ! = shallowest T level wholly below age_depth
+
+ nl_age = nlb_age - 1 ! deepest W level Above age_depth
+ ! = T level surrounding age_depth
+
+ nla_age = nl_age - 1 ! deepest T level wholly above age_depth
+
+ frac_kill_age = ( rn_age_depth - gdepw_1d(nl_age) ) / e3t_1d(nl_age) ! fraction of level nl_age above age_depth
+ frac_add_age = 1._wp - frac_kill_age ! fraction of level nl_age below age_depth
+
+
+ IF( .NOT. ln_rsttr ) trn(:,:,:,jp_age0:jp_age1) = 0.
+ !
+ END SUBROUTINE trc_ini_age
+
+#else
+ !!----------------------------------------------------------------------
+ !! Dummy module No AGE model
+ !!----------------------------------------------------------------------
+CONTAINS
+ SUBROUTINE trc_ini_age ! Empty routine
+ END SUBROUTINE trc_ini_age
+#endif
+
+ !!======================================================================
+END MODULE trcini_age
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcnam_age.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcnam_age.F90 (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcnam_age.F90 (revision 7494)
@@ -0,0 +1,82 @@
+MODULE trcnam_age
+ !!======================================================================
+ !! *** MODULE trcnam_age ***
+ !! TOP : initialisation of some run parameters for Age tracer
+ !!======================================================================
+ !! History : 2.0 ! 2007-12 (C. Ethe, G. Madec)
+ !!----------------------------------------------------------------------
+#if defined key_age
+ !!----------------------------------------------------------------------
+ !! 'key_age' AGE tracers
+ !!----------------------------------------------------------------------
+ !! trc_nam_age : AGE tracer initialisation
+ !!----------------------------------------------------------------------
+ USE oce_trc ! Ocean variables
+ USE trcsms_age ! AGE specific variable
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC trc_nam_age ! called by trcnam.F90 module
+
+ !!----------------------------------------------------------------------
+ !! NEMO/TOP 3.3 , NEMO Consortium (2010)
+ !! $Id$
+ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
+ !!----------------------------------------------------------------------
+
+CONTAINS
+
+ SUBROUTINE trc_nam_age
+ !!-------------------------------------------------------------------
+ !! *** ROUTINE trc_nam_age ***
+ !!
+ !! ** Purpose : Definition some run parameter for AGE model
+ !!
+ !! ** input : Namelist namage
+ !!----------------------------------------------------------------------
+ INTEGER :: numnatg_ref = -1 ! Logical unit for reference AGE namelist
+ INTEGER :: numnatg_cfg = -1 ! Logical unit for configuration AGE namelist
+ INTEGER :: numong = -1 ! Logical unit for output namelist
+ INTEGER :: ios ! Local integer output status for namelist read
+ INTEGER :: jl, jn
+ !!
+ NAMELIST/namage/ rn_age_depth, rn_age_kill_rate
+ !!----------------------------------------------------------------------
+ ! ! Open namelist files
+ CALL ctl_opn( numnatg_ref, 'namelist_age_ref' , 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
+ CALL ctl_opn( numnatg_cfg, 'namelist_age_cfg' , 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
+ IF(lwm) CALL ctl_opn( numong, 'output.namelist.age', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
+
+ REWIND( numnatg_ref ) ! Namelist namagedate in reference namelist : AGE parameters
+ READ ( numnatg_ref, namage, IOSTAT = ios, ERR = 901)
+901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namage in reference namelist', lwp )
+
+ REWIND( numnatg_cfg ) ! Namelist namagedate in configuration namelist : AGE parameters
+ READ ( numnatg_cfg, namage, IOSTAT = ios, ERR = 902 )
+902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namage in configuration namelist', lwp )
+ IF(lwm) WRITE ( numong, namage )
+
+ IF(lwp) THEN ! control print
+ WRITE(numout,*)
+ WRITE(numout,*) ' trc_nam_age: Read namage, namelist for Age passive tracer'
+ WRITE(numout,*) ' ~~~~~~~'
+ WRITE(numout,*) ' depth over which age tracer reset to zero rn_age_depth = ', rn_age_depth
+ WRITE(numout,*) ' recip of relax. timescale (s) for age tracer shallower than age_depth rn_age_kill_rate = ', rn_age_kill_rate
+ ENDIF
+
+ IF(lwm) CALL FLUSH ( numong ) ! flush output namelist
+
+ END SUBROUTINE trc_nam_age
+
+#else
+ !!----------------------------------------------------------------------
+ !! Dummy module : No AGE
+ !!----------------------------------------------------------------------
+CONTAINS
+ SUBROUTINE trc_nam_age ! Empty routine
+ END SUBROUTINE trc_nam_age
+#endif
+
+ !!======================================================================
+END MODULE trcnam_age
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcsms_age.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcsms_age.F90 (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcsms_age.F90 (revision 7494)
@@ -0,0 +1,100 @@
+MODULE trcsms_age
+ !!======================================================================
+ !! *** MODULE trcsms_age ***
+ !! TOP : Main module of the AGE tracers
+ !!======================================================================
+ !! History : 2.0 ! 2007-12 (C. Ethe, G. Madec) Original code
+ !!----------------------------------------------------------------------
+#if defined key_age
+ !!----------------------------------------------------------------------
+ !! 'key_age' AGE tracer
+ !!----------------------------------------------------------------------
+ !! trc_sms_age : AGE model main routine
+ !!----------------------------------------------------------------------
+ USE oce_trc ! Ocean variables
+ USE trc ! TOP variables
+ USE trd_oce
+ USE trdtrc
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC trc_sms_age ! called by trcsms.F90 module
+
+ INTEGER , PUBLIC :: nl_age ! T level surrounding age_depth
+ INTEGER , PUBLIC :: nla_age ! T level wholly above age_depth
+ INTEGER , PUBLIC :: nlb_age ! T level wholly below age_depth
+
+ REAL(wp), PUBLIC :: rn_age_depth ! = 10 depth over which age tracer reset to zero
+ REAL(wp), PUBLIC :: rn_age_kill_rate ! = -1./7200 recip of relaxation timescale (s) for age tracer shallower than age_depth
+
+ REAL(wp), PUBLIC :: rryear !: recip number of seconds in one year
+ REAL(wp), PUBLIC :: frac_kill_age !: fraction of level nl_age above age_depth where it is relaxed towards zero
+ REAL(wp), PUBLIC :: frac_add_age !: fraction of level nl_age below age_depth where it is incremented
+
+
+ !!----------------------------------------------------------------------
+ !! NEMO/TOP 3.3 , NEMO Consortium (2010)
+ !! $Id$
+ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE trc_sms_age( kt )
+ !!----------------------------------------------------------------------
+ !! *** trc_sms_age ***
+ !!
+ !! ** Purpose : main routine of AGE model
+ !!
+ !! ** Method : -
+ !!----------------------------------------------------------------------
+ !
+ INTEGER, INTENT(in) :: kt ! ocean time-step index
+ INTEGER :: jn, jk ! dummy loop index
+ REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrage
+ !!----------------------------------------------------------------------
+ !
+ IF( nn_timing == 1 ) CALL timing_start('trc_sms_age')
+ !
+ IF(lwp) WRITE(numout,*)
+ IF(lwp) WRITE(numout,*) ' trc_sms_age: AGE model'
+ IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~'
+
+ IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrage )
+
+ DO jk = 1, nla_age
+ tra(:,:,jk,jpage1) = rn_age_kill_rate * trb(:,:,jk,jpage1)
+ ENDDO
+ !
+ tra(:,:,nl_age,jpage1) = frac_kill_age * rn_age_kill_rate * trb(:,:,nl_age,jpage1) &
+ & + frac_add_age * rryear * tmask(:,:,nl_age)
+ !
+ DO jk = nlb_age, jpk
+ tra(:,:,jk,jpage1) = tmask(:,:,jk) * rryear
+ ENDDO
+ !
+ IF( l_trdtrc ) THEN ! Save the trends in the ixed layer
+ DO jn = jp_age0, jp_age1
+ ztrage(:,:,:) = tra(:,:,:,jn)
+ CALL trd_trc( ztrage, jn, jptra_sms, kt ) ! save trends
+ END DO
+ CALL wrk_dealloc( jpi, jpj, jpk, ztrage )
+ END IF
+ !
+ IF( nn_timing == 1 ) CALL timing_stop('trc_sms_age')
+ !
+ END SUBROUTINE trc_sms_age
+
+#else
+ !!----------------------------------------------------------------------
+ !! Dummy module No AGE model
+ !!----------------------------------------------------------------------
+CONTAINS
+ SUBROUTINE trc_sms_age( kt ) ! Empty routine
+ INTEGER, INTENT( in ) :: kt
+ WRITE(*,*) 'trc_sms_age: You should not have seen this print! error?', kt
+ END SUBROUTINE trc_sms_age
+#endif
+
+ !!======================================================================
+END MODULE trcsms_age
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcwri_age.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcwri_age.F90 (revision 7494)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/AGE/trcwri_age.F90 (revision 7494)
@@ -0,0 +1,62 @@
+MODULE trcwri_age
+ !!======================================================================
+ !! *** MODULE trcwri ***
+ !! age : Output of age tracers
+ !!======================================================================
+ !! History : 1.0 ! 2009-05 (C. Ethe) Original code
+ !!----------------------------------------------------------------------
+#if defined key_top && defined key_age && defined key_iomput
+ !!----------------------------------------------------------------------
+ !! 'key_age' age model
+ !!----------------------------------------------------------------------
+ !! trc_wri_age : outputs of concentration fields
+ !!----------------------------------------------------------------------
+ USE par_age
+ USE trc
+ USE iom
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC trc_wri_age
+
+# include "top_substitute.h90"
+CONTAINS
+
+ SUBROUTINE trc_wri_age
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE trc_wri_trc ***
+ !!
+ !! ** Purpose : output passive tracers fields
+ !!---------------------------------------------------------------------
+ CHARACTER (len=20) :: cltra
+ INTEGER :: jn
+ !!---------------------------------------------------------------------
+
+
+ ! write the tracer concentrations in the file
+ ! ---------------------------------------
+ DO jn = jp_age0, jp_age1
+ cltra = TRIM( ctrcnm(jn) ) ! short title for tracer
+ CALL iom_put( TRIM(cltra), trn(:,:,:,jn) )
+ END DO
+ !
+ !
+ END SUBROUTINE trc_wri_age
+
+#else
+ !!----------------------------------------------------------------------
+ !! Dummy module : No passive tracer
+ !!----------------------------------------------------------------------
+ PUBLIC trc_wri_age
+CONTAINS
+ SUBROUTINE trc_wri_age ! Empty routine
+ END SUBROUTINE trc_wri_age
+#endif
+
+ !!----------------------------------------------------------------------
+ !! NEMO/TOP 3.3 , NEMO Consortium (2010)
+ !! $Id$
+ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
+ !!======================================================================
+END MODULE trcwri_age
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/MY_TRC/par_my_trc.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/MY_TRC/par_my_trc.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/MY_TRC/par_my_trc.F90 (revision 7494)
@@ -7,5 +7,5 @@
!!----------------------------------------------------------------------
!! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -25,10 +25,15 @@
USE par_c14b , ONLY : jp_c14b_trd !: number of tracers in C14
+ USE par_age , ONLY : jp_age !: number of tracers in AGE
+ USE par_age , ONLY : jp_age_2d !: number of tracers in AGE
+ USE par_age , ONLY : jp_age_3d !: number of tracers in AGE
+ USE par_age , ONLY : jp_age_trd !: number of tracers in AGE
+
IMPLICIT NONE
- INTEGER, PARAMETER :: jp_lm = jp_pisces + jp_cfc + jp_c14b !:
- INTEGER, PARAMETER :: jp_lm_2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d !:
- INTEGER, PARAMETER :: jp_lm_3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d !:
- INTEGER, PARAMETER :: jp_lm_trd = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd !:
+ INTEGER, PARAMETER :: jp_lm = jp_pisces + jp_cfc + jp_c14b + jp_age !:
+ INTEGER, PARAMETER :: jp_lm_2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_age_2d !:
+ INTEGER, PARAMETER :: jp_lm_3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_age_3d !:
+ INTEGER, PARAMETER :: jp_lm_trd = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_age_trd !:
#if defined key_my_trc
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90 (revision 7494)
@@ -28,5 +28,5 @@
!!----------------------------------------------------------------------
!! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -61,4 +61,5 @@
ENDIF
+ IF( lk_age ) CALL trc_rad_sms( kt, trb, trn, jp_age0 , jp_age1 ) ! AGE tracer
IF( lk_cfc ) CALL trc_rad_sms( kt, trb, trn, jp_cfc0 , jp_cfc1 ) ! CFC model
IF( lk_c14b ) CALL trc_rad_sms( kt, trb, trn, jp_c14b0, jp_c14b1 ) ! bomb C14
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/par_trc.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/par_trc.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/par_trc.F90 (revision 7494)
@@ -14,4 +14,5 @@
USE par_c14b ! C14 bomb tracer
USE par_cfc ! CFC 11 and 12 tracers
+ USE par_age ! AGE tracer
USE par_my_trc ! user defined passive tracers
@@ -24,9 +25,9 @@
! Passive tracers : Total size
! --------------- ! total number of passive tracers, of 2d and 3d output and trend arrays
- INTEGER, PUBLIC, PARAMETER :: jptra = jp_pisces + jp_cfc + jp_c14b + jp_my_trc
- INTEGER, PUBLIC, PARAMETER :: jpdia2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_my_trc_2d
- INTEGER, PUBLIC, PARAMETER :: jpdia3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_my_trc_3d
+ INTEGER, PUBLIC, PARAMETER :: jptra = jp_pisces + jp_cfc + jp_c14b + jp_age + jp_my_trc
+ INTEGER, PUBLIC, PARAMETER :: jpdia2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_age_2d + jp_my_trc_2d
+ INTEGER, PUBLIC, PARAMETER :: jpdia3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_age_3d + jp_my_trc_3d
! ! total number of sms diagnostic arrays
- INTEGER, PUBLIC, PARAMETER :: jpdiabio = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_my_trc_trd
+ INTEGER, PUBLIC, PARAMETER :: jpdiabio = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_age_trd + jp_my_trc_trd
! 1D configuration ("key_c1d")
@@ -42,5 +43,5 @@
!!----------------------------------------------------------------------
!! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!======================================================================
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcini.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcini.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcini.F90 (revision 7494)
@@ -23,4 +23,5 @@
USE trcini_pisces ! PISCES initialisation
USE trcini_c14b ! C14 bomb initialisation
+ USE trcini_age ! AGE initialisation
USE trcini_my_trc ! MY_TRC initialisation
USE trcdta ! initialisation from files
@@ -41,5 +42,5 @@
!!----------------------------------------------------------------------
!! NEMO/TOP 4.0 , NEMO Consortium (2011)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -96,7 +97,8 @@
IF( lk_pisces ) CALL trc_ini_pisces ! PISCES bio-model
- IF( lk_cfc ) CALL trc_ini_cfc ! CFC tracers
+ IF( lk_cfc ) CALL trc_ini_cfc ! CFC tracers
IF( lk_c14b ) CALL trc_ini_c14b ! C14 bomb tracer
- IF( lk_my_trc ) CALL trc_ini_my_trc ! MY_TRC tracers
+ IF( lk_age ) CALL trc_ini_age ! AGE tracer
+ IF( lk_my_trc ) CALL trc_ini_my_trc ! MY_TRC tracers
CALL trc_ice_ini ! Tracers in sea ice
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcnam.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcnam.F90 (revision 7494)
@@ -24,4 +24,5 @@
USE trcnam_cfc ! CFC SMS namelist
USE trcnam_c14b ! C14 SMS namelist
+ USE trcnam_age ! AGE SMS namelist
USE trcnam_my_trc ! MY_TRC SMS namelist
USE trd_oce
@@ -61,11 +62,11 @@
! ! passive tracer informations
- CALL trc_nam_trc
+ CALL trc_nam_trc
! ! Parameters of additional diagnostics
- CALL trc_nam_dia
+ IF( .NOT. lk_iomput) CALL trc_nam_dia
! ! namelist of transport
- CALL trc_nam_trp
+ CALL trc_nam_trp
@@ -161,10 +162,14 @@
ENDIF
- IF( lk_c14b ) THEN ; CALL trc_nam_c14b ! C14 bomb tracers
- ELSE ; IF(lwp) WRITE(numout,*) ' C14 not used'
- ENDIF
-
- IF( lk_my_trc ) THEN ; CALL trc_nam_my_trc ! MY_TRC tracers
- ELSE ; IF(lwp) WRITE(numout,*) ' MY_TRC not used'
+ IF( lk_c14b ) THEN ; CALL trc_nam_c14b ! C14 bomb tracers
+ ELSE ; IF(lwp) WRITE(numout,*) ' C14 not used'
+ ENDIF
+
+ IF( lk_age ) THEN ; CALL trc_nam_age ! AGE tracer
+ ELSE ; IF(lwp) WRITE(numout,*) ' AGE not used'
+ ENDIF
+
+ IF( lk_my_trc ) THEN ; CALL trc_nam_my_trc ! MY_TRC tracers
+ ELSE ; IF(lwp) WRITE(numout,*) ' MY_TRC not used'
ENDIF
!
@@ -359,5 +364,5 @@
ENDIF
- IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN
+ IF( ln_diatrc ) THEN
ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), &
& ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) , &
@@ -370,5 +375,5 @@
ENDIF
- IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN
+ IF( ln_diabio .OR. l_trdtrc ) THEN
ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , &
& ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcsms.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcsms.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcsms.F90 (revision 7494)
@@ -18,4 +18,5 @@
USE trcsms_cfc ! CFC 11 & 12
USE trcsms_c14b ! C14b tracer
+ USE trcsms_age ! AGE tracer
USE trcsms_my_trc ! MY_TRC tracers
USE prtctl_trc ! Print control for debbuging
@@ -28,5 +29,5 @@
!!----------------------------------------------------------------------
!! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
@@ -51,4 +52,5 @@
IF( lk_cfc ) CALL trc_sms_cfc ( kt ) ! surface fluxes of CFC
IF( lk_c14b ) CALL trc_sms_c14b ( kt ) ! surface fluxes of C14
+ IF( lk_age ) CALL trc_sms_age ( kt ) ! AGE tracer
IF( lk_my_trc ) CALL trc_sms_my_trc ( kt ) ! MY_TRC tracers
Index: /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcwri.F90
===================================================================
--- /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcwri.F90 (revision 7493)
+++ /branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/trcwri.F90 (revision 7494)
@@ -20,4 +20,5 @@
USE trcwri_cfc
USE trcwri_c14b
+ USE trcwri_age
USE trcwri_my_trc
@@ -59,4 +60,5 @@
IF( lk_cfc ) CALL trc_wri_cfc ! surface fluxes of CFC
IF( lk_c14b ) CALL trc_wri_c14b ! surface fluxes of C14
+ IF( lk_age ) CALL trc_wri_age ! AGE tracer
IF( lk_my_trc ) CALL trc_wri_my_trc ! MY_TRC tracers
!
@@ -78,5 +80,5 @@
!!----------------------------------------------------------------------
!! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id$
+ !! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!======================================================================