123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- 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
- !!----------------------------------------------------------------------
- #if defined key_pisces || defined key_pisces_reduced
- !!----------------------------------------------------------------------
- !! '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: trcini_pisces.F90 4521 2014-03-03 18:12:24Z cetlod $
- !! 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
- !!----------------------------------------------------------------------
- IF( lk_p4z ) THEN ; CALL p4z_ini ! PISCES
- ELSE ; CALL p2z_ini ! LOBSTER
- ENDIF
- END SUBROUTINE trc_ini_pisces
- 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 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.426e-3_wp
- REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp
- REAL(wp), SAVE :: po4 = 2.165e-6_wp
- REAL(wp), SAVE :: bioma0 = 1.000e-8_wp
- REAL(wp), SAVE :: silic1 = 91.51e-6_wp
- REAL(wp), SAVE :: no3 = 30.9e-6_wp * 7.625_wp
- !
- INTEGER :: ji, jj, jk, ierr
- REAL(wp) :: zcaralk, zbicarb, zco3
- REAL(wp) :: ztmas, ztmas1
- !!----------------------------------------------------------------------
- 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_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
- # if ! defined key_kriest
- trn(:,:,:,jpgoc) = bioma0
- trn(:,:,:,jpbfe) = bioma0 * 5.e-6
- # else
- trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )
- # endif
- 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
- ! 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_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
|