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/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/PISCES – NEMO

source: branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90 @ 5610

Last change on this file since 5610 was 5610, checked in by cetlod, 9 years ago

bugfix to reduce lines over 132, see ticket #1564

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