[4] | 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 |
---|