MODULE trcini_pisces !!====================================================================== !! *** MODULE trcini_pisces *** !! TOP : initialisation of the PISCES biochemical model !!====================================================================== !! History : - ! 1988-07 (E. Maier-Reiner) Original code !! - ! 1999-10 (O. Aumont, C. Le Quere) !! - ! 2002 (O. Aumont) PISCES !! 1.0 ! 2005-03 (O. Aumont, A. El Moussaoui) F90 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) from trcini.pisces.h90 !! 3.5 ! 2012-05 (C. Ethe) Merge PISCES-LOBSTER !! 3.6 ! 2015-05 (O. Aumont) PISCES quota !!---------------------------------------------------------------------- #if defined key_pisces || defined key_pisces_reduced || defined key_pisces_quota !!---------------------------------------------------------------------- !! 'key_pisces*' PISCES bio-model !!---------------------------------------------------------------------- !! trc_ini_pisces : PISCES biochemical model initialisation !!---------------------------------------------------------------------- USE par_trc ! TOP parameters USE oce_trc ! shared variables between ocean and passive tracers USE trc ! passive tracers common variables USE sms_pisces ! PISCES Source Minus Sink variables IMPLICIT NONE PRIVATE PUBLIC trc_ini_pisces ! called by trcini.F90 module # include "top_substitute.h90" !!---------------------------------------------------------------------- !! NEMO/TOP 3.3 , NEMO Consortium (2010) !! $Id$ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) !!---------------------------------------------------------------------- CONTAINS SUBROUTINE trc_ini_pisces !!---------------------------------------------------------------------- !! *** ROUTINE trc_ini_pisces *** !! !! ** Purpose : Initialisation of the PISCES biochemical model !!---------------------------------------------------------------------- SELECT CASE ( nn_p4z ) ! CASE(1) ; CALL p2z_ini ! LOBSTER CASE(2) ; CALL p4z_ini ! PISCES CASE(3) ; CALL p5z_ini ! PISCES QUOTA END SELECT END SUBROUTINE trc_ini_pisces SUBROUTINE p5z_ini !!---------------------------------------------------------------------- !! *** ROUTINE p5z_ini *** !! !! ** Purpose : Initialisation of the PISCES biochemical model !! with variable stoichiometry !!---------------------------------------------------------------------- #if defined key_pisces_quota ! USE p5zsms ! Main P4Z routine USE p4zche ! Chemical model USE p5zsink ! vertical flux of particulate matter due to sinking USE p4zopt ! optical model USE p4zsbc ! Boundary conditions USE p4zfechem ! Iron chemistry USE p5zrem ! Remineralisation of organic matter USE p5zpoc ! Remineralization of organic particles USE p4zligand ! Remineralization of organic ligands USE p4zflx ! Gas exchange USE p5zlim ! Co-limitations of differents nutrients USE p5zprod ! Growth rate of the 2 phyto groups USE p5zmicro ! Sources and sinks of microzooplankton USE p5zmeso ! Sources and sinks of mesozooplankton USE p5zmort ! Mortality terms for phytoplankton USE p4zlys ! Calcite saturation USE p5zsed ! Sedimentation & burial ! REAL(wp), SAVE :: sco2 = 2.312e-3_wp REAL(wp), SAVE :: alka0 = 2.423e-3_wp REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp REAL(wp), SAVE :: po4 = 2.174e-6_wp REAL(wp), SAVE :: bioma0 = 1.000e-8_wp REAL(wp), SAVE :: silic1 = 91.65e-6_wp REAL(wp), SAVE :: no3 = 31.04e-6_wp * 7.625_wp ! INTEGER :: ierr !!---------------------------------------------------------------------- IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) ' p5z_ini : PISCES biochemical model initialisation' IF(lwp) WRITE(numout,*) ' With variable stoichiometry' IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' ! Allocate PISCES arrays ierr = sms_pisces_alloc() ierr = ierr + p4z_che_alloc() ierr = ierr + p5z_sink_alloc() ierr = ierr + p4z_opt_alloc() ierr = ierr + p5z_lim_alloc() ierr = ierr + p5z_prod_alloc() ierr = ierr + p5z_rem_alloc() ierr = ierr + p4z_flx_alloc() ierr = ierr + p5z_sed_alloc() ! IF( lk_mpp ) CALL mpp_sum( ierr ) IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' ) ! ryyss = nyear_len(1) * rday ! number of seconds per year r1_ryyss = 1. / ryyss ! CALL p5z_sms_init ! Maint routine ! ! Time-step ! Set biological ratios ! --------------------- rno3 = 16._wp / 122._wp po4r = 1._wp / 122._wp o2nit = 32._wp / 122._wp rdenit = 105._wp / 16._wp rdenita = 3._wp / 5._wp o2ut = 133._wp / 122._wp no3rat3 = no3rat3 / rno3 po4rat3 = po4rat3 / po4r ! Initialization of tracer concentration in case of no restart !-------------------------------------------------------------- IF( .NOT. ln_rsttr ) THEN trn(:,:,:,jpdic) = sco2 trn(:,:,:,jpdoc) = bioma0 trn(:,:,:,jpdon) = bioma0 trn(:,:,:,jpdop) = bioma0 trn(:,:,:,jptal) = alka0 trn(:,:,:,jpoxy) = oxyg0 trn(:,:,:,jpcal) = bioma0 trn(:,:,:,jppo4) = po4 / po4r trn(:,:,:,jppoc) = bioma0 trn(:,:,:,jppon) = bioma0 trn(:,:,:,jppop) = bioma0 trn(:,:,:,jpgoc) = bioma0 trn(:,:,:,jpgon) = bioma0 trn(:,:,:,jpgop) = bioma0 trn(:,:,:,jpbfe) = bioma0 * 5.e-6 trn(:,:,:,jpsil) = silic1 trn(:,:,:,jpdsi) = bioma0 * 0.15 trn(:,:,:,jpgsi) = bioma0 * 5.e-6 trn(:,:,:,jpphy) = bioma0 trn(:,:,:,jpnph) = bioma0 trn(:,:,:,jppph) = bioma0 trn(:,:,:,jppic) = bioma0 trn(:,:,:,jpnpi) = bioma0 trn(:,:,:,jpppi) = bioma0 trn(:,:,:,jpdia) = bioma0 trn(:,:,:,jpndi) = bioma0 trn(:,:,:,jppdi) = bioma0 trn(:,:,:,jpzoo) = bioma0 trn(:,:,:,jpmes) = bioma0 trn(:,:,:,jpfer) = 0.6E-9 trn(:,:,:,jpsfe) = bioma0 * 5.e-6 trn(:,:,:,jppfe) = bioma0 * 5.e-6 trn(:,:,:,jpdfe) = bioma0 * 5.e-6 trn(:,:,:,jpnfe) = bioma0 * 5.e-6 trn(:,:,:,jpnch) = bioma0 * 12. / 55. trn(:,:,:,jppch) = bioma0 * 12. / 55. trn(:,:,:,jpdch) = bioma0 * 12. / 55. trn(:,:,:,jpno3) = no3 trn(:,:,:,jpnh4) = bioma0 #if defined key_ligand trn(:,:,:,jplgw) = 0.6E-9 trn(:,:,:,jpfep) = 0. #endif ! initialize the half saturation constant for silicate ! ---------------------------------------------------- xksi(:,:) = 2.e-6 xksimax(:,:) = xksi(:,:) END IF CALL p5z_sink_init ! vertical flux of particulate organic matter CALL p4z_opt_init ! Optic: PAR in the water column CALL p5z_lim_init ! co-limitations by the various nutrients CALL p5z_prod_init ! phytoplankton growth rate over the global ocean. CALL p4z_sbc_init ! boundary conditions CALL p4z_fechem_init ! Iron chemistry CALL p5z_rem_init ! remineralisation CALL p5z_poc_init ! remineralisation of organic particles #if defined key_ligand CALL p4z_ligand_init ! remineralisation of organic ligands #endif CALL p5z_mort_init ! phytoplankton mortality CALL p5z_micro_init ! microzooplankton CALL p5z_meso_init ! mesozooplankton CALL p4z_lys_init ! calcite saturation CALL p4z_flx_init ! gas exchange ndayflxtr = 0 IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' IF(lwp) WRITE(numout,*) #endif ! END SUBROUTINE p5z_ini SUBROUTINE p4z_ini !!---------------------------------------------------------------------- !! *** ROUTINE p4z_ini *** !! !! ** Purpose : Initialisation of the PISCES biochemical model !!---------------------------------------------------------------------- #if defined key_pisces ! USE p4zsms ! Main P4Z routine USE p4zche ! Chemical model USE p4zsink ! vertical flux of particulate matter due to sinking USE p4zopt ! optical model USE p4zsbc ! Boundary conditions USE p4zfechem ! Iron chemistry USE p4zrem ! Remineralisation of organic matter USE p4zpoc ! Remineralisation of organic particles USE p4zligand ! Remineralization of organic ligands USE p4zflx ! Gas exchange USE p4zlim ! Co-limitations of differents nutrients USE p4zprod ! Growth rate of the 2 phyto groups USE p4zmicro ! Sources and sinks of microzooplankton USE p4zmeso ! Sources and sinks of mesozooplankton USE p4zmort ! Mortality terms for phytoplankton USE p4zlys ! Calcite saturation USE p4zsed ! Sedimentation & burial ! REAL(wp), SAVE :: sco2 = 2.312e-3_wp REAL(wp), SAVE :: alka0 = 2.423e-3_wp REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp REAL(wp), SAVE :: po4 = 2.174e-6_wp REAL(wp), SAVE :: bioma0 = 1.000e-8_wp REAL(wp), SAVE :: silic1 = 91.65e-6_wp REAL(wp), SAVE :: no3 = 31.04e-6_wp * 7.625_wp ! INTEGER :: ierr !!---------------------------------------------------------------------- IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) ' p4z_ini : PISCES biochemical model initialisation' IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' ! Allocate PISCES arrays ierr = sms_pisces_alloc() ierr = ierr + p4z_che_alloc() ierr = ierr + p4z_sink_alloc() ierr = ierr + p4z_opt_alloc() ierr = ierr + p4z_lim_alloc() ierr = ierr + p4z_prod_alloc() ierr = ierr + p4z_rem_alloc() ierr = ierr + p4z_flx_alloc() ierr = ierr + p4z_sed_alloc() ! IF( lk_mpp ) CALL mpp_sum( ierr ) IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' ) ! ryyss = nyear_len(1) * rday ! number of seconds per year r1_ryyss = 1. / ryyss ! CALL p4z_sms_init ! Maint routine ! ! Time-step ! Set biological ratios ! --------------------- rno3 = 16._wp / 122._wp po4r = 1._wp / 122._wp o2nit = 32._wp / 122._wp o2ut = 133._wp / 122._wp rdenit = ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 rdenita = 3._wp / 5._wp ! Initialization of tracer concentration in case of no restart !-------------------------------------------------------------- IF( .NOT. ln_rsttr ) THEN trn(:,:,:,jpdic) = sco2 trn(:,:,:,jpdoc) = bioma0 trn(:,:,:,jptal) = alka0 trn(:,:,:,jpoxy) = oxyg0 trn(:,:,:,jpcal) = bioma0 trn(:,:,:,jppo4) = po4 / po4r trn(:,:,:,jppoc) = bioma0 trn(:,:,:,jpgoc) = bioma0 trn(:,:,:,jpbfe) = bioma0 * 5.e-6 trn(:,:,:,jpsil) = silic1 trn(:,:,:,jpdsi) = bioma0 * 0.15 trn(:,:,:,jpgsi) = bioma0 * 5.e-6 trn(:,:,:,jpphy) = bioma0 trn(:,:,:,jpdia) = bioma0 trn(:,:,:,jpzoo) = bioma0 trn(:,:,:,jpmes) = bioma0 trn(:,:,:,jpfer) = 0.6E-9 trn(:,:,:,jpsfe) = bioma0 * 5.e-6 trn(:,:,:,jpdfe) = bioma0 * 5.e-6 trn(:,:,:,jpnfe) = bioma0 * 5.e-6 trn(:,:,:,jpnch) = bioma0 * 12. / 55. trn(:,:,:,jpdch) = bioma0 * 12. / 55. trn(:,:,:,jpno3) = no3 trn(:,:,:,jpnh4) = bioma0 #if defined key_ligand trn(:,:,:,jplgw) = 0.6E-9 trn(:,:,:,jpfep) = 0. #endif ! initialize the half saturation constant for silicate ! ---------------------------------------------------- xksi(:,:) = 2.e-6 xksimax(:,:) = xksi(:,:) END IF CALL p4z_sink_init ! vertical flux of particulate organic matter CALL p4z_opt_init ! Optic: PAR in the water column CALL p4z_lim_init ! co-limitations by the various nutrients CALL p4z_prod_init ! phytoplankton growth rate over the global ocean. CALL p4z_sbc_init ! boundary conditions CALL p4z_fechem_init ! Iron chemistry CALL p4z_rem_init ! remineralisation CALL p4z_poc_init ! remineralization of organic particles #if defined key_ligand CALL p4z_ligand_init ! remineralisation of organic ligands #endif CALL p4z_mort_init ! phytoplankton mortality CALL p4z_micro_init ! microzooplankton CALL p4z_meso_init ! mesozooplankton CALL p4z_lys_init ! calcite saturation CALL p4z_flx_init ! gas exchange ndayflxtr = 0 IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' IF(lwp) WRITE(numout,*) #endif ! END SUBROUTINE p4z_ini SUBROUTINE p2z_ini !!---------------------------------------------------------------------- !! *** ROUTINE p2z_ini *** !! !! ** Purpose : Initialisation of the LOBSTER biochemical model !!---------------------------------------------------------------------- #if defined key_pisces_reduced ! USE p2zopt USE p2zexp USE p2zbio USE p2zsed ! INTEGER :: ji, jj, jk, ierr !!---------------------------------------------------------------------- IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) ' p2z_ini : LOBSTER biochemical model initialisation' IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' ierr = sms_pisces_alloc() ierr = ierr + p2z_exp_alloc() ! IF( lk_mpp ) CALL mpp_sum( ierr ) IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' ) ! LOBSTER initialisation for GYRE : init NO3=f(density) by asklod AS Kremeur 2005-07 ! ---------------------- IF( .NOT. ln_rsttr ) THEN ! in case of no restart trn(:,:,:,jpdet) = 0.1 * tmask(:,:,:) trn(:,:,:,jpzoo) = 0.1 * tmask(:,:,:) trn(:,:,:,jpnh4) = 0.1 * tmask(:,:,:) trn(:,:,:,jpphy) = 0.1 * tmask(:,:,:) trn(:,:,:,jpdom) = 1.0 * tmask(:,:,:) WHERE( rhd(:,:,:) <= 24.5e-3 ) ; trn(:,:,:,jpno3 ) = 2._wp * tmask(:,:,:) ELSE WHERE ; trn(:,:,:,jpno3) = ( 15.55 * ( rhd(:,:,:) * 1000. ) - 380.11 ) * tmask(:,:,:) END WHERE ENDIF ! ! Namelist read CALL p2z_opt_init ! Optics parameters CALL p2z_sed_init ! sedimentation CALL p2z_bio_init ! biology CALL p2z_exp_init ! export ! IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done' IF(lwp) WRITE(numout,*) #endif ! END SUBROUTINE p2z_ini #else !!---------------------------------------------------------------------- !! Dummy module No PISCES biochemical model !!---------------------------------------------------------------------- CONTAINS SUBROUTINE trc_ini_pisces ! Empty routine END SUBROUTINE trc_ini_pisces #endif !!====================================================================== END MODULE trcini_pisces