MODULE trcsms_pisces !!====================================================================== !! *** MODULE trcsms_pisces *** !! TOP : PISCES Source Minus Sink manager !!====================================================================== !! History : 1.0 ! 2004-03 (O. Aumont) Original code !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 !!---------------------------------------------------------------------- #if defined key_pisces !!---------------------------------------------------------------------- !! 'key_pisces' PISCES bio-model !!---------------------------------------------------------------------- !! trcsms_pisces : Time loop of passive tracers sms !!---------------------------------------------------------------------- USE oce_trc ! USE trc USE sms_pisces USE lbclnk USE lib_mpp USE p4zint ! USE p4zche ! USE p4zbio ! USE p4zsed ! USE p4zlys ! USE p4zflx ! USE trdmld_trc_oce USE trdmld_trc USE sedmodel IMPLICIT NONE PRIVATE PUBLIC trc_sms_pisces ! called in trcsms.F90 !!---------------------------------------------------------------------- !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) !! $Id$ !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) !!---------------------------------------------------------------------- CONTAINS SUBROUTINE trc_sms_pisces( kt ) !!--------------------------------------------------------------------- !! *** ROUTINE trc_sms_pisces *** !! !! ** Purpose : Managment of the call to Biological sources and sinks !! routines of PISCES bio-model !! !! ** Method : - at each new day ... !! - several calls of bio and sed ??? !! - ... !!--------------------------------------------------------------------- INTEGER, INTENT( in ) :: kt ! ocean time-step index !! INTEGER :: jnt, jn REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrpis ! used for pisces sms trends !!--------------------------------------------------------------------- IF( kt == nittrc000 .AND. .NOT. ln_rsttr ) CALL trc_sms_pisces_init ! Initialization (first time-step only) IF( ndayflxtr /= nday ) THEN ! New days ! ndayflxtr = nday CALL p4z_che ! computation of chemical constants CALL p4z_int ! computation of various rates for biogeochemistry ! ENDIF DO jnt = 1, nrdttrc ! Potential time splitting if requested ! CALL p4z_bio (kt, jnt) ! Compute soft tissue production (POC) CALL p4z_sed (kt, jnt) ! compute soft tissue remineralisation ! trb(:,:,:,:) = trn(:,:,:,:) ! END DO CALL p4z_lys( kt ) ! Compute CaCO3 saturation CALL p4z_flx( kt ) ! Compute surface fluxes DO jn = jp_pcs0, jp_pcs1 CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) END DO IF( l_trdtrc ) THEN DO jn = jp_pcs0, jp_pcs1 ztrpis(:,:,:) = tra(:,:,:,jn) CALL trd_mod_trc( ztrpis, jn, jptrc_trd_sms, kt ) ! save trends END DO END IF IF( lk_sed ) THEN ! CALL sed_model( kt ) ! Main program of Sediment model ! DO jn = jp_pcs0, jp_pcs1 CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) END DO ! ENDIF END SUBROUTINE trc_sms_pisces SUBROUTINE trc_sms_pisces_init !!---------------------------------------------------------------------- !! *** ROUTINE trc_sms_pisces_init *** !! !! ** Purpose : Initialization of PH variable !! !!---------------------------------------------------------------------- INTEGER :: ji, jj, jk REAL(wp) :: zcaralk, zbicarb, zco3 REAL(wp) :: ztmas, ztmas1 ! Initialization of chemical variables of the carbon cycle ! -------------------------------------------------------- DO jk = 1, jpk DO jj = 1, jpj DO ji = 1, jpi ztmas = tmask(ji,jj,jk) ztmas1 = 1. - tmask(ji,jj,jk) zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 END DO END DO END DO END SUBROUTINE trc_sms_pisces_init #else !!====================================================================== !! Dummy module : No PISCES bio-model !!====================================================================== CONTAINS SUBROUTINE trc_sms_pisces( kt ) ! Empty routine INTEGER, INTENT( in ) :: kt WRITE(*,*) 'trc_sms_pisces: You should not have seen this print! error?', kt END SUBROUTINE trc_sms_pisces #endif !!====================================================================== END MODULE trcsms_pisces