Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
MODULE p4zligand
!!======================================================================
!! *** MODULE p4zligand ***
!! TOP : PISCES Compute remineralization/dissolution of organic ligands
!!=========================================================================
!! History : 3.6 ! 2016-03 (O. Aumont, A. Tagliabue) Quota model and reorganization
!!----------------------------------------------------------------------
!! p4z_ligand : Compute remineralization/dissolution of organic ligands
!! p4z_ligand_init: Initialisation of parameters for remineralisation
!!----------------------------------------------------------------------
USE oce_trc ! shared variables between ocean and passive tracers
USE trc ! passive tracers common variables
USE sms_pisces ! PISCES Source Minus Sink variables
USE prtctl ! print control for debugging
USE iom ! I/O manager
IMPLICIT NONE
PRIVATE
PUBLIC p4z_ligand ! called in p4zbio.F90
PUBLIC p4z_ligand_init ! called in trcsms_pisces.F90
REAL(wp), PUBLIC :: rlgw !: lifetime (years) of weak ligands
REAL(wp), PUBLIC :: rlgs !: lifetime (years) of strong ligands
REAL(wp), PUBLIC :: rlig !: Remin ligand production
REAL(wp), PUBLIC :: prlgw !: Photochemical of weak ligand
REAL(wp), PUBLIC :: xklig !: 1/2 saturation constant of photolysis
!! * Substitutions
# include "do_loop_substitute.h90"
!!----------------------------------------------------------------------
!! NEMO/TOP 4.0 , NEMO Consortium (2018)
!! $Id: p4zligand.F90 15459 2021-10-29 08:19:18Z cetlod $
!! Software governed by the CeCILL license (see ./LICENSE)
!!----------------------------------------------------------------------
CONTAINS
SUBROUTINE p4z_ligand( kt, knt, Kbb, Krhs )
!!---------------------------------------------------------------------
!! *** ROUTINE p4z_ligand ***
!!
!! ** Purpose : Compute remineralization/scavenging of organic ligands
!!---------------------------------------------------------------------
INTEGER, INTENT(in) :: kt, knt ! ocean time step
INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices
!
INTEGER :: ji, jj, jk
REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw
REAL(wp) :: zlam1a, zlam1b, zaggliga, zligco
REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zligprod, zlcoll3d
CHARACTER (len=25) :: charout
!!---------------------------------------------------------------------
!
IF( ln_timing ) CALL timing_start('p4z_ligand')
!
DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1)
!
! ------------------------------------------------------------------
! Remineralization of iron ligands
! ------------------------------------------------------------------
! production from remineralisation of organic matter
zlgwp = orem(ji,jj,jk) * rlig
! decay of weak ligand
! This is based on the idea that as LGW is lower
! there is a larger fraction of refractory OM
zlgwr = ( 1.0 / rlgs * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 ) &
& + 1.0 / rlgw * xfecolagg(ji,jj,jk) * 1.0E-9 ) / ( rtrn + tr(ji,jj,jk,jplgw,Kbb) )
zlgwr = zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb)
! photochem loss of weak ligand
zlgwpr = prlgw * xstep * etot(ji,jj,jk) * tr(ji,jj,jk,jplgw,Kbb)**3 * (1. - fr_i(ji,jj)) &
& / ( tr(ji,jj,jk,jplgw,Kbb)**2 + (xklig)**2)
! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation
! xcoagfe is computed in p4zfechem
! -------------------------------------------------------------------------------------
! 50% of the ligands are supposed to be in the colloidal size fraction
! as for FeL
zligco = 0.5 * MAX(0., tr(ji,jj,jk,jplgw,Kbb) - xfecolagg(ji,jj,jk) * 1.0E-9 )
zaggliga = xcoagfe(ji,jj,jk) * xstep * zligco
tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zlgwp - zlgwr - zlgwpr - zaggliga
!
zligrem(ji,jj,jk) = zlgwr
zligpr(ji,jj,jk) = zlgwpr
zligprod(ji,jj,jk) = zlgwp
zlcoll3d(ji,jj,jk) = zaggliga
END_3D
!
! Output of some diagnostics variables
! ---------------------------------
IF( lk_iomput .AND. knt == nrdttrc ) THEN
IF( iom_use( "LIGREM" ) ) THEN
zligrem(:,:,jpk) = 0. ; CALL iom_put( "LIGREM", zligrem(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) )
ENDIF
IF( iom_use( "LIGPR" ) ) THEN
zligpr(:,:,jpk) = 0. ; CALL iom_put( "LIGPR" , zligpr(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) )
ENDIF
IF( iom_use( "LPRODR" ) ) THEN
zligprod(:,:,jpk) = 0. ; CALL iom_put( "LPRODR", zligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) )
ENDIF
IF( iom_use( "LGWCOLL" ) ) THEN
zlcoll3d(:,:,jpk) = 0. ; CALL iom_put( "LGWCOLL", zlcoll3d(:,:,:) * 1.e9 * 1.e+3 * rfact2r * tmask(:,:,:) )
ENDIF
ENDIF
!
IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging)
WRITE(charout, FMT="('ligand1')")
CALL prt_ctl_info( charout, cdcomp = 'top' )
CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
ENDIF
!
IF( ln_timing ) CALL timing_stop('p4z_ligand')
!
END SUBROUTINE p4z_ligand
SUBROUTINE p4z_ligand_init
!!----------------------------------------------------------------------
!! *** ROUTINE p4z_ligand_init ***
!!
!! ** Purpose : Initialization of remineralization parameters
!!
!! ** Method : Read the nampislig namelist and check the parameters
!!
!! ** input : Namelist nampislig
!!----------------------------------------------------------------------
INTEGER :: ios ! Local integer
!
NAMELIST/nampislig/ rlgw, prlgw, rlgs, rlig, xklig
!!----------------------------------------------------------------------
!
IF(lwp) THEN
WRITE(numout,*)
WRITE(numout,*) 'p4z_ligand_init : remineralization/scavenging of organic ligands'
WRITE(numout,*) '~~~~~~~~~~~~~~~'
ENDIF
READ ( numnatp_ref, nampislig, IOSTAT = ios, ERR = 901)
901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislig in reference namelist' )
READ ( numnatp_cfg, nampislig, IOSTAT = ios, ERR = 902 )
902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampislig in configuration namelist' )
IF(lwm) WRITE ( numonp, nampislig )
!
IF(lwp) THEN ! control print
WRITE(numout,*) ' Namelist : nampislig'
WRITE(numout,*) ' Lifetime (years) of weak ligands rlgw =', rlgw
WRITE(numout,*) ' Remin ligand production per unit C rlig =', rlig
WRITE(numout,*) ' Photolysis of weak ligand prlgw =', prlgw
WRITE(numout,*) ' Lifetime (years) of strong ligands rlgs =', rlgs
WRITE(numout,*) ' 1/2 saturation for photolysis xklig =', xklig
ENDIF
!
END SUBROUTINE p4z_ligand_init
!!======================================================================
END MODULE p4zligand