New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
sms_pisces.F90 in NEMO/trunk/src/TOP/PISCES – NEMO

source: NEMO/trunk/src/TOP/PISCES/sms_pisces.F90

Last change on this file was 15459, checked in by cetlod, 3 years ago

Various bug fixes and more comments in PISCES routines ; sette test OK in debug mode, nn_hls=1/2, with tiling ; run.stat unchanged ; of course tracer.stat different

  • Property svn:keywords set to Id
File size: 10.8 KB
RevLine 
[1073]1MODULE sms_pisces   
2   !!----------------------------------------------------------------------
3   !!                     ***  sms_pisces.F90  *** 
[15459]4   !! TOP :   PISCES Source Minus Sink variables are declared and allocated
[1073]5   !!----------------------------------------------------------------------
6   !! History :   1.0  !  2000-02 (O. Aumont) original code
[1445]7   !!             3.2  !  2009-04 (C. Ethe & NEMO team) style
[1073]8   !!----------------------------------------------------------------------
9   USE par_oce
10   USE par_trc
11
12   IMPLICIT NONE
13   PUBLIC
14
[12377]15   CHARACTER(:), ALLOCATABLE ::   numnatp_ref   !! Character buffer for reference namelist pisces
16   CHARACTER(:), ALLOCATABLE ::   numnatp_cfg   !! Character buffer for configuration namelist pisces
17   INTEGER ::   numonp      = -1                !! Logical unit for namelist pisces output
[3294]18
[7646]19   !!* Model used
20   LOGICAL  ::  ln_p2z            !: Flag to use LOBSTER model
21   LOGICAL  ::  ln_p4z            !: Flag to use PISCES  model
22   LOGICAL  ::  ln_p5z            !: Flag to use PISCES  quota model
23   LOGICAL  ::  ln_ligand         !: Flag to enable organic ligands
[10222]24   LOGICAL  ::  ln_sediment       !: Flag to enable sediment module
[7646]25
[1445]26   !!*  Time variables
[15459]27   INTEGER  ::   nrdttrc          !: ???
28   REAL(wp) ::   rfact , rfactr   !: time step duration (in seconds)
29   REAL(wp) ::   rfact2, rfact2r  !: time step duration (in seconds) when timesplitting is activated for PISCES
30   REAL(wp) ::   xstep            !: Time step duration for biology
31   REAL(wp) ::   ryyss            !: number of seconds per year
32   REAL(wp) ::   r1_ryyss         !: inverse number of seconds per year
[1073]33
[1445]34   !!*  Biological parameters
[15459]35   REAL(wp) ::   rno3             !: C/N stoichiometric ratio
36   REAL(wp) ::   o2ut             !: O2/N stoichiometric ratio for ammonification
37   REAL(wp) ::   po4r             !: C/P stoichiometric ratio
38   REAL(wp) ::   rdenit           !: C/N ratio for denitrification
39   REAL(wp) ::   rdenita          !: C/N ratio for denitrification
40   REAL(wp) ::   o2nit            !: O2/N ratio for nitrification
41   REAL(wp) ::   wsbio, wsbio2    !: Sinking speeds of particles
42   REAL(wp) ::   wsbio2max        !: Maximum sinking speed of the largest particles
43   REAL(wp) ::   wsbio2scale      !: Length scale for the variations of wsbio2
44   REAL(wp) ::   oxymin           !:  half saturation constant for anoxia
45   REAL(wp) ::   xkmort           !: Mortality half-saturation constant
46   REAL(wp) ::   feratz           !: Fe/C in microzooplankton
47   REAL(wp) ::   feratm           !: Fe/C in mesozooplankton
48   REAL(wp) ::   ldocp            !: Ligand production ratio during PP
49   REAL(wp) ::   ldocz            !: Ligand production ratio by grazing
50   REAL(wp) ::   lthet            !: Uptake of ligand by phytoplankton
51   REAL(wp) ::   no3rat3          !: C/N ratio of zooplankton
52   REAL(wp) ::   po4rat3          !: C/P ratio of zooplankton
[1073]53
[3680]54   !!*  diagnostic parameters
[15459]55   REAL(wp) ::  tpp               !: total primary production
56   REAL(wp) ::  t_oce_co2_exp     !: total carbon export
57   REAL(wp) ::  t_oce_co2_flx     !: Total ocean carbon flux
58   REAL(wp) ::  t_oce_co2_flx_cum !: Cumulative Total ocean carbon flux
59   REAL(wp) ::  t_atm_co2_flx     !: global mean of atmospheric pco2
[1073]60
[3680]61   !!* restoring
[15459]62   LOGICAL  ::  ln_pisdmp         !: restoring or not of nutrients to a mean value
63   INTEGER  ::  nn_pisdmp         !: frequency of relaxation or not of nutrients to a mean value
[1073]64
[3680]65   !!* Mass conservation
[15459]66   LOGICAL  ::  ln_check_mass     !: Flag to check mass conservation
67   LOGICAL, PUBLIC ::   ln_ironice   !: boolean for Fe input from sea ice
[3680]68
[15459]69   !!* Diurnal cycle in PISCES
70   LOGICAL  ::  ln_p4z_dcyc       !: Flag to activate diurnal cycle in PISCES
71
[7646]72   !!*  Biological fluxes for light : variables shared by pisces & lobster
[15459]73   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::  strn  !: Day duration in hours
[7646]74   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enano, ediat   !: PAR for phyto, nano and diat
[15459]75   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enanom, ediatm !: mean PAR for phyto, nano and diat
[7646]76   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epico          !: PAR for pico
[15459]77   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epicom         !: mean PAR for pico
78   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  emoy, etotm    !: averaged PAR in the mixed layer
79   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  Half-saturation con,stant for diatoms
[7646]80
[1445]81   !!*  Biological fluxes for primary production
[15459]82   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: Maximum half-saturation constant over the year (Si)
[3680]83   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   biron      !: bioavailable fraction of iron
[7646]84   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   plig       !: proportion of iron organically complexed
[1073]85
[7646]86   !!*  Sinking speed
87   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed
88   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed
[3294]89
[1445]90   !!*  SMS for the organic matter
[15459]91   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: Fraction of nanophytoplankton that are calcifying organisms
92   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: OMZ
93   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac2   !: N depleted indice
94   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: oxic remineralisation
95   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: Shear rate
[3680]96   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production
[15459]97   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: POC production
98   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: POC consumption
99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: GOC production
100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: GOC consumption
101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consfe3    !: GOC consumption
[10362]102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   blim       !: bacterial production factor
[15459]103   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizen      !: size of nanophyto
104   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizep      !: size of picophyto
[7646]105   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sized      !: size of diatoms
[15459]106   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizena     !: size of nanophytoplankton, after
107   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizepa     !: size of picophyto, after
108   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizeda     !: size of diatomss, after
109   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfecolagg  !: Refractory diagnostic concentration of ligands
110   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xcoagfe    !: Coagulation rate of colloidal Fe/ligands
[7646]111
[1445]112   !!* Variable for chemistry of the CO2 cycle
[15459]113   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: Carbonate chemistry constant
114   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: Carbonate chemistry constant
115   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: Solubility product of CaCO3
116   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: Proton concentration
117   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: CO3 saturation
[6291]118   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aphscale   !:
[1073]119
[6291]120
[3294]121   !!* Temperature dependancy of SMS terms
122   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc    !: Temp. dependancy of various biological rates
123   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc2   !: Temp. dependancy of mesozooplankton rates
124
[12377]125   LOGICAL, SAVE :: lk_sed
126
[2715]127   !!----------------------------------------------------------------------
[10067]128   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
[2715]129   !! $Id$
[10068]130   !! Software governed by the CeCILL license (see ./LICENSE)
[2715]131   !!----------------------------------------------------------------------
132CONTAINS
133
134   INTEGER FUNCTION sms_pisces_alloc()
135      !!----------------------------------------------------------------------
136      !!        *** ROUTINE sms_pisces_alloc ***
137      !!----------------------------------------------------------------------
[10425]138      USE lib_mpp , ONLY: ctl_stop
[15459]139      INTEGER ::   ierr(11)        ! Local variables
[2715]140      !!----------------------------------------------------------------------
141      ierr(:) = 0
[3680]142      !*  Biological fluxes for light : shared variables for pisces & lobster
[15459]143      ALLOCATE( xksi(jpi,jpj), strn(jpi,jpj),  STAT=ierr(1) )
144
[7646]145      IF( ln_p4z .OR. ln_p5z ) THEN
146
[15459]147         !* Optics
148         ALLOCATE(  enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk) ,   &
149           &        enanom(jpi,jpj,jpk), ediatm(jpi,jpj,jpk),   &
150           &        emoy(jpi,jpj,jpk)  , etotm(jpi,jpj,jpk),   STAT=ierr(2) )
151
152         !* Biological SMS
[7646]153         ALLOCATE( xksimax(jpi,jpj)  , biron(jpi,jpj,jpk)      ,  STAT=ierr(3) )
[3680]154
[15459]155         ! Biological SMS
156         ALLOCATE( xfracal  (jpi,jpj,jpk), orem    (jpi,jpj,jpk),  &
157            &      nitrfac  (jpi,jpj,jpk), nitrfac2(jpi,jpj,jpk),  &
158            &      prodcal  (jpi,jpj,jpk), xdiss   (jpi,jpj,jpk),  &
159            &      prodpoc  (jpi,jpj,jpk), conspoc (jpi,jpj,jpk),  &
160            &      prodgoc  (jpi,jpj,jpk), consgoc (jpi,jpj,jpk),  &
161            &      blim     (jpi,jpj,jpk), consfe3 (jpi,jpj,jpk),  &
162            &      xfecolagg(jpi,jpj,jpk), xcoagfe (jpi,jpj,jpk), STAT=ierr(4) )
163
164         !* Carbonate chemistry
165         ALLOCATE( ak13  (jpi,jpj,jpk)  ,                          &
166            &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,    &
167            &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,    &
[7646]168            &      aphscale(jpi,jpj,jpk),                         STAT=ierr(5) )
[2715]169         !
[15459]170         !* Temperature dependency of SMS terms
171         ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk),   STAT=ierr(6) )
[3294]172         !
[15459]173         !* Sinking speed
174         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),   STAT=ierr(7) )
175
176         !*  Size of phytoplankton cells
177         ALLOCATE( sizen (jpi,jpj,jpk), sized (jpi,jpj,jpk),        &
178           &       sizena(jpi,jpj,jpk), sizeda(jpi,jpj,jpk),      STAT=ierr(8) )
[7646]179         !
[15459]180         ALLOCATE( plig(jpi,jpj,jpk)  ,                           STAT=ierr(9) )
[7646]181      ENDIF
[2715]182      !
[7646]183      IF( ln_p5z ) THEN
[15459]184         ! PISCES-QUOTA specific part     
185         ALLOCATE( epico(jpi,jpj,jpk)   , epicom(jpi,jpj,jpk) ,   STAT=ierr(10) ) 
[7646]186
187         !*  Size of phytoplankton cells
[15459]188         ALLOCATE( sizep(jpi,jpj,jpk), sizepa(jpi,jpj,jpk),       STAT=ierr(11) )
[7646]189      ENDIF
190      !
[2715]191      sms_pisces_alloc = MAXVAL( ierr )
192      !
[10425]193      IF( sms_pisces_alloc /= 0 )   CALL ctl_stop( 'STOP', 'sms_pisces_alloc: failed to allocate arrays' ) 
[2715]194      !
195   END FUNCTION sms_pisces_alloc
196
[1073]197   !!======================================================================   
198END MODULE sms_pisces   
Note: See TracBrowser for help on using the repository browser.