Changeset 15603 for branches/UKMO/dev_r5518_GO6_starthour_obsoper/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
- Timestamp:
- 2021-12-16T10:39:55+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_starthour_obsoper/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90
r12555 r15603 20 20 USE zdfkpp ! KPP vertical mixing 21 21 USE trd_oce ! trends: ocean variables 22 USE trdtra ! trends manager: tracers 22 USE trdtra ! trends manager: tracers 23 23 USE in_out_manager ! I/O manager 24 24 USE iom ! for iom_put 25 25 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 26 26 USE timing ! Timing 27 USE stopack 27 28 28 29 IMPLICIT NONE … … 30 31 31 32 PUBLIC zdf_evd ! called by step.F90 33 REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:) :: rn_avevd0 32 34 33 35 !! * Substitutions … … 43 45 !!---------------------------------------------------------------------- 44 46 !! *** ROUTINE zdf_evd *** 45 !! 47 !! 46 48 !! ** Purpose : Local increased the vertical eddy viscosity and diffu- 47 49 !! sivity coefficients when a static instability is encountered. 48 50 !! 49 51 !! ** Method : avt, avm, and the 4 neighbouring avmu, avmv coefficients 50 !! are set to avevd (namelist parameter) if the water column is 52 !! are set to avevd (namelist parameter) if the water column is 51 53 !! statically unstable (i.e. if rn2 < -1.e-12 ) 52 54 !! … … 70 72 IF(lwp) WRITE(numout,*) 71 73 IF(lwp .AND. lflush) CALL flush(numout) 74 ALLOCATE ( rn_avevd0(jpi,jpj) ) 75 rn_avevd0(:,:) = rn_avevd 72 76 ENDIF 73 77 74 78 zavt_evd(:,:,:) = avt(:,:,:) ! set avt prior to evd application 79 80 #if defined key_traldf_c2d || key_traldf_c3d 81 IF( ln_stopack .AND. ( nn_spp_aevd > 0 ) ) THEN 82 rn_avevd0(:,:) = rn_avevd 83 CALL spp_gen(kt, rn_avevd0, nn_spp_aevd, rn_aevd_sd, jk_spp_aevd) 84 ENDIF 85 #else 86 IF ( ln_stopack .AND. ( nn_spp_aevd > 0 ) ) & 87 & CALL ctl_stop( 'zdf_evd: parameter perturbation will only work with '// & 88 'key_traldf_c2d or key_traldf_c3d') 89 #endif 75 90 76 91 SELECT CASE ( nn_evdm ) … … 80 95 zavm_evd(:,:,:) = avm(:,:,:) ! set avm prior to evd application 81 96 ! 82 DO jk = 1, jpkm1 97 DO jk = 1, jpkm1 83 98 DO jj = 2, jpj ! no vector opt. 84 99 DO ji = 2, jpi … … 89 104 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN 90 105 #endif 91 avt (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk)92 avm (ji ,jj ,jk) = rn_avevd * tmask(ji ,jj ,jk)93 avmu(ji ,jj ,jk) = rn_avevd * umask(ji ,jj ,jk)94 avmu(ji-1,jj ,jk) = rn_avevd * umask(ji-1,jj ,jk)95 avmv(ji ,jj ,jk) = rn_avevd * vmask(ji ,jj ,jk)96 avmv(ji ,jj-1,jk) = rn_avevd * vmask(ji ,jj-1,jk)106 avt (ji ,jj ,jk) = rn_avevd0(ji,jj) * tmask(ji ,jj ,jk) 107 avm (ji ,jj ,jk) = rn_avevd0(ji,jj) * tmask(ji ,jj ,jk) 108 avmu(ji ,jj ,jk) = rn_avevd0(ji,jj) * umask(ji ,jj ,jk) 109 avmu(ji-1,jj ,jk) = rn_avevd0(ji,jj) * umask(ji-1,jj ,jk) 110 avmv(ji ,jj ,jk) = rn_avevd0(ji,jj) * vmask(ji ,jj ,jk) 111 avmv(ji ,jj-1,jk) = rn_avevd0(ji,jj) * vmask(ji ,jj-1,jk) 97 112 ENDIF 98 113 END DO 99 114 END DO 100 END DO 115 END DO 101 116 CALL lbc_lnk( avt , 'W', 1. ) ; CALL lbc_lnk( avm , 'W', 1. ) ! Lateral boundary conditions 102 117 CALL lbc_lnk( avmu, 'U', 1. ) ; CALL lbc_lnk( avmv, 'V', 1. ) … … 105 120 CALL iom_put( "avm_evd", zavm_evd ) ! output this change 106 121 ! 107 CASE DEFAULT ! enhance vertical eddy diffusivity only (if rn2<-1.e-12) 122 CASE DEFAULT ! enhance vertical eddy diffusivity only (if rn2<-1.e-12) 108 123 DO jk = 1, jpkm1 109 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL! 124 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL! 110 125 DO jj = 1, jpj ! loop over the whole domain (no lbc_lnk call) 111 126 DO ji = 1, jpi 112 127 #if defined key_zdfkpp 113 128 ! no evd mixing in the boundary layer with KPP 114 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 .AND. fsdepw(ji,jj,jk) > hkpp(ji,jj) ) & 129 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 .AND. fsdepw(ji,jj,jk) > hkpp(ji,jj) ) & 115 130 #else 116 131 IF( MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) & 117 132 #endif 118 avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk)133 avt(ji,jj,jk) = rn_avevd0(ji,jj) * tmask(ji,jj,jk) 119 134 END DO 120 135 END DO 121 136 END DO 122 137 ! 123 END SELECT 138 END SELECT 124 139 125 140 zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:) ! change in avt due to evd
Note: See TracChangeset
for help on using the changeset viewer.