- 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/PISCES/P2Z/p2zexp.F90
r10425 r13463 17 17 USE p2zsed 18 18 USE lbclnk 19 USE prtctl _trc! Print control for debbuging19 USE prtctl ! Print control for debbuging 20 20 USE trd_oce 21 21 USE trdtrc … … 38 38 39 39 !! * Substitutions 40 # include "vectopt_loop_substitute.h90" 40 # include "do_loop_substitute.h90" 41 # include "domzgr_substitute.h90" 41 42 !!---------------------------------------------------------------------- 42 43 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 46 47 CONTAINS 47 48 48 SUBROUTINE p2z_exp( kt )49 SUBROUTINE p2z_exp( kt, Kmm, Krhs ) 49 50 !!--------------------------------------------------------------------- 50 51 !! *** ROUTINE p2z_exp *** … … 60 61 !!--------------------------------------------------------------------- 61 62 !! 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 63 INTEGER, INTENT( in ) :: kt ! ocean time-step index 64 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 63 65 !! 64 66 INTEGER :: ji, jj, jk, jl, ikt … … 70 72 IF( ln_timing ) CALL timing_start('p2z_exp') 71 73 ! 72 IF( kt == nittrc000 ) CALL p2z_exp_init 74 IF( kt == nittrc000 ) CALL p2z_exp_init( Kmm ) 73 75 74 76 zsedpoca(:,:) = 0. … … 80 82 ! LAYERS IS DETERMINED BY DMIN3 DEFINED IN sms_p2z.F90 81 83 ! ---------------------------------------------------------------------- 82 DO jk = 1, jpkm1 83 DO jj = 2, jpjm1 84 DO ji = fs_2, fs_jpim1 85 ze3t = 1. / e3t_n(ji,jj,jk) 86 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj) 87 END DO 88 END DO 89 END DO 84 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 85 ze3t = 1. / e3t(ji,jj,jk,Kmm) 86 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj) 87 END_3D 90 88 91 89 ! Find the last level of the water column … … 95 93 zgeolpoc = 0.e0 ! Initialization 96 94 ! Release of nutrients from the "simple" sediment 97 DO jj = 2, jpjm1 98 DO ji = fs_2, fs_jpim1 99 ikt = mbkt(ji,jj) 100 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) + sedlam * sedpocn(ji,jj) / e3t_n(ji,jj,ikt) 101 ! Deposition of organic matter in the sediment 102 zwork = vsed * trn(ji,jj,ikt,jpdet) 103 zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj) & 104 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rdt 105 zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1e2t(ji,jj) 106 END DO 107 END DO 108 109 DO jj = 2, jpjm1 110 DO ji = fs_2, fs_jpim1 111 tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc * cmask(ji,jj) / areacot / e3t_n(ji,jj,1) 112 END DO 113 END DO 114 115 CALL lbc_lnk( 'p2zexp', sedpocn, 'T', 1. ) 95 DO_2D( 0, 0, 0, 0 ) 96 ikt = mbkt(ji,jj) 97 tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) + sedlam * sedpocn(ji,jj) / e3t(ji,jj,ikt,Kmm) 98 ! Deposition of organic matter in the sediment 99 zwork = vsed * tr(ji,jj,ikt,jpdet,Kmm) 100 zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj) & 101 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rn_Dt 102 zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1e2t(ji,jj) 103 END_2D 104 105 DO_2D( 0, 0, 0, 0 ) 106 tr(ji,jj,1,jpno3,Krhs) = tr(ji,jj,1,jpno3,Krhs) + zgeolpoc * cmask(ji,jj) / areacot / e3t(ji,jj,1,Kmm) 107 END_2D 108 109 CALL lbc_lnk( 'p2zexp', sedpocn, 'T', 1.0_wp ) 116 110 117 111 ! Oa & Ek: diagnostics depending on jpdia2d ! left as example … … 121 115 ! Time filter and swap of arrays 122 116 ! ------------------------------ 123 IF( neuler == 0 .AND. kt == nittrc000) THEN ! Euler time-stepping at first time-step124 ! 117 IF( l_1st_euler ) THEN ! Euler time-stepping at first time-step 118 ! ! (only swap) 125 119 sedpocn(:,:) = zsedpoca(:,:) 126 120 ! 127 121 ELSE 128 122 ! 129 DO jj = 1, jpj 130 DO ji = 1, jpi 131 zsedpocd = zsedpoca(ji,jj) - 2. * sedpocn(ji,jj) + sedpocb(ji,jj) ! time laplacian on tracers 132 sedpocb(ji,jj) = sedpocn(ji,jj) + atfp * zsedpocd ! sedpocb <-- filtered sedpocn 133 sedpocn(ji,jj) = zsedpoca(ji,jj) ! sedpocn <-- sedpoca 134 END DO 135 END DO 123 DO_2D( 1, 1, 1, 1 ) 124 zsedpocd = zsedpoca(ji,jj) - 2. * sedpocn(ji,jj) + sedpocb(ji,jj) ! time laplacian on tracers 125 sedpocb(ji,jj) = sedpocn(ji,jj) + rn_atfp * zsedpocd ! sedpocb <-- filtered sedpocn 126 sedpocn(ji,jj) = zsedpoca(ji,jj) ! sedpocn <-- sedpoca 127 END_2D 136 128 ! 137 129 ENDIF … … 146 138 ENDIF 147 139 ! 148 IF( ln_ctl) THEN ! print mean trends (used for debugging)140 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 149 141 WRITE(charout, FMT="('exp')") 150 CALL prt_ctl_ trc_info(charout)151 CALL prt_ctl _trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)142 CALL prt_ctl_info( charout, cdcomp = 'top' ) 143 CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 152 144 ENDIF 153 145 ! … … 157 149 158 150 159 SUBROUTINE p2z_exp_init 151 SUBROUTINE p2z_exp_init( Kmm ) 160 152 !!---------------------------------------------------------------------- 161 153 !! *** ROUTINE p4z_exp_init *** 162 154 !! ** purpose : specific initialisation for export 163 155 !!---------------------------------------------------------------------- 156 INTEGER, INTENT(in) :: Kmm ! time level index 164 157 INTEGER :: ji, jj, jk 165 158 REAL(wp) :: zmaskt, zfluo, zfluu … … 181 174 zdm0 = 0._wp 182 175 zrro = 1._wp 183 DO jk = jpkb, jpkm1 184 DO jj = 1, jpj 185 DO ji = 1, jpi 186 zfluo = ( gdepw_n(ji,jj,jk ) / gdepw_n(ji,jj,jpkb) )**xhr 187 zfluu = ( gdepw_n(ji,jj,jk+1) / gdepw_n(ji,jj,jpkb) )**xhr 188 IF( zfluo.GT.1. ) zfluo = 1._wp 189 zdm0(ji,jj,jk) = zfluo - zfluu 190 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0._wp 191 zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk) 192 END DO 193 END DO 194 END DO 176 DO_3D( 1, 1, 1, 1, jpkb, jpkm1 ) 177 zfluo = ( gdepw(ji,jj,jk ,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr 178 zfluu = ( gdepw(ji,jj,jk+1,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr 179 IF( zfluo.GT.1. ) zfluo = 1._wp 180 zdm0(ji,jj,jk) = zfluo - zfluu 181 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0._wp 182 zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk) 183 END_3D 195 184 ! 196 185 zdm0(:,:,jpk) = zrro(:,:) … … 202 191 dminl(:,:) = 0._wp 203 192 dmin3(:,:,:) = zdm0 204 DO jk = 1, jpk 205 DO jj = 1, jpj 206 DO ji = 1, jpi 207 IF( tmask(ji,jj,jk) == 0._wp ) THEN 208 dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk) 209 dmin3(ji,jj,jk) = 0._wp 210 ENDIF 211 END DO 212 END DO 213 END DO 214 215 DO jj = 1, jpj 216 DO ji = 1, jpi 217 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0._wp 218 END DO 219 END DO 193 DO_3D( 1, 1, 1, 1, 1, jpk ) 194 IF( tmask(ji,jj,jk) == 0._wp ) THEN 195 dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk) 196 dmin3(ji,jj,jk) = 0._wp 197 ENDIF 198 END_3D 199 200 DO_2D( 1, 1, 1, 1 ) 201 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0._wp 202 END_2D 220 203 221 204 ! Coastal mask 222 205 cmask(:,:) = 0._wp 223 DO jj = 2, jpjm1 224 DO ji = fs_2, fs_jpim1 225 IF( tmask(ji,jj,1) /= 0. ) THEN 226 zmaskt = tmask(ji+1,jj,1) * tmask(ji-1,jj,1) * tmask(ji,jj+1,1) * tmask(ji,jj-1,1) 227 IF( zmaskt == 0. ) cmask(ji,jj) = 1._wp 228 END IF 229 END DO 230 END DO 231 CALL lbc_lnk( 'p2zexp', cmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 206 DO_2D( 0, 0, 0, 0 ) 207 IF( tmask(ji,jj,1) /= 0. ) THEN 208 zmaskt = tmask(ji+1,jj,1) * tmask(ji-1,jj,1) * tmask(ji,jj+1,1) * tmask(ji,jj-1,1) 209 IF( zmaskt == 0. ) cmask(ji,jj) = 1._wp 210 END IF 211 END_2D 212 CALL lbc_lnk( 'p2zexp', cmask , 'T', 1.0_wp ) ! lateral boundary conditions on cmask (sign unchanged) 232 213 areacot = glob_sum( 'p2zexp', e1e2t(:,:) * cmask(:,:) ) 233 214 ! 234 215 IF( ln_rsttr ) THEN 235 CALL iom_get( numrtr, jpdom_auto glo, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) )236 CALL iom_get( numrtr, jpdom_auto glo, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) )216 CALL iom_get( numrtr, jpdom_auto, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 217 CALL iom_get( numrtr, jpdom_auto, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 237 218 ELSE 238 219 sedpocb(:,:) = 0._wp
Note: See TracChangeset
for help on using the changeset viewer.