1 | MODULE 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$ |
---|
23 | CONTAINS |
---|
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 | |
---|
165 | END MODULE sedadv |
---|