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.
trcice_pisces.F90 in branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90 @ 7795

Last change on this file since 7795 was 7398, checked in by cbricaud, 7 years ago

coarsening branch: first implementation of coarsening in PISCES

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