source: trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90 @ 5725

Last change on this file since 5725 was 5725, checked in by cetlod, 5 years ago

trunk:bugfix to solve the compilation problem which occurs with PISCES simplified version model, see ticket #1594

File size: 12.3 KB
Line 
1MODULE trcice_pisces
2   !!======================================================================
3   !!                         ***  MODULE trcice_pisces  ***
4   !! TOP :   initialisation of the PISCES biochemical model
5   !!======================================================================
6   !! History :  3.5  ! 2013    (M. Vancoppenolle, O. Aumont, G. Madec), original code
7   !! Comment ! probably not properly done when the second particle export
8   !! scheme (kriest) is used
9   !!----------------------------------------------------------------------
10#if defined key_pisces || defined key_pisces_reduced
11   !!----------------------------------------------------------------------
12   !!   'key_pisces'                                       PISCES bio-model
13   !!----------------------------------------------------------------------
14   !! trc_ice_pisces   : PISCES fake sea ice model setting
15   !!----------------------------------------------------------------------
16   USE par_trc         ! TOP parameters
17   USE par_pisces      ! PISCES parameters
18   USE oce_trc         ! Shared variables between ocean and passive tracers
19   USE trc             ! Passive tracers common variables
20   USE phycst          ! Ocean physics parameters
21   USE sms_pisces      ! PISCES Source Minus Sink variables
22   USE in_out_manager
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   trc_ice_ini_pisces ! called by trcini.F90 module
28
29CONTAINS
30
31
32   SUBROUTINE trc_ice_ini_pisces
33      !!----------------------------------------------------------------------
34      !!                   ***  ROUTINE trc_ini_pisces ***
35      !!
36      !! ** Purpose :   Initialisation of the PISCES biochemical model
37      !!----------------------------------------------------------------------
38
39      IF( lk_p4z ) THEN  ;   CALL p4z_ice_ini   !  PISCES
40      ELSE               ;   CALL p2z_ice_ini   !  LOBSTER
41      ENDIF
42
43   END SUBROUTINE trc_ice_ini_pisces
44
45
46   SUBROUTINE p4z_ice_ini
47
48#if defined key_pisces 
49      !!----------------------------------------------------------------------
50      !!                   ***  ROUTINE p4z_ice_ini ***
51      !!
52      !! ** Purpose :   PISCES fake sea ice model setting
53      !!    Method  :   Assign prescribe values to tracer concentrations in sea ice
54      !!
55      !! For levitating sea ice, constant ocean tracer concentrations also have to be defined.
56      !! This is done specifically for Global, Arctic, Antarctic and Baltic regions
57      !!
58      !! Sea ice concentrations are by default prescribed as follows
59      !!  trc_i = zratio * trc_o
60      !!
61      !! This formulation is modulated by the namelist parameter trc_ice_ratio
62      !!
63      !! trc_ice_ratio  * betw 0 and 1: prescribed ice/ocean tracer concentration ratio
64      !!                * -1 => the ice-ocean tracer concentration ratio follows the
65      !!                         ice-ocean salinity ratio
66      !!                * -2 => no ice-ocean tracer concentration is used
67      !!                        instead, the tracer concentration in sea ice
68      !!                        is prescribed to trc_ice_prescr
69      !!
70      !! cn_trc_o  specifies which disinctions are made for prescribed tracer concentration
71      !!                * 'GL' use global ocean values making distinction for Baltic Sea only
72      !!                * 'AA' use Arctic/Antarctic contrasted values, + Baltic
73      !!
74      !!----------------------------------------------------------------------
75
76                                        !--- Dummy variables
77      REAL(wp), DIMENSION(jp_pisces,2)  :: zratio  ! effective ice-ocean tracer cc ratio
78      REAL(wp), DIMENSION(jp_pisces,4)  :: zpisc   ! prescribes concentration
79      !                                            !  1:global, 2:Arctic, 3:Antarctic, 4:Baltic
80
81      REAL(wp), DIMENSION(2) :: zrs  ! ice-ocean salinity ratio, 1 - global, 2- Baltic
82      REAL(wp) :: zsice_bal          ! prescribed ice salinity in the Baltic
83      REAL(wp) :: zsoce_bal          ! prescribed ocean salinity in the Baltic
84      REAL(wp) :: zfeoce_glo         ! prescribed iron concentration in the global ocean
85      REAL(wp) :: zfeoce_bal         ! prescribed iron concentration in the global ocean
86      INTEGER  :: jn                 ! dummy loop index
87
88      !!----------------------------------------------------------------------
89
90      IF(lwp) WRITE(numout,*)
91      IF(lwp) WRITE(numout,*) ' trc_ice_ini_pisces: Prescribed sea ice biogeochemistry '
92      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~'
93
94      !--------------------------------------------
95      ! Initialize ocean prescribed concentrations
96      !--------------------------------------------
97      ! values taken from a 500 yr equilibrium run
98      ! used only in the levitating sea ice case with virtual salt / tracer
99      ! fluxes
100
101      !--- Global values
102      zpisc(jpdic,1) =  1.99e-3_wp 
103      zpisc(jpdoc,1) =  2.04e-5_wp 
104      zpisc(jptal,1) =  2.31e-3_wp 
105      zpisc(jpoxy,1) =  2.47e-4_wp
106      zpisc(jpcal,1) =  1.04e-8_wp
107      zpisc(jppo4,1) =  5.77e-7_wp / po4r 
108      zpisc(jppoc,1) =  1.27e-6_wp 
109#  if ! defined key_kriest
110      zpisc(jpgoc,1) =  5.23e-8_wp 
111      zpisc(jpbfe,1) =  9.84e-13_wp 
112#  else
113      zpisc(jpnum,1) = 0. ! could not get this value since did not use it
114#  endif
115      zpisc(jpsil,1) =  7.36e-6_wp 
116      zpisc(jpdsi,1) =  1.07e-7_wp 
117      zpisc(jpgsi,1) =  1.53e-8_wp
118      zpisc(jpphy,1) =  9.57e-8_wp
119      zpisc(jpdia,1) =  4.24e-7_wp
120      zpisc(jpzoo,1) =  6.07e-7_wp
121      zpisc(jpmes,1) =  3.44e-7_wp
122      zpisc(jpfer,1) =  4.06e-10_wp
123      zpisc(jpsfe,1) =  2.51e-11_wp
124      zpisc(jpdfe,1) =  6.57e-12_wp
125      zpisc(jpnfe,1) =  1.76e-11_wp
126      zpisc(jpnch,1) =  1.67e-7_wp
127      zpisc(jpdch,1) =  1.02e-7_wp
128      zpisc(jpno3,1) =  5.79e-6_wp / rno3 
129      zpisc(jpnh4,1) =  3.22e-7_wp / rno3
130
131      !--- Arctic specificities (dissolved inorganic & DOM)
132      zpisc(jpdic,2) =  1.98e-3_wp 
133      zpisc(jpdoc,2) =  6.00e-6_wp 
134      zpisc(jptal,2) =  2.13e-3_wp 
135      zpisc(jpoxy,2) =  3.65e-4_wp 
136      zpisc(jpcal,2) =  1.50e-9_wp 
137      zpisc(jppo4,2) =  4.09e-7_wp / po4r 
138      zpisc(jppoc,2) =  4.05e-7_wp 
139#  if ! defined key_kriest
140      zpisc(jpgoc,2) =  2.84e-8_wp 
141      zpisc(jpbfe,2) =  7.03e-13_wp 
142#  else
143      zpisc(jpnum,2) =  0.00e-00_wp 
144#  endif
145      zpisc(jpsil,2) =  6.87e-6_wp 
146      zpisc(jpdsi,2) =  1.73e-7_wp 
147      zpisc(jpgsi,2) =  7.93e-9_wp
148      zpisc(jpphy,2) =  5.25e-7_wp 
149      zpisc(jpdia,2) =  7.75e-7_wp 
150      zpisc(jpzoo,2) =  3.34e-7_wp
151      zpisc(jpmes,2) =  2.49e-7_wp 
152      zpisc(jpfer,2) =  1.43e-9_wp 
153      zpisc(jpsfe,2) =  2.21e-11_wp 
154      zpisc(jpdfe,2) =  2.04e-11_wp 
155      zpisc(jpnfe,2) =  1.75e-11_wp 
156      zpisc(jpnch,2) =  1.46e-07_wp 
157      zpisc(jpdch,2) =  2.36e-07_wp 
158      zpisc(jpno3,2) =  3.51e-06_wp / rno3 
159      zpisc(jpnh4,2) =  6.15e-08_wp / rno3 
160
161      !--- Antarctic specificities (dissolved inorganic & DOM)
162      zpisc(jpdic,3) =  2.20e-3_wp 
163      zpisc(jpdoc,3) =  7.02e-6_wp 
164      zpisc(jptal,3) =  2.37e-3_wp 
165      zpisc(jpoxy,3) =  3.42e-4_wp 
166      zpisc(jpcal,3) =  3.17e-9_wp 
167      zpisc(jppo4,3) =  1.88e-6_wp / po4r 
168      zpisc(jppoc,3) =  1.13e-6_wp 
169#  if ! defined key_kriest
170      zpisc(jpgoc,3) =  2.89e-8_wp 
171      zpisc(jpbfe,3) =  5.63e-13_wp 
172#  else
173      zpisc(jpnum,3) =  0.00e-00_wp 
174#  endif
175      zpisc(jpsil,3) =  4.96e-5_wp 
176      zpisc(jpdsi,3) =  5.63e-7_wp 
177      zpisc(jpgsi,3) =  5.35e-8_wp
178      zpisc(jpphy,3) =  8.10e-7_wp 
179      zpisc(jpdia,3) =  5.77e-7_wp 
180      zpisc(jpzoo,3) =  6.68e-7_wp
181      zpisc(jpmes,3) =  3.55e-7_wp 
182      zpisc(jpfer,3) =  1.62e-10_wp
183      zpisc(jpsfe,3) =  2.29e-11_wp 
184      zpisc(jpdfe,3) =  8.75e-12_wp
185      zpisc(jpnfe,3) =  1.48e-11_wp 
186      zpisc(jpnch,3) =  2.02e-7_wp 
187      zpisc(jpdch,3) =  1.60e-7_wp 
188      zpisc(jpno3,3) =  2.64e-5_wp / rno3 
189      zpisc(jpnh4,3) =  3.39e-7_wp / rno3 
190
191      !--- Baltic Sea particular case for ORCA configurations
192      zpisc(jpdic,4) = 1.14e-3_wp
193      zpisc(jpdoc,4) = 1.06e-5_wp
194      zpisc(jptal,4) = 1.16e-3_wp
195      zpisc(jpoxy,4) = 3.71e-4_wp
196      zpisc(jpcal,4) = 1.51e-9_wp
197      zpisc(jppo4,4) = 2.85e-9_wp / po4r
198      zpisc(jppoc,4) = 4.84e-7_wp
199#  if ! defined key_kriest
200      zpisc(jpgoc,4) = 1.05e-8_wp
201      zpisc(jpbfe,4) = 4.97e-13_wp
202#  else
203      zpisc(jpnum,4) = 0. ! could not get this value
204#  endif
205      zpisc(jpsil,4) = 4.91e-5_wp
206      zpisc(jpdsi,4) = 3.25e-7_wp
207      zpisc(jpgsi,4) = 1.93e-8_wp
208      zpisc(jpphy,4) = 6.64e-7_wp
209      zpisc(jpdia,4) = 3.41e-7_wp
210      zpisc(jpzoo,4) = 3.83e-7_wp
211      zpisc(jpmes,4) = 0.225e-6_wp
212      zpisc(jpfer,4) = 2.45e-9_wp
213      zpisc(jpsfe,4) = 3.89e-11_wp
214      zpisc(jpdfe,4) = 1.33e-11_wp
215      zpisc(jpnfe,4) = 2.62e-11_wp
216      zpisc(jpnch,4) = 1.17e-7_wp
217      zpisc(jpdch,4) = 9.69e-8_wp
218      zpisc(jpno3,4) = 5.36e-5_wp / rno3
219      zpisc(jpnh4,4) = 7.18e-7_wp / rno3
220 
221      DO jn = jp_pcs0, jp_pcs1
222         IF( cn_trc_o(jn) == 'GL ' ) trc_o(:,:,jn) = zpisc(jn,1)  ! Global case
223         IF( cn_trc_o(jn) == 'AA ' ) THEN
224            WHERE( gphit(:,:) >= 0._wp ) ; trc_o(:,:,jn) = zpisc(jn,2) ; END WHERE ! Arctic
225            WHERE( gphit(:,:) <  0._wp ) ; trc_o(:,:,jn) = zpisc(jn,3) ; END WHERE ! Antarctic
226         ENDIF
227         IF( cp_cfg == "orca" ) THEN     !  Baltic Sea particular case for ORCA configurations
228             WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    &
229                    54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp )
230                    trc_o(:,:,jn) = zpisc(jn,4)
231            END WHERE
232         ENDIF
233      ENDDO
234
235
236
237      !-----------------------------
238      ! Assign ice-ocean cc ratios
239      !-----------------------------
240      ! 0 means zero concentration in sea ice
241      ! 1 means same concentration in the sea ice as in the ocean
242
243      ! Ice ocean salinity ratio
244      zsoce_bal   = 4. ; zsice_bal   = 2. !! Baltic ocean and sea ice salinities
245      zrs(1) = sice / soce                !! ice-ocean salinity ratio, global case
246      zrs(2) = zsice_bal / zsoce_bal      !! ice-ocean salinity ratio, Baltic case
247
248      DO jn = jp_pcs0, jp_pcs1
249         IF( trc_ice_ratio(jn) >= 0._wp )  zratio(jn,:) = trc_ice_ratio(jn)
250         IF( trc_ice_ratio(jn) == -1._wp ) zratio(jn,:) = zrs(:)
251         IF( trc_ice_ratio(jn) == -2._wp ) zratio(jn,:) = -9999.99_wp
252      END DO
253
254      !-------------------------------
255      ! Sea ice tracer concentrations
256      !-------------------------------
257      DO jn = jp_pcs0, jp_pcs1
258         !-- Everywhere but in the Baltic
259         IF ( trc_ice_ratio(jn) >= -1._wp ) THEN ! no prescribed conc. ; typically everything but iron)
260            trc_i(:,:,jn) = zratio(jn,1) * trc_o(:,:,jn) 
261         ELSE                                    ! prescribed concentration
262            trc_i(:,:,jn) = trc_ice_prescr(jn)
263         ENDIF
264       
265         !-- Baltic
266         IF( cp_cfg == "orca" ) THEN  ! Baltic treated seperately for ORCA configs
267            IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN ! no prescribed conc. ; typically everything but iron)
268               WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    &
269                      54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp )
270                     trc_i(:,:,jn) = zratio(jn,2) * trc_o(:,:,jn) 
271               END WHERE
272            ELSE                                 ! prescribed tracer concentration in ice
273               WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND.    &
274                   54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp )
275                     trc_i(:,:,jn) = trc_ice_prescr(jn)
276               END WHERE
277            ENDIF ! trc_ice_ratio
278         ENDIF
279      !
280      END DO ! jn
281#endif
282
283   END SUBROUTINE p4z_ice_ini
284
285   SUBROUTINE p2z_ice_ini
286#if defined key_pisces_reduced 
287      !!----------------------------------------------------------------------
288      !!                   ***  ROUTINE p2z_ice_ini ***
289      !!
290      !! ** Purpose :   Initialisation of the LOBSTER biochemical model
291      !!----------------------------------------------------------------------
292#endif
293   END SUBROUTINE p2z_ice_ini
294
295
296#else
297   !!----------------------------------------------------------------------
298   !!   Dummy module                            No PISCES biochemical model
299   !!----------------------------------------------------------------------
300CONTAINS
301   SUBROUTINE trc_ice_ini_pisces         ! Empty routine
302   END SUBROUTINE trc_ice_ini_pisces
303#endif
304
305   !!======================================================================
306END MODULE trcice_pisces
Note: See TracBrowser for help on using the repository browser.