source: trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90 @ 8533

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

trunk: bugfixes to solve problem particle in PISCES, see ticket #1940

  • Property svn:keywords set to Id
File size: 9.7 KB
Line 
1MODULE sms_pisces   
2   !!----------------------------------------------------------------------
3   !!                     ***  sms_pisces.F90  *** 
4   !! TOP :   PISCES Source Minus Sink variables
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   !                                                       !:  PISCES  : silicon dependant half saturation
20
21   !!* Model used
22   LOGICAL  ::  ln_p2z            !: Flag to use LOBSTER model
23   LOGICAL  ::  ln_p4z            !: Flag to use PISCES  model
24   LOGICAL  ::  ln_p5z            !: Flag to use PISCES  quota model
25   LOGICAL  ::  ln_ligand         !: Flag to enable organic ligands
26
27   !!*  Time variables
28   INTEGER  ::   nrdttrc           !: ???
29   INTEGER  ::   ndayflxtr         !: ???
30   REAL(wp) ::   rfact , rfactr    !: ???
31   REAL(wp) ::   rfact2, rfact2r   !: ???
32   REAL(wp) ::   xstep             !: Time step duration for biology
33   REAL(wp) ::   ryyss             !: number of seconds per year
34   REAL(wp) ::   r1_ryyss          !: inverse number of seconds per year
35
36
37   !!*  Biological parameters
38   INTEGER  ::   niter1max, niter2max   !: Maximum number of iterations for sinking
39   REAL(wp) ::   rno3              !: ???
40   REAL(wp) ::   o2ut              !: ???
41   REAL(wp) ::   po4r              !: ???
42   REAL(wp) ::   rdenit            !: ???
43   REAL(wp) ::   rdenita           !: ???
44   REAL(wp) ::   o2nit             !: ???
45   REAL(wp) ::   wsbio, wsbio2     !: ???
46   REAL(wp) ::   wsbio2max         !: ???
47   REAL(wp) ::   wsbio2scale       !: ???
48   REAL(wp) ::   xkmort            !: ???
49   REAL(wp) ::   ferat3            !: ???
50   REAL(wp) ::   wfep              !: ???
51   REAL(wp) ::   ldocp             !: ???
52   REAL(wp) ::   ldocz             !: ???
53   REAL(wp) ::   lthet             !: ???
54   REAL(wp) ::   no3rat3           !: ???
55   REAL(wp) ::   po4rat3           !: ???
56
57
58   !!*  diagnostic parameters
59   REAL(wp) ::  tpp                !: total primary production
60   REAL(wp) ::  t_oce_co2_exp      !: total carbon export
61   REAL(wp) ::  t_oce_co2_flx      !: Total ocean carbon flux
62   REAL(wp) ::  t_oce_co2_flx_cum  !: Cumulative Total ocean carbon flux
63   REAL(wp) ::  t_atm_co2_flx      !: global mean of atmospheric pco2
64
65   !!* restoring
66   LOGICAL  ::  ln_pisdmp          !: restoring or not of nutrients to a mean value
67   INTEGER  ::  nn_pisdmp          !: frequency of relaxation or not of nutrients to a mean value
68
69   !!* Mass conservation
70   LOGICAL  ::  ln_check_mass      !: Flag to check mass conservation
71
72   !!*  Biological fluxes for light : variables shared by pisces & lobster
73   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  neln  !: number of T-levels + 1 in the euphotic layer
74   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup  !: euphotic layer depth
75   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot  !: par (photosynthetic available radiation)
76   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot_ndcy      !: PAR over 24h in case of diurnal cycle
77   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enano, ediat   !: PAR for phyto, nano and diat
78   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epico          !: PAR for pico
79   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  emoy           !: averaged PAR in the mixed layer
80   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup_01 !: Absolute euphotic layer depth
81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  LOBSTER : zooplakton closure
82
83   !!*  Biological fluxes for primary production
84   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: ???
85   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   biron      !: bioavailable fraction of iron
86   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   plig       !: proportion of iron organically complexed
87
88   !!*  Sinking speed
89   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed
90   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed
91   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wscal    !: Calcite and BSi sinking speeds
92   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsfep
93
94
95
96   !!*  SMS for the organic matter
97   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: ??
98   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: ??
99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac2   !: ??
100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: ??
101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: ??
102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production
103   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: Calcite production
104   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: Calcite production
105   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: Calcite production
106   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: Calcite production
107
108   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizen      !: size of diatoms
109   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizep      !: size of diatoms
110   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sized      !: size of diatoms
111
112
113   !!* Variable for chemistry of the CO2 cycle
114   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: ???
115   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: ???
116   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: ???
117   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: ???
118   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: ???
119   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aphscale   !:
120
121
122   !!* Temperature dependancy of SMS terms
123   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc    !: Temp. dependancy of various biological rates
124   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc2   !: Temp. dependancy of mesozooplankton rates
125
126#if defined key_sed
127   LOGICAL, PUBLIC, PARAMETER ::   lk_sed = .TRUE.     !: sediment flag
128#else
129   LOGICAL, PUBLIC, PARAMETER ::   lk_sed = .FALSE.     !: sediment flag
130#endif
131
132   !!----------------------------------------------------------------------
133   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
134   !! $Id$
135   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
136   !!----------------------------------------------------------------------
137CONTAINS
138
139
140   INTEGER FUNCTION sms_pisces_alloc()
141      !!----------------------------------------------------------------------
142      !!        *** ROUTINE sms_pisces_alloc ***
143      !!----------------------------------------------------------------------
144      USE lib_mpp , ONLY: ctl_warn
145      INTEGER ::   ierr(10)        ! Local variables
146      !!----------------------------------------------------------------------
147      ierr(:) = 0
148      !*  Biological fluxes for light : shared variables for pisces & lobster
149      ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj),    &
150        &       heup_01(jpi,jpj) , xksi(jpi,jpj)               ,  STAT=ierr(1) )
151      !
152 
153      IF( ln_p4z .OR. ln_p5z ) THEN
154         !*  Biological fluxes for light
155         ALLOCATE(  enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk) ,   &
156           &        etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk)  ,  STAT=ierr(2) ) 
157
158         !*  Biological fluxes for primary production
159         ALLOCATE( xksimax(jpi,jpj)  , biron(jpi,jpj,jpk)      ,  STAT=ierr(3) )
160         !
161         !*  SMS for the organic matter
162         ALLOCATE( xfracal (jpi,jpj,jpk), orem(jpi,jpj,jpk)    ,    &
163            &      nitrfac(jpi,jpj,jpk), nitrfac2(jpi,jpj,jpk) ,    &
164            &      prodcal(jpi,jpj,jpk) , xdiss   (jpi,jpj,jpk),    &
165            &      prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) ,    &
166            &      prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) ,  STAT=ierr(4) )
167
168         !* Variable for chemistry of the CO2 cycle
169         ALLOCATE( ak13  (jpi,jpj,jpk) ,                            &
170            &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,     &
171            &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,     &
172            &      aphscale(jpi,jpj,jpk),                         STAT=ierr(5) )
173         !
174         !* Temperature dependancy of SMS terms
175         ALLOCATE( tgfunc(jpi,jpj,jpk)  , tgfunc2(jpi,jpj,jpk),   STAT=ierr(6) )
176         !
177         !* Sinkong speed
178         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),     &
179            &      wscal(jpi,jpj,jpk)                         ,   STAT=ierr(7) )   
180         !
181         IF( ln_ligand ) THEN
182           ALLOCATE( plig(jpi,jpj,jpk)  , wsfep(jpi,jpj,jpk)  ,   STAT=ierr(8) )
183         ENDIF
184         !
185      ENDIF
186      !
187      IF( ln_p5z ) THEN
188         !       
189         ALLOCATE( epico(jpi,jpj,jpk)                         ,   STAT=ierr(9) ) 
190
191         !*  Size of phytoplankton cells
192         ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk),         &
193           &       sized(jpi,jpj,jpk),                            STAT=ierr(10) )
194      ENDIF
195      !
196      sms_pisces_alloc = MAXVAL( ierr )
197      !
198      IF( sms_pisces_alloc /= 0 )   CALL ctl_warn('sms_pisces_alloc: failed to allocate arrays') 
199      !
200   END FUNCTION sms_pisces_alloc
201
202   !!======================================================================   
203END MODULE sms_pisces   
Note: See TracBrowser for help on using the repository browser.