Changeset 12779
- Timestamp:
- 2020-04-20T18:53:13+02:00 (3 years ago)
- Location:
- NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/cfgs/GYRE_PISCES/cpp_GYRE_PISCES.fcm
r12724 r12779 1 bld::tool::fppkeys key_mpp_mpi key_iomput key_ qco1 bld::tool::fppkeys key_mpp_mpi key_iomput key_top key_qco -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/DOM/domqco.F90
r12732 r12779 114 114 !!---------------------------------------------------------------------- 115 115 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa 116 !!----------------------------------------------------------------------117 INTEGER :: ji, jj, jk118 INTEGER :: ii0, ii1, ij0, ij1119 REAL(wp):: zcoef120 116 !!---------------------------------------------------------------------- 121 117 ! -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/oce.F90
r12761 r12779 35 35 !! ------------ 36 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ssh, uu_b, vv_b !: SSH [m] and barotropic velocities [m/s] 37 !REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:,:) :: ssh !: SSH [m]38 !REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:,:) :: uu_b, vv_b !: barotropic velocities [m/s]39 37 40 38 !! Arrays at barotropic time step: ! befbefore! before ! now ! after ! -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OCE/stpMLF.F90
r12761 r12779 245 245 IF( lk_diamlr ) CALL dia_mlr ! Update time used in multiple-linear-regression analysis 246 246 247 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 248 ! Now ssh filtering 249 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 250 CALL ssh_atf ( kstp, Nbb, Nnn, Naa, ssh ) ! time filtering of "now" sea surface height 251 CALL dom_qco_r3c( ssh(:,:,Nnn), r3t_f, r3u_f, r3v_f ) ! "now" ssh/h_0 ratio from filtrered ssh 247 252 #if defined key_top 248 253 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 249 254 ! Passive Tracer Model 250 255 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 251 ALLOCATE( zssh_f(jpi,jpj) )252 CALL ssh_atf ( kstp, Nbb, Nnn, Naa , ssh, zssh_f ) ! time filtering of "now" sea surface height253 CALL dom_qco_r3c( zssh_f, r3t_f, r3u_f, r3v_f ) ! "now" ssh/h_0 ratio from filtrered ssh254 !255 256 CALL trc_stp ( kstp, Nbb, Nnn, Nrhs, Naa ) ! time-stepping 256 DEALLOCATE( zssh_f )257 257 #endif 258 258 … … 300 300 !! place. 301 301 !! 302 CALL zdyn_ts( Nnn, Naa, uu, vv ) ! barotrope ajustment302 CALL mlf_baro_corr ( Nnn, Naa, uu, vv ) ! barotrope ajustment 303 303 CALL finalize_sbc ( kstp, Nbb, Naa, uu, vv, ts ) ! boundary condifions 304 CALL ssh_atf ( kstp, Nbb, Nnn, Naa, ssh ) ! time filtering of "now" sea surface height305 CALL dom_qco_r3c ( ssh(:,:,Nnn), r3t_f, r3u_f, r3v_f ) ! "now" ssh/h_0 ratio from filtrered ssh306 304 CALL tra_atf_qco ( kstp, Nbb, Nnn, Naa, ts ) ! time filtering of "now" tracer arrays 307 305 CALL dyn_atf_qco ( kstp, Nbb, Nnn, Naa, uu, vv ) ! time filtering of "now" velocities and scale factors … … 377 375 378 376 379 SUBROUTINE zdyn_ts(Kmm, Kaa, puu, pvv)380 !!---------------------------------------------------------------------- 381 !! *** ROUTINE zdyn_ts***377 SUBROUTINE mlf_baro_corr (Kmm, Kaa, puu, pvv) 378 !!---------------------------------------------------------------------- 379 !! *** ROUTINE mlf_baro_corr *** 382 380 !! 383 381 !! ** Purpose : Finalize after horizontal velocity. … … 426 424 ENDIF 427 425 ! 428 END SUBROUTINE zdyn_ts426 END SUBROUTINE mlf_baro_corr 429 427 430 428 -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OFF/dtadyn.F90
r12724 r12779 23 23 USE c1d ! 1D configuration: lk_c1d 24 24 USE dom_oce ! ocean domain: variables 25 #if ! defined key_qco 25 26 USE domvvl ! variable volume 27 #else 28 USE domqco 29 #endif 26 30 USE zdf_oce ! ocean vertical physics: variables 27 31 USE sbc_oce ! surface module: variables … … 52 56 PUBLIC dta_dyn_sed ! called by nemo_gcm 53 57 PUBLIC dta_dyn_atf ! called by nemo_gcm 58 #if ! defined key_qco 54 59 PUBLIC dta_dyn_sf_interp ! called by nemo_gcm 60 #endif 55 61 56 62 CHARACTER(len=100) :: cn_dir !: Root directory for location of ssr files … … 128 134 IF( l_ldfslp .AND. .NOT.lk_c1d ) CALL dta_dyn_slp( kt, Kbb, Kmm ) ! Computation of slopes 129 135 ! 130 ts (:,:,:,jp_tem,Kmm) = sf_dyn(jf_tem)%fnow(:,:,:)* tmask(:,:,:) ! temperature131 ts (:,:,:,jp_sal,Kmm) = sf_dyn(jf_sal)%fnow(:,:,:)* tmask(:,:,:) ! salinity132 wndm (:,:) = sf_dyn(jf_wnd)%fnow(:,:,1)* tmask(:,:,1) ! wind speed - needed for gas exchange133 fmmflx(:,:) = sf_dyn(jf_fmf)%fnow(:,:,1)* tmask(:,:,1) ! downward salt flux (v3.5+)134 fr_i (:,:) = sf_dyn(jf_ice)%fnow(:,:,1)* tmask(:,:,1) ! Sea-ice fraction135 qsr (:,:) = sf_dyn(jf_qsr)%fnow(:,:,1)* tmask(:,:,1) ! solar radiation136 emp (:,:) = sf_dyn(jf_emp)%fnow(:,:,1)* tmask(:,:,1) ! E-P136 ts (:,:,:,jp_tem,Kmm) = sf_dyn(jf_tem)%fnow(:,:,:) * tmask(:,:,:) ! temperature 137 ts (:,:,:,jp_sal,Kmm) = sf_dyn(jf_sal)%fnow(:,:,:) * tmask(:,:,:) ! salinity 138 wndm (:,:) = sf_dyn(jf_wnd)%fnow(:,:,1) * tmask(:,:,1) ! wind speed - needed for gas exchange 139 fmmflx(:,:) = sf_dyn(jf_fmf)%fnow(:,:,1) * tmask(:,:,1) ! downward salt flux (v3.5+) 140 fr_i (:,:) = sf_dyn(jf_ice)%fnow(:,:,1) * tmask(:,:,1) ! Sea-ice fraction 141 qsr (:,:) = sf_dyn(jf_qsr)%fnow(:,:,1) * tmask(:,:,1) ! solar radiation 142 emp (:,:) = sf_dyn(jf_emp)%fnow(:,:,1) * tmask(:,:,1) ! E-P 137 143 IF( ln_dynrnf ) THEN 138 rnf (:,:)= sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1) ! E-P139 IF( ln_dynrnf_depth .AND. .NOT. ln_linssh ) CALL dta_dyn_hrnf(Kmm)140 ENDIF 141 ! 142 uu(:,:,:,Kmm) = sf_dyn(jf_uwd)%fnow(:,:,:) * umask(:,:,:) ! effective u-transport143 vv(:,:,:,Kmm) = sf_dyn(jf_vwd)%fnow(:,:,:) * vmask(:,:,:) ! effective v-transport144 ww(:,:,:) = sf_dyn(jf_wwd)%fnow(:,:,:) * tmask(:,:,:) ! effective v-transport144 rnf(:,:) = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1) ! E-P 145 IF( ln_dynrnf_depth .AND. .NOT.ln_linssh ) CALL dta_dyn_hrnf( Kmm ) 146 ENDIF 147 ! 148 uu(:,:,:,Kmm) = sf_dyn(jf_uwd)%fnow(:,:,:) * umask(:,:,:) ! effective u-transport 149 vv(:,:,:,Kmm) = sf_dyn(jf_vwd)%fnow(:,:,:) * vmask(:,:,:) ! effective v-transport 150 ww(:,:,:) = sf_dyn(jf_wwd)%fnow(:,:,:) * tmask(:,:,:) ! effective v-transport 145 151 ! 146 152 IF( .NOT.ln_linssh ) THEN 147 153 ALLOCATE( zemp(jpi,jpj) , zhdivtr(jpi,jpj,jpk) ) 148 zhdivtr(:,:,:) = sf_dyn(jf_div )%fnow(:,:,:)* tmask(:,:,:) ! effective u-transport154 zhdivtr(:,:,:) = sf_dyn(jf_div )%fnow(:,:,:) * tmask(:,:,:) ! effective u-transport 149 155 emp_b (:,:) = sf_dyn(jf_empb)%fnow(:,:,1) * tmask(:,:,1) ! E-P 150 156 zemp (:,:) = ( 0.5_wp * ( emp(:,:) + emp_b(:,:) ) + rnf(:,:) + fwbcorr ) * tmask(:,:,1) 151 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa), e3t(:,:,:,Kaa) ) != ssh, vertical scale factor & vertical transport 157 #if defined key_qco 158 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa) ) 159 CALL dom_qco_r3c( ssh(:,:,Kaa), r3t(:,:,Kaa), r3u(:,:,Kaa), r3v(:,:,Kaa) ) 160 #else 161 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa), e3t(:,:,:,Kaa) ) != ssh, vertical scale factor 162 #endif 152 163 DEALLOCATE( zemp , zhdivtr ) 153 164 ! Write in the tracer restart file … … 329 340 ENDIF 330 341 ! 342 #if defined key_qco 343 CALL dom_qco_r3c( ssh(:,:,Kbb), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb) ) 344 CALL dom_qco_r3c( ssh(:,:,Kmm), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm) ) 345 #else 331 346 DO jk = 1, jpkm1 332 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1)) )333 END DO347 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * r1_ht_0(:,:) * tmask(:,:,jk) ) 348 END DO 334 349 e3t(:,:,jpk,Kaa) = e3t_0(:,:,jpk) 335 350 … … 342 357 ! ------------------------------------ 343 358 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w(:,:,:,Kmm), 'W' ) 344 359 !!gm this should be computed from ssh(Kbb) 345 360 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 346 361 e3u(:,:,:,Kbb) = e3u(:,:,:,Kmm) … … 366 381 gdepw(:,:,:,Kbb) = gdepw(:,:,:,Kmm) 367 382 ! 368 ENDIF 383 ENDIF 384 #endif 369 385 ! 370 386 IF( ln_dynrnf .AND. ln_dynrnf_depth ) THEN ! read depht over which runoffs are distributed … … 389 405 ENDIF 390 406 END_2D 407 !!st pourquoi on n'utilise pas le gde3w ici plutôt que de faire une boucle ? 391 408 DO_2D_11_11 392 409 h_rnf(ji,jj) = 0._wp … … 413 430 END SUBROUTINE dta_dyn_init 414 431 432 415 433 SUBROUTINE dta_dyn_sed( kt, Kmm ) 416 434 !!---------------------------------------------------------------------- … … 529 547 END SUBROUTINE dta_dyn_sed_init 530 548 549 531 550 SUBROUTINE dta_dyn_atf( kt, Kbb, Kmm, Kaa ) 532 551 !!--------------------------------------------------------------------- … … 551 570 ! 552 571 END SUBROUTINE dta_dyn_atf 572 553 573 574 #if ! defined key_qco 554 575 SUBROUTINE dta_dyn_sf_interp( kt, Kmm ) 555 576 !!--------------------------------------------------------------------- … … 588 609 ! 589 610 END SUBROUTINE dta_dyn_sf_interp 590 611 #endif 612 613 591 614 SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb, pemp, pssha, pe3ta ) 592 615 !!---------------------------------------------------------------------- … … 606 629 !! The boundary conditions are w=0 at the bottom (no flux) 607 630 !! 608 !! ** action : ssh(:,:,Kaa) / e3t(:,:, :,Kaa) / ww631 !! ** action : ssh(:,:,Kaa) / e3t(:,:,k,Kaa) / ww 609 632 !! 610 633 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. … … 630 653 ! ! Sea surface elevation time-stepping 631 654 pssha(:,:) = ( psshb(:,:) - z2dt * ( r1_rho0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 632 ! ! 633 ! ! After acale factors at t-points ( z_star coordinate ) 634 DO jk = 1, jpkm1 635 pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 636 END DO 655 ! 656 IF( PRESENT( pe3ta ) ) THEN ! After acale factors at t-points ( z_star coordinate ) 657 DO jk = 1, jpkm1 658 pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * r1_ht_0(:,:) * tmask(:,:,jk) ) 659 END DO 660 ENDIF 637 661 ! 638 662 END SUBROUTINE dta_dyn_ssh … … 657 681 !!---------------------------------------------------------------------- 658 682 ! 683 !!st code dupliqué même remarque que plus haut pourquoi ne pas utiliser gdepw ? 659 684 DO_2D_11_11 660 685 h_rnf(ji,jj) = 0._wp -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OFF/nemogcm.F90
r12724 r12779 28 28 USE usrdef_nam ! user defined configuration 29 29 USE eosbn2 ! equation of state (eos bn2 routine) 30 #if defined key_qco 31 USE domqco ! tools for scale factor (dom_qco_r3c routine) 32 #endif 30 33 ! ! ocean physics 31 34 USE ldftra ! lateral diffusivity setting (ldf_tra_init routine) … … 117 120 CALL dta_dyn ( istp, Nbb, Nnn, Naa ) ! Interpolation of the dynamical fields 118 121 #endif 122 #if ! defined key_sed_off 123 IF( .NOT.ln_linssh ) THEN 124 CALL dta_dyn_atf( istp, Nbb, Nnn, Naa ) ! time filter of sea surface height and vertical scale factors 125 # if defined key_qco 126 CALL dom_qco_r3c( ssh(:,:,Kmm), r3t_f, r3u_f, r3v_f ) 127 # endif 128 ENDIF 119 129 CALL trc_stp ( istp, Nbb, Nnn, Nrhs, Naa ) ! time-stepping 120 #if ! defined key_sed_off 121 IF( .NOT.ln_linssh ) CALL dta_dyn_atf( istp, Nbb, Nnn, Naa ) ! time filter of sea surface height and vertical scale factors 130 # if defined key_qco 131 !r3t(:,:,Kmm) = r3t_f(:,:) ! update ssh to h0 ratio 132 !r3u(:,:,Kmm) = r3u_f(:,:) 133 !r3v(:,:,Kmm) = r3v_f(:,:) 134 # endif 122 135 #endif 123 136 ! Swap time levels … … 127 140 Naa = Nrhs 128 141 ! 129 #if ! defined key_sed_off 142 #if ! defined key_qco 143 # if ! defined key_sed_off 130 144 IF( .NOT.ln_linssh ) CALL dta_dyn_sf_interp( istp, Nnn ) ! calculate now grid parameters 131 #endif 145 # endif 146 #endif 132 147 CALL stp_ctl ( istp, indic ) ! Time loop: control and print 133 148 istp = istp + 1 -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/P4Z/p4zbio.F90
r12377 r12779 40 40 !! * Substitutions 41 41 # include "do_loop_substitute.h90" 42 # include "domzgr_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/P4Z/p4zche.F90
r12377 r12779 132 132 !! * Substitutions 133 133 # include "do_loop_substitute.h90" 134 # include "domzgr_substitute.h90" 134 135 !!---------------------------------------------------------------------- 135 136 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/P4Z/p4zfechem.F90
r12377 r12779 33 33 !! * Substitutions 34 34 # include "do_loop_substitute.h90" 35 # include "domzgr_substitute.h90" 35 36 !!---------------------------------------------------------------------- 36 37 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/P4Z/p4zprod.F90
r12377 r12779 48 48 !! * Substitutions 49 49 # include "do_loop_substitute.h90" 50 # include "domzgr_substitute.h90" 50 51 !!---------------------------------------------------------------------- 51 52 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/P4Z/p4zsink.F90
r12377 r12779 40 40 !! * Substitutions 41 41 # include "do_loop_substitute.h90" 42 # include "domzgr_substitute.h90" 42 43 !!---------------------------------------------------------------------- 43 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/P4Z/p5zprod.F90
r12377 r12779 52 52 !! * Substitutions 53 53 # include "do_loop_substitute.h90" 54 # include "domzgr_substitute.h90" 54 55 !!---------------------------------------------------------------------- 55 56 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/SED/oce_sed.F90
r12724 r12779 13 13 USE dom_oce , ONLY : glamt => glamt !: longitude of t-point (degre) 14 14 USE dom_oce , ONLY : gphit => gphit !: latitude of t-point (degre) 15 !!st USE dom_oce , ONLY : e3t => e3t !: latitude of t-point (degre) 15 !!st 16 #if ! defined key_qco 17 USE dom_oce , ONLY : e3t => e3t !: latitude of t-point (degre) 18 #endif 16 19 USE dom_oce , ONLY : e3t_1d => e3t_1d !: reference depth of t-points (m) 17 20 USE dom_oce , ONLY : gdepw_0 => gdepw_0 !: reference depth of t-points (m) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/PISCES/trcwri_pisces.F90
r12377 r12779 21 21 !! * Substitutions 22 22 # include "do_loop_substitute.h90" 23 # include "domzgr_substitute.h90" 23 24 !!---------------------------------------------------------------------- 24 25 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/TRP/trcadv.F90
r12724 r12779 58 58 INTEGER, PARAMETER :: np_UBS = 4 ! 3rd order Upstream Biased Scheme 59 59 INTEGER, PARAMETER :: np_QCK = 5 ! QUICK scheme 60 60 61 # include "domzgr_substitute.h90" 61 62 !!---------------------------------------------------------------------- 62 63 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/TRP/trcatf.F90
r12724 r12779 31 31 USE trd_oce 32 32 USE trdtra 33 # if defined key_qco 34 USE traatfqco 35 # else 33 36 USE traatf 37 # endif 34 38 USE bdy_oce , ONLY: ln_bdy 35 39 USE trcbdy ! BDY open boundaries … … 50 54 !! * Substitutions 51 55 # include "do_loop_substitute.h90" 56 # include "domzgr_substitute.h90" 52 57 !!---------------------------------------------------------------------- 53 58 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 107 112 DO jn = 1, jptra 108 113 CALL trd_tra( kt, Kmm, Kaa, 'TRC', jn, jptra_zdfp, ztrdt(:,:,:,jn) ) 109 END DO114 END DO 110 115 ENDIF 111 116 112 117 ! total trend for the non-time-filtered variables. 113 118 zfact = 1.0 / rn_Dt 114 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t *T)/e3tn; e3tn cancel from ts(Kmm) terms119 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3ta*Ta)/e3tn; e3tn cancel from ts(Kmm) terms 115 120 IF( ln_linssh ) THEN ! linear sea surface height only 116 121 DO jn = 1, jptra … … 129 134 DO jn = 1, jptra 130 135 CALL trd_tra( kt, Kmm, Kaa, 'TRC', jn, jptra_tot, ztrdt(:,:,:,jn) ) 131 END DO136 END DO 132 137 ! 133 138 IF( ln_linssh ) THEN ! linear sea surface height only … … 146 151 DO jn = 1, jptra 147 152 CALL trd_tra( kt, Kmm, Kaa, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 148 END DO153 END DO 149 154 END IF 150 155 ! 151 156 ELSE 152 157 IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 153 IF( ln_linssh ) THEN ; CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nittrc000, 'TRC', ptr, jptra ) ! linear ssh 154 ELSE ; CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 158 # if defined key_qco 159 IF( ln_linssh ) THEN ; CALL tra_atf_fix_lf( kt, Kbb, Kmm, Kaa, nittrc000, 'TRC', ptr, jptra ) ! linear ssh 160 ELSE ; CALL tra_atf_qco_lf( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 161 # else 162 IF( ln_linssh ) THEN ; CALL tra_atf_fix ( kt, Kbb, Kmm, Kaa, nittrc000, 'TRC', ptr, jptra ) ! linear ssh 163 ELSE ; CALL tra_atf_vvl ( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 164 # endif 155 165 ENDIF 156 166 ELSE 157 CALL trc_atf_off ( kt, Kbb, Kmm, Kaa, ptr ) ! offline167 CALL trc_atf_off ( kt, Kbb, Kmm, Kaa, ptr ) ! offline 158 168 ENDIF 159 169 ! … … 182 192 END SUBROUTINE trc_atf 183 193 184 194 # if ! defined key_qco 185 195 SUBROUTINE trc_atf_off( kt, Kbb, Kmm, Kaa, ptr ) 186 196 !!---------------------------------------------------------------------- … … 198 208 !! This can be summurized for tempearture as: 199 209 !! ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) ln_dynhpg_imp = T 200 !! /( e3t(:,:, :,Kmm) + rbcp*[ e3t(:,:,:,Kbb) - 2 e3t(:,:,:,Kmm) + e3t(:,:,:,Kaa) ] )210 !! /( e3t(:,:,jk,Kmm) + rbcp*[ e3t(:,:,jk,Kbb) - 2 e3t(:,:,jk,Kmm) + e3t(:,:,jk,Kaa) ] ) 201 211 !! ztm = 0 otherwise 202 212 !! tb = ( e3t_n*tn + rn_atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 203 !! /( e3t(:,:, :,Kmm) + rn_atfp*[ e3t(:,:,:,Kbb) - 2 e3t(:,:,:,Kmm) + e3t(:,:,:,Kaa) ] )213 !! /( e3t(:,:,jk,Kmm) + rn_atfp*[ e3t(:,:,jk,Kbb) - 2 e3t(:,:,jk,Kmm) + e3t(:,:,jk,Kaa) ] ) 204 214 !! tn = ta 205 215 !! ta = zt (NB: reset to 0 after eos_bn2 call) … … 257 267 ! 258 268 END SUBROUTINE trc_atf_off 259 269 # else 270 SUBROUTINE trc_atf_off( kt, Kbb, Kmm, Kaa, ptr ) 271 !!---------------------------------------------------------------------- 272 !! *** ROUTINE tra_atf_off *** 273 !! 274 !! !!!!!!!!!!!!!!!!! REWRITE HEADER COMMENTS !!!!!!!!!!!!!! 275 !! 276 !! ** Purpose : Time varying volume: apply the Asselin time filter 277 !! 278 !! ** Method : - Apply a thickness weighted Asselin time filter on now fields. 279 !! - save in (ta,sa) a thickness weighted average over the three 280 !! time levels which will be used to compute rdn and thus the semi- 281 !! implicit hydrostatic pressure gradient (ln_dynhpg_imp = T) 282 !! - swap tracer fields to prepare the next time_step. 283 !! This can be summurized for tempearture as: 284 !! ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) ln_dynhpg_imp = T 285 !! /( e3t(:,:,jk,Kmm) + rbcp*[ e3t(:,:,jk,Kbb) - 2 e3t(:,:,jk,Kmm) + e3t(:,:,jk,Kaa) ] ) 286 !! ztm = 0 otherwise 287 !! tb = ( e3t_n*tn + rn_atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 288 !! /( e3t(:,:,jk,Kmm) + rn_atfp*[ e3t(:,:,jk,Kbb) - 2 e3t(:,:,jk,Kmm) + e3t(:,:,jk,Kaa) ] ) 289 !! tn = ta 290 !! ta = zt (NB: reset to 0 after eos_bn2 call) 291 !! 292 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 293 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T) 294 !!---------------------------------------------------------------------- 295 INTEGER , INTENT(in ) :: kt ! ocean time-step index 296 INTEGER , INTENT(in ) :: Kbb, Kmm, Kaa ! time level indices 297 REAL(wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers 298 !! 299 INTEGER :: ji, jj, jk, jn ! dummy loop indices 300 REAL(wp) :: ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar 301 REAL(wp) :: ze3t_b, ze3t_n, ze3t_a, ze3t_f ! - - 302 !!---------------------------------------------------------------------- 303 ! 304 IF( kt == nittrc000 ) THEN 305 IF(lwp) WRITE(numout,*) 306 IF(lwp) WRITE(numout,*) 'trc_atf_off : Asselin time filtering' 307 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 308 IF( .NOT. ln_linssh ) THEN 309 rfact1 = rn_atfp * rn_Dt 310 rfact2 = rfact1 / rho0 311 ENDIF 312 ! 313 ENDIF 314 ! 315 DO jn = 1, jptra 316 DO_3D_11_11( 1, jpkm1 ) 317 ze3t_b = 1._wp + r3t(ji,jj,Kbb) * tmask(ji,jj,jk) 318 ze3t_n = 1._wp + r3t(ji,jj,Kmm) * tmask(ji,jj,jk) 319 ze3t_a = 1._wp + r3t(ji,jj,Kaa) * tmask(ji,jj,jk) 320 ! ! tracer content at Before, now and after 321 ztc_b = ptr(ji,jj,jk,jn,Kbb) * ze3t_b 322 ztc_n = ptr(ji,jj,jk,jn,Kmm) * ze3t_n 323 ztc_a = ptr(ji,jj,jk,jn,Kaa) * ze3t_a 324 ! 325 ztc_d = ztc_a - 2. * ztc_n + ztc_b 326 ! 327 ze3t_f = 1._wp + r3t_f(ji,jj)*tmask(ji,jj,jk) 328 ztc_f = ztc_n + rn_atfp * ztc_d 329 ! 330 IF( .NOT. ln_linssh .AND. jk == mikt(ji,jj) ) THEN ! first level 331 ztc_f = ztc_f - rfact1 * ( sbc_trc(ji,jj,jn) - sbc_trc_b(ji,jj,jn) ) 332 ENDIF 333 334 ze3t_f = 1.e0 / ze3t_f 335 ptr(ji,jj,jk,jn,Kmm) = ztc_f * ze3t_f ! time filtered "now" field 336 ! 337 END_3D 338 ! 339 END DO 340 ! 341 END SUBROUTINE trc_atf_off 342 # endif 343 260 344 #else 261 345 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/TRP/trcdmp.F90
r12377 r12779 45 45 !! * Substitutions 46 46 # include "do_loop_substitute.h90" 47 # include "domzgr_substitute.h90" 47 48 !!---------------------------------------------------------------------- 48 49 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/TRP/trcldf.F90
r12377 r12779 44 44 !! * Substitutions 45 45 # include "do_loop_substitute.h90" 46 # include "domzgr_substitute.h90" 46 47 !!---------------------------------------------------------------------- 47 48 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/TRP/trcsbc.F90
r12724 r12779 30 30 !! * Substitutions 31 31 # include "do_loop_substitute.h90" 32 # include "domzgr_substitute.h90" 32 33 !!---------------------------------------------------------------------- 33 34 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 49 50 !! The surface freshwater flux modify the ocean volume 50 51 !! and thus the concentration of a tracer as : 51 !! tr(Krhs) = tr(Krhs) + emp * tr(Kmm) / e3t for k=152 !! tr(Krhs) = tr(Krhs) + emp * tr(Kmm) / e3t_ for k=1 52 53 !! where emp, the surface freshwater budget (evaporation minus 53 54 !! precipitation ) given in kg/m2/s is divided -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/TRP/trdmxl_trc.F90
r12724 r12779 51 51 !! * Substitutions 52 52 # include "do_loop_substitute.h90" 53 # include "domzgr_substitute.h90" 53 54 !!---------------------------------------------------------------------- 54 55 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcbc.F90
r12724 r12779 48 48 !! * Substitutions 49 49 # include "do_loop_substitute.h90" 50 # include "domzgr_substitute.h90" 50 51 !!---------------------------------------------------------------------- 51 52 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcdta.F90
r12377 r12779 41 41 !! Substitutions 42 42 #include "do_loop_substitute.h90" 43 #include "domzgr_substitute.h90" 43 44 !!---------------------------------------------------------------------- 44 45 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 206 207 ztp(jk) = ptrcdta(ji,jj,jpkm1) 207 208 ELSE ! inbetween : vertical interpolation between jkk & jkk+1 208 DO jkk = 1, jpkm1 ! when gdept (jkk) < zl < gdept(jkk+1)209 DO jkk = 1, jpkm1 ! when gdept_1d(jkk) < zl < gdept_1d(jkk+1) 209 210 IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 210 211 zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcini.F90
r12377 r12779 30 30 31 31 PUBLIC trc_init ! called by opa 32 32 33 # include "domzgr_substitute.h90" 33 34 !!---------------------------------------------------------------------- 34 35 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcrst.F90
r12724 r12779 33 33 PUBLIC trc_rst_cal 34 34 35 # include "domzgr_substitute.h90" 35 36 !!---------------------------------------------------------------------- 36 37 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcstp.F90
r12724 r12779 36 36 REAL(wp) :: rsecfst, rseclast ! ??? 37 37 REAL(wp), DIMENSION(:,:,:), SAVE, ALLOCATABLE :: qsr_arr ! save qsr during TOP time-step 38 38 39 # include "domzgr_substitute.h90" 39 40 !!---------------------------------------------------------------------- 40 41 !! NEMO/TOP 4.0 , NEMO Consortium (2018) -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcwri.F90
r12377 r12779 60 60 CALL iom_put( "e3v_0", e3v_0(:,:,:) ) 61 61 ! 62 #if ! defined key_qco 62 63 CALL iom_put( "e3t" , e3t(:,:,:,Kmm) ) 63 64 CALL iom_put( "e3u" , e3u(:,:,:,Kmm) ) 64 65 CALL iom_put( "e3v" , e3v(:,:,:,Kmm) ) 66 #endif 65 67 ! 66 68 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.