1 | SUBROUTINE ice_bio_grid(kideb,kiut,nlay_i,ln_write) |
---|
2 | |
---|
3 | ! This routine creates biogeochemical vertical grid |
---|
4 | ! (c) Martin Vancoppenolle, May 2007 |
---|
5 | |
---|
6 | INCLUDE 'type.com' |
---|
7 | INCLUDE 'para.com' |
---|
8 | INCLUDE 'const.com' |
---|
9 | INCLUDE 'ice.com' |
---|
10 | INCLUDE 'thermo.com' |
---|
11 | INCLUDE 'bio.com' |
---|
12 | |
---|
13 | INTEGER :: |
---|
14 | & ji , ! : index for space |
---|
15 | & jk , ! : index for ice layers |
---|
16 | & jn ! : index for tracers |
---|
17 | |
---|
18 | LOGICAL :: |
---|
19 | & ln_write |
---|
20 | |
---|
21 | !=============================================================================! |
---|
22 | |
---|
23 | IF ( ln_write ) THEN |
---|
24 | WRITE(numout,*) |
---|
25 | WRITE(numout,*) ' *** ice_bio_grid : ' |
---|
26 | WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~ ' |
---|
27 | WRITE(numout,*) |
---|
28 | WRITE(numout,*) ' c_grid : ', c_grid |
---|
29 | ENDIF |
---|
30 | |
---|
31 | DO ji = kideb, kiut |
---|
32 | |
---|
33 | !-----------------------------------------------------------------------! |
---|
34 | ! Thickness of the biologically-active layer: h_bio (SL & BA) |
---|
35 | !-----------------------------------------------------------------------! |
---|
36 | |
---|
37 | ! Skeletal layer case |
---|
38 | IF ( c_grid .EQ. 'SL' ) THEN |
---|
39 | h_bio = MIN( h_skel , ht_i_b(ji) ) !!! skeletal layer thickness is prescribed |
---|
40 | ENDIF |
---|
41 | |
---|
42 | ! Biologically-active layer case |
---|
43 | IF ( c_grid .EQ. 'BA' ) THEN |
---|
44 | |
---|
45 | ! Brine volume fraction |
---|
46 | DO layer = 1, nlay_i |
---|
47 | e_i_b(layer) = - tmut * s_i_b(ji,layer) / ( t_i_b(ji,layer) |
---|
48 | & - tpw ) |
---|
49 | END DO |
---|
50 | |
---|
51 | ! Find the layer above which BAL is located |
---|
52 | i_bal = 1 |
---|
53 | DO layer = 2, nlay_i |
---|
54 | IF ( ( e_i_b(layer-1) .LT. e_thr_bal ) .AND. |
---|
55 | & ( e_i_b(layer) .GT. e_thr_bal ) ) i_bal = layer |
---|
56 | END DO ! layer |
---|
57 | |
---|
58 | ! Upper-boundary of the BAL (linear interpolation) |
---|
59 | IF ( i_bal .GT. 1 ) THEN |
---|
60 | zdh = ht_i_b(ji) / REAL( nlay_i ) |
---|
61 | zde = ( e_i_b( i_bal ) - e_i_b( i_bal-1 ) ) |
---|
62 | zm = zde / zdh |
---|
63 | zdz = ( e_thr_bal - e_i_b( i_bal - 1 ) ) / zm |
---|
64 | zbal = z_i_phy(i_bal-1) + zdz |
---|
65 | ELSE |
---|
66 | zbal = 0. |
---|
67 | ENDIF |
---|
68 | |
---|
69 | ! BAL thickness |
---|
70 | h_bio = MIN( MAX( ht_i_b(ji) - zbal , h_skel ), |
---|
71 | & ht_i_b(ji) - h_skel ) !!! BAL layer is computed |
---|
72 | ! it cannot be higher than ht_i_b - h_skel |
---|
73 | ! it cannot be smaller than h_skel |
---|
74 | |
---|
75 | ENDIF ! c_grid .EQ. 'BA' |
---|
76 | |
---|
77 | !-----------------------------------------------------------------------! |
---|
78 | ! Layer thicknesses |
---|
79 | !-----------------------------------------------------------------------! |
---|
80 | |
---|
81 | ! Uniform multi-layer case |
---|
82 | IF ( c_grid .EQ. 'ML' ) THEN |
---|
83 | |
---|
84 | h_bio = ht_i_b(ji) !!! biologically-active layer = ice thickness |
---|
85 | |
---|
86 | zh = ht_i_b(ji) / REAL( nlay_bio ) |
---|
87 | DO layer = 1, nlay_bio |
---|
88 | deltaz_i_bio(layer) = zh |
---|
89 | END DO |
---|
90 | |
---|
91 | ENDIF |
---|
92 | |
---|
93 | ! Deformed case (uppermost and lowermost have fixed thickness to h_skel) |
---|
94 | IF ( c_grid .EQ. 'DL' ) THEN |
---|
95 | h_bio = ht_i_b(ji) !!! biologically-active layer = ice thickness |
---|
96 | |
---|
97 | deltaz_i_bio(1) = MIN( ht_i_b(ji) / REAL( nlay_bio ) , |
---|
98 | & h_skel ) |
---|
99 | deltaz_i_bio(nlay_bio) = MIN( ht_i_b(ji) / REAL( nlay_bio ) , |
---|
100 | & h_skel ) |
---|
101 | zh = ( ht_i_b(ji) - deltaz_i_bio(1) - deltaz_i_bio(nlay_bio) ) |
---|
102 | & / REAL( nlay_bio - 2 ) |
---|
103 | DO layer = 2, nlay_bio - 1 |
---|
104 | deltaz_i_bio(layer) = zh |
---|
105 | END DO |
---|
106 | ENDIF |
---|
107 | |
---|
108 | IF ( ( c_grid .EQ. 'SL' ) .OR. ( c_grid .EQ. 'BA' ) ) THEN |
---|
109 | deltaz_i_bio(nlay_bio) = h_bio |
---|
110 | DO layer = 1, nlay_bio - 1 |
---|
111 | deltaz_i_bio(layer) = ( ht_i_b(ji) - h_bio ) / |
---|
112 | & ( nlay_bio - 1 ) |
---|
113 | END DO |
---|
114 | WRITE(numout,*) " h_bio : ", h_bio |
---|
115 | WRITE(numout,*) " ht_i_b(ji) : ", ht_i_b(ji) |
---|
116 | WRITE(numout,*) " deltaz_i_bio : ", ( deltaz_i_bio(layer), |
---|
117 | & layer = 1, nlay_bio ) |
---|
118 | ENDIF |
---|
119 | |
---|
120 | !-----------------------------------------------------------------------! |
---|
121 | ! Mid-point cotes |
---|
122 | !-----------------------------------------------------------------------! |
---|
123 | z_i_bio(1) = deltaz_i_bio(1) / 2.0 |
---|
124 | DO layer = 2, nlay_bio |
---|
125 | z_i_bio(layer) = z_i_bio(layer-1) + ( deltaz_i_bio(layer-1) + |
---|
126 | & deltaz_i_bio(layer) ) / 2.0 |
---|
127 | END DO |
---|
128 | |
---|
129 | !-----------------------------------------------------------------------! |
---|
130 | ! Layer boundaries |
---|
131 | !-----------------------------------------------------------------------! |
---|
132 | zb_i_bio(0) = 0.0 |
---|
133 | DO layer = 1, nlay_bio |
---|
134 | zb_i_bio(layer) = zb_i_bio(layer-1) + deltaz_i_bio(layer) |
---|
135 | END DO ! layer |
---|
136 | |
---|
137 | !-----------------------------------------------------------------------! |
---|
138 | END DO ! ji |
---|
139 | |
---|
140 | IF ( ln_write ) THEN |
---|
141 | WRITE(numout,*) ' deltaz_i_bio : ', ( deltaz_i_bio(layer), |
---|
142 | & layer = 1, nlay_bio) |
---|
143 | WRITE(numout,*) ' z_i_bio : ', ( z_i_bio(layer), |
---|
144 | & layer = 1, nlay_bio) |
---|
145 | WRITE(numout,*) ' zb_i_bio : ', ( zb_i_bio(layer), |
---|
146 | & layer = 1, nlay_bio) |
---|
147 | |
---|
148 | WRITE(numout,*) |
---|
149 | ENDIF |
---|
150 | |
---|
151 | !=============================================================================! |
---|
152 | !-- End of ice_bio_ini -- |
---|
153 | |
---|
154 | END |
---|