1 | SUBROUTINE ice_th(nlay_i,nlay_s) |
---|
2 | |
---|
3 | !!------------------------------------------------------------------ |
---|
4 | !! *** ROUTINE ice_th *** |
---|
5 | !! ** Purpose : |
---|
6 | !! Ice thermodynamics |
---|
7 | !! ** Method : |
---|
8 | !! This routine calls the thermodynamic and biological routines |
---|
9 | !! |
---|
10 | !! ** Arguments : |
---|
11 | !! nlay_i, nlay_s |
---|
12 | !! |
---|
13 | !! ** Inputs / Ouputs : (global commons) |
---|
14 | !! |
---|
15 | !! ** External : |
---|
16 | !! |
---|
17 | !! ** References : Vancoppenolle et al., JGR 2007 |
---|
18 | !! |
---|
19 | !! ** History : |
---|
20 | !! (1) CLIO, Goosse and Fichefet, JGR, 1999. |
---|
21 | !! (2) LIM-1D, Vancoppenolle et al., JGR, 2007. |
---|
22 | !! (3) BIO-LIM, Martin Vancoppenolle, 2008 |
---|
23 | !! |
---|
24 | !!------------------------------------------------------------------ |
---|
25 | !! * Arguments |
---|
26 | |
---|
27 | INCLUDE 'type.com' |
---|
28 | INCLUDE 'para.com' |
---|
29 | INCLUDE 'const.com' |
---|
30 | INCLUDE 'ice.com' |
---|
31 | INCLUDE 'thermo.com' |
---|
32 | INCLUDE 'bio.com' |
---|
33 | |
---|
34 | ! Energy conservation |
---|
35 | LOGICAL con_i |
---|
36 | |
---|
37 | zeps0 = 1.0e-16 |
---|
38 | zeps1 = 1.0e-20 |
---|
39 | zeps2 = 1.0e-04 |
---|
40 | |
---|
41 | con_i = .true. ! conservation check in the ice or not |
---|
42 | jl = 1 ! category number (temporary) |
---|
43 | ji = 1 ! ji index |
---|
44 | |
---|
45 | WRITE(numout,*) ' * ice_th : ' |
---|
46 | WRITE(numout,*) ' ~~~~~~~~~~ ' |
---|
47 | WRITE(numout,*) |
---|
48 | WRITE(numout,*) ' nlay_i : ', nlay_i |
---|
49 | WRITE(numout,*) ' nlay_s : ', nlay_s |
---|
50 | WRITE(numout,*) |
---|
51 | ! |
---|
52 | !------------------------------------------------------------------------------- |
---|
53 | ! 1) Initialize sea ice |
---|
54 | !------------------------------------------------------------------------------- |
---|
55 | ! |
---|
56 | |
---|
57 | IF ( numit .EQ. nstart ) THEN |
---|
58 | CALL ice_phy_ini( 1 , 1 , nlay_s, nlay_i) |
---|
59 | |
---|
60 | IF ( c_bio_model .EQ. 'KRILL' ) |
---|
61 | & CALL ice_bio_ini( 1 , 1 , nlay_i ) ! Bio initialization - KRILL |
---|
62 | |
---|
63 | ENDIF |
---|
64 | ! |
---|
65 | !------------------------------------------------------------------------------- |
---|
66 | ! 2) Consistency & Energetic checks |
---|
67 | !------------------------------------------------------------------------------- |
---|
68 | ! |
---|
69 | |
---|
70 | DO layer = 1, nlay_s |
---|
71 | t_s_b(ji,layer) = MIN( tpw , t_s_b(ji,layer) ) |
---|
72 | END DO |
---|
73 | |
---|
74 | DO layer = 1, nlay_i |
---|
75 | tmelts = - tmut*s_i_b(ji,layer) + tpw |
---|
76 | t_i_b(ji,layer) = MIN(tmelts,t_i_b(ji,layer)) |
---|
77 | END DO |
---|
78 | |
---|
79 | CALL ice_th_enmelt(1,1, nlay_s, nlay_i) ! ice enthalpy |
---|
80 | |
---|
81 | ! Initialize total heat content |
---|
82 | IF ( con_i ) CALL ice_th_glohec( qt_i_in , qt_s_in , |
---|
83 | & q_i_layer_in , 1 , 1 , jl, |
---|
84 | & nlay_s , nlay_i ) |
---|
85 | ! |
---|
86 | !------------------------------------------------------------------------------- |
---|
87 | ! 3) Model routines |
---|
88 | !------------------------------------------------------------------------------- |
---|
89 | ! |
---|
90 | CALL forcing ! Compute forcing |
---|
91 | |
---|
92 | CALL ice_rad( nlay_s , nlay_i , 1 , 1 ) ! Radiative transfer |
---|
93 | |
---|
94 | CALL ice_th_diff( nlay_s , nlay_i , 1 , 1 ) ! Heat diffusion |
---|
95 | |
---|
96 | IF ( con_i ) THEN ! Conservation test |
---|
97 | CALL ice_th_glohec( qt_i_fin , qt_s_fin , q_i_layer_fin , |
---|
98 | & 1 , 1 , jl , nlay_s , nlay_i ) |
---|
99 | CALL ice_th_con_dif( 1 , 1 , nlay_s , nlay_i , jl ) |
---|
100 | ENDIF |
---|
101 | |
---|
102 | IF ( gravdr .EQ. 'CW' ) |
---|
103 | & CALL ice_sal_diff_CW(nlay_i,1,1) ! Salt transport (Cox and Weeks) |
---|
104 | |
---|
105 | IF ( gravdr .EQ. 'RA' ) |
---|
106 | & CALL ice_sal_diff(nlay_i,1,1) ! Salt transport (Rayleigh-number based) |
---|
107 | |
---|
108 | IF ( ( c_bio_model .EQ. 'KRILL' ) .AND. ln_trdiff ) |
---|
109 | & CALL ice_bio_diff( 1 , 1 , nlay_i ) ! Bio transport |
---|
110 | |
---|
111 | IF ( c_bio_model .EQ. 'KRILL' ) |
---|
112 | & CALL ice_bio_sms(nlay_i,1,1) ! KRILL source minus sinks |
---|
113 | |
---|
114 | IF ( ln_ikaite ) |
---|
115 | & CALL ice_ikaite(nlay_i) ! Ikaite precipitation and dissolution |
---|
116 | |
---|
117 | CALL ice_gas(nlay_i,1,1) ! Gases |
---|
118 | |
---|
119 | CALL ice_th_dh(nlay_s,nlay_i,1,1) ! Growth and melt |
---|
120 | |
---|
121 | CALL ice_phy_remap(nlay_s,nlay_i,1,1) ! Remap heat and salt |
---|
122 | |
---|
123 | IF ( con_i ) THEN ! Heat and salt conservation test |
---|
124 | CALL ice_th_glohec( qt_i_fin , qt_s_fin , q_i_layer_fin , |
---|
125 | & 1 , 1 , jl, nlay_s, nlay_i ) |
---|
126 | CALL ice_th_con_dh(1,1,nlay_s,nlay_i,jl) |
---|
127 | ENDIF |
---|
128 | |
---|
129 | IF ( ln_trremp ) |
---|
130 | & CALL ice_bio_remap(nlay_s, nlay_i, 1, 1) ! Remap tracers |
---|
131 | |
---|
132 | CALL ice_bio_column(kideb,kiut,ntra_bio,ct_i_bio,cbu_i_bio, |
---|
133 | & deltaz_i_bio, .FALSE.) |
---|
134 | |
---|
135 | !--------------- |
---|
136 | ! Chlorophyll a |
---|
137 | !--------------- |
---|
138 | IF ( c_bio_model .EQ. 'KRILL' ) THEN |
---|
139 | DO layer = 1, nlay_bio |
---|
140 | chla_i_bio(layer) = cbu_i_bio(4,layer) * chlC_bio(layer) * |
---|
141 | & c_molar |
---|
142 | END DO |
---|
143 | ENDIF ! c_bio_model |
---|
144 | |
---|
145 | IF ( c_bio_model .NE. 'NOBIO' ) |
---|
146 | & WRITE(numout,*) ' chla_i_bio : ', ( chla_i_bio(layer), |
---|
147 | & layer = 1, nlay_bio ) |
---|
148 | |
---|
149 | !------------------------------------------------------------------------------- |
---|
150 | ! 4) Outputs |
---|
151 | !------------------------------------------------------------------------------- |
---|
152 | ! |
---|
153 | !--------------- |
---|
154 | ! Netcdf Output |
---|
155 | !--------------- |
---|
156 | CALL ice_output(nlay_i,nlay_s) |
---|
157 | |
---|
158 | RETURN |
---|
159 | ! |
---|
160 | !------------------------------------------------------------------------------ |
---|
161 | !- end of ice_th |
---|
162 | END |
---|