trcice_pisces.F90 12 KB

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