source: tags/LIM1D_v3.20/SOURCES/source_3.20/ice_bio_grid.f @ 6

Last change on this file since 6 was 6, checked in by vancop, 8 years ago

initial import of v3.20 /Users/ioulianikolskaia/Boulot/CODES/LIM1D/ARCHIVE/TMP/LIM1D_v3.20/

File size: 5.2 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.