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.
sedadv.F90 in NEMO/trunk/src/TOP/PISCES/SED – NEMO

source: NEMO/trunk/src/TOP/PISCES/SED/sedadv.F90

Last change on this file was 15450, checked in by cetlod, 3 years ago

Some updates to make the PISCES/SED module usable. Totally orthogonal with no effect on other parts of the code

  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
1MODULE sedadv
2   !!======================================================================
3   !!              ***  MODULE  sedadv  ***
4   !!    Sediment : vertical advection and burial
5   !!=====================================================================
6   !! * Modules used
7   !!----------------------------------------------------------------------
8   !!   sed_adv :
9   !!----------------------------------------------------------------------
10   USE sed     ! sediment global variable
11   USE lib_mpp         ! distribued memory computing library
12
13   IMPLICIT NONE
14   PRIVATE
15
16   PUBLIC sed_adv
17
18   REAL(wp) :: cpor
19   REAL(wp) :: por1clay 
20   REAL(wp) :: eps = 1.e-13
21
22   !! $Id$
23CONTAINS
24
25   SUBROUTINE sed_adv( kt )
26      !!-------------------------------------------------------------------------
27      !!                  ***  ROUTINE sed_adv  ***
28      !!
29      !! ** Purpose : vertical solid sediment advection and burial
30      !!
31      !! ** Method  : At each grid point the 1-dimensional solid sediment column
32      !!              is shifted according the rain added to the top layer and
33      !!              the gaps produced through redissolution so that in the end
34      !!              the original sediment mixed layer geometry is reestablished.
35      !!
36      !!
37      !!   History :
38      !!        !  98-08 (E. Maier-Reimer, Christoph Heinze )  Original code
39      !!        !  04-10 (N. Emprin, M. Gehlen ) F90
40      !!        !  06-04 (C. Ethe)  Re-organization
41      !!-------------------------------------------------------------------------
42      !!* Arguments
43      INTEGER, INTENT(in) ::  &
44         kt                     ! time step
45      ! * local variables
46      INTEGER :: ji, jk, js 
47      INTEGER :: jn
48     
49      REAL(wp), DIMENSION(jpoce,jpksed,jpsol+jpads) :: zsolcp
50      REAL(wp) :: solfu, zfilled, zwb, fulsed, uebers, seddef
51
52      !------------------------------------------------------------------------
53
54      IF( ln_timing )  CALL timing_start('sed_adv')
55!
56      IF( kt == nitsed000 ) THEN
57         IF (lwp) THEN
58            WRITE(numsed,*) ' '
59            WRITE(numsed,*) ' sed_adv : vertical sediment advection  '
60            WRITE(numsed,*) ' '
61         ENDIF
62      ENDIF
63
64      ! Allocation of the temporary arrays
65      ! ----------------------------------
66      zsolcp(:,:,:) = 0._wp
67      DO js = 1, jpsol
68         zsolcp(:,:,js) = solcp(:,:,js)
69      END DO
70      DO jk = 2, jpksed
71         zsolcp(:,jk,jpsol+1) = pwcp(:,jk,jwnh4) * adsnh4 
72         zsolcp(:,jk,jpsol+2) = pwcp(:,jk,jwfe2) * adsfe2
73      END DO
74
75      ! Initialization of data for mass balance calculation
76      !---------------------------------------------------
77      fromsed(:,:) = 0.
78      tosed  (:,:) = 0. 
79
80      solfu = 0.0
81      DO jk = 2, jpksed
82         solfu = solfu + dz(jk) * por1(jk)
83      END DO
84      ! Initiate gap
85      !--------------
86
87      ! Initiate burial rates
88      !-----------------------
89      DO ji = 1, jpoce
90         DO jk = 2, jpksed-1
91            zfilled = 0._wp
92            DO js = 1, jpsol
93               zfilled = zfilled + zsolcp(ji,jk,js) / dens_sol(js)
94            END DO
95            zwb = MAX(0._wp, (zfilled - 1._wp) / (zfilled + rtrn) )
96
97
98            DO js = 1, jpsol + jpads
99               uebers = zwb * zsolcp(ji,jk,js)
100               zsolcp(ji,jk,js) = zsolcp(ji,jk,js) - uebers
101               zsolcp(ji,jk+1,js) = zsolcp(ji,jk+1,js) + uebers * dz(jk) * por1(jk) / ( dz(jk+1) * por1(jk+1) )
102            END DO
103         END DO
104
105         zfilled = 0._wp
106         DO js = 1, jpsol
107            zfilled = zfilled + zsolcp(ji,jpksed,js) / dens_sol(js)
108         END DO
109         zwb = MAX(0._wp, (zfilled - 1._wp) / (zfilled + rtrn) )
110         DO js = 1, jpsol + jpads
111            uebers = zwb * zsolcp(ji,jpksed,js)
112            zsolcp(ji,jpksed,js) = zsolcp(ji,jpksed,js) - uebers
113            tosed(ji,js) = uebers * dz(jpksed) * por1(jpksed)
114         END DO
115      END DO
116
117      DO ji = 1, jpoce
118         fulsed = 0._wp
119         DO jk = 2, jpksed 
120            zfilled = 0._wp
121            DO js = 1, jpsol
122               zfilled = zfilled + zsolcp(ji,jk,js) / dens_sol(js)
123            END DO
124            fulsed = fulsed + zfilled * dz(jk) * por1(jk)
125         END DO
126
127         seddef = solfu - fulsed
128
129         zsolcp(ji,jpksed,jsclay) = zsolcp(ji,jpksed,jsclay) + seddef / ( por1(jpksed) * dz(jpksed) )    &
130         &         * dens_sol(jsclay)
131         fromsed(ji,jsclay) = seddef * dens_sol(jsclay) 
132
133         DO jk = jpksed, 3, -1
134            zfilled = 0._wp
135            DO js = 1, jpsol
136               zfilled = zfilled + zsolcp(ji,jk,js) / dens_sol(js)
137            END DO
138            zwb = MAX(0._wp, (zfilled - 1._wp) / (zfilled + rtrn) )
139            DO js = 1, jpsol + jpads
140               uebers = zwb * zsolcp(ji,jk,js)
141               zsolcp(ji,jk,js) = zsolcp(ji,jk,js) - uebers
142               zsolcp(ji,jk-1,js) = zsolcp(ji,jk-1,js) + uebers * dz(jk) * por1(jk) / ( dz(jk-1) * por1(jk-1) )
143            END DO
144         END DO
145
146      END DO
147
148      DO js = 1, jpsol
149         solcp(:,:,js) = zsolcp(:,:,js)
150      END DO
151      DO jk = 2, jpksed
152         pwcp(:,jk,jwnh4) = (pwcp(:,jk,jwnh4) + zsolcp(:,jk,jpsol+1) * por1(jk) / por(jk) ) * radssol(jk,jwnh4)
153         IF (jpoce == 146 .and. slatit(145) > 0.) write(0,*) 'plante advection ',pwcp(145,jk,jwfe2)*1E6,zsolcp(145,jk,jpsol+2)*1E6,    &
154         &         (pwcp(145,jk,jwfe2) + zsolcp(145,jk,jpsol+2) * por1(jk) / por(jk) ) * radssol(jk,jwfe2) * 1E6
155         pwcp(:,jk,jwfe2) = (pwcp(:,jk,jwfe2) + zsolcp(:,jk,jpsol+2) * por1(jk) / por(jk) ) * radssol(jk,jwfe2)
156      END DO
157
158      rainrg(:,:) = 0.
159
160      IF( ln_timing )  CALL timing_stop('sed_adv')
161
162   END SUBROUTINE sed_adv
163
164
165END MODULE sedadv
Note: See TracBrowser for help on using the repository browser.