- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/TRP/trcadv.F90
r10068 r13463 29 29 USE ldfslp ! Lateral diffusion: slopes of neutral surfaces 30 30 ! 31 USE prtctl _trc! control print31 USE prtctl ! control print 32 32 USE timing ! Timing 33 33 … … 59 59 INTEGER, PARAMETER :: np_QCK = 5 ! QUICK scheme 60 60 61 !! * Substitutions 62 # include "vectopt_loop_substitute.h90" 61 # include "domzgr_substitute.h90" 63 62 !!---------------------------------------------------------------------- 64 63 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 68 67 CONTAINS 69 68 70 SUBROUTINE trc_adv( kt )69 SUBROUTINE trc_adv( kt, Kbb, Kmm, ptr, Krhs ) 71 70 !!---------------------------------------------------------------------- 72 71 !! *** ROUTINE trc_adv *** … … 74 73 !! ** Purpose : compute the ocean tracer advection trend. 75 74 !! 76 !! ** Method : - Update after tracers (tra) with the advection term following nadv 77 !!---------------------------------------------------------------------- 78 INTEGER, INTENT(in) :: kt ! ocean time-step index 75 !! ** Method : - Update after tracers (tr(Krhs)) with the advection term following nadv 76 !!---------------------------------------------------------------------- 77 INTEGER , INTENT(in) :: kt ! ocean time-step index 78 INTEGER , INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 79 REAL(wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 79 80 ! 80 81 INTEGER :: jk ! dummy loop index 81 82 CHARACTER (len=22) :: charout 82 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zu n, zvn, zwn! effective velocity83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zuu, zvv, zww ! effective velocity 83 84 !!---------------------------------------------------------------------- 84 85 ! … … 87 88 ! !== effective transport ==! 88 89 IF( l_offline ) THEN 89 zu n(:,:,:) = un(:,:,:) ! already in (un,vn,wn)90 zv n(:,:,:) = vn(:,:,:)91 zw n(:,:,:) = wn(:,:,:)90 zuu(:,:,:) = uu(:,:,:,Kmm) ! already in (uu(Kmm),vv(Kmm),ww) 91 zvv(:,:,:) = vv(:,:,:,Kmm) 92 zww(:,:,:) = ww(:,:,:) 92 93 ELSE ! build the effective transport 93 zu n(:,:,jpk) = 0._wp94 zv n(:,:,jpk) = 0._wp95 zw n(:,:,jpk) = 0._wp94 zuu(:,:,jpk) = 0._wp 95 zvv(:,:,jpk) = 0._wp 96 zww(:,:,jpk) = 0._wp 96 97 IF( ln_wave .AND. ln_sdw ) THEN 97 98 DO jk = 1, jpkm1 ! eulerian transport + Stokes Drift 98 zu n(:,:,jk) = e2u (:,:) * e3u_n(:,:,jk) * ( un(:,:,jk) + usd(:,:,jk) )99 zv n(:,:,jk) = e1v (:,:) * e3v_n(:,:,jk) * ( vn(:,:,jk) + vsd(:,:,jk) )100 zw n(:,:,jk) = e1e2t(:,:) * ( wn(:,:,jk) + wsd(:,:,jk) )99 zuu(:,:,jk) = e2u (:,:) * e3u(:,:,jk,Kmm) * ( uu(:,:,jk,Kmm) + usd(:,:,jk) ) 100 zvv(:,:,jk) = e1v (:,:) * e3v(:,:,jk,Kmm) * ( vv(:,:,jk,Kmm) + vsd(:,:,jk) ) 101 zww(:,:,jk) = e1e2t(:,:) * ( ww(:,:,jk) + wsd(:,:,jk) ) 101 102 END DO 102 103 ELSE 103 104 DO jk = 1, jpkm1 104 zu n(:,:,jk) = e2u (:,:) * e3u_n(:,:,jk) * un(:,:,jk) ! eulerian transport105 zv n(:,:,jk) = e1v (:,:) * e3v_n(:,:,jk) * vn(:,:,jk)106 zw n(:,:,jk) = e1e2t(:,:) * wn(:,:,jk)105 zuu(:,:,jk) = e2u (:,:) * e3u(:,:,jk,Kmm) * uu(:,:,jk,Kmm) ! eulerian transport 106 zvv(:,:,jk) = e1v (:,:) * e3v(:,:,jk,Kmm) * vv(:,:,jk,Kmm) 107 zww(:,:,jk) = e1e2t(:,:) * ww(:,:,jk) 107 108 END DO 108 109 ENDIF 109 110 ! 110 111 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! add z-tilde and/or vvl corrections 111 zu n(:,:,:) = zun(:,:,:) + un_td(:,:,:)112 zv n(:,:,:) = zvn(:,:,:) + vn_td(:,:,:)112 zuu(:,:,:) = zuu(:,:,:) + un_td(:,:,:) 113 zvv(:,:,:) = zvv(:,:,:) + vn_td(:,:,:) 113 114 ENDIF 114 115 ! 115 116 IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad ) & 116 & CALL ldf_eiv_trp( kt, nittrc000, zu n, zvn, zwn, 'TRC') ! add the eiv transport117 ! 118 IF( ln_mle ) CALL tra_mle_trp( kt, nittrc000, zu n, zvn, zwn, 'TRC') ! add the mle transport117 & CALL ldf_eiv_trp( kt, nittrc000, zuu, zvv, zww, 'TRC', Kmm, Krhs ) ! add the eiv transport 118 ! 119 IF( ln_mle ) CALL tra_mle_trp( kt, nittrc000, zuu, zvv, zww, 'TRC', Kmm ) ! add the mle transport 119 120 ! 120 121 ENDIF … … 123 124 ! 124 125 CASE ( np_CEN ) ! Centered : 2nd / 4th order 125 CALL tra_adv_cen( kt, nittrc000,'TRC', zu n, zvn, zwn , trn, tra, jptra, nn_cen_h, nn_cen_v )126 CALL tra_adv_cen( kt, nittrc000,'TRC', zuu, zvv, zww, Kmm, ptr, jptra, Krhs, nn_cen_h, nn_cen_v ) 126 127 CASE ( np_FCT ) ! FCT : 2nd / 4th order 127 CALL tra_adv_fct( kt, nittrc000,'TRC', r 2dttrc, zun, zvn, zwn, trb, trn, tra, jptra, nn_fct_h, nn_fct_v )128 CALL tra_adv_fct( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v ) 128 129 CASE ( np_MUS ) ! MUSCL 129 CALL tra_adv_mus( kt, nittrc000,'TRC', r 2dttrc, zun, zvn, zwn, trb, tra, jptra , ln_mus_ups)130 CALL tra_adv_mus( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups ) 130 131 CASE ( np_UBS ) ! UBS 131 CALL tra_adv_ubs( kt, nittrc000,'TRC', r 2dttrc, zun, zvn, zwn, trb, trn, tra, jptra , nn_ubs_v)132 CALL tra_adv_ubs( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_ubs_v ) 132 133 CASE ( np_QCK ) ! QUICKEST 133 CALL tra_adv_qck( kt, nittrc000,'TRC', r 2dttrc, zun, zvn, zwn, trb, trn, tra, jptra)134 CALL tra_adv_qck( kt, nittrc000,'TRC', rDt_trc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs ) 134 135 ! 135 136 END SELECT 136 137 ! 137 IF( ln_ctl ) THEN!== print mean trends (used for debugging)138 IF( sn_cfctl%l_prttrc ) THEN !== print mean trends (used for debugging) 138 139 WRITE(charout, FMT="('adv ')") 139 CALL prt_ctl_ trc_info(charout)140 CALL prt_ctl _trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )140 CALL prt_ctl_info( charout, cdcomp = 'top' ) 141 CALL prt_ctl( tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 141 142 END IF 142 143 ! … … 164 165 ! 165 166 ! !== Namelist ==! 166 REWIND( numnat_ref ) ! namtrc_adv in reference namelist167 167 READ ( numnat_ref, namtrc_adv, IOSTAT = ios, ERR = 901) 168 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in reference namelist', lwp ) 169 REWIND( numnat_cfg ) ! namtrc_adv in configuration namelist 168 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in reference namelist' ) 170 169 READ ( numnat_cfg, namtrc_adv, IOSTAT = ios, ERR = 902 ) 171 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtrc_adv in configuration namelist' , lwp)170 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtrc_adv in configuration namelist' ) 172 171 IF(lwm) WRITE ( numont, namtrc_adv ) 173 172 !
Note: See TracChangeset
for help on using the changeset viewer.