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.
p4zsink.kriest.h in trunk/NEMO/TOP_SRC/SMS – NEMO

source: trunk/NEMO/TOP_SRC/SMS/p4zsink.kriest.h @ 719

Last change on this file since 719 was 719, checked in by ctlod, 17 years ago

get back to the nemo_v2_3 version for trunk

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.4 KB
Line 
1CCCCCC PISCES MODEL: Kriest parameterization
2CDIR$ LIST
3CC----------------------------------------------------------------------
4CC local declarations
5CC ==================
6      INTEGER jksed, ji, jj, jk
7      REAL xagg1,xagg2,xagg3,xagg4,xagg5,xaggsi,xaggsh
8      REAL znum(jpi,jpj,jpk)
9      REAL xnum,xeps,xfm,xgm,xsm
10      REAL xdiv,xdiv1,xdiv2,xdiv3,xdiv4,xdiv5
11      REAL zval1, zval2, zval3, zval4
12      REAL zstep
13#if defined key_trc_dia3d
14      REAL zrfact2
15#endif
16      REAL sinking(jpi,jpj,jpk),sinking2(jpi,jpj,jpk)
17      REAL sinkfer(jpi,jpj,jpk)
18      REAL sinkcal(jpi,jpj,jpk),sinksil(jpi,jpj,jpk)
19C
20C
21C    Time step duration for biology
22C    ------------------------------
23C
24       zstep=rfact2/rjjss
25       
26C
27C
28C     Initialisation of variables used to compute Sinking Speed
29C     ---------------------------------------------------------
30C
31       znum(:,:,:) = 0.
32       jksed = 10
33       zval1 = 1. + xkr_zeta
34       zval2 = 1. + xkr_zeta + xkr_eta
35       zval3 = 1. + xkr_eta
36C
37C     Computation of the vertical sinking speed : Kriest et Evans, 2000
38C     -----------------------------------------------------------------
39C   
40       do jk=1,jpk-1
41         do jj=1,jpj
42           do ji=1,jpi
43             IF (tmask(ji,jj,jk).NE.0) THEN
44                 xnum = trn(ji,jj,jk,jppoc) / (trn(ji,jj,jk,jpnum)+rtrn)
45     &                     / xkr_massp
46C -------------- To avoid sinking speed over 50 m/day -------
47                 xnum = min( xnumm(jk), xnum )
48                 xnum = max( 1.1, xnum )
49                 znum(ji,jj,jk) = xnum
50C------------------------------------------------------------
51                 xeps = ( zval1 * xnum - 1. )/ ( xnum - 1. )
52                 xfm  = xkr_frac**( 1. - xeps )
53                 xgm  = xkr_frac**( zval1 - xeps )
54                 xdiv = max(1E-4,abs(xeps-zval2))*sign(1.,(xeps-zval2))
55                 xdiv1=(xeps-zval3)
56                 wsbio3(ji,jj,jk)= xkr_wsbio_min * ( xeps-zval1 ) / xdiv
57     &                           - xkr_wsbio_max * xgm * xkr_eta / xdiv
58                 wsbio4(ji,jj,jk)= xkr_wsbio_min * ( xeps-1. ) / xdiv1
59     &                           - xkr_wsbio_max * xfm * xkr_eta / xdiv1
60                 IF( xnum == 1.1) THEN
61                     wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk)
62                 ENDIF
63             ENDIF
64           end do
65         end do
66       end do
67C
68       wscal(:,:,:)=max(wsbio3(:,:,:),50.)
69C
70C
71C   INITIALIZE TO ZERO ALL THE SINKING ARRAYS
72C   -----------------------------------------
73C
74         sinking=0.
75         sinking2=0.
76         sinkcal=0.
77         sinkfer=0.
78         sinksil=0.
79C
80C   Compute the sedimentation term using p4zsink2 for all
81C   the sinking particles
82C   -----------------------------------------------------
83C
84         CALL p4zsink2(wsbio3,sinking,jppoc)
85         CALL p4zsink2(wsbio4,sinking2,jpnum)
86         CALL p4zsink2(wsbio3,sinkfer,jpsfe)
87         CALL p4zsink2(wscal,sinksil,jpdsi)
88         CALL p4zsink2(wscal,sinkcal,jpcal)
89
90C
91C  Exchange between organic matter compartments due to
92C  coagulation/disaggregation
93---------------------------------------------------
94C
95         zval1 = 1. + xkr_zeta
96         zval2 = 1. + xkr_eta
97         zval3 = 3. + xkr_eta
98         zval4 = 4. + xkr_eta
99
100         DO jk = 1,jpkm1
101           DO jj = 1,jpj
102             DO ji = 1,jpi
103               IF (tmask(ji,jj,jk).NE.0.) THEN
104C
105                   xnum=trn(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn)
106     &                         /xkr_massp
107C -------------- To avoid sinking speed over 50 m/day -------
108                   xnum=min(xnumm(jk),xnum)
109                   xnum=max(1.1,xnum)
110C------------------------------------------------------------
111                   xeps =(zval1*xnum-1.)/(xnum-1.)
112                   xdiv =max(1E-4,abs(xeps-zval3))*sign(1.,(xeps-zval3))
113                   xdiv1=max(1E-4,abs(xeps-4.))*sign(1.,(xeps-4.))
114                   xdiv2=(xeps-2.)
115                   xdiv3=(xeps-3.)
116                   xdiv4=(xeps-zval2)
117                   xdiv5=(2*xeps-zval4)
118                   xfm=xkr_frac**(1.-xeps)
119                   xsm=xkr_frac**xkr_eta
120C
121C    Part I : Coagulation dependant on turbulence
122C    ----------------------------------------------
123C
124                   xagg1=(0.163*trn(ji,jj,jk,jpnum)**2
125     &           *2.*( (xfm-1.)*(xfm*xkr_mass_max**3-xkr_mass_min**3)
126     &           *(xeps-1)/xdiv1 + 3.*(xfm*xkr_mass_max-xkr_mass_min)
127     &           *(xfm*xkr_mass_max**2-xkr_mass_min**2)
128     &           *(xeps-1.)**2/(xdiv2*xdiv3)))
129#    if defined key_off_degrad
130     &                 *facvol(ji,jj,jk)
131#    endif
132
133C
134                   xagg2=(2*0.163*trn(ji,jj,jk,jpnum)**2*xfm*
135     &                   ((xkr_mass_max**3+3.*(xkr_mass_max**2
136     &                    *xkr_mass_min*(xeps-1.)/xdiv2
137     &                    +xkr_mass_max*xkr_mass_min**2*(xeps-1.)/xdiv3)
138     &                    +xkr_mass_min**3*(xeps-1)/xdiv1)
139     &                    -xfm*xkr_mass_max**3*(1.+3.*((xeps-1.)/
140     &                    (xeps-2.)+(xeps-1.)/xdiv3)+(xeps-1.)/xdiv1)))
141#    if defined key_off_degrad
142     &                 *facvol(ji,jj,jk)
143#    endif
144C
145                   xagg3=(0.163*trn(ji,jj,jk,jpnum)**2*xfm**2*8.
146     &                 *xkr_mass_max**3)
147#    if defined key_off_degrad
148     &                 *facvol(ji,jj,jk)
149#    endif
150C
151                   xaggsh=(xagg1+xagg2+xagg3)*rfact2*zdiss(ji,jj,jk)
152     &                 /1000.
153C
154C    Aggregation of small into large particles
155C    Part II : Differential settling
156C    ----------------------------------------------
157C
158                   xagg4=(2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2*
159     &                 xkr_wsbio_min*(xeps-1.)**2
160     &                 *(xkr_mass_min**2*((1.-xsm*xfm)/(xdiv3*xdiv4)
161     &                 -(1.-xfm)/(xdiv*(xeps-1.)))-
162     &                 ((xfm*xfm*xkr_mass_max**2*xsm-xkr_mass_min**2)
163     &                 *xkr_eta)/(xdiv*xdiv3*xdiv5)))
164#    if defined key_off_degrad
165     &                 *facvol(ji,jj,jk)
166#    endif
167C
168                   xagg5=(2.*3.141*0.125*trn(ji,jj,jk,jpnum)**2
169     &                 *(xeps-1.)*xfm*xkr_wsbio_min
170     &                 *(xsm*(xkr_mass_min**2-xfm*xkr_mass_max**2)
171     &                 /xdiv3-(xkr_mass_min**2-xfm*xsm*xkr_mass_max**2)
172     &                 /xdiv))
173#    if defined key_off_degrad
174     &                 *facvol(ji,jj,jk)
175#    endif
176C
177                   xaggsi=(xagg4+xagg5)*zstep/10.
178C
179                   xagg(ji,jj,jk)=0.5 * xkr_stick*(xaggsh+xaggsi)
180C
181C     Aggregation of DOC to small particles
182C     --------------------------------------
183C
184                   xaggdoc(ji,jj,jk)=(0.4*trn(ji,jj,jk,jpdoc)
185     &                 +1018.*trn(ji,jj,jk,jppoc))*zstep
186     &                 *zdiss(ji,jj,jk)*trn(ji,jj,jk,jpdoc)
187#    if defined key_off_degrad
188     &                 *facvol(ji,jj,jk)
189#    endif
190C
191
192               ENDIF
193             END DO
194           END DO
195         END DO
196C
197#    if defined key_trc_dia3d
198         zrfact2 = 1.e3*rfact2r
199         trc2d(:,:,5) = sinking(:,:,jksed+1)*zrfact2
200         trc2d(:,:,6) = sinking2(:,:,jksed+1)*zrfact2
201         trc2d(:,:,7) = sinkfer(:,:,jksed+1)*zrfact2
202         trc2d(:,:,9) = sinksil(:,:,jksed+1)*zrfact2
203         trc2d(:,:,10) = sinkcal(:,:,jksed+1)*zrfact2
204         trc3d(:,:,:,12) = sinking(:,:,:)*zrfact2
205         trc3d(:,:,:,13) = sinking2(:,:,:)*zrfact2
206         trc3d(:,:,:,14) = sinksil(:,:,:)*zrfact2
207         trc3d(:,:,:,15) = sinkcal(:,:,:)*zrfact2
208         trc3d(:,:,:,16) = znum(:,:,:)
209         trc3d(:,:,:,17) = wsbio3(:,:,:)
210         trc3d(:,:,:,18) = wsbio4(:,:,:)
211#    endif
Note: See TracBrowser for help on using the repository browser.