- Timestamp:
- 2020-09-24T20:42:25+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13383_HPC-02_Daley_Tiling/src/OCE/TRA/trazdf.F90
r13295 r13517 14 14 USE oce ! ocean dynamics and tracers variables 15 15 USE dom_oce ! ocean space and time domain variables 16 ! TEMP: This change not necessary after trd_tra is tiled 17 USE domain, ONLY : dom_tile 16 18 USE domvvl ! variable volume 17 19 USE phycst ! physical constant … … 55 57 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 56 58 ! 57 INTEGER :: jk ! Dummy loop indices 58 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds ! 3D workspace 59 INTEGER :: ji, jj, jk ! Dummy loop indices 60 ! TEMP: This change not necessary after trd_tra is tiled 61 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE :: ztrdt, ztrds ! 3D workspace 59 62 !!--------------------------------------------------------------------- 60 63 ! … … 62 65 ! 63 66 IF( kt == nit000 ) THEN 64 IF(lwp)WRITE(numout,*) 65 IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 66 IF(lwp)WRITE(numout,*) '~~~~~~~ ' 67 IF( ntile == 0 .OR. ntile == 1 ) THEN ! Do only on the first tile 68 IF(lwp)WRITE(numout,*) 69 IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 70 IF(lwp)WRITE(numout,*) '~~~~~~~ ' 71 ENDIF 67 72 ENDIF 68 73 ! 69 74 IF( l_trdtra ) THEN !* Save ta and sa trends 70 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 71 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Kaa) 72 ztrds(:,:,:) = pts(:,:,:,jp_sal,Kaa) 75 IF( ntile == 0 .OR. ntile == 1 ) THEN ! Do only on the first tile 76 ! TEMP: This can be ST_2D(nn_hls) after trd_tra is tiled 77 ALLOCATE( ztrdt(jpi,jpj,jpk), ztrds(jpi,jpj,jpk) ) 78 ENDIF 79 80 DO_3D( 0, 0, 0, 0, 1, jpk ) 81 ztrdt(ji,jj,jk) = pts(ji,jj,jk,jp_tem,Kaa) 82 ztrds(ji,jj,jk) = pts(ji,jj,jk,jp_sal,Kaa) 83 END_3D 73 84 ENDIF 74 85 ! … … 80 91 ! JMM avoid negative salinities near river outlet ! Ugly fix 81 92 ! JMM : restore negative salinities to small salinities: 82 WHERE( pts( :,:,:,jp_sal,Kaa) < 0._wp ) pts(:,:,:,jp_sal,Kaa) = 0.1_wp93 WHERE( pts(ST_2D(0),:,jp_sal,Kaa) < 0._wp ) pts(ST_2D(0),:,jp_sal,Kaa) = 0.1_wp 83 94 !!gm 84 95 96 ! TEMP: These changes not necessary after trd_tra is tiled 85 97 IF( l_trdtra ) THEN ! save the vertical diffusive trends for further diagnostics 86 DO jk = 1, jpkm1 87 ztrdt(:,:,jk) = ( ( pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa) & 88 & - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb) ) & 89 & / ( e3t(:,:,jk,Kmm)*rDt ) ) & 90 & - ztrdt(:,:,jk) 91 ztrds(:,:,jk) = ( ( pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa) & 92 & - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb) ) & 93 & / ( e3t(:,:,jk,Kmm)*rDt ) ) & 94 & - ztrds(:,:,jk) 95 END DO 96 !!gm this should be moved in trdtra.F90 and done on all trends 97 CALL lbc_lnk_multi( 'trazdf', ztrdt, 'T', 1.0_wp , ztrds, 'T', 1.0_wp ) 98 !!gm 99 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 100 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdf, ztrds ) 101 DEALLOCATE( ztrdt , ztrds ) 98 DO_3D( 0, 0, 0, 0, 1, jpk ) 99 ztrdt(ji,jj,jk) = ( ( pts(ji,jj,jk,jp_tem,Kaa)*e3t(ji,jj,jk,Kaa) - pts(ji,jj,jk,jp_tem,Kbb)*e3t(ji,jj,jk,Kbb) ) & 100 & / (e3t(ji,jj,jk,Kmm)*rDt) ) - ztrdt(ji,jj,jk) 101 ztrds(ji,jj,jk) = ( ( pts(ji,jj,jk,jp_sal,Kaa)*e3t(ji,jj,jk,Kaa) - pts(ji,jj,jk,jp_sal,Kbb)*e3t(ji,jj,jk,Kbb) ) & 102 & / (e3t(ji,jj,jk,Kmm)*rDt) ) - ztrds(ji,jj,jk) 103 END_3D 104 105 IF( ntile == 0 .OR. ntile == nijtile ) THEN ! Do only for the full domain 106 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = 0 ) ! Use full domain 107 108 ! TODO: TO BE TILED- trd_tra 109 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 110 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_zdf, ztrds ) 111 DEALLOCATE( ztrdt , ztrds ) 112 113 IF( ln_tile ) CALL dom_tile( ntsi, ntsj, ntei, ntej, ktile = nijtile ) ! Revert to tile domain 114 ENDIF 102 115 ENDIF 103 116 ! ! print mean trends (used for debugging) … … 140 153 INTEGER :: ji, jj, jk, jn ! dummy loop indices 141 154 REAL(wp) :: zrhs, zzwi, zzws ! local scalars 142 REAL(wp), DIMENSION( jpi,jpj,jpk) :: zwi, zwt, zwd, zws155 REAL(wp), DIMENSION(ST_2D(nn_hls),jpk) :: zwi, zwt, zwd, zws 143 156 !!--------------------------------------------------------------------- 144 157 ! … … 154 167 ! 155 168 ! vertical mixing coef.: avt for temperature, avs for salinity and passive tracers 156 IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN ; zwt(:,:,2:jpk) = avt(:,:,2:jpk) 157 ELSE ; zwt(:,:,2:jpk) = avs(:,:,2:jpk) 169 IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN 170 DO_3D( 1, 1, 1, 1, 2, jpk ) 171 zwt(ji,jj,jk) = avt(ji,jj,jk) 172 END_3D 173 ELSE 174 DO_3D( 1, 1, 1, 1, 2, jpk ) 175 zwt(ji,jj,jk) = avs(ji,jj,jk) 176 END_3D 158 177 ENDIF 159 178 zwt(:,:,1) = 0._wp … … 222 241 END_2D 223 242 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 224 zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) & 243 zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) & 225 244 & + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,Krhs) ! zrhs=right hand side 226 245 pt(ji,jj,jk,jn,Kaa) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pt(ji,jj,jk-1,jn,Kaa)
Note: See TracChangeset
for help on using the changeset viewer.