Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p4zsms.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsms.F90
r12276 r12377 17 17 USE p4zlys ! Calcite saturation 18 18 USE p4zflx ! Gas exchange 19 USE p4z sbc! External source of nutrients19 USE p4zbc ! External source of nutrients 20 20 USE p4zsed ! Sedimentation 21 21 USE p4zint ! time interpolation … … 39 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr ! Array used to indicate negative tracer values 40 40 41 !! * Substitutions 42 # include "do_loop_substitute.h90" 41 43 !!---------------------------------------------------------------------- 42 44 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 46 48 CONTAINS 47 49 48 SUBROUTINE p4z_sms( kt )50 SUBROUTINE p4z_sms( kt, Kbb, Kmm, Krhs ) 49 51 !!--------------------------------------------------------------------- 50 52 !! *** ROUTINE p4z_sms *** … … 58 60 !!--------------------------------------------------------------------- 59 61 ! 60 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 INTEGER, INTENT( in ) :: kt ! ocean time-step index 63 INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs ! time level index 61 64 !! 62 65 INTEGER :: ji, jj, jk, jnt, jn, jl … … 76 79 ! 77 80 IF( .NOT. ln_rsttr ) THEN 78 CALL p4z_che 79 CALL ahini_for_at( hi)! set PH at kt=nit00081 CALL p4z_che( Kbb, Kmm ) ! initialize the chemical constants 82 CALL ahini_for_at( hi, Kbb ) ! set PH at kt=nit000 80 83 t_oce_co2_flx_cum = 0._wp 81 84 ELSE 82 CALL p4z_rst( nittrc000, 'READ' ) !* read or initialize all required fields85 CALL p4z_rst( nittrc000, Kbb, Kmm, 'READ' ) !* read or initialize all required fields 83 86 ENDIF 84 87 ! 85 88 ENDIF 86 89 ! 87 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt) ! Relaxation of some tracers90 IF( ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt, Kbb, Kmm ) ! Relaxation of some tracers 88 91 ! 89 92 rfact = r2dttrc … … 92 95 IF( l_trdtrc ) THEN 93 96 ALLOCATE( ztrdt(jpi,jpj,jpk,jp_pisces) ) !* store now fields before applying the Asselin filter 94 ztrdt(:,:,:,:) = tr n(:,:,:,:)95 ENDIF 96 ! 97 98 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc) ) THEN97 ztrdt(:,:,:,:) = tr(:,:,:,:,Kmm) 98 ENDIF 99 ! 100 101 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 99 102 rfactr = 1. / rfact 100 103 rfact2 = rfact / REAL( nrdttrc, wp ) … … 110 113 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 111 114 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 112 tr b(:,:,:,jn) = trn(:,:,:,jn)115 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm) 113 116 END DO 114 117 ENDIF 115 118 ! 116 IF( ll_ sbc ) CALL p4z_sbc( kt) ! external sources of nutrients119 IF( ll_bc ) CALL p4z_bc( kt, Kbb, Kmm, Krhs ) ! external sources of nutrients 117 120 ! 118 121 #if ! defined key_sed_off 119 CALL p4z_che 120 CALL p4z_int( kt )! computation of various rates for biogeochemistry122 CALL p4z_che( Kbb, Kmm ) ! computation of chemical constants 123 CALL p4z_int( kt, Kbb, Kmm ) ! computation of various rates for biogeochemistry 121 124 ! 122 125 DO jnt = 1, nrdttrc ! Potential time splitting if requested 123 126 ! 124 CALL p4z_bio( kt, jnt ) ! Biology125 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation126 CALL p4z_sed( kt, jnt ) ! Surface and Bottom boundary conditions127 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes127 CALL p4z_bio( kt, jnt, Kbb, Kmm, Krhs ) ! Biology 128 CALL p4z_lys( kt, jnt, Kbb, Krhs ) ! Compute CaCO3 saturation 129 CALL p4z_sed( kt, jnt, Kbb, Kmm, Krhs ) ! Surface and Bottom boundary conditions 130 CALL p4z_flx( kt, jnt, Kbb, Kmm, Krhs ) ! Compute surface fluxes 128 131 ! 129 132 xnegtr(:,:,:) = 1.e0 130 133 DO jn = jp_pcs0, jp_pcs1 131 DO jk = 1, jpk 132 DO jj = 1, jpj 133 DO ji = 1, jpi 134 IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 135 ztra = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 136 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 137 ENDIF 138 END DO 139 END DO 140 END DO 134 DO_3D_11_11( 1, jpk ) 135 IF( ( tr(ji,jj,jk,jn,Kbb) + tr(ji,jj,jk,jn,Krhs) ) < 0.e0 ) THEN 136 ztra = ABS( tr(ji,jj,jk,jn,Kbb) ) / ( ABS( tr(ji,jj,jk,jn,Krhs) ) + rtrn ) 137 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 138 ENDIF 139 END_3D 141 140 END DO 142 141 ! ! where at least 1 tracer concentration becomes negative 143 142 ! ! 144 143 DO jn = jp_pcs0, jp_pcs1 145 tr b(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn)144 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kbb) + xnegtr(:,:,:) * tr(:,:,:,jn,Krhs) 146 145 END DO 147 146 ! … … 152 151 zw3d(:,:,jpk) = 0. 153 152 DO jk = 1, jpkm1 154 zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t _n(:,:,jk) * tmask(:,:,jk)153 zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 155 154 ENDDO 156 155 ! 157 156 zw2d(:,:) = 0. 158 157 DO jk = 1, jpkm1 159 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr a(:,:,jk,jptal)158 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jptal,Krhs) 160 159 ENDDO 161 160 CALL iom_put( 'INTdtAlk', zw2d ) … … 163 162 zw2d(:,:) = 0. 164 163 DO jk = 1, jpkm1 165 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr a(:,:,jk,jpdic)164 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpdic,Krhs) 166 165 ENDDO 167 166 CALL iom_put( 'INTdtDIC', zw2d ) … … 169 168 zw2d(:,:) = 0. 170 169 DO jk = 1, jpkm1 171 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tr a(:,:,jk,jpno3) + tra(:,:,jk,jpnh4) )170 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tr(:,:,jk,jpno3,Krhs) + tr(:,:,jk,jpnh4,Krhs) ) 172 171 ENDDO 173 172 CALL iom_put( 'INTdtDIN', zw2d ) … … 175 174 zw2d(:,:) = 0. 176 175 DO jk = 1, jpkm1 177 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tr a(:,:,jk,jppo4)176 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tr(:,:,jk,jppo4,Krhs) 178 177 ENDDO 179 178 CALL iom_put( 'INTdtDIP', zw2d ) … … 181 180 zw2d(:,:) = 0. 182 181 DO jk = 1, jpkm1 183 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr a(:,:,jk,jpfer)182 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpfer,Krhs) 184 183 ENDDO 185 184 CALL iom_put( 'INTdtFer', zw2d ) … … 187 186 zw2d(:,:) = 0. 188 187 DO jk = 1, jpkm1 189 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr a(:,:,jk,jpsil)188 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpsil,Krhs) 190 189 ENDDO 191 190 CALL iom_put( 'INTdtSil', zw2d ) … … 195 194 ! 196 195 DO jn = jp_pcs0, jp_pcs1 197 tr a(:,:,:,jn) = 0._wp196 tr(:,:,:,jn,Krhs) = 0._wp 198 197 END DO 199 198 ! 200 199 IF( ln_top_euler ) THEN 201 200 DO jn = jp_pcs0, jp_pcs1 202 tr n(:,:,:,jn) = trb(:,:,:,jn)201 tr(:,:,:,jn,Kmm) = tr(:,:,:,jn,Kbb) 203 202 END DO 204 203 ENDIF … … 207 206 IF( l_trdtrc ) THEN 208 207 DO jn = jp_pcs0, jp_pcs1 209 ztrdt(:,:,:,jn) = ( tr b(:,:,:,jn) - ztrdt(:,:,:,jn) ) * rfact2r210 CALL trd_trc( ztrdt(:,:,:,jn), jn, jptra_sms, kt) ! save trends208 ztrdt(:,:,:,jn) = ( tr(:,:,:,jn,Kbb) - ztrdt(:,:,:,jn) ) * rfact2r 209 CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm ) ! save trends 211 210 END DO 212 211 DEALLOCATE( ztrdt ) … … 216 215 IF( ln_sediment ) THEN 217 216 ! 218 CALL sed_model( kt ) ! Main program of Sediment model217 CALL sed_model( kt, Kbb, Kmm, Krhs ) ! Main program of Sediment model 219 218 ! 220 219 IF( ln_top_euler ) THEN 221 220 DO jn = jp_pcs0, jp_pcs1 222 tr n(:,:,:,jn) = trb(:,:,:,jn)221 tr(:,:,:,jn,Kmm) = tr(:,:,:,jn,Kbb) 223 222 END DO 224 223 ENDIF … … 226 225 ENDIF 227 226 ! 228 IF( lrst_trc ) CALL p4z_rst( kt, 'WRITE' )!* Write PISCES informations in restart file229 ! 230 231 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt )! Mass conservation checking232 233 IF( lwm .AND. kt == nittrc000 ) CALL FLUSH( numonp ) ! flush output namelist PISCES227 IF( lrst_trc ) CALL p4z_rst( kt, Kbb, Kmm, 'WRITE' ) !* Write PISCES informations in restart file 228 ! 229 230 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt, Kmm ) ! Mass conservation checking 231 232 IF( lwm .AND. kt == nittrc000 ) CALL FLUSH( numonp ) ! flush output namelist PISCES 234 233 ! 235 234 IF( ln_timing ) CALL timing_stop('p4z_sms') … … 262 261 ENDIF 263 262 264 REWIND( numnatp_ref ) ! Namelist nampisbio in reference namelist : Pisces variables265 263 READ ( numnatp_ref, nampisbio, IOSTAT = ios, ERR = 901) 266 264 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisbio in reference namelist' ) 267 REWIND( numnatp_cfg ) ! Namelist nampisbio in configuration namelist : Pisces variables268 265 READ ( numnatp_cfg, nampisbio, IOSTAT = ios, ERR = 902 ) 269 266 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisbio in configuration namelist' ) … … 293 290 294 291 295 REWIND( numnatp_ref ) ! Namelist nampisdmp in reference namelist : Pisces damping296 292 READ ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905) 297 293 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdmp in reference namelist' ) 298 REWIND( numnatp_cfg ) ! Namelist nampisdmp in configuration namelist : Pisces damping299 294 READ ( numnatp_cfg, nampisdmp, IOSTAT = ios, ERR = 906 ) 300 295 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisdmp in configuration namelist' ) … … 308 303 ENDIF 309 304 310 REWIND( numnatp_ref ) ! Namelist nampismass in reference namelist : Pisces mass conservation check311 305 READ ( numnatp_ref, nampismass, IOSTAT = ios, ERR = 907) 312 306 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismass in reference namelist' ) 313 REWIND( numnatp_cfg ) ! Namelist nampismass in configuration namelist : Pisces mass conservation check314 307 READ ( numnatp_cfg, nampismass, IOSTAT = ios, ERR = 908 ) 315 308 908 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismass in configuration namelist' ) … … 325 318 326 319 327 SUBROUTINE p4z_rst( kt, cdrw )320 SUBROUTINE p4z_rst( kt, Kbb, Kmm, cdrw ) 328 321 !!--------------------------------------------------------------------- 329 322 !! *** ROUTINE p4z_rst *** … … 336 329 !!--------------------------------------------------------------------- 337 330 INTEGER , INTENT(in) :: kt ! ocean time-step 331 INTEGER , INTENT(in) :: Kbb, Kmm ! time level indices 338 332 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 339 333 !!--------------------------------------------------------------------- … … 348 342 CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:) ) 349 343 ELSE 350 CALL p4z_che 351 CALL ahini_for_at( hi)344 CALL p4z_che( Kbb, Kmm ) ! initialize the chemical constants 345 CALL ahini_for_at( hi, Kbb ) 352 346 ENDIF 353 347 CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) … … 396 390 397 391 398 SUBROUTINE p4z_dmp( kt )392 SUBROUTINE p4z_dmp( kt, Kbb, Kmm ) 399 393 !!---------------------------------------------------------------------- 400 394 !! *** p4z_dmp *** … … 403 397 !!---------------------------------------------------------------------- 404 398 ! 405 INTEGER, INTENT( in ) :: kt ! time step 399 INTEGER, INTENT( in ) :: kt ! time step 400 INTEGER, INTENT( in ) :: Kbb, Kmm ! time level indices 406 401 ! 407 402 REAL(wp) :: alkmean = 2426. ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) … … 424 419 zarea = 1._wp / glob_sum( 'p4zsms', cvol(:,:,:) ) * 1e6 425 420 426 zalksumn = glob_sum( 'p4zsms', tr n(:,:,:,jptal) * cvol(:,:,:) ) * zarea427 zpo4sumn = glob_sum( 'p4zsms', tr n(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r428 zno3sumn = glob_sum( 'p4zsms', tr n(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3429 zsilsumn = glob_sum( 'p4zsms', tr n(:,:,:,jpsil) * cvol(:,:,:) ) * zarea421 zalksumn = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kmm) * cvol(:,:,:) ) * zarea 422 zpo4sumn = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kmm) * cvol(:,:,:) ) * zarea * po4r 423 zno3sumn = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kmm) * cvol(:,:,:) ) * zarea * rno3 424 zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:) ) * zarea 430 425 431 426 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 432 tr n(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn427 tr(:,:,:,jptal,Kmm) = tr(:,:,:,jptal,Kmm) * alkmean / zalksumn 433 428 434 429 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 435 tr n(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn430 tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn 436 431 437 432 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 438 tr n(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn433 tr(:,:,:,jpno3,Kmm) = tr(:,:,:,jpno3,Kmm) * no3mean / zno3sumn 439 434 440 435 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 441 tr n(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn )436 tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn ) 442 437 ! 443 438 ! 444 439 IF( .NOT. ln_top_euler ) THEN 445 zalksumb = glob_sum( 'p4zsms', tr b(:,:,:,jptal) * cvol(:,:,:) ) * zarea446 zpo4sumb = glob_sum( 'p4zsms', tr b(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r447 zno3sumb = glob_sum( 'p4zsms', tr b(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3448 zsilsumb = glob_sum( 'p4zsms', tr b(:,:,:,jpsil) * cvol(:,:,:) ) * zarea440 zalksumb = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kbb) * cvol(:,:,:) ) * zarea 441 zpo4sumb = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kbb) * cvol(:,:,:) ) * zarea * po4r 442 zno3sumb = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kbb) * cvol(:,:,:) ) * zarea * rno3 443 zsilsumb = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kbb) * cvol(:,:,:) ) * zarea 449 444 450 445 IF(lwp) WRITE(numout,*) ' ' 451 446 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 452 tr b(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb447 tr(:,:,:,jptal,Kbb) = tr(:,:,:,jptal,Kbb) * alkmean / zalksumb 453 448 454 449 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 455 tr b(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb450 tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb 456 451 457 452 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 458 tr b(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb453 tr(:,:,:,jpno3,Kbb) = tr(:,:,:,jpno3,Kbb) * no3mean / zno3sumb 459 454 460 455 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 461 tr b(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb )456 tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb ) 462 457 ENDIF 463 458 ENDIF … … 468 463 469 464 470 SUBROUTINE p4z_chk_mass( kt )465 SUBROUTINE p4z_chk_mass( kt, Kmm ) 471 466 !!---------------------------------------------------------------------- 472 467 !! *** ROUTINE p4z_chk_mass *** … … 476 471 !!--------------------------------------------------------------------- 477 472 INTEGER, INTENT( in ) :: kt ! ocean time-step index 473 INTEGER, INTENT( in ) :: Kmm ! time level indices 478 474 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot 479 475 CHARACTER(LEN=100) :: cltxt … … 499 495 ! Compute the budget of NO3, ALK, Si, Fer 500 496 IF( ln_p4z ) THEN 501 zwork(:,:,:) = tr n(:,:,:,jpno3) + trn(:,:,:,jpnh4) &502 & + tr n(:,:,:,jpphy) + trn(:,:,:,jpdia) &503 & + tr n(:,:,:,jppoc) + trn(:,:,:,jpgoc) + trn(:,:,:,jpdoc) &504 & + tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes)497 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) & 498 & + tr(:,:,:,jpphy,Kmm) + tr(:,:,:,jpdia,Kmm) & 499 & + tr(:,:,:,jppoc,Kmm) + tr(:,:,:,jpgoc,Kmm) + tr(:,:,:,jpdoc,Kmm) & 500 & + tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) 505 501 ELSE 506 zwork(:,:,:) = tr n(:,:,:,jpno3) + trn(:,:,:,jpnh4) + trn(:,:,:,jpnph) &507 & + tr n(:,:,:,jpndi) + trn(:,:,:,jpnpi) &508 & + tr n(:,:,:,jppon) + trn(:,:,:,jpgon) + trn(:,:,:,jpdon) &509 & + ( tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * no3rat3502 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) + tr(:,:,:,jpnh4,Kmm) + tr(:,:,:,jpnph,Kmm) & 503 & + tr(:,:,:,jpndi,Kmm) + tr(:,:,:,jpnpi,Kmm) & 504 & + tr(:,:,:,jppon,Kmm) + tr(:,:,:,jpgon,Kmm) + tr(:,:,:,jpdon,Kmm) & 505 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * no3rat3 510 506 ENDIF 511 507 ! … … 517 513 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 518 514 IF( ln_p4z ) THEN 519 zwork(:,:,:) = tr n(:,:,:,jppo4) &520 & + tr n(:,:,:,jpphy) + trn(:,:,:,jpdia) &521 & + tr n(:,:,:,jppoc) + trn(:,:,:,jpgoc) + trn(:,:,:,jpdoc) &522 & + tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes)515 zwork(:,:,:) = tr(:,:,:,jppo4,Kmm) & 516 & + tr(:,:,:,jpphy,Kmm) + tr(:,:,:,jpdia,Kmm) & 517 & + tr(:,:,:,jppoc,Kmm) + tr(:,:,:,jpgoc,Kmm) + tr(:,:,:,jpdoc,Kmm) & 518 & + tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) 523 519 ELSE 524 zwork(:,:,:) = tr n(:,:,:,jppo4) + trn(:,:,:,jppph) &525 & + tr n(:,:,:,jppdi) + trn(:,:,:,jpppi) &526 & + tr n(:,:,:,jppop) + trn(:,:,:,jpgop) + trn(:,:,:,jpdop) &527 & + ( tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * po4rat3520 zwork(:,:,:) = tr(:,:,:,jppo4,Kmm) + tr(:,:,:,jppph,Kmm) & 521 & + tr(:,:,:,jppdi,Kmm) + tr(:,:,:,jpppi,Kmm) & 522 & + tr(:,:,:,jppop,Kmm) + tr(:,:,:,jpgop,Kmm) + tr(:,:,:,jpdop,Kmm) & 523 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * po4rat3 528 524 ENDIF 529 525 ! … … 534 530 ! 535 531 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 536 zwork(:,:,:) = tr n(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)532 zwork(:,:,:) = tr(:,:,:,jpsil,Kmm) + tr(:,:,:,jpgsi,Kmm) + tr(:,:,:,jpdsi,Kmm) 537 533 ! 538 534 silbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) … … 542 538 ! 543 539 IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 544 zwork(:,:,:) = tr n(:,:,:,jpno3) * rno3 + trn(:,:,:,jptal) + trn(:,:,:,jpcal) * 2.540 zwork(:,:,:) = tr(:,:,:,jpno3,Kmm) * rno3 + tr(:,:,:,jptal,Kmm) + tr(:,:,:,jpcal,Kmm) * 2. 545 541 ! 546 542 alkbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) ) ! … … 550 546 ! 551 547 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 552 zwork(:,:,:) = tr n(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe) &553 & + tr n(:,:,:,jpbfe) + trn(:,:,:,jpsfe) &554 & + ( tr n(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * ferat3548 zwork(:,:,:) = tr(:,:,:,jpfer,Kmm) + tr(:,:,:,jpnfe,Kmm) + tr(:,:,:,jpdfe,Kmm) & 549 & + tr(:,:,:,jpbfe,Kmm) + tr(:,:,:,jpsfe,Kmm) & 550 & + ( tr(:,:,:,jpzoo,Kmm) + tr(:,:,:,jpmes,Kmm) ) * ferat3 555 551 ! 556 552 ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:) )
Note: See TracChangeset
for help on using the changeset viewer.