source: NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/sms_pisces.F90 @ 12759

Last change on this file since 12759 was 12759, checked in by aumont, 13 months ago

make parameterizations in PISCES-operationnal more similar to thos of PISCES-QUOTA (prey switching, optimal allocation, size, …)

  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1MODULE sms_pisces   
2   !!----------------------------------------------------------------------
3   !!                     ***  sms_pisces.F90  *** 
4   !! TOP :   PISCES Source Minus Sink variables are declared and allocated
5   !!----------------------------------------------------------------------
6   !! History :   1.0  !  2000-02 (O. Aumont) original code
7   !!             3.2  !  2009-04 (C. Ethe & NEMO team) style
8   !!----------------------------------------------------------------------
9   USE par_oce
10   USE par_trc
11
12   IMPLICIT NONE
13   PUBLIC
14
15   INTEGER ::   numnatp_ref = -1  !: Logical units for namelist pisces
16   INTEGER ::   numnatp_cfg = -1  !: Logical units for namelist pisces
17   INTEGER ::   numonp      = -1  !: Logical unit for namelist pisces output
18
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
24   LOGICAL  ::  ln_sediment       !: Flag to enable sediment module
25
26   !!*  Time variables
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
33
34   !!*  Biological parameters
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) ::   xkmort           !: Mortality half-saturation constant
45   REAL(wp) ::   ferat3           !: Fe/C in heterotrophic organisms
46   REAL(wp) ::   ldocp            !: Ligand production ratio during PP
47   REAL(wp) ::   ldocz            !: Ligand production ratio by grazing
48   REAL(wp) ::   lthet            !: Uptake of ligand by phytoplankton
49   REAL(wp) ::   no3rat3          !: C/N ratio of zooplankton
50   REAL(wp) ::   po4rat3          !: C/P ratio of zooplankton
51
52   !!*  diagnostic parameters
53   REAL(wp) ::  tpp               !: total primary production
54   REAL(wp) ::  t_oce_co2_exp     !: total carbon export
55   REAL(wp) ::  t_oce_co2_flx     !: Total ocean carbon flux
56   REAL(wp) ::  t_oce_co2_flx_cum !: Cumulative Total ocean carbon flux
57   REAL(wp) ::  t_atm_co2_flx     !: global mean of atmospheric pco2
58
59   !!* restoring
60   LOGICAL  ::  ln_pisdmp         !: restoring or not of nutrients to a mean value
61   INTEGER  ::  nn_pisdmp         !: frequency of relaxation or not of nutrients to a mean value
62
63   !!* Mass conservation
64   LOGICAL  ::  ln_check_mass     !: Flag to check mass conservation
65   LOGICAL, PUBLIC ::   ln_ironice   !: boolean for Fe input from sea ice
66
67   !!*  Biological fluxes for light : variables shared by pisces & lobster
68   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  neln  !: number of T-levels + 1 in the euphotic layer
69   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup  !: euphotic layer depth
70   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot  !: par (photosynthetic available radiation)
71   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot_ndcy      !: PAR over 24h in case of diurnal cycle
72   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enano, ediat   !: PAR for phyto, nano and diat
73   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enanom, ediatm !: mean PAR for phyto, nano and diat
74   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epico          !: PAR for pico
75   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epicom         !: mean PAR for pico
76   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  emoy           !: averaged PAR in the mixed layer
77   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup_01 !: Absolute euphotic layer depth
78   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  Half-saturation con,stant for diatoms
79
80   !!*  Biological fluxes for primary production
81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: Maximum half-saturation constant over the year (Si)
82   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   biron      !: bioavailable fraction of iron
83   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   plig       !: proportion of iron organically complexed
84
85   !!*  Sinking speed
86   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed
87   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed
88
89   !!*  SMS for the organic matter
90   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: Fraction of nanophytoplankton that are calcifying organisms
91   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: OMZ
92   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac2   !: N depleted indice
93   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: oxic remineralisation
94   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: Shear rate
95   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production
96   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: POC production
97   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: POC consumption
98   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: GOC production
99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: GOC consumption
100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   blim       !: bacterial production factor
101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizen      !: size of nanophyto
102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizep      !: size of picophyto
103   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sized      !: size of diatoms
104   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizena     !: size of nanophytoplankton, after
105   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizepa     !: size of picophyto, after
106   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizeda     !: size of diatomss, after
107
108   !!* Variable for chemistry of the CO2 cycle
109   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: Carbonate chemistry constant
110   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: Carbonate chemistry constant
111   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: Solubility product of CaCO3
112   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: Proton concentration
113   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: CO3 saturation
114   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aphscale   !:
115
116
117   !!* Temperature dependancy of SMS terms
118   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc    !: Temp. dependancy of various biological rates
119   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc2   !: Temp. dependancy of mesozooplankton rates
120   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc3   !: Temp. dependancy of picophytoplankton rates
121
122   !!----------------------------------------------------------------------
123   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
124   !! $Id$
125   !! Software governed by the CeCILL license (see ./LICENSE)
126   !!----------------------------------------------------------------------
127CONTAINS
128
129   INTEGER FUNCTION sms_pisces_alloc()
130      !!----------------------------------------------------------------------
131      !!        *** ROUTINE sms_pisces_alloc ***
132      !!----------------------------------------------------------------------
133      USE lib_mpp , ONLY: ctl_stop
134      INTEGER ::   ierr(11)        ! Local variables
135      !!----------------------------------------------------------------------
136      ierr(:) = 0
137      ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj),    &
138        &       heup_01(jpi,jpj) , xksi(jpi,jpj)               ,  STAT=ierr(1) )
139      !
140 
141      IF( ln_p4z .OR. ln_p5z ) THEN
142
143         !* Optics
144         ALLOCATE(  enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk) ,   &
145           &        enanom(jpi,jpj,jpk)   , ediatm(jpi,jpj,jpk),   &
146           &        etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk)  ,  STAT=ierr(2) ) 
147
148         !* Biological SMS
149         ALLOCATE( xksimax(jpi,jpj)  , biron(jpi,jpj,jpk)      ,  STAT=ierr(3) )
150
151         ! Biological SMS
152         ALLOCATE( xfracal (jpi,jpj,jpk), orem(jpi,jpj,jpk)    ,    &
153            &      nitrfac(jpi,jpj,jpk) , nitrfac2(jpi,jpj,jpk),    &
154            &      prodcal(jpi,jpj,jpk) , xdiss   (jpi,jpj,jpk),    &
155            &      prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) ,    &
156            &      prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) ,    &
157            &      blim   (jpi,jpj,jpk) ,                         STAT=ierr(4) )
158
159         !* Carbonate chemistry
160         ALLOCATE( ak13  (jpi,jpj,jpk)  ,                           &
161            &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,     &
162            &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,     &
163            &      aphscale(jpi,jpj,jpk),                         STAT=ierr(5) )
164         !
165         !* Temperature dependency of SMS terms
166         ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk),     &
167            &      tgfunc3(jpi,jpj,jpk) ,                         STAT=ierr(6) )
168         !
169         !* Sinking speed
170         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),   STAT=ierr(7) )
171
172         !*  Size of phytoplankton cells
173         ALLOCATE( sizen (jpi,jpj,jpk), sized (jpi,jpj,jpk),        &
174           &       sizena(jpi,jpj,jpk), sizeda(jpi,jpj,jpk),      STAT=ierr(8) )
175         !
176         !* Prognostic ligand
177         IF( ln_ligand ) THEN
178           ALLOCATE( plig(jpi,jpj,jpk)  ,                         STAT=ierr(9) )
179         ENDIF
180      ENDIF
181      !
182      IF( ln_p5z ) THEN
183         ! PISCES-QUOTA specific part     
184         ALLOCATE( epico(jpi,jpj,jpk)   , epicom(jpi,jpj,jpk) ,   STAT=ierr(10) ) 
185
186         !*  Size of phytoplankton cells
187         ALLOCATE( sizep(jpi,jpj,jpk), sizepa(jpi,jpj,jpk),       STAT=ierr(11) )
188      ENDIF
189      !
190      sms_pisces_alloc = MAXVAL( ierr )
191      !
192      IF( sms_pisces_alloc /= 0 )   CALL ctl_stop( 'STOP', 'sms_pisces_alloc: failed to allocate arrays' ) 
193      !
194   END FUNCTION sms_pisces_alloc
195
196   !!======================================================================   
197END MODULE sms_pisces   
Note: See TracBrowser for help on using the repository browser.