Changeset 10946
- Timestamp:
- 2019-05-08T10:56:14+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src
- Files:
-
- 51 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynadv_cen2.F90
r10928 r10946 92 92 zfu_uw(:,:,:) = puu(:,:,:,Krhs) - zfu_uw(:,:,:) 93 93 zfv_vw(:,:,:) = pvv(:,:,:,Krhs) - zfv_vw(:,:,:) 94 CALL trd_dyn( zfu_uw, zfv_vw, jpdyn_keg, kt )94 CALL trd_dyn( zfu_uw, zfv_vw, jpdyn_keg, kt, Kmm ) 95 95 zfu_t(:,:,:) = puu(:,:,:,Krhs) 96 96 zfv_t(:,:,:) = pvv(:,:,:,Krhs) … … 138 138 zfu_t(:,:,:) = puu(:,:,:,Krhs) - zfu_t(:,:,:) 139 139 zfv_t(:,:,:) = pvv(:,:,:,Krhs) - zfv_t(:,:,:) 140 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt )140 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt, Kmm ) 141 141 ENDIF 142 142 ! ! Control print -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynadv_ubs.F90
r10928 r10946 183 183 zfu_uw(:,:,:) = puu(:,:,:,Krhs) - zfu_uw(:,:,:) 184 184 zfv_vw(:,:,:) = pvv(:,:,:,Krhs) - zfv_vw(:,:,:) 185 CALL trd_dyn( zfu_uw, zfv_vw, jpdyn_keg, kt )185 CALL trd_dyn( zfu_uw, zfv_vw, jpdyn_keg, kt, Kmm ) 186 186 zfu_t(:,:,:) = puu(:,:,:,Krhs) 187 187 zfv_t(:,:,:) = pvv(:,:,:,Krhs) … … 231 231 zfu_t(:,:,:) = puu(:,:,:,Krhs) - zfu_t(:,:,:) 232 232 zfv_t(:,:,:) = pvv(:,:,:,Krhs) - zfv_t(:,:,:) 233 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt )233 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt, Kmm ) 234 234 ENDIF 235 235 ! ! Control print -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynhpg.F90
r10928 r10946 118 118 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 119 119 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 120 CALL trd_dyn( ztrdu, ztrdv, jpdyn_hpg, kt )120 CALL trd_dyn( ztrdu, ztrdv, jpdyn_hpg, kt, Kmm ) 121 121 DEALLOCATE( ztrdu , ztrdv ) 122 122 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynkeg.F90
r10928 r10946 183 183 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 184 184 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 185 CALL trd_dyn( ztrdu, ztrdv, jpdyn_keg, kt )185 CALL trd_dyn( ztrdu, ztrdv, jpdyn_keg, kt, Kmm ) 186 186 DEALLOCATE( ztrdu , ztrdv ) 187 187 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynldf.F90
r10928 r10946 78 78 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 79 79 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 80 CALL trd_dyn( ztrdu, ztrdv, jpdyn_ldf, kt )80 CALL trd_dyn( ztrdu, ztrdv, jpdyn_ldf, kt, Kmm ) 81 81 DEALLOCATE ( ztrdu , ztrdv ) 82 82 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynnxt.F90
r10799 r10946 64 64 CONTAINS 65 65 66 SUBROUTINE dyn_nxt ( kt )66 SUBROUTINE dyn_nxt ( kt, Kmm ) 67 67 !!---------------------------------------------------------------------- 68 68 !! *** ROUTINE dyn_nxt *** … … 93 93 !!---------------------------------------------------------------------- 94 94 INTEGER, INTENT( in ) :: kt ! ocean time-step index 95 INTEGER, INTENT( in ) :: Kmm ! time level index 95 96 ! 96 97 INTEGER :: ji, jj, jk ! dummy loop indices … … 157 158 ! 158 159 ! ! Kinetic energy and Conversion 159 IF( ln_KE_trd ) CALL trd_dyn( ua, va, jpdyn_ken, kt )160 IF( ln_KE_trd ) CALL trd_dyn( ua, va, jpdyn_ken, kt, Kmm ) 160 161 ! 161 162 IF( ln_dyn_trd ) THEN ! 3D output: total momentum trends … … 365 366 zua(:,:,:) = ( ub(:,:,:) - zua(:,:,:) ) * z1_2dt 366 367 zva(:,:,:) = ( vb(:,:,:) - zva(:,:,:) ) * z1_2dt 367 CALL trd_dyn( zua, zva, jpdyn_atf, kt )368 CALL trd_dyn( zua, zva, jpdyn_atf, kt, Kmm ) 368 369 ENDIF 369 370 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynspg.F90
r10928 r10946 171 171 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 172 172 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 173 CALL trd_dyn( ztrdu, ztrdv, jpdyn_spg, kt )173 CALL trd_dyn( ztrdu, ztrdv, jpdyn_spg, kt, Kmm ) 174 174 DEALLOCATE( ztrdu , ztrdv ) 175 175 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynvor.F90
r10928 r10946 135 135 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 136 136 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 137 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt )137 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt, Kmm ) 138 138 ! 139 139 IF( n_dynadv /= np_LIN_dyn ) THEN !* relative vorticity or metric trend (only in non-linear case) … … 149 149 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 150 150 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 151 CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt )151 CALL trd_dyn( ztrdu, ztrdv, jpdyn_rvo, kt, Kmm ) 152 152 ENDIF 153 153 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynzad.F90
r10928 r10946 112 112 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 113 113 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 114 CALL trd_dyn( ztrdu, ztrdv, jpdyn_zad, kt )114 CALL trd_dyn( ztrdu, ztrdv, jpdyn_zad, kt, Kmm ) 115 115 DEALLOCATE( ztrdu, ztrdv ) 116 116 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynzdf.F90
r10928 r10946 98 98 ! 99 99 ! !* explicit top/bottom drag case 100 IF( .NOT.ln_drgimp ) CALL zdf_drg_exp( kt, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add top/bottom friction trend to (puu(:,:,:,Kaa),pvv(:,:,:,Kaa))100 IF( .NOT.ln_drgimp ) CALL zdf_drg_exp( kt, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add top/bottom friction trend to (puu(Kaa),pvv(Kaa)) 101 101 ! 102 102 ! … … 490 490 ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) / r2dt - ztrdu(:,:,:) 491 491 ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) / r2dt - ztrdv(:,:,:) 492 CALL trd_dyn( ztrdu, ztrdv, jpdyn_zdf, kt )492 CALL trd_dyn( ztrdu, ztrdv, jpdyn_zdf, kt, Kmm ) 493 493 DEALLOCATE( ztrdu, ztrdv ) 494 494 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/LDF/ldftra.F90
r10922 r10946 727 727 728 728 729 SUBROUTINE ldf_eiv_trp( kt, kit000, pu, pv, pw, cdtype, Kmm )729 SUBROUTINE ldf_eiv_trp( kt, kit000, pu, pv, pw, cdtype, Kmm, Krhs ) 730 730 !!---------------------------------------------------------------------- 731 731 !! *** ROUTINE ldf_eiv_trp *** … … 745 745 !! ** Action : pu, pv increased by the eiv transport 746 746 !!---------------------------------------------------------------------- 747 INTEGER , INTENT(in ) :: kt ! ocean time-step index748 INTEGER , INTENT(in ) :: kit000 ! first time step index749 INTEGER , INTENT(in ) :: Kmm 750 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator)747 INTEGER , INTENT(in ) :: kt ! ocean time-step index 748 INTEGER , INTENT(in ) :: kit000 ! first time step index 749 INTEGER , INTENT(in ) :: Kmm, Krhs ! ocean time level indices 750 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 751 751 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pu ! in : 3 ocean transport components [m3/s] 752 752 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pv ! out: 3 ocean transport components [m3/s] -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/SBC/sbcmod.F90
r10927 r10946 422 422 SELECT CASE( nsbc ) ! Compute ocean surface boundary condition 423 423 ! ! (i.e. utau,vtau, qns, qsr, emp, sfx) 424 CASE( jp_usr ) ; CALL usrdef_sbc_oce( kt )! user defined formulation424 CASE( jp_usr ) ; CALL usrdef_sbc_oce( kt, Kbb ) ! user defined formulation 425 425 CASE( jp_flx ) ; CALL sbc_flx ( kt ) ! flux formulation 426 426 CASE( jp_blk ) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv.F90
r10922 r10946 127 127 ! 128 128 IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad ) & 129 & CALL ldf_eiv_trp( kt, nit000, zuu, zvv, zww, 'TRA', Kmm ) ! add the eiv transport (if necessary)129 & CALL ldf_eiv_trp( kt, nit000, zuu, zvv, zww, 'TRA', Kmm, Krhs ) ! add the eiv transport (if necessary) 130 130 ! 131 131 IF( ln_mle ) CALL tra_mle_trp( kt, nit000, zuu, zvv, zww, 'TRA' ) ! add the mle transport (if necessary) … … 165 165 ztrds(:,:,jk) = pts(:,:,jk,jp_sal,Krhs) - ztrds(:,:,jk) 166 166 END DO 167 CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt )168 CALL trd_tra( kt, 'TRA', jp_sal, jptra_totad, ztrds )167 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_totad, ztrdt ) 168 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_totad, ztrds ) 169 169 DEALLOCATE( ztrdt, ztrds ) 170 170 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_cen.F90
r10893 r10946 191 191 ! ! trend diagnostics 192 192 IF( l_trd ) THEN 193 CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) )194 CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) )195 CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) )193 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) ) 194 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) ) 195 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) ) 196 196 END IF 197 197 ! ! "Poleward" heat and salt transports -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_fct.F90
r10893 r10946 303 303 ! 304 304 IF( l_trd ) THEN ! trend diagnostics 305 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pU, pt(:,:,:,jn,Kmm) )306 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pV, pt(:,:,:,jn,Kmm) )307 CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pW, pt(:,:,:,jn,Kmm) )305 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztrdx, pU, pt(:,:,:,jn,Kmm) ) 306 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztrdy, pV, pt(:,:,:,jn,Kmm) ) 307 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, ztrdz, pW, pt(:,:,:,jn,Kmm) ) 308 308 ENDIF 309 309 ! ! heat/salt transport -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_mus.F90
r10893 r10946 201 201 ! ! trend diagnostics 202 202 IF( l_trd ) THEN 203 CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kbb) )204 CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kbb) )203 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kbb) ) 204 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kbb) ) 205 205 END IF 206 206 ! ! "Poleward" heat and salt transports … … 268 268 END DO 269 269 ! ! send trends for diagnostic 270 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pW, pt(:,:,:,jn,Kbb) )270 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwx, pW, pt(:,:,:,jn,Kbb) ) 271 271 ! 272 272 END DO ! end of tracer loop -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_qck.F90
r10893 r10946 220 220 END DO 221 221 ! ! trend diagnostics 222 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) )222 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) ) 223 223 ! 224 224 END DO … … 336 336 END DO 337 337 ! ! trend diagnostics 338 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) )338 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) ) 339 339 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 340 340 IF( l_ptr ) CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) … … 395 395 END DO 396 396 ! ! Send trends for diagnostic 397 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) )397 IF( l_trd ) CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) ) 398 398 ! 399 399 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_ubs.F90
r10893 r10946 177 177 ! 178 178 IF( l_trd ) THEN ! trend diagnostics 179 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztu, pU, pt(:,:,:,jn,Kmm) )180 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, pV, pt(:,:,:,jn,Kmm) )179 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, ztu, pU, pt(:,:,:,jn,Kmm) ) 180 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_yad, ztv, pV, pt(:,:,:,jn,Kmm) ) 181 181 END IF 182 182 ! … … 273 273 END DO 274 274 END DO 275 CALL trd_tra( kt, cdtype, jn, jptra_zad, zltv )275 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_zad, zltv ) 276 276 ENDIF 277 277 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbc.F90
r10874 r10946 51 51 CONTAINS 52 52 53 SUBROUTINE tra_bbc( kt )53 SUBROUTINE tra_bbc( kt, Kmm, Krhs ) 54 54 !!---------------------------------------------------------------------- 55 55 !! *** ROUTINE tra_bbc *** … … 74 74 !!---------------------------------------------------------------------- 75 75 INTEGER, INTENT(in) :: kt ! ocean time-step index 76 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 76 77 ! 77 78 INTEGER :: ji, jj ! dummy loop indices … … 96 97 IF( l_trdtra ) THEN ! Send the trend for diagnostics 97 98 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 98 CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbc, ztrdt )99 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_bbc, ztrdt ) 99 100 DEALLOCATE( ztrdt ) 100 101 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbl.F90
r10874 r10946 89 89 90 90 91 SUBROUTINE tra_bbl( kt )91 SUBROUTINE tra_bbl( kt, Kmm, Krhs ) 92 92 !!---------------------------------------------------------------------- 93 93 !! *** ROUTINE bbl *** … … 102 102 !!---------------------------------------------------------------------- 103 103 INTEGER, INTENT( in ) :: kt ! ocean time-step 104 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 104 105 ! 105 106 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds … … 145 146 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 146 147 ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 147 CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt )148 CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds )148 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_bbl, ztrdt ) 149 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_bbl, ztrds ) 149 150 DEALLOCATE( ztrdt, ztrds ) 150 151 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tradmp.F90
r10874 r10946 72 72 73 73 74 SUBROUTINE tra_dmp( kt )74 SUBROUTINE tra_dmp( kt, Kmm, Krhs ) 75 75 !!---------------------------------------------------------------------- 76 76 !! *** ROUTINE tra_dmp *** … … 91 91 !!---------------------------------------------------------------------- 92 92 INTEGER, INTENT(in) :: kt ! ocean time-step index 93 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 93 94 ! 94 95 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 151 152 IF( l_trdtra ) THEN ! trend diagnostic 152 153 ztrdts(:,:,:,:) = tsa(:,:,:,:) - ztrdts(:,:,:,:) 153 CALL trd_tra( kt, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) )154 CALL trd_tra( kt, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) )154 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_dmp, ztrdts(:,:,:,jp_tem) ) 155 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_dmp, ztrdts(:,:,:,jp_sal) ) 155 156 DEALLOCATE( ztrdts ) 156 157 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf.F90
r10922 r10946 47 47 CONTAINS 48 48 49 SUBROUTINE tra_ldf( kt, Kmm )49 SUBROUTINE tra_ldf( kt, Kmm, Krhs ) 50 50 !!---------------------------------------------------------------------- 51 51 !! *** ROUTINE tra_ldf *** … … 54 54 !!---------------------------------------------------------------------- 55 55 INTEGER, INTENT( in ) :: kt ! ocean time-step index 56 INTEGER, INTENT( in ) :: Kmm ! ocean time level indices56 INTEGER, INTENT( in ) :: Kmm, Krhs ! ocean time level indices 57 57 !! 58 58 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds … … 81 81 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 82 82 ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 83 CALL trd_tra( kt, 'TRA', jp_tem, jptra_ldf, ztrdt )84 CALL trd_tra( kt, 'TRA', jp_sal, jptra_ldf, ztrds )83 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_ldf, ztrdt ) 84 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_ldf, ztrds ) 85 85 DEALLOCATE( ztrdt, ztrds ) 86 86 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tranpc.F90
r10425 r10946 42 42 CONTAINS 43 43 44 SUBROUTINE tra_npc( kt )44 SUBROUTINE tra_npc( kt, Kmm, Krhs ) 45 45 !!---------------------------------------------------------------------- 46 46 !! *** ROUTINE tranpc *** … … 59 59 !!---------------------------------------------------------------------- 60 60 INTEGER, INTENT(in) :: kt ! ocean time-step index 61 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 61 62 ! 62 63 INTEGER :: ji, jj, jk ! dummy loop indices … … 304 305 ztrdt(:,:,:) = ( tsa(:,:,:,jp_tem) - ztrdt(:,:,:) ) * z1_r2dt 305 306 ztrds(:,:,:) = ( tsa(:,:,:,jp_sal) - ztrds(:,:,:) ) * z1_r2dt 306 CALL trd_tra( kt, 'TRA', jp_tem, jptra_npc, ztrdt )307 CALL trd_tra( kt, 'TRA', jp_sal, jptra_npc, ztrds )307 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_npc, ztrdt ) 308 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_npc, ztrds ) 308 309 DEALLOCATE( ztrdt, ztrds ) 309 310 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/tranxt.F90
r10425 r10946 64 64 CONTAINS 65 65 66 SUBROUTINE tra_nxt( kt )66 SUBROUTINE tra_nxt( kt, Kmm, Krhs ) 67 67 !!---------------------------------------------------------------------- 68 68 !! *** ROUTINE tranxt *** … … 87 87 !!---------------------------------------------------------------------- 88 88 INTEGER, INTENT(in) :: kt ! ocean time-step index 89 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 89 90 !! 90 91 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 122 123 ztrds(:,:,jpk) = 0._wp 123 124 IF( ln_traldf_iso ) THEN ! diagnose the "pure" Kz diffusive trend 124 CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt )125 CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrds )125 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 126 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdfp, ztrds ) 126 127 ENDIF 127 128 ! total trend for the non-time-filtered variables. … … 132 133 ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 133 134 END DO 134 CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt )135 CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrds )135 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_tot, ztrdt ) 136 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_tot, ztrds ) 136 137 IF( ln_linssh ) THEN ! linear sea surface height only 137 138 ! Store now fields before applying the Asselin filter … … 152 153 ztrdt(:,:,:) = 0._wp 153 154 ztrds(:,:,:) = 0._wp 154 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt )155 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds )155 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_atf, ztrdt ) 156 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_atf, ztrds ) 156 157 END IF 157 158 ! … … 159 160 ! 160 161 IF( ln_linssh ) THEN ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! linear free surface 161 ELSE ; CALL tra_nxt_vvl( kt, nit000, rdt, 'TRA', tsb, tsn, tsa, &162 ELSE ; CALL tra_nxt_vvl( kt, Kmm, Krhs, nit000, rdt, 'TRA', tsb, tsn, tsa, & 162 163 & sbc_tsc, sbc_tsc_b, jpts ) ! non-linear free surface 163 164 ENDIF … … 175 176 ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact 176 177 END DO 177 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt )178 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds )178 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_atf, ztrdt ) 179 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_atf, ztrds ) 179 180 END IF 180 181 IF( l_trdtra ) DEALLOCATE( ztrdt , ztrds ) … … 238 239 239 240 240 SUBROUTINE tra_nxt_vvl( kt, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt )241 SUBROUTINE tra_nxt_vvl( kt, Kmm, Krhs, kit000, p2dt, cdtype, ptb, ptn, pta, psbc_tc, psbc_tc_b, kjpt ) 241 242 !!---------------------------------------------------------------------- 242 243 !! *** ROUTINE tra_nxt_vvl *** … … 254 255 !!---------------------------------------------------------------------- 255 256 INTEGER , INTENT(in ) :: kt ! ocean time-step index 257 INTEGER , INTENT(in ) :: Kmm, Krhs ! time level indices 256 258 INTEGER , INTENT(in ) :: kit000 ! first time step index 257 259 REAL(wp) , INTENT(in ) :: p2dt ! time-step … … 367 369 IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) ) THEN 368 370 IF( l_trdtra .AND. cdtype == 'TRA' ) THEN 369 CALL trd_tra( kt, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) )370 CALL trd_tra( kt, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) )371 CALL trd_tra( kt, Kmm, Krhs, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 372 CALL trd_tra( kt, Kmm, Krhs, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 371 373 ENDIF 372 374 IF( l_trdtrc .AND. cdtype == 'TRC' ) THEN 373 375 DO jn = 1, kjpt 374 CALL trd_tra( kt, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) )376 CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 375 377 END DO 376 378 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traqsr.F90
r10874 r10946 75 75 CONTAINS 76 76 77 SUBROUTINE tra_qsr( kt )77 SUBROUTINE tra_qsr( kt, Kmm, Krhs ) 78 78 !!---------------------------------------------------------------------- 79 79 !! *** ROUTINE tra_qsr *** … … 102 102 !!---------------------------------------------------------------------- 103 103 INTEGER, INTENT(in) :: kt ! ocean time-step 104 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 104 105 ! 105 106 INTEGER :: ji, jj, jk ! dummy loop indices … … 296 297 IF( l_trdtra ) THEN ! qsr tracers trends saved for diagnostics 297 298 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 298 CALL trd_tra( kt, 'TRA', jp_tem, jptra_qsr, ztrdt )299 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_qsr, ztrdt ) 299 300 DEALLOCATE( ztrdt ) 300 301 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trasbc.F90
r10874 r10946 51 51 CONTAINS 52 52 53 SUBROUTINE tra_sbc ( kt )53 SUBROUTINE tra_sbc ( kt, Kmm, Krhs ) 54 54 !!---------------------------------------------------------------------- 55 55 !! *** ROUTINE tra_sbc *** … … 73 73 !!---------------------------------------------------------------------- 74 74 INTEGER, INTENT(in) :: kt ! ocean time-step index 75 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 75 76 ! 76 77 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 261 262 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 262 263 ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 263 CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrdt )264 CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrds )264 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_nsr, ztrdt ) 265 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_nsr, ztrds ) 265 266 DEALLOCATE( ztrdt , ztrds ) 266 267 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trazdf.F90
r10893 r10946 96 96 CALL lbc_lnk_multi( 'trazdf', ztrdt, 'T', 1. , ztrds, 'T', 1. ) 97 97 !!gm 98 CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdf, ztrdt )99 CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdf, ztrds )98 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 99 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdf, ztrds ) 100 100 DEALLOCATE( ztrdt , ztrds ) 101 101 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trddyn.F90
r10425 r10946 44 44 CONTAINS 45 45 46 SUBROUTINE trd_dyn( putrd, pvtrd, ktrd, kt )46 SUBROUTINE trd_dyn( putrd, pvtrd, ktrd, kt, Kmm ) 47 47 !!--------------------------------------------------------------------- 48 48 !! *** ROUTINE trd_mod *** … … 55 55 INTEGER , INTENT(in ) :: ktrd ! trend index 56 56 INTEGER , INTENT(in ) :: kt ! time step 57 INTEGER , INTENT(in ) :: Kmm ! time level index 57 58 !!---------------------------------------------------------------------- 58 59 ! … … 66 67 ! 3D output of momentum and/or tracers trends using IOM interface 67 68 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 68 IF( ln_dyn_trd ) CALL trd_dyn_iom( putrd, pvtrd, ktrd, kt )69 IF( ln_dyn_trd ) CALL trd_dyn_iom( putrd, pvtrd, ktrd, kt, Kmm ) 69 70 70 71 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 71 72 ! Integral Constraints Properties for momentum and/or tracers trends 72 73 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 73 IF( ln_glo_trd ) CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt )74 IF( ln_glo_trd ) CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt, Kmm ) 74 75 75 76 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 76 77 ! Kinetic Energy trends 77 78 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 78 IF( ln_KE_trd ) CALL trd_ken( putrd, pvtrd, ktrd, kt )79 IF( ln_KE_trd ) CALL trd_ken( putrd, pvtrd, ktrd, kt, Kmm ) 79 80 80 81 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 81 82 ! Vorticity trends 82 83 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 83 IF( ln_vor_trd ) CALL trd_vor( putrd, pvtrd, ktrd, kt )84 IF( ln_vor_trd ) CALL trd_vor( putrd, pvtrd, ktrd, kt, Kmm ) 84 85 85 86 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> … … 91 92 92 93 93 SUBROUTINE trd_dyn_iom( putrd, pvtrd, ktrd, kt )94 SUBROUTINE trd_dyn_iom( putrd, pvtrd, ktrd, kt, Kmm ) 94 95 !!--------------------------------------------------------------------- 95 96 !! *** ROUTINE trd_dyn_iom *** … … 100 101 INTEGER , INTENT(in ) :: ktrd ! trend index 101 102 INTEGER , INTENT(in ) :: kt ! time step 103 INTEGER , INTENT(in ) :: Kmm ! time level index 102 104 ! 103 105 INTEGER :: ji, jj, jk ! dummy loop indices … … 124 126 DO jj = 2, jpjm1 125 127 DO ji = 2, jpim1 126 z3dx(ji,jj,jk) = u n(ji,jj,jk) * ( un(ji+1,jj,jk) - un(ji-1,jj,jk) ) / ( 2._wp * e1u(ji,jj) )127 z3dy(ji,jj,jk) = v n(ji,jj,jk) * ( vn(ji,jj+1,jk) - vn(ji,jj-1,jk) ) / ( 2._wp * e2v(ji,jj) )128 z3dx(ji,jj,jk) = uu(ji,jj,jk,Kmm) * ( uu(ji+1,jj,jk,Kmm) - uu(ji-1,jj,jk,Kmm) ) / ( 2._wp * e1u(ji,jj) ) 129 z3dy(ji,jj,jk) = vv(ji,jj,jk,Kmm) * ( vv(ji,jj+1,jk,Kmm) - vv(ji,jj-1,jk,Kmm) ) / ( 2._wp * e2v(ji,jj) ) 128 130 END DO 129 131 END DO … … 142 144 ! ! wind stress trends 143 145 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) ) 144 z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u _n(:,:,1) * rau0 )145 z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v _n(:,:,1) * rau0 )146 z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * rau0 ) 147 z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * rau0 ) 146 148 CALL iom_put( "utrd_tau", z2dx ) 147 149 CALL iom_put( "vtrd_tau", z2dy ) … … 159 161 ! ikbv = mbkv(ji,jj) 160 162 ! z3dx(ji,jj,jk) = 0.5 * ( rCdU_bot(ji+1,jj) + rCdU_bot(ji,jj) ) & 161 ! & * u n(ji,jj,ikbu) / e3u_n(ji,jj,ikbu)163 ! & * uu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 162 164 ! z3dy(ji,jj,jk) = 0.5 * ( rCdU_bot(ji,jj+1) + rCdU_bot(ji,jj) ) & 163 ! & * v n(ji,jj,ikbv) / e3v_n(ji,jj,ikbv)165 ! & * vv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 164 166 ! END DO 165 167 ! END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdglo.F90
r10425 r10946 59 59 CONTAINS 60 60 61 SUBROUTINE trd_glo( ptrdx, ptrdy, ktrd, ctype, kt )61 SUBROUTINE trd_glo( ptrdx, ptrdy, ktrd, ctype, kt, Kmm ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE trd_glo *** … … 72 72 CHARACTER(len=3) , INTENT(in ) :: ctype ! momentum or tracers trends type (='DYN'/'TRA') 73 73 INTEGER , INTENT(in ) :: kt ! time step 74 INTEGER , INTENT(in ) :: Kmm ! time level index 74 75 !! 75 76 INTEGER :: ji, jj, jk ! dummy loop indices … … 87 88 DO jj = 1, jpj 88 89 DO ji = 1, jpi 89 zvm = e1e2t(ji,jj) * e3t _n(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj)90 zvm = e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * tmask_i(ji,jj) 90 91 zvt = ptrdx(ji,jj,jk) * zvm 91 92 zvs = ptrdy(ji,jj,jk) * zvm 92 93 tmo(ktrd) = tmo(ktrd) + zvt 93 94 smo(ktrd) = smo(ktrd) + zvs 94 t2 (ktrd) = t2(ktrd) + zvt * ts n(ji,jj,jk,jp_tem)95 s2 (ktrd) = s2(ktrd) + zvs * ts n(ji,jj,jk,jp_sal)95 t2 (ktrd) = t2(ktrd) + zvt * ts(ji,jj,jk,jp_tem,Kmm) 96 s2 (ktrd) = s2(ktrd) + zvs * ts(ji,jj,jk,jp_sal,Kmm) 96 97 END DO 97 98 END DO … … 99 100 ! ! linear free surface: diagnose advective flux trough the fixed k=1 w-surface 100 101 IF( ln_linssh .AND. ktrd == jptra_zad ) THEN 101 tmo(jptra_sad) = SUM( w n(:,:,1) * tsn(:,:,1,jp_tem) * e1e2t(:,:) * tmask_i(:,:) )102 smo(jptra_sad) = SUM( w n(:,:,1) * tsn(:,:,1,jp_sal) * e1e2t(:,:) * tmask_i(:,:) )103 t2 (jptra_sad) = SUM( w n(:,:,1) * tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) * e1e2t(:,:) * tmask_i(:,:) )104 s2 (jptra_sad) = SUM( w n(:,:,1) * tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) * e1e2t(:,:) * tmask_i(:,:) )102 tmo(jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_tem,Kmm) * e1e2t(:,:) * tmask_i(:,:) ) 103 smo(jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_sal,Kmm) * e1e2t(:,:) * tmask_i(:,:) ) 104 t2 (jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_tem,Kmm) * ts(:,:,1,jp_tem,Kmm) * e1e2t(:,:) * tmask_i(:,:) ) 105 s2 (jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_sal,Kmm) * ts(:,:,1,jp_sal,Kmm) * e1e2t(:,:) * tmask_i(:,:) ) 105 106 ENDIF 106 107 ! … … 121 122 DO ji = 1, jpim1 122 123 zvt = ptrdx(ji,jj,jk) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk) & 123 & * e1e2u (ji,jj) * e3u _n(ji,jj,jk)124 & * e1e2u (ji,jj) * e3u(ji,jj,jk,Kmm) 124 125 zvs = ptrdy(ji,jj,jk) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) & 125 & * e1e2v (ji,jj) * e3u _n(ji,jj,jk)126 & * e1e2v (ji,jj) * e3u(ji,jj,jk,Kmm) 126 127 umo(ktrd) = umo(ktrd) + zvt 127 128 vmo(ktrd) = vmo(ktrd) + zvs 128 hke(ktrd) = hke(ktrd) + u n(ji,jj,jk) * zvt + vn(ji,jj,jk) * zvs129 hke(ktrd) = hke(ktrd) + uu(ji,jj,jk,Kmm) * zvt + vv(ji,jj,jk,Kmm) * zvs 129 130 END DO 130 131 END DO … … 141 142 umo(jpdyn_tau) = umo(jpdyn_tau) + zvt 142 143 vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs 143 hke(jpdyn_tau) = hke(jpdyn_tau) + u n(ji,jj,1) * zvt + vn(ji,jj,1) * zvs144 hke(jpdyn_tau) = hke(jpdyn_tau) + uu(ji,jj,1,Kmm) * zvt + vv(ji,jj,1,Kmm) * zvs 144 145 END DO 145 146 END DO … … 155 156 ! ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 156 157 ! ikbv = mbkv(ji,jj) 157 ! zvt = 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * u n(ji,jj,ikbu) * e1e2u(ji,jj)158 ! zvs = 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * v n(ji,jj,ikbv) * e1e2v(ji,jj)158 ! zvt = 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu(ji,jj,ikbu,Kmm) * e1e2u(ji,jj) 159 ! zvs = 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv(ji,jj,ikbv,Kmm) * e1e2v(ji,jj) 159 160 ! umo(jpdyn_bfri) = umo(jpdyn_bfri) + zvt 160 161 ! vmo(jpdyn_bfri) = vmo(jpdyn_bfri) + zvs 161 ! hke(jpdyn_bfri) = hke(jpdyn_bfri) + u n(ji,jj,ikbu) * zvt + vn(ji,jj,ikbv) * zvs162 ! hke(jpdyn_bfri) = hke(jpdyn_bfri) + uu(ji,jj,ikbu,Kmm) * zvt + vv(ji,jj,ikbv,Kmm) * zvs 162 163 ! END DO 163 164 ! END DO … … 183 184 184 185 185 SUBROUTINE glo_dyn_wri( kt )186 SUBROUTINE glo_dyn_wri( kt, Kmm ) 186 187 !!--------------------------------------------------------------------- 187 188 !! *** ROUTINE glo_dyn_wri *** … … 190 191 !!---------------------------------------------------------------------- 191 192 INTEGER, INTENT(in) :: kt ! ocean time-step index 193 INTEGER, INTENT(in) :: Kmm ! time level index 192 194 ! 193 195 INTEGER :: ji, jj, jk ! dummy loop indices … … 209 211 zkepe(:,:,:) = 0._wp 210 212 211 CALL eos( ts n, rhd, rhop ) ! now potential density213 CALL eos( ts(:,:,:,:,Kmm), rhd, rhop ) ! now potential density 212 214 213 215 zcof = 0.5_wp / rau0 ! Density flux at w-point 214 216 zkz(:,:,1) = 0._wp 215 217 DO jk = 2, jpk 216 zkz(:,:,jk) = zcof * e1e2t(:,:) * w n(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:)218 zkz(:,:,jk) = zcof * e1e2t(:,:) * ww(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:) 217 219 END DO 218 220 … … 221 223 DO jj = 1, jpjm1 222 224 DO ji = 1, jpim1 223 zkx(ji,jj,jk) = zcof * e2u(ji,jj) * e3u _n(ji,jj,jk) * un(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) )224 zky(ji,jj,jk) = zcof * e1v(ji,jj) * e3v _n(ji,jj,jk) * vn(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) )225 zkx(ji,jj,jk) = zcof * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) * uu(ji,jj,jk,Kmm) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 226 zky(ji,jj,jk) = zcof * e1v(ji,jj) * e3v(ji,jj,jk,Kmm) * vv(ji,jj,jk,Kmm) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 225 227 END DO 226 228 END DO … … 233 235 & + zkx(ji,jj,jk) - zkx(ji-1,jj ,jk ) & 234 236 & + zky(ji,jj,jk) - zky(ji ,jj-1,jk ) ) & 235 & / ( e1e2t(ji,jj) * e3t _n(ji,jj,jk) ) * tmask(ji,jj,jk) * tmask_i(ji,jj)237 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) * tmask(ji,jj,jk) * tmask_i(ji,jj) 236 238 END DO 237 239 END DO … … 242 244 peke = 0._wp 243 245 DO jk = 1, jpkm1 244 peke = peke + SUM( zkepe(:,:,jk) * gdept _n(:,:,jk) * e1e2t(:,:) * e3t_n(:,:,jk) )246 peke = peke + SUM( zkepe(:,:,jk) * gdept(:,:,jk,Kmm) * e1e2t(:,:) * e3t(:,:,jk,Kmm) ) 245 247 END DO 246 248 peke = grav * peke … … 506 508 507 509 508 SUBROUTINE trd_glo_init 510 SUBROUTINE trd_glo_init( Kmm ) 509 511 !!--------------------------------------------------------------------- 510 512 !! *** ROUTINE trd_glo_init *** … … 512 514 !! ** Purpose : Read the namtrd namelist 513 515 !!---------------------------------------------------------------------- 516 INTEGER, INTENT(in) :: Kmm ! time level index 514 517 INTEGER :: ji, jj, jk ! dummy loop indices 515 518 !!---------------------------------------------------------------------- … … 524 527 tvolt = 0._wp 525 528 DO jk = 1, jpkm1 526 tvolt = tvolt + SUM( e1e2t(:,:) * e3t _n(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) )529 tvolt = tvolt + SUM( e1e2t(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) * tmask_i(:,:) ) 527 530 END DO 528 531 CALL mpp_sum( 'trdglo', tvolt ) ! sum over the global domain … … 541 544 DO jj = 2, jpjm1 542 545 DO ji = fs_2, fs_jpim1 ! vector opt. 543 tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * e3u _n(ji,jj,jk) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk)544 tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * e3v _n(ji,jj,jk) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)546 tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) * tmask_i(ji+1,jj ) * tmask_i(ji,jj) * umask(ji,jj,jk) 547 tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * e3v(ji,jj,jk,Kmm) * tmask_i(ji ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 545 548 END DO 546 549 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdini.F90
r10068 r10946 34 34 CONTAINS 35 35 36 SUBROUTINE trd_init 36 SUBROUTINE trd_init( Kmm ) 37 37 !!---------------------------------------------------------------------- 38 38 !! *** ROUTINE trd_init *** … … 40 40 !! ** Purpose : Initialization of trend diagnostics 41 41 !!---------------------------------------------------------------------- 42 INTEGER, INTENT(in) :: Kmm ! time level index 42 43 INTEGER :: ios ! local integer 43 44 !! … … 96 97 97 98 ! ! diagnostic initialization 98 IF( ln_glo_trd ) CALL trd_glo_init ! global domain averaged trends99 IF( ln_glo_trd ) CALL trd_glo_init( Kmm ) ! global domain averaged trends 99 100 IF( ln_tra_mxl ) CALL trd_mxl_init ! mixed-layer trends 100 101 IF( ln_vor_trd ) CALL trd_vor_init ! barotropic vorticity trends -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdken.F90
r10425 r10946 59 59 60 60 61 SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt )61 SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt, Kmm ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE trd_ken *** … … 67 67 !! ** Method : - apply lbc to the input masked velocity trends 68 68 !! - compute the associated KE trend: 69 !! zke = 0.5 * ( mi-1[ u n * putrd * bu ] + mj-1[ vn* pvtrd * bv] ) / bt69 !! zke = 0.5 * ( mi-1[ uu(Kmm) * putrd * bu ] + mj-1[ vv(Kmm) * pvtrd * bv] ) / bt 70 70 !! where bu, bv, bt are the volume of u-, v- and t-boxes. 71 71 !! - vertical diffusion case (jpdyn_zdf): … … 80 80 INTEGER , INTENT(in ) :: ktrd ! trend index 81 81 INTEGER , INTENT(in ) :: kt ! time step 82 INTEGER , INTENT(in ) :: Kmm ! time level index 82 83 ! 83 84 INTEGER :: ji, jj, jk ! dummy loop indices … … 92 93 nkstp = kt 93 94 DO jk = 1, jpkm1 94 bu (:,:,jk) = e1e2u(:,:) * e3u _n(:,:,jk)95 bv (:,:,jk) = e1e2v(:,:) * e3v _n(:,:,jk)96 r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t _n(:,:,jk) * tmask(:,:,jk)95 bu (:,:,jk) = e1e2u(:,:) * e3u(:,:,jk,Kmm) 96 bv (:,:,jk) = e1e2v(:,:) * e3v(:,:,jk,Kmm) 97 r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) * tmask(:,:,jk) 97 98 END DO 98 99 ! … … 103 104 DO jj = 2, jpj 104 105 DO ji = 2, jpi 105 zke(ji,jj,jk) = 0.5_wp * rau0 *( u n(ji ,jj,jk) * putrd(ji ,jj,jk) * bu(ji ,jj,jk) &106 & + u n(ji-1,jj,jk) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk) &107 & + v n(ji,jj ,jk) * pvtrd(ji,jj ,jk) * bv(ji,jj ,jk) &108 & + v n(ji,jj-1,jk) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk) ) * r1_bt(ji,jj,jk)106 zke(ji,jj,jk) = 0.5_wp * rau0 *( uu(ji ,jj,jk,Kmm) * putrd(ji ,jj,jk) * bu(ji ,jj,jk) & 107 & + uu(ji-1,jj,jk,Kmm) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk) & 108 & + vv(ji,jj ,jk,Kmm) * pvtrd(ji,jj ,jk) * bv(ji,jj ,jk) & 109 & + vv(ji,jj-1,jk,Kmm) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk) ) * r1_bt(ji,jj,jk) 109 110 END DO 110 111 END DO … … 122 123 ! ! ! wind stress trends 123 124 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) , zke2d(jpi,jpj) ) 124 z2dx(:,:) = u n(:,:,1) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1)125 z2dy(:,:) = v n(:,:,1) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1)125 z2dx(:,:) = uu(:,:,1,Kmm) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1) 126 z2dy(:,:) = vv(:,:,1,Kmm) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1) 126 127 zke2d(1,:) = 0._wp ; zke2d(:,1) = 0._wp 127 128 DO jj = 2, jpj … … 141 142 ! ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 142 143 ! ikbv = mbkv(ji,jj) 143 ! z2dx(ji,jj) = u n(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu)144 ! z2dy(ji,jj) = v n(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv)144 ! z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) 145 ! z2dy(ji,jj) = vv(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) 145 146 ! END DO 146 147 ! END DO … … 157 158 CASE( jpdyn_atf ) ; CALL iom_put( "ketrd_atf" , zke ) ! asselin filter trends 158 159 !! a faire !!!! idee changer dynnxt pour avoir un appel a jpdyn_bfr avant le swap !!! 159 !! reflechir a une possible sauvegarde du "vrai" u n,vnpour le calcul de atf....160 !! reflechir a une possible sauvegarde du "vrai" uu(Kmm),vv(Kmm) pour le calcul de atf.... 160 161 ! 161 162 ! IF( ln_drgimp ) THEN ! bottom friction (implicit case) … … 164 165 ! ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 165 166 ! ikbv = mbkv(ji,jj) 166 ! z2dx(ji,jj) = u n(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) / e3u_n(ji,jj,ikbu)167 ! z2dy(ji,jj) = u n(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) / e3v_n(ji,jj,ikbv)167 ! z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 168 ! z2dy(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 168 169 ! END DO 169 170 ! END DO … … 179 180 CASE( jpdyn_ken ) ; ! kinetic energy 180 181 ! called in dynnxt.F90 before asselin time filter 181 ! with putrd=u a and pvtrd=va182 ! with putrd=uu(Krhs) and pvtrd=vv(Krhs) 182 183 zke(:,:,:) = 0.5_wp * zke(:,:,:) 183 184 CALL iom_put( "KE", zke ) 184 185 ! 185 CALL ken_p2k( kt , zke )186 CALL ken_p2k( kt , zke, Kmm ) 186 187 CALL iom_put( "ketrd_convP2K", zke ) ! conversion -rau*g*w 187 188 ! … … 191 192 192 193 193 SUBROUTINE ken_p2k( kt , pconv )194 SUBROUTINE ken_p2k( kt , pconv, Kmm ) 194 195 !!--------------------------------------------------------------------- 195 196 !! *** ROUTINE ken_p2k *** … … 202 203 !!---------------------------------------------------------------------- 203 204 INTEGER , INTENT(in ) :: kt ! ocean time-step index 205 INTEGER , INTENT(in ) :: Kmm ! time level index 204 206 REAL(wp), DIMENSION(:,:,:), INTENT( out) :: pconv ! 205 207 ! … … 214 216 215 217 ! Surface value (also valid in partial step case) 216 zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * w n(:,:,1) * e3w_n(:,:,1)218 zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * ww(:,:,1) * e3w(:,:,1,Kmm) 217 219 218 220 ! interior value (2=<jk=<jpkm1) 219 221 DO jk = 2, jpk 220 zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * w n(:,:,jk) * e3w_n(:,:,jk)222 zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * ww(:,:,jk) * e3w(:,:,jk,Kmm) 221 223 END DO 222 224 … … 225 227 DO jj = 1, jpj 226 228 DO ji = 1, jpi 227 zcoef = 0.5_wp / e3t _n(ji,jj,jk)229 zcoef = 0.5_wp / e3t(ji,jj,jk,Kmm) 228 230 pconv(ji,jj,jk) = zcoef * ( zconv(ji,jj,jk) + zconv(ji,jj,jk+1) ) * tmask(ji,jj,jk) 229 231 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdmxl.F90
r10425 r10946 86 86 87 87 88 SUBROUTINE trd_tra_mxl( ptrdx, ptrdy, ktrd, kt, p2dt, kmxln )88 SUBROUTINE trd_tra_mxl( ptrdx, ptrdy, ktrd, kt, p2dt, kmxln, Kmm ) 89 89 !!---------------------------------------------------------------------- 90 90 !! *** ROUTINE trd_tra_mng *** … … 98 98 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 99 99 INTEGER , INTENT(in ) :: kt ! time step index 100 INTEGER , INTENT(in ) :: Kmm ! time level index 100 101 REAL(wp) , INTENT(in ) :: p2dt ! time step [s] 101 102 REAL(wp), DIMENSION(:,:) , INTENT(in ) :: kmxln ! number of t-box for the vertical average … … 119 120 DO jj = 1,jpj 120 121 DO ji = 1,jpi 121 IF( jk - kmxln(ji,jj) < 0 ) wkx(ji,jj,jk) = e3t _n(ji,jj,jk) * tmask(ji,jj,jk)122 IF( jk - kmxln(ji,jj) < 0 ) wkx(ji,jj,jk) = e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 122 123 END DO 123 124 END DO … … 136 137 tml(:,:) = 0._wp ; sml(:,:) = 0._wp 137 138 DO jk = 1, jpktrd 138 tml(:,:) = tml(:,:) + wkx(:,:,jk) * ts n(:,:,jk,jp_tem)139 sml(:,:) = sml(:,:) + wkx(:,:,jk) * ts n(:,:,jk,jp_sal)139 tml(:,:) = tml(:,:) + wkx(:,:,jk) * ts(:,:,jk,jp_tem,Kmm) 140 sml(:,:) = sml(:,:) + wkx(:,:,jk) * ts(:,:,jk,jp_sal,Kmm) 140 141 END DO 141 142 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdpen.F90
r10425 r10946 55 55 56 56 57 SUBROUTINE trd_pen( ptrdx, ptrdy, ktrd, kt, pdt )57 SUBROUTINE trd_pen( ptrdx, ptrdy, ktrd, kt, pdt, Kmm ) 58 58 !!--------------------------------------------------------------------- 59 59 !! *** ROUTINE trd_tra_mng *** … … 66 66 INTEGER , INTENT(in) :: ktrd ! tracer trend index 67 67 INTEGER , INTENT(in) :: kt ! time step index 68 INTEGER , INTENT(in) :: Kmm ! time level index 68 69 REAL(wp) , INTENT(in) :: pdt ! time step [s] 69 70 ! … … 77 78 IF( kt /= nkstp ) THEN ! full eos: set partial derivatives at the 1st call of kt time step 78 79 nkstp = kt 79 CALL eos_pen( ts n, rab_PE, zpe )80 CALL eos_pen( ts(:,:,:,:,Kmm), rab_PE, zpe ) 80 81 CALL iom_put( "alphaPE", rab_pe(:,:,:,jp_tem) ) 81 82 CALL iom_put( "betaPE" , rab_pe(:,:,:,jp_sal) ) … … 95 96 IF( ln_linssh ) THEN ! cst volume : adv flux through z=0 surface 96 97 ALLOCATE( z2d(jpi,jpj) ) 97 z2d(:,:) = w n(:,:,1) * ( &98 & - ( rab_n(:,:,1,jp_tem) + rab_pe(:,:,1,jp_tem) ) * ts n(:,:,1,jp_tem) &99 & + ( rab_n(:,:,1,jp_sal) + rab_pe(:,:,1,jp_sal) ) * ts n(:,:,1,jp_sal) &100 & ) / e3t _n(:,:,1)98 z2d(:,:) = ww(:,:,1) * ( & 99 & - ( rab_n(:,:,1,jp_tem) + rab_pe(:,:,1,jp_tem) ) * ts(:,:,1,jp_tem,Kmm) & 100 & + ( rab_n(:,:,1,jp_sal) + rab_pe(:,:,1,jp_sal) ) * ts(:,:,1,jp_sal,Kmm) & 101 & ) / e3t(:,:,1,Kmm) 101 102 CALL iom_put( "petrd_sad" , z2d ) 102 103 DEALLOCATE( z2d ) … … 112 113 CASE ( jptra_bbc ) ; CALL iom_put( "petrd_bbc" , zpe ) ! bottom bound cond (geoth flux) 113 114 CASE ( jptra_atf ) ; CALL iom_put( "petrd_atf" , zpe ) ! asselin time filter (last trend) 114 !IF( ln_linssh ) THEN ! cst volume : ssh term (otherwise include in e3t variation)115 ! ALLOCATE( z2d(jpi,jpj) )116 ! z2d(:,:) = ( ssha(:,:) - sshb(:,:) ) &117 ! & * ( dPE_dt(:,:,1) * tsn(:,:,1,jp_tem) &118 ! & + dPE_ds(:,:,1) * tsn(:,:,1,jp_sal) ) / ( e3t_n(:,:,1) * pdt )119 ! CALL iom_put( "petrd_sad" , z2d )120 ! DEALLOCATE( z2d )121 !ENDIF122 115 ! 123 116 END SELECT -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdtra.F90
r10425 r10946 60 60 61 61 62 SUBROUTINE trd_tra( kt, ctype, ktra, ktrd, ptrd, pun, ptra )62 SUBROUTINE trd_tra( kt, Kmm, Krhs, ctype, ktra, ktrd, ptrd, pu, ptra ) 63 63 !!--------------------------------------------------------------------- 64 64 !! *** ROUTINE trd_tra *** … … 77 77 INTEGER , INTENT(in) :: ktra ! tracer index 78 78 INTEGER , INTENT(in) :: ktrd ! tracer trend index 79 INTEGER , INTENT(in) :: Kmm, Krhs ! time level indices 79 80 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: ptrd ! tracer trend or flux 80 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: pu n! now velocity81 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: pu ! now velocity 81 82 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: ptra ! now tracer variable 82 83 ! … … 94 95 SELECT CASE( ktrd ) 95 96 ! ! advection: transform the advective flux into a trend 96 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd, pu n, ptra, 'X', trdtx)97 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd, pu n, ptra, 'Y', trdty)98 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd, pu n, ptra, 'Z', trdt )97 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd, pu, ptra, 'X', trdtx, Kmm ) 98 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd, pu, ptra, 'Y', trdty, Kmm ) 99 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd, pu, ptra, 'Z', trdt, Kmm ) 99 100 CASE( jptra_bbc, & ! qsr, bbc: on temperature only, send to trd_tra_mng 100 101 & jptra_qsr ) ; trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 101 102 ztrds(:,:,:) = 0._wp 102 CALL trd_tra_mng( trdt, ztrds, ktrd, kt )103 CALL trd_tra_mng( trdt, ztrds, ktrd, kt, Kmm ) 103 104 !!gm Gurvan, verify the jptra_evd trend please ! 104 105 CASE( jptra_evd ) ; avt_evd(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) … … 114 115 ! ! advection: transform the advective flux into a trend 115 116 ! ! and send T & S trends to trd_tra_mng 116 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pu n , ptra, 'X' , ztrds)117 CALL trd_tra_mng( trdtx, ztrds, ktrd, kt )118 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pu n , ptra, 'Y' , ztrds)119 CALL trd_tra_mng( trdty, ztrds, ktrd, kt )120 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pu n , ptra, 'Z' , ztrds)121 CALL trd_tra_mng( trdt , ztrds, ktrd, kt )117 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pu , ptra, 'X' , ztrds, Kmm ) 118 CALL trd_tra_mng( trdtx, ztrds, ktrd, kt, Kmm ) 119 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pu , ptra, 'Y' , ztrds, Kmm ) 120 CALL trd_tra_mng( trdty, ztrds, ktrd, kt, Kmm ) 121 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pu , ptra, 'Z' , ztrds, Kmm ) 122 CALL trd_tra_mng( trdt , ztrds, ktrd, kt, Kmm ) 122 123 CASE( jptra_zdfp ) ! diagnose the "PURE" Kz trend (here: just before the swap) 123 124 ! ! iso-neutral diffusion case otherwise jptra_zdf is "PURE" … … 127 128 zwt(:,:,jpk) = 0._wp ; zws(:,:,jpk) = 0._wp 128 129 DO jk = 2, jpk 129 zwt(:,:,jk) = avt(:,:,jk) * ( ts a(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk)130 zws(:,:,jk) = avs(:,:,jk) * ( ts a(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk)130 zwt(:,:,jk) = avt(:,:,jk) * ( ts(:,:,jk-1,jp_tem,Krhs) - ts(:,:,jk,jp_tem,Krhs) ) / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 131 zws(:,:,jk) = avs(:,:,jk) * ( ts(:,:,jk-1,jp_sal,Krhs) - ts(:,:,jk,jp_sal,Krhs) ) / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 131 132 END DO 132 133 ! 133 134 ztrdt(:,:,jpk) = 0._wp ; ztrds(:,:,jpk) = 0._wp 134 135 DO jk = 1, jpkm1 135 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t _n(:,:,jk)136 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t _n(:,:,jk)137 END DO 138 CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt )136 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t(:,:,jk,Kmm) 137 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t(:,:,jk,Kmm) 138 END DO 139 CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt, Kmm ) 139 140 ! 140 141 ! ! Also calculate EVD trend at this point. 141 142 zwt(:,:,:) = 0._wp ; zws(:,:,:) = 0._wp ! vertical diffusive fluxes 142 143 DO jk = 2, jpk 143 zwt(:,:,jk) = avt_evd(:,:,jk) * ( ts a(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk)144 zws(:,:,jk) = avt_evd(:,:,jk) * ( ts a(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk)144 zwt(:,:,jk) = avt_evd(:,:,jk) * ( ts(:,:,jk-1,jp_tem,Krhs) - ts(:,:,jk,jp_tem,Krhs) ) / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 145 zws(:,:,jk) = avt_evd(:,:,jk) * ( ts(:,:,jk-1,jp_sal,Krhs) - ts(:,:,jk,jp_sal,Krhs) ) / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 145 146 END DO 146 147 ! 147 148 ztrdt(:,:,jpk) = 0._wp ; ztrds(:,:,jpk) = 0._wp 148 149 DO jk = 1, jpkm1 149 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t _n(:,:,jk)150 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t _n(:,:,jk)151 END DO 152 CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt )150 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t(:,:,jk,Kmm) 151 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t(:,:,jk,Kmm) 152 END DO 153 CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt, Kmm ) 153 154 ! 154 155 DEALLOCATE( zwt, zws, ztrdt ) … … 156 157 CASE DEFAULT ! other trends: mask and send T & S trends to trd_tra_mng 157 158 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 158 CALL trd_tra_mng( trdt, ztrds, ktrd, kt )159 CALL trd_tra_mng( trdt, ztrds, ktrd, kt, Kmm ) 159 160 END SELECT 160 161 ENDIF … … 164 165 SELECT CASE( ktrd ) 165 166 ! ! advection: transform the advective flux into a masked trend 166 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pu n , ptra, 'X', ztrds)167 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pu n , ptra, 'Y', ztrds)168 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pu n , ptra, 'Z', ztrds)167 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pu , ptra, 'X', ztrds, Kmm ) 168 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pu , ptra, 'Y', ztrds, Kmm ) 169 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pu , ptra, 'Z', ztrds, Kmm ) 169 170 CASE DEFAULT ! other trends: just masked 170 171 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) … … 178 179 179 180 180 SUBROUTINE trd_tra_adv( pf, pu n, ptn, cdir, ptrd)181 SUBROUTINE trd_tra_adv( pf, pu, pt, cdir, ptrd, Kmm ) 181 182 !!--------------------------------------------------------------------- 182 183 !! *** ROUTINE trd_tra_adv *** … … 191 192 !!---------------------------------------------------------------------- 192 193 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pf ! advective flux in one direction 193 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pu n! now velocity in one direction194 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pt n! now or before tracer194 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pu ! now velocity in one direction 195 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pt ! now or before tracer 195 196 CHARACTER(len=1) , INTENT(in ) :: cdir ! X/Y/Z direction 196 197 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: ptrd ! advective trend in one direction 198 INTEGER, INTENT(in) :: Kmm ! time level index 197 199 ! 198 200 INTEGER :: ji, jj, jk ! dummy loop indices … … 215 217 DO ji = fs_2, fs_jpim1 ! vector opt. 216 218 ptrd(ji,jj,jk) = - ( pf (ji,jj,jk) - pf (ji-ii,jj-ij,jk-ik) & 217 & - ( pu n(ji,jj,jk) - pun(ji-ii,jj-ij,jk-ik) ) * ptn(ji,jj,jk) ) &218 & * r1_e1e2t(ji,jj) / e3t _n(ji,jj,jk) * tmask(ji,jj,jk)219 & - ( pu(ji,jj,jk) - pu(ji-ii,jj-ij,jk-ik) ) * pt(ji,jj,jk) ) & 220 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 219 221 END DO 220 222 END DO … … 224 226 225 227 226 SUBROUTINE trd_tra_mng( ptrdx, ptrdy, ktrd, kt )228 SUBROUTINE trd_tra_mng( ptrdx, ptrdy, ktrd, kt, Kmm ) 227 229 !!--------------------------------------------------------------------- 228 230 !! *** ROUTINE trd_tra_mng *** … … 236 238 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 237 239 INTEGER , INTENT(in ) :: kt ! time step 240 INTEGER , INTENT(in ) :: Kmm ! time level index 238 241 !!---------------------------------------------------------------------- 239 242 … … 243 246 244 247 ! ! 3D output of tracers trends using IOM interface 245 IF( ln_tra_trd ) CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt )248 IF( ln_tra_trd ) CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt, Kmm ) 246 249 247 250 ! ! Integral Constraints Properties for tracers trends !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 248 IF( ln_glo_trd ) CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt )251 IF( ln_glo_trd ) CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt, Kmm ) 249 252 250 253 ! ! Potential ENergy trends 251 IF( ln_PE_trd ) CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt )254 IF( ln_PE_trd ) CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt, Kmm ) 252 255 253 256 ! ! Mixed layer trends for active tracers … … 290 293 291 294 292 SUBROUTINE trd_tra_iom( ptrdx, ptrdy, ktrd, kt )295 SUBROUTINE trd_tra_iom( ptrdx, ptrdy, ktrd, kt, Kmm ) 293 296 !!--------------------------------------------------------------------- 294 297 !! *** ROUTINE trd_tra_iom *** … … 300 303 INTEGER , INTENT(in ) :: ktrd ! tracer trend index 301 304 INTEGER , INTENT(in ) :: kt ! time step 305 INTEGER , INTENT(in ) :: Kmm ! time level index 302 306 !! 303 307 INTEGER :: ji, jj, jk ! dummy loop indices … … 326 330 IF( ln_linssh ) THEN ! cst volume : adv flux through z=0 surface 327 331 ALLOCATE( z2dx(jpi,jpj), z2dy(jpi,jpj) ) 328 z2dx(:,:) = w n(:,:,1) * tsn(:,:,1,jp_tem) / e3t_n(:,:,1)329 z2dy(:,:) = w n(:,:,1) * tsn(:,:,1,jp_sal) / e3t_n(:,:,1)332 z2dx(:,:) = ww(:,:,1) * ts(:,:,1,jp_tem,Kmm) / e3t(:,:,1,Kmm) 333 z2dy(:,:) = ww(:,:,1) * ts(:,:,1,jp_sal,Kmm) / e3t(:,:,1,Kmm) 330 334 CALL iom_put( "ttrd_sad", z2dx ) 331 335 CALL iom_put( "strd_sad", z2dy ) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdvor.F90
r10425 r10946 78 78 79 79 80 SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt )80 SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt, Kmm ) 81 81 !!---------------------------------------------------------------------- 82 82 !! *** ROUTINE trd_vor *** … … 88 88 INTEGER , INTENT(in ) :: ktrd ! trend index 89 89 INTEGER , INTENT(in ) :: kt ! time step 90 INTEGER , INTENT(in ) :: Kmm ! time level index 90 91 ! 91 92 INTEGER :: ji, jj ! dummy loop indices … … 94 95 95 96 SELECT CASE( ktrd ) 96 CASE( jpdyn_hpg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_prg ) ! Hydrostatique Pressure Gradient97 CASE( jpdyn_keg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_keg ) ! KE Gradient98 CASE( jpdyn_rvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo ) ! Relative Vorticity99 CASE( jpdyn_pvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo ) ! Planetary Vorticity Term100 CASE( jpdyn_ldf ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf ) ! Horizontal Diffusion101 CASE( jpdyn_zad ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_zad ) ! Vertical Advection102 CASE( jpdyn_spg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_spg ) ! Surface Pressure Grad.97 CASE( jpdyn_hpg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_prg, Kmm ) ! Hydrostatique Pressure Gradient 98 CASE( jpdyn_keg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_keg, Kmm ) ! KE Gradient 99 CASE( jpdyn_rvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo, Kmm ) ! Relative Vorticity 100 CASE( jpdyn_pvo ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo, Kmm ) ! Planetary Vorticity Term 101 CASE( jpdyn_ldf ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf, Kmm ) ! Horizontal Diffusion 102 CASE( jpdyn_zad ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_zad, Kmm ) ! Vertical Advection 103 CASE( jpdyn_spg ) ; CALL trd_vor_zint( putrd, pvtrd, jpvor_spg, Kmm ) ! Surface Pressure Grad. 103 104 CASE( jpdyn_zdf ) ! Vertical Diffusion 104 105 ztswu(:,:) = 0.e0 ; ztswv(:,:) = 0.e0 105 106 DO jj = 2, jpjm1 ! wind stress trends 106 107 DO ji = fs_2, fs_jpim1 ! vector opt. 107 ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u _n(ji,jj,1) * rau0 )108 ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v _n(ji,jj,1) * rau0 )108 ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rau0 ) 109 ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rau0 ) 109 110 END DO 110 111 END DO 111 112 ! 112 CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf ) ! zdf trend including surf./bot. stresses113 CALL trd_vor_zint( ztswu, ztswv, jpvor_swf ) ! surface wind stress113 CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf, Kmm ) ! zdf trend including surf./bot. stresses 114 CALL trd_vor_zint( ztswu, ztswv, jpvor_swf, Kmm ) ! surface wind stress 114 115 CASE( jpdyn_bfr ) 115 CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr ) ! Bottom stress116 CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr, Kmm ) ! Bottom stress 116 117 ! 117 118 CASE( jpdyn_atf ) ! last trends: perform the output of 2D vorticity trends 118 CALL trd_vor_iom( kt )119 CALL trd_vor_iom( kt, Kmm ) 119 120 END SELECT 120 121 ! … … 122 123 123 124 124 SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd )125 SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd, Kmm ) 125 126 !!---------------------------------------------------------------------------- 126 127 !! *** ROUTINE trd_vor_zint *** … … 150 151 !!---------------------------------------------------------------------- 151 152 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 153 INTEGER , INTENT(in ) :: Kmm ! time level index 152 154 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: putrdvor ! u vorticity trend 153 155 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pvtrdvor ! v vorticity trend … … 175 177 ikbu = mbkv(ji,jj) 176 178 ikbv = mbkv(ji,jj) 177 zudpvor(ji,jj) = putrdvor(ji,jj) * e3u _n(ji,jj,ikbu) * e1u(ji,jj) * umask(ji,jj,ikbu)178 zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v _n(ji,jj,ikbv) * e2v(ji,jj) * vmask(ji,jj,ikbv)179 zudpvor(ji,jj) = putrdvor(ji,jj) * e3u(ji,jj,ikbu,Kmm) * e1u(ji,jj) * umask(ji,jj,ikbu) 180 zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v(ji,jj,ikbv,Kmm) * e2v(ji,jj) * vmask(ji,jj,ikbv) 179 181 END DO 180 182 END DO 181 183 ! 182 184 CASE( jpvor_swf ) ! wind stress 183 zudpvor(:,:) = putrdvor(:,:) * e3u _n(:,:,1) * e1u(:,:) * umask(:,:,1)184 zvdpvor(:,:) = pvtrdvor(:,:) * e3v _n(:,:,1) * e2v(:,:) * vmask(:,:,1)185 zudpvor(:,:) = putrdvor(:,:) * e3u(:,:,1,Kmm) * e1u(:,:) * umask(:,:,1) 186 zvdpvor(:,:) = pvtrdvor(:,:) * e3v(:,:,1,Kmm) * e2v(:,:) * vmask(:,:,1) 185 187 ! 186 188 END SELECT … … 207 209 208 210 209 SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd )211 SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd , Kmm ) 210 212 !!---------------------------------------------------------------------------- 211 213 !! *** ROUTINE trd_vor_zint *** … … 236 238 ! 237 239 INTEGER , INTENT(in ) :: ktrd ! ocean trend index 240 INTEGER , INTENT(in ) :: Kmm ! time level index 238 241 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: putrdvor ! u vorticity trend 239 242 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pvtrdvor ! v vorticity trend … … 257 260 ! putrdvor and pvtrdvor terms 258 261 DO jk = 1,jpk 259 zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u _n(:,:,jk) * e1u(:,:) * umask(:,:,jk)260 zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v _n(:,:,jk) * e2v(:,:) * vmask(:,:,jk)262 zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u(:,:,jk,Kmm) * e1u(:,:) * umask(:,:,jk) 263 zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v(:,:,jk,Kmm) * e2v(:,:) * vmask(:,:,jk) 261 264 END DO 262 265 … … 298 301 299 302 300 SUBROUTINE trd_vor_iom( kt )303 SUBROUTINE trd_vor_iom( kt , Kmm ) 301 304 !!---------------------------------------------------------------------- 302 305 !! *** ROUTINE trd_vor *** … … 306 309 !!---------------------------------------------------------------------- 307 310 INTEGER , INTENT(in ) :: kt ! time step 311 INTEGER , INTENT(in ) :: Kmm ! time level index 308 312 ! 309 313 INTEGER :: ji, jj, jk, jl ! dummy loop indices 310 314 INTEGER :: it, itmod ! local integers 311 315 REAL(wp) :: zmean ! local scalars 312 REAL(wp), DIMENSION(jpi,jpj) :: zu n, zvn316 REAL(wp), DIMENSION(jpi,jpj) :: zuu, zvv 313 317 !!---------------------------------------------------------------------- 314 318 … … 327 331 328 332 vor_avr (:,:) = 0._wp 329 zu n(:,:) = 0._wp330 zv n(:,:) = 0._wp333 zuu (:,:) = 0._wp 334 zvv (:,:) = 0._wp 331 335 vor_avrtot(:,:) = 0._wp 332 336 vor_avrres(:,:) = 0._wp … … 334 338 ! Vertically averaged velocity 335 339 DO jk = 1, jpk - 1 336 zu n(:,:) = zun(:,:) + e1u(:,:) * un(:,:,jk) * e3u_n(:,:,jk)337 zv n(:,:) = zvn(:,:) + e2v(:,:) * vn(:,:,jk) * e3v_n(:,:,jk)340 zuu(:,:) = zuu(:,:) + e1u(:,:) * uu(:,:,jk,Kmm) * e3u(:,:,jk,Kmm) 341 zvv(:,:) = zvv(:,:) + e2v(:,:) * vv(:,:,jk,Kmm) * e3v(:,:,jk,Kmm) 338 342 END DO 339 343 340 zu n(:,:) = zun(:,:) * r1_hu_n(:,:)341 zv n(:,:) = zvn(:,:) * r1_hv_n(:,:)344 zuu(:,:) = zuu(:,:) * r1_hu_n(:,:) 345 zvv(:,:) = zvv(:,:) * r1_hv_n(:,:) 342 346 343 347 ! Curl 344 348 DO ji = 1, jpim1 345 349 DO jj = 1, jpjm1 346 vor_avr(ji,jj) = ( ( zv n(ji+1,jj) - zvn(ji,jj) ) &347 & - ( zu n(ji,jj+1) - zun(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1)350 vor_avr(ji,jj) = ( ( zvv(ji+1,jj) - zvv(ji,jj) ) & 351 & - ( zuu(ji,jj+1) - zuu(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 348 352 END DO 349 353 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/USR/usrdef_sbc.F90
r10425 r10946 39 39 CONTAINS 40 40 41 SUBROUTINE usrdef_sbc_oce( kt )41 SUBROUTINE usrdef_sbc_oce( kt, Kbb ) 42 42 !!--------------------------------------------------------------------- 43 43 !! *** ROUTINE usrdef_sbc *** … … 55 55 !!---------------------------------------------------------------------- 56 56 INTEGER, INTENT(in) :: kt ! ocean time step 57 INTEGER, INTENT(in) :: Kbb ! ocean time index 57 58 !! 58 59 INTEGER :: ji, jj ! dummy loop indices … … 119 120 ! 23.5 deg : tropics 120 121 qsr (ji,jj) = 230 * COS( 3.1415 * ( gphit(ji,jj) - 23.5 * zcos_sais1 ) / ( 0.9 * 180 ) ) 121 qns (ji,jj) = ztrp * ( ts b(ji,jj,1,jp_tem) - t_star ) - qsr(ji,jj)122 qns (ji,jj) = ztrp * ( ts(ji,jj,1,jp_tem,Kbb) - t_star ) - qsr(ji,jj) 122 123 IF( gphit(ji,jj) >= 14.845 .AND. 37.2 >= gphit(ji,jj) ) THEN ! zero at 37.8 deg, max at 24.6 deg 123 124 emp (ji,jj) = zemp_S * zconv & -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfdrg.F90
r10069 r10946 144 144 145 145 146 SUBROUTINE zdf_drg_exp( kt, pub, pvb, pua, pva )146 SUBROUTINE zdf_drg_exp( kt, Kmm, pub, pvb, pua, pva ) 147 147 !!---------------------------------------------------------------------- 148 148 !! *** ROUTINE zdf_drg_exp *** … … 157 157 !!--------------------------------------------------------------------- 158 158 INTEGER , INTENT(in ) :: kt ! ocean time-step index 159 INTEGER , INTENT(in ) :: Kmm ! time level indices 159 160 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pub, pvb ! the two components of the before velocity 160 161 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! the two components of the velocity tendency … … 209 210 ztrdu(:,:,:) = pua(:,:,:) - ztrdu(:,:,:) 210 211 ztrdv(:,:,:) = pva(:,:,:) - ztrdv(:,:,:) 211 CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt )212 CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt, Kmm ) 212 213 DEALLOCATE( ztrdu, ztrdv ) 213 214 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfevd.F90
r10068 r10946 38 38 CONTAINS 39 39 40 SUBROUTINE zdf_evd( kt, p_avm, p_avt )40 SUBROUTINE zdf_evd( kt, Kmm, Krhs, p_avm, p_avt ) 41 41 !!---------------------------------------------------------------------- 42 42 !! *** ROUTINE zdf_evd *** … … 56 56 !!---------------------------------------------------------------------- 57 57 INTEGER , INTENT(in ) :: kt ! ocean time-step indexocean time step 58 INTEGER , INTENT(in ) :: Kmm, Krhs ! time level indices 58 59 REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: p_avm, p_avt ! momentum and tracer Kz (w-points) 59 60 ! … … 117 118 zavt_evd(:,:,:) = p_avt(:,:,:) - zavt_evd(:,:,:) ! change in avt due to evd 118 119 CALL iom_put( "avt_evd", zavt_evd ) ! output this change 119 IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd )120 IF( l_trdtra ) CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_evd, zavt_evd ) 120 121 ! 121 122 END SUBROUTINE zdf_evd -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfosm.F90
r10883 r10946 122 122 123 123 124 SUBROUTINE zdf_osm( kt, Kbb, Kmm, p_avm, p_avt )124 SUBROUTINE zdf_osm( kt, Kbb, Kmm, Krhs, p_avm, p_avt ) 125 125 !!---------------------------------------------------------------------- 126 126 !! *** ROUTINE zdf_osm *** … … 158 158 !!---------------------------------------------------------------------- 159 159 INTEGER , INTENT(in ) :: kt ! ocean time step 160 INTEGER , INTENT(in ) :: Kbb, Kmm 160 INTEGER , INTENT(in ) :: Kbb, Kmm, Krhs ! ocean time level indices 161 161 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: p_avm, p_avt ! momentum and tracer Kz (w-points) 162 162 !! … … 1661 1661 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 1662 1662 !!bug gm jpttdzdf ==> jpttosm 1663 CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdf, ztrdt )1664 CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdf, ztrds )1663 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 1664 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdf, ztrds ) 1665 1665 DEALLOCATE( ztrdt ) ; DEALLOCATE( ztrds ) 1666 1666 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfphy.F90
r10883 r10946 220 220 221 221 222 SUBROUTINE zdf_phy( kt, Kbb, Kmm )222 SUBROUTINE zdf_phy( kt, Kbb, Kmm, Krhs ) 223 223 !!---------------------------------------------------------------------- 224 224 !! *** ROUTINE zdf_phy *** … … 233 233 !!---------------------------------------------------------------------- 234 234 INTEGER, INTENT(in) :: kt ! ocean time-step index 235 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean time level indices235 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! ocean time level indices 236 236 ! 237 237 INTEGER :: ji, jj, jk ! dummy loop indice … … 264 264 CASE( np_TKE ) ; CALL zdf_tke( kt, Kbb, Kmm, zsh2, avm_k, avt_k ) ! TKE closure scheme for Kz 265 265 CASE( np_GLS ) ; CALL zdf_gls( kt, Kbb, Kmm, zsh2, avm_k, avt_k ) ! GLS closure scheme for Kz 266 CASE( np_OSM ) ; CALL zdf_osm( kt, Kbb, Kmm 266 CASE( np_OSM ) ; CALL zdf_osm( kt, Kbb, Kmm, Krhs, avm_k, avt_k ) ! OSMOSIS closure scheme for Kz 267 267 ! CASE( np_CST ) ! Constant Kz (reset avt, avm to the background value) 268 268 ! ! avt_k and avm_k set one for all at initialisation phase … … 283 283 ENDIF 284 284 ! 285 IF( ln_zdfevd ) CALL zdf_evd( kt, avm, avt ) !* convection: enhanced vertical eddy diffusivity285 IF( ln_zdfevd ) CALL zdf_evd( kt, Kmm, Krhs, avm, avt ) !* convection: enhanced vertical eddy diffusivity 286 286 ! 287 287 ! !* double diffusive mixing -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/nemogcm.F90
r10928 r10946 490 490 IF( lk_diadct ) CALL dia_dct_init ! Sections tranports 491 491 CALL dia_hsb_init ! heat content, salt content and volume budgets 492 CALL trd_init ! Mixed-layer/Vorticity/Integral constraints trends493 CALL dia_obs_init( Nnn ) 492 CALL trd_init( Nnn ) ! Mixed-layer/Vorticity/Integral constraints trends 493 CALL dia_obs_init( Nnn ) ! Initialize observational data 494 494 CALL dia_tmb_init ! TMB outputs 495 495 CALL dia_25h_init ! 25h mean outputs -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/step.F90
r10928 r10946 137 137 138 138 ! VERTICAL PHYSICS 139 CALL zdf_phy( kstp, Nbb, Nnn ) ! vertical physics update (top/bot drag, avt, avs, avm + MLD)139 CALL zdf_phy( kstp, Nbb, Nnn, Nrhs ) ! vertical physics update (top/bot drag, avt, avs, avm + MLD) 140 140 141 141 ! LATERAL PHYSICS … … 197 197 CALL dyn_ldf( kstp, Nbb, Nnn , uu, vv, Nrhs ) ! lateral mixing 198 198 IF( ln_zdfosm ) CALL dyn_osm( kstp, Nnn , uu, vv, Nrhs ) ! OSMOSIS non-local velocity fluxes ==> RHS 199 CALL dyn_hpg( kstp, Nnn ,uu, vv, Nrhs ) ! horizontal gradient of Hydrostatic pressure199 CALL dyn_hpg( kstp, Nnn , uu, vv, Nrhs ) ! horizontal gradient of Hydrostatic pressure 200 200 CALL dyn_spg( kstp, Nbb, Nnn, Nrhs, uu, vv, ssh, uu_b, vv_b, Naa ) ! surface pressure gradient 201 201 … … 242 242 IF( lk_asminc .AND. ln_asmiau .AND. & 243 243 & ln_trainc ) CALL tra_asm_inc ( kstp ) ! apply tracer assimilation increment 244 CALL tra_sbc ( kstp ) ! surface boundary condition245 IF( ln_traqsr ) CALL tra_qsr ( kstp ) ! penetrative solar radiation qsr246 IF( ln_trabbc ) CALL tra_bbc ( kstp ) ! bottom heat flux247 IF( ln_trabbl ) CALL tra_bbl ( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme248 IF( ln_tradmp ) CALL tra_dmp ( kstp ) ! internal damping trends244 CALL tra_sbc ( kstp, Nnn, Nrhs ) ! surface boundary condition 245 IF( ln_traqsr ) CALL tra_qsr ( kstp, Nnn, Nrhs ) ! penetrative solar radiation qsr 246 IF( ln_trabbc ) CALL tra_bbc ( kstp, Nnn, Nrhs ) ! bottom heat flux 247 IF( ln_trabbl ) CALL tra_bbl ( kstp, Nnn, Nrhs ) ! advective (and/or diffusive) bottom boundary layer scheme 248 IF( ln_tradmp ) CALL tra_dmp ( kstp, Nnn, Nrhs ) ! internal damping trends 249 249 IF( ln_bdy ) CALL bdy_tra_dmp ( kstp ) ! bdy damping trends 250 250 #if defined key_agrif … … 256 256 IF( lrst_oce .AND. ln_zdfosm ) & 257 257 & CALL osm_rst( kstp, Nnn, 'WRITE' )! write OSMOSIS outputs + wn (so must do here) to restarts 258 CALL tra_ldf ( kstp, Nnn )! lateral mixing258 CALL tra_ldf( kstp, Nnn, Nrhs ) ! lateral mixing 259 259 260 260 !!gm : why CALL to dia_ptr has been moved here??? (use trends info?) … … 262 262 !!gm 263 263 CALL tra_zdf( kstp, Nbb, Nnn, Nrhs, ts, Naa ) ! vert. mixing & after tracer ==> after 264 IF( ln_zdfnpc ) CALL tra_npc ( kstp) ! update after fields by non-penetrative convection264 IF( ln_zdfnpc ) CALL tra_npc( kstp, Nnn, Nrhs ) ! update after fields by non-penetrative convection 265 265 266 266 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> … … 281 281 !! 282 282 !!jc2: dynnxt must be the latest call. e3t_b are indeed updated in that routine 283 CALL tra_nxt ( kstp ) ! finalize (bcs) tracer fields at next time step and swap284 CALL dyn_nxt ( kstp )! finalize (bcs) velocities at next time step and swap (always called after tra_nxt)283 CALL tra_nxt ( kstp, Nnn, Nrhs ) ! finalize (bcs) tracer fields at next time step and swap 284 CALL dyn_nxt ( kstp, Nnn ) ! finalize (bcs) velocities at next time step and swap (always called after tra_nxt) 285 285 CALL ssh_swp ( kstp ) ! swap of sea surface height 286 286 IF(.NOT.ln_linssh) CALL dom_vvl_sf_swp( kstp ) ! swap of vertical scale factors -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcadv.F90
r10922 r10946 116 116 ! 117 117 IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad ) & 118 & CALL ldf_eiv_trp( kt, nittrc000, zun, zvn, zwn, 'TRC', Kmm ) ! add the eiv transport118 & CALL ldf_eiv_trp( kt, nittrc000, zun, zvn, zwn, 'TRC', Kmm, Krhs ) ! add the eiv transport 119 119 ! 120 120 IF( ln_mle ) CALL tra_mle_trp( kt, nittrc000, zun, zvn, zwn, 'TRC' ) ! add the mle transport -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcbbl.F90
r10068 r10946 36 36 CONTAINS 37 37 38 SUBROUTINE trc_bbl( kt )38 SUBROUTINE trc_bbl( kt, Kmm, Krhs ) 39 39 !!---------------------------------------------------------------------- 40 40 !! *** ROUTINE bbl *** … … 46 46 !!---------------------------------------------------------------------- 47 47 INTEGER, INTENT( in ) :: kt ! ocean time-step 48 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 48 49 INTEGER :: jn ! loop index 49 50 CHARACTER (len=22) :: charout … … 88 89 DO jn = 1, jptra 89 90 ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 90 CALL trd_tra( kt, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) )91 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) ) 91 92 END DO 92 93 DEALLOCATE( ztrtrd ) ! temporary save of trends -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcdmp.F90
r10351 r10946 63 63 64 64 65 SUBROUTINE trc_dmp( kt )65 SUBROUTINE trc_dmp( kt, Kmm, Krhs ) 66 66 !!---------------------------------------------------------------------- 67 67 !! *** ROUTINE trc_dmp *** … … 83 83 !!---------------------------------------------------------------------- 84 84 INTEGER, INTENT(in) :: kt ! ocean time-step index 85 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 85 86 ! 86 87 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices … … 146 147 IF( l_trdtrc ) THEN 147 148 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 148 CALL trd_tra( kt, 'TRC', jn, jptra_dmp, ztrtrd )149 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_dmp, ztrtrd ) 149 150 END IF 150 151 ! ! =========== -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcldf.F90
r10922 r10946 51 51 CONTAINS 52 52 53 SUBROUTINE trc_ldf( kt, Kmm )53 SUBROUTINE trc_ldf( kt, Kmm, Krhs ) 54 54 !!---------------------------------------------------------------------- 55 55 !! *** ROUTINE tra_ldf *** … … 59 59 !!---------------------------------------------------------------------- 60 60 INTEGER, INTENT( in ) :: kt ! ocean time-step index 61 INTEGER, INTENT( in ) :: Kmm ! ocean time-level index61 INTEGER, INTENT( in ) :: Kmm, Krhs ! ocean time-level index 62 62 ! 63 63 INTEGER :: ji, jj, jk, jn … … 106 106 DO jn = 1, jptra 107 107 ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 108 CALL trd_tra( kt, 'TRC', jn, jptra_ldf, ztrtrd(:,:,:,jn) )108 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_ldf, ztrtrd(:,:,:,jn) ) 109 109 END DO 110 110 DEALLOCATE( ztrtrd ) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcnxt.F90
r10425 r10946 54 54 CONTAINS 55 55 56 SUBROUTINE trc_nxt( kt )56 SUBROUTINE trc_nxt( kt, Kmm, Krhs ) 57 57 !!---------------------------------------------------------------------- 58 58 !! *** ROUTINE trcnxt *** … … 79 79 !!---------------------------------------------------------------------- 80 80 INTEGER, INTENT( in ) :: kt ! ocean time-step index 81 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 81 82 ! 82 83 INTEGER :: jk, jn ! dummy loop indices … … 106 107 IF( ln_traldf_iso ) THEN ! diagnose the "pure" Kz diffusive trend 107 108 DO jn = 1, jptra 108 CALL trd_tra( kt, 'TRC', jn, jptra_zdfp, ztrdt(:,:,:,jn) )109 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_zdfp, ztrdt(:,:,:,jn) ) 109 110 ENDDO 110 111 ENDIF … … 128 129 ! 129 130 DO jn = 1, jptra 130 CALL trd_tra( kt, 'TRC', jn, jptra_tot, ztrdt(:,:,:,jn) )131 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_tot, ztrdt(:,:,:,jn) ) 131 132 ENDDO 132 133 ! … … 150 151 ztrdt(:,:,:,:) = 0._wp 151 152 DO jn = 1, jptra 152 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) )153 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 153 154 ENDDO 154 155 END IF … … 157 158 IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 158 159 IF( ln_linssh ) THEN ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! linear ssh 159 ELSE ; CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, &160 ELSE ; CALL tra_nxt_vvl( kt, Kmm, Krhs, nittrc000, rdttrc, 'TRC', trb, trn, tra, & 160 161 & sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 161 162 ENDIF … … 173 174 ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact 174 175 END DO 175 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) )176 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 176 177 END DO 177 178 END IF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcrad.F90
r10425 r10946 37 37 CONTAINS 38 38 39 SUBROUTINE trc_rad( kt )39 SUBROUTINE trc_rad( kt, Kmm, Krhs ) 40 40 !!---------------------------------------------------------------------- 41 41 !! *** ROUTINE trc_rad *** … … 53 53 !!---------------------------------------------------------------------- 54 54 INTEGER, INTENT(in) :: kt ! ocean time-step index 55 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 55 56 ! 56 57 CHARACTER (len=22) :: charout … … 59 60 IF( ln_timing ) CALL timing_start('trc_rad') 60 61 ! 61 IF( ln_age ) CALL trc_rad_sms( kt, trb, trn, jp_age , jp_age ) ! AGE62 IF( ll_cfc ) CALL trc_rad_sms( kt, trb, trn, jp_cfc0, jp_cfc1 ) ! CFC model63 IF( ln_c14 ) CALL trc_rad_sms( kt, trb, trn, jp_c14 , jp_c14 ) ! C1464 IF( ln_pisces ) CALL trc_rad_sms( kt, trb, trn, jp_pcs0, jp_pcs1, cpreserv='Y' ) ! PISCES model65 IF( ln_my_trc ) CALL trc_rad_sms( kt, trb, trn, jp_myt0, jp_myt1 ) ! MY_TRC model62 IF( ln_age ) CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_age , jp_age ) ! AGE 63 IF( ll_cfc ) CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_cfc0, jp_cfc1 ) ! CFC model 64 IF( ln_c14 ) CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_c14 , jp_c14 ) ! C14 65 IF( ln_pisces ) CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_pcs0, jp_pcs1, cpreserv='Y' ) ! PISCES model 66 IF( ln_my_trc ) CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_myt0, jp_myt1 ) ! MY_TRC model 66 67 ! 67 68 IF(ln_ctl) THEN ! print mean trends (used for debugging) … … 113 114 114 115 115 SUBROUTINE trc_rad_sms( kt, ptrb, ptrn, jp_sms0, jp_sms1, cpreserv )116 SUBROUTINE trc_rad_sms( kt, Kmm, Krhs, ptrb, ptrn, jp_sms0, jp_sms1, cpreserv ) 116 117 !!----------------------------------------------------------------------------- 117 118 !! *** ROUTINE trc_rad_sms *** … … 130 131 !!-------------------------------------------------------------------------------- 131 132 INTEGER , INTENT(in ) :: kt ! ocean time-step index 133 INTEGER , INTENT(in ) :: Kmm, Krhs ! time level indices 132 134 INTEGER , INTENT(in ) :: jp_sms0, jp_sms1 ! First & last index of the passive tracer model 133 135 REAL(wp), DIMENSION (jpi,jpj,jpk,jptra), INTENT(inout) :: ptrb , ptrn ! before and now traceur concentration … … 183 185 IF( l_trdtrc ) THEN 184 186 ztrtrd(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 185 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrd ) ! Asselin-like trend handling187 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_radb, ztrtrd ) ! Asselin-like trend handling 186 188 ENDIF 187 189 ! … … 233 235 IF( l_trdtrc ) THEN 234 236 ztrtrd(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 235 CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrd ) ! standard trend handling237 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_radn, ztrtrd ) ! standard trend handling 236 238 ENDIF 237 239 ! … … 261 263 IF( l_trdtrc ) THEN 262 264 ztrtrd(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 263 CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrd ) ! Asselin-like trend handling265 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_radb, ztrtrd ) ! Asselin-like trend handling 264 266 ENDIF 265 267 ! … … 270 272 IF( l_trdtrc ) THEN 271 273 ztrtrd(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 272 CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrd ) ! standard trend handling274 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_radn, ztrtrd ) ! standard trend handling 273 275 ENDIF 274 276 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcsbc.F90
r10425 r10946 37 37 CONTAINS 38 38 39 SUBROUTINE trc_sbc ( kt )39 SUBROUTINE trc_sbc ( kt, Kmm, Krhs ) 40 40 !!---------------------------------------------------------------------- 41 41 !! *** ROUTINE trc_sbc *** … … 59 59 !!---------------------------------------------------------------------- 60 60 INTEGER, INTENT(in) :: kt ! ocean time-step index 61 INTEGER, INTENT(in) :: Kmm, Krhs ! time level indices 61 62 ! 62 63 INTEGER :: ji, jj, jn ! dummy loop indices … … 163 164 IF( l_trdtrc ) THEN 164 165 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 165 CALL trd_tra( kt, 'TRC', jn, jptra_nsr, ztrtrd )166 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_nsr, ztrtrd ) 166 167 END IF 167 168 ! ! =========== -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trctrp.F90
r10922 r10946 61 61 IF( .NOT. lk_c1d ) THEN 62 62 ! 63 CALL trc_sbc ( kt ) ! surface boundary condition64 IF( ln_trabbl ) CALL trc_bbl ( kt ) ! advective (and/or diffusive) bottom boundary layer scheme65 IF( ln_trcdmp ) CALL trc_dmp ( kt ) ! internal damping trends66 IF( ln_bdy ) CALL trc_bdy_dmp( kt ) ! BDY damping trends63 CALL trc_sbc ( kt, Kmm, Krhs ) ! surface boundary condition 64 IF( ln_trabbl ) CALL trc_bbl ( kt, Kmm, Krhs ) ! advective (and/or diffusive) bottom boundary layer scheme 65 IF( ln_trcdmp ) CALL trc_dmp ( kt, Kmm, Krhs ) ! internal damping trends 66 IF( ln_bdy ) CALL trc_bdy_dmp( kt ) ! BDY damping trends 67 67 CALL trc_adv ( kt, Kbb, Kmm, tr, Krhs ) ! horizontal & vertical advection 68 ! ! Partial top/bottom cell: GRADh( trb )68 ! ! Partial top/bottom cell: GRADh( trb ) 69 69 IF( ln_zps ) THEN 70 70 IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi ) ! both top & bottom … … 73 73 ENDIF 74 74 ! 75 CALL trc_ldf ( kt, Kmm ) ! lateral mixing75 CALL trc_ldf ( kt, Kmm, Krhs ) ! lateral mixing 76 76 #if defined key_agrif 77 77 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc ! tracers sponge 78 78 #endif 79 79 CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa ) ! vert. mixing & after tracer ==> after 80 CALL trc_nxt ( kt )! tracer fields at next time step81 IF( ln_trcrad ) CALL trc_rad ( kt )! Correct artificial negative concentrations82 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kt ) ! internal damping trends on closed seas only80 CALL trc_nxt ( kt, Kmm, Krhs ) ! tracer fields at next time step 81 IF( ln_trcrad ) CALL trc_rad ( kt, Kmm, Krhs ) ! Correct artificial negative concentrations 82 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kt ) ! internal damping trends on closed seas only 83 83 84 84 ! 85 85 ELSE ! 1D vertical configuration 86 CALL trc_sbc( kt ) ! surface boundary condition87 IF( ln_trcdmp ) CALL trc_dmp( kt ) ! internal damping trends86 CALL trc_sbc( kt, Kmm, Krhs ) ! surface boundary condition 87 IF( ln_trcdmp ) CALL trc_dmp( kt, Kmm, Krhs ) ! internal damping trends 88 88 CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa ) ! vert. mixing & after tracer ==> after 89 CALL trc_nxt( kt ) ! tracer fields at next time step90 IF( ln_trcrad ) CALL trc_rad( kt ) ! Correct artificial negative concentrations89 CALL trc_nxt( kt, Kmm, Krhs ) ! tracer fields at next time step 90 IF( ln_trcrad ) CALL trc_rad( kt, Kmm, Krhs ) ! Correct artificial negative concentrations 91 91 ! 92 92 END IF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trczdf.F90
r10893 r10946 63 63 ztrtrd(:,:,jk,jn) = ( ( ptr(:,:,jk,jn,Kaa) - ptr(:,:,jk,jn,Kbb) ) / r2dttrc ) - ztrtrd(:,:,jk,jn) 64 64 END DO 65 CALL trd_tra( kt, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) )65 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) ) 66 66 END DO 67 67 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.