Changeset 10975 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z
- Timestamp:
- 2019-05-13T18:34:33+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zbio.F90
r10425 r10975 65 65 CONTAINS 66 66 67 SUBROUTINE p2z_bio( kt )67 SUBROUTINE p2z_bio( kt, Kmm, Krhs ) 68 68 !!--------------------------------------------------------------------- 69 69 !! *** ROUTINE p2z_bio *** … … 78 78 !! is added to the general trend. 79 79 !! 80 !! tr a = tra + zf...tra- zftra...80 !! tr(Krhs) = tr(Krhs) + zf...tr(Krhs) - zftra... 81 81 !! | | 82 82 !! | | … … 84 84 !! 85 85 !!--------------------------------------------------------------------- 86 INTEGER, INTENT( in ) :: kt ! ocean time-step index 86 INTEGER, INTENT( in ) :: kt ! ocean time-step index 87 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 87 88 ! 88 89 INTEGER :: ji, jj, jk, jl … … 126 127 127 128 ! negative trophic variables DO not contribute to the fluxes 128 zdet = MAX( 0.e0, tr n(ji,jj,jk,jpdet) )129 zzoo = MAX( 0.e0, tr n(ji,jj,jk,jpzoo) )130 zphy = MAX( 0.e0, tr n(ji,jj,jk,jpphy) )131 zno3 = MAX( 0.e0, tr n(ji,jj,jk,jpno3) )132 znh4 = MAX( 0.e0, tr n(ji,jj,jk,jpnh4) )133 zdom = MAX( 0.e0, tr n(ji,jj,jk,jpdom) )129 zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) ) 130 zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) ) 131 zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) ) 132 zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) ) 133 znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) ) 134 zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) ) 134 135 135 136 ! Limitations … … 176 177 ! closure : flux grazing is redistributed below level jpkbio 177 178 zzoobod = tmminz * zzoo * zzoo 178 xksi(ji,jj) = xksi(ji,jj) + (1-fdbod) * zzoobod * e3t _n(ji,jj,jk)179 xksi(ji,jj) = xksi(ji,jj) + (1-fdbod) * zzoobod * e3t(ji,jj,jk,Kmm) 179 180 zboddet = fdbod * zzoobod 180 181 … … 202 203 203 204 ! tracer flux at totox-point added to the general trend 204 tr a(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta205 tr a(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa206 tr a(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya207 tr a(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a208 tr a(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a209 tr a(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma205 tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta 206 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa 207 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya 208 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a 209 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a 210 tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma 210 211 211 212 IF( lk_iomput ) THEN 212 213 ! convert fluxes in per day 213 ze3t = e3t _n(ji,jj,jk) * 86400._wp214 ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp 214 215 zw2d(ji,jj,1) = zw2d(ji,jj,1) + zno3phy * ze3t 215 216 zw2d(ji,jj,2) = zw2d(ji,jj,2) + znh4phy * ze3t … … 248 249 ! trophic variables( det, zoo, phy, no3, nh4, dom) 249 250 ! negative trophic variables DO not contribute to the fluxes 250 zdet = MAX( 0.e0, tr n(ji,jj,jk,jpdet) )251 zzoo = MAX( 0.e0, tr n(ji,jj,jk,jpzoo) )252 zphy = MAX( 0.e0, tr n(ji,jj,jk,jpphy) )253 zno3 = MAX( 0.e0, tr n(ji,jj,jk,jpno3) )254 znh4 = MAX( 0.e0, tr n(ji,jj,jk,jpnh4) )255 zdom = MAX( 0.e0, tr n(ji,jj,jk,jpdom) )251 zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) ) 252 zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) ) 253 zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) ) 254 zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) ) 255 znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) ) 256 zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) ) 256 257 257 258 ! Limitations … … 304 305 305 306 ! tracer flux at totox-point added to the general trend 306 tr a(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta307 tr a(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa308 tr a(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya309 tr a(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a310 tr a(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a311 tr a(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma307 tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta 308 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa 309 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya 310 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a 311 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a 312 tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma 312 313 ! 313 314 IF( lk_iomput ) THEN ! convert fluxes in per day 314 ze3t = e3t _n(ji,jj,jk) * 86400._wp315 ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp 315 316 zw2d(ji,jj,1) = zw2d(ji,jj,1) + zno3phy * ze3t 316 317 zw2d(ji,jj,2) = zw2d(ji,jj,2) + znh4phy * ze3t … … 370 371 WRITE(charout, FMT="('bio')") 371 372 CALL prt_ctl_trc_info(charout) 372 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)373 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 373 374 ENDIF 374 375 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zexp.F90
r10425 r10975 46 46 CONTAINS 47 47 48 SUBROUTINE p2z_exp( kt )48 SUBROUTINE p2z_exp( kt, Kmm, Krhs ) 49 49 !!--------------------------------------------------------------------- 50 50 !! *** ROUTINE p2z_exp *** … … 60 60 !!--------------------------------------------------------------------- 61 61 !! 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 63 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 63 64 !! 64 65 INTEGER :: ji, jj, jk, jl, ikt … … 70 71 IF( ln_timing ) CALL timing_start('p2z_exp') 71 72 ! 72 IF( kt == nittrc000 ) CALL p2z_exp_init 73 IF( kt == nittrc000 ) CALL p2z_exp_init( Kmm ) 73 74 74 75 zsedpoca(:,:) = 0. … … 83 84 DO jj = 2, jpjm1 84 85 DO ji = fs_2, fs_jpim1 85 ze3t = 1. / e3t _n(ji,jj,jk)86 tr a(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj)86 ze3t = 1. / e3t(ji,jj,jk,Kmm) 87 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj) 87 88 END DO 88 89 END DO … … 98 99 DO ji = fs_2, fs_jpim1 99 100 ikt = mbkt(ji,jj) 100 tr a(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) + sedlam * sedpocn(ji,jj) / e3t_n(ji,jj,ikt)101 tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) + sedlam * sedpocn(ji,jj) / e3t(ji,jj,ikt,Kmm) 101 102 ! Deposition of organic matter in the sediment 102 zwork = vsed * tr n(ji,jj,ikt,jpdet)103 zwork = vsed * tr(ji,jj,ikt,jpdet,Kmm) 103 104 zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj) & 104 105 & - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rdt … … 109 110 DO jj = 2, jpjm1 110 111 DO ji = fs_2, fs_jpim1 111 tr a(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc * cmask(ji,jj) / areacot / e3t_n(ji,jj,1)112 tr(ji,jj,1,jpno3,Krhs) = tr(ji,jj,1,jpno3,Krhs) + zgeolpoc * cmask(ji,jj) / areacot / e3t(ji,jj,1,Kmm) 112 113 END DO 113 114 END DO … … 149 150 WRITE(charout, FMT="('exp')") 150 151 CALL prt_ctl_trc_info(charout) 151 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)152 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 152 153 ENDIF 153 154 ! … … 157 158 158 159 159 SUBROUTINE p2z_exp_init 160 SUBROUTINE p2z_exp_init( Kmm ) 160 161 !!---------------------------------------------------------------------- 161 162 !! *** ROUTINE p4z_exp_init *** 162 163 !! ** purpose : specific initialisation for export 163 164 !!---------------------------------------------------------------------- 165 INTEGER, INTENT(in) :: Kmm ! time level index 164 166 INTEGER :: ji, jj, jk 165 167 REAL(wp) :: zmaskt, zfluo, zfluu … … 184 186 DO jj = 1, jpj 185 187 DO ji = 1, jpi 186 zfluo = ( gdepw _n(ji,jj,jk ) / gdepw_n(ji,jj,jpkb) )**xhr187 zfluu = ( gdepw _n(ji,jj,jk+1) / gdepw_n(ji,jj,jpkb) )**xhr188 zfluo = ( gdepw(ji,jj,jk ,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr 189 zfluu = ( gdepw(ji,jj,jk+1,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr 188 190 IF( zfluo.GT.1. ) zfluo = 1._wp 189 191 zdm0(ji,jj,jk) = zfluo - zfluu -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zopt.F90
r10068 r10975 45 45 CONTAINS 46 46 47 SUBROUTINE p2z_opt( kt )47 SUBROUTINE p2z_opt( kt, Kmm ) 48 48 !!--------------------------------------------------------------------- 49 49 !! *** ROUTINE p2z_opt *** … … 61 61 !! 62 62 INTEGER, INTENT( in ) :: kt ! index of the time stepping 63 INTEGER, INTENT( in ) :: Kmm ! time level index 63 64 !! 64 65 INTEGER :: ji, jj, jk ! dummy loop indices … … 94 95 DO jj = 1, jpj 95 96 DO ji = 1, jpi 96 zpig = LOG( MAX( TINY(0.), tr n(ji,jj,jk-1,jpphy) ) * zcoef )97 zpig = LOG( MAX( TINY(0.), tr(ji,jj,jk-1,jpphy,Kmm) ) * zcoef ) 97 98 zkr = xkr0 + xkrp * EXP( xlr * zpig ) 98 99 zkg = xkg0 + xkgp * EXP( xlg * zpig ) 99 zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * e3t _n(ji,jj,jk-1) )100 zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * e3t _n(ji,jj,jk-1) )100 zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * e3t(ji,jj,jk-1,Kmm) ) 101 zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * e3t(ji,jj,jk-1,Kmm) ) 101 102 END DO 102 103 END DO … … 105 106 DO jj = 1, jpj 106 107 DO ji = 1, jpi 107 zpig = LOG( MAX( TINY(0.), tr n(ji,jj,jk,jpphy) ) * zcoef )108 zpig = LOG( MAX( TINY(0.), tr(ji,jj,jk,jpphy,Kmm) ) * zcoef ) 108 109 zkr = xkr0 + xkrp * EXP( xlr * zpig ) 109 110 zkg = xkg0 + xkgp * EXP( xlg * zpig ) 110 zparr(ji,jj,jk) = zparr(ji,jj,jk) / ( zkr * e3t _n(ji,jj,jk) ) * ( 1 - EXP( -zkr * e3t_n(ji,jj,jk) ) )111 zparg(ji,jj,jk) = zparg(ji,jj,jk) / ( zkg * e3t _n(ji,jj,jk) ) * ( 1 - EXP( -zkg * e3t_n(ji,jj,jk) ) )111 zparr(ji,jj,jk) = zparr(ji,jj,jk) / ( zkr * e3t(ji,jj,jk,Kmm) ) * ( 1 - EXP( -zkr * e3t(ji,jj,jk,Kmm) ) ) 112 zparg(ji,jj,jk) = zparg(ji,jj,jk) / ( zkg * e3t(ji,jj,jk,Kmm) ) * ( 1 - EXP( -zkg * e3t(ji,jj,jk,Kmm) ) ) 112 113 etot (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 ) 113 114 END DO … … 128 129 DO jj = 1, jpj 129 130 DO ji = 1, jpi 130 heup(ji,jj) = gdepw _n(ji,jj,neln(ji,jj))131 heup(ji,jj) = gdepw(ji,jj,neln(ji,jj),Kmm) 131 132 END DO 132 133 END DO … … 136 137 WRITE(charout, FMT="('opt')") 137 138 CALL prt_ctl_trc_info( charout ) 138 CALL prt_ctl_trc( tab4d=tr n, mask=tmask, clinfo=ctrcnm )139 CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Kmm), mask=tmask, clinfo=ctrcnm ) 139 140 ENDIF 140 141 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zsed.F90
r10068 r10975 38 38 CONTAINS 39 39 40 SUBROUTINE p2z_sed( kt )40 SUBROUTINE p2z_sed( kt, Kmm, Krhs ) 41 41 !!--------------------------------------------------------------------- 42 42 !! *** ROUTINE p2z_sed *** … … 49 49 !! using an upstream scheme 50 50 !! the now vertical advection of tracers is given by: 51 !! dz(tr n wn) = 1/bt dk+1( e1t e2t vsed (trn) )52 !! add this trend now to the general trend of tracer (ta,sa,tr a):53 !! tr a = tra + dz(trn wn)51 !! dz(tr(:,:,:,:,Kmm) ww) = 1/bt dk+1( e1t e2t vsed (tr(:,:,:,:,Kmm)) ) 52 !! add this trend now to the general trend of tracer (ta,sa,tr(:,:,:,:,Krhs)): 53 !! tr(:,:,:,:,Krhs) = tr(:,:,:,:,Krhs) + dz(tr(:,:,:,:,Kmm) ww) 54 54 !! 55 55 !! IF 'key_diabio' is defined, the now vertical advection 56 56 !! trend of passive tracers is saved for futher diagnostics. 57 57 !!--------------------------------------------------------------------- 58 INTEGER, INTENT( in ) :: kt ! ocean time-step index 58 INTEGER, INTENT( in ) :: kt ! ocean time-step index 59 INTEGER, INTENT( in ) :: Kmm, Krhs ! time level indices 59 60 ! 60 61 INTEGER :: ji, jj, jk, jl, ierr … … 81 82 ! tracer flux at w-point: we use -vsed (downward flux) with simplification : no e1*e2 82 83 DO jk = 2, jpkm1 83 zwork(:,:,jk) = -vsed * tr n(:,:,jk-1,jpdet)84 zwork(:,:,jk) = -vsed * tr(:,:,jk-1,jpdet,Kmm) 84 85 END DO 85 86 … … 88 89 DO jj = 1, jpj 89 90 DO ji = 1, jpi 90 ztra(ji,jj,jk) = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / e3t _n(ji,jj,jk)91 tr a(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + ztra(ji,jj,jk)91 ztra(ji,jj,jk) = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / e3t(ji,jj,jk,Kmm) 92 tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + ztra(ji,jj,jk) 92 93 END DO 93 94 END DO … … 97 98 IF( iom_use( "TDETSED" ) ) THEN 98 99 ALLOCATE( zw2d(jpi,jpj) ) 99 zw2d(:,:) = ztra(:,:,1) * e3t _n(:,:,1) * 86400._wp100 zw2d(:,:) = ztra(:,:,1) * e3t(:,:,1,Kmm) * 86400._wp 100 101 DO jk = 2, jpkm1 101 zw2d(:,:) = zw2d(:,:) + ztra(:,:,jk) * e3t _n(:,:,jk) * 86400._wp102 zw2d(:,:) = zw2d(:,:) + ztra(:,:,jk) * e3t(:,:,jk,Kmm) * 86400._wp 102 103 END DO 103 104 CALL iom_put( "TDETSED", zw2d ) … … 110 111 WRITE(charout, FMT="('sed')") 111 112 CALL prt_ctl_trc_info(charout) 112 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)113 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 113 114 ENDIF 114 115 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zsms.F90
r10966 r10975 35 35 CONTAINS 36 36 37 SUBROUTINE p2z_sms( kt, Kmm )37 SUBROUTINE p2z_sms( kt, Kmm, Krhs ) 38 38 !!--------------------------------------------------------------------- 39 39 !! *** ROUTINE p2z_sms *** … … 44 44 !! ** Method : - ??? 45 45 !! -------------------------------------------------------------------- 46 INTEGER, INTENT( in ) :: kt ! ocean time-step index47 INTEGER, INTENT( in ) :: Kmm ! ocean time level index46 INTEGER, INTENT( in ) :: kt ! ocean time-step index 47 INTEGER, INTENT( in ) :: Kmm, Krhs ! ocean time level index 48 48 ! 49 49 INTEGER :: jn ! dummy loop index … … 52 52 IF( ln_timing ) CALL timing_start('p2z_sms') 53 53 ! 54 CALL p2z_opt( kt ) ! optical model55 CALL p2z_bio( kt ) ! biological model56 CALL p2z_sed( kt ) ! sedimentation model57 CALL p2z_exp( kt ) ! export54 CALL p2z_opt( kt, Kmm ) ! optical model 55 CALL p2z_bio( kt, Kmm, Krhs ) ! biological model 56 CALL p2z_sed( kt, Kmm, Krhs ) ! sedimentation model 57 CALL p2z_exp( kt, Kmm, Krhs ) ! export 58 58 ! 59 59 IF( l_trdtrc ) THEN 60 60 DO jn = jp_pcs0, jp_pcs1 61 CALL trd_trc( tr a(:,:,:,jn), jn, jptra_sms, kt, Kmm ) ! save trends61 CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm ) ! save trends 62 62 END DO 63 63 END IF
Note: See TracChangeset
for help on using the changeset viewer.