Line data Source code
1 : !=======================================================================
2 : !
3 : ! This module contains the Icepack initialization routine that sets model
4 : ! parameters and initializes the grid and state variables.
5 : !
6 : ! authors Elizabeth C. Hunke, LANL
7 :
8 : module icedrv_InitMod
9 :
10 : use icedrv_kinds
11 : use icedrv_constants, only: nu_diag
12 : use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
13 : use icepack_intfc, only: icepack_query_parameters, icepack_query_tracer_flags
14 : use icepack_intfc, only: icepack_query_tracer_sizes
15 : use icepack_intfc, only: icepack_write_tracer_flags, icepack_write_tracer_indices
16 : use icepack_intfc, only: icepack_write_tracer_sizes, icepack_write_parameters
17 : use icedrv_system, only: icedrv_system_abort, icedrv_system_flush
18 :
19 : implicit none
20 : private
21 : public :: icedrv_initialize
22 :
23 : !=======================================================================
24 :
25 : contains
26 :
27 : !=======================================================================
28 :
29 :
30 : ! Initialize Icepack
31 :
32 747 : subroutine icedrv_initialize
33 :
34 : use icedrv_arrays_column, only: hin_max, c_hi_range, floe_rad_c
35 : use icedrv_calendar, only: dt, time, istep, istep1, &
36 : init_calendar, calendar
37 : use icepack_intfc, only: icepack_init_itd, icepack_init_itd_hist
38 : use icepack_intfc, only: icepack_init_fsd_bounds
39 : use icepack_intfc, only: icepack_init_snow
40 : use icepack_intfc, only: icepack_warnings_flush
41 : use icedrv_domain_size, only: ncat
42 : ! use icedrv_diagnostics, only: icedrv_diagnostics_debug
43 : use icedrv_flux, only: init_coupler_flux, init_history_therm, &
44 : init_flux_atm_ocn
45 : use icedrv_forcing, only: init_forcing, get_forcing, get_wave_spec
46 : use icedrv_forcing_bgc, only: get_forcing_bgc, faero_default, fiso_default, init_forcing_bgc
47 : use icedrv_restart_shared, only: restart
48 : use icedrv_init, only: input_data, init_state, init_grid2, init_fsd
49 : use icedrv_init_column, only: init_thermo_vertical, init_shortwave, init_zbgc
50 : use icepack_intfc, only: icepack_configure
51 :
52 : logical (kind=log_kind) :: &
53 : skl_bgc, & ! from icepack
54 : z_tracers, & ! from icepack
55 : tr_snow, & ! from icepack
56 : tr_aero, & ! from icepack
57 : tr_iso, & ! from icepack
58 : tr_zaero, & ! from icepack
59 : tr_fsd, wave_spec
60 :
61 : character(len=*), parameter :: subname='(icedrv_initialize)'
62 :
63 83 : call icepack_configure() ! initialize icepack
64 83 : call icepack_warnings_flush(nu_diag)
65 83 : if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
66 0 : file=__FILE__,line= __LINE__)
67 :
68 83 : call input_data ! namelist variables
69 83 : call init_zbgc ! vertical biogeochemistry namelist
70 :
71 : ! generate some output
72 83 : call icepack_write_tracer_flags(nu_diag)
73 83 : call icepack_write_tracer_sizes(nu_diag)
74 83 : call icepack_write_tracer_indices(nu_diag)
75 83 : call icepack_warnings_flush(nu_diag)
76 83 : if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
77 0 : file=__FILE__,line= __LINE__)
78 :
79 83 : call init_grid2 ! grid variables
80 83 : call init_calendar ! initialize some calendar stuff
81 83 : call init_coupler_flux ! initialize fluxes exchanged with coupler
82 83 : call init_thermo_vertical ! initialize vertical thermodynamics
83 83 : call icepack_init_itd(hin_max=hin_max)
84 :
85 83 : call icepack_warnings_flush(nu_diag)
86 83 : if (icepack_warnings_aborted(subname)) then
87 0 : call icedrv_system_abort(file=__FILE__,line=__LINE__)
88 : endif
89 :
90 83 : call icepack_init_itd_hist(c_hi_range=c_hi_range, hin_max=hin_max) ! output
91 :
92 83 : call icepack_query_tracer_flags(tr_fsd_out=tr_fsd)
93 83 : call icepack_warnings_flush(nu_diag)
94 83 : if (icepack_warnings_aborted(subname)) then
95 0 : call icedrv_system_abort(file=__FILE__,line=__LINE__)
96 : endif
97 :
98 83 : if (tr_fsd) then
99 4 : call icepack_init_fsd_bounds(floe_rad_c_out=floe_rad_c, write_diags=.true. )
100 4 : call icepack_warnings_flush(nu_diag)
101 4 : if (icepack_warnings_aborted(subname)) then
102 0 : call icedrv_system_abort(file=__FILE__,line=__LINE__)
103 : endif
104 : endif
105 83 : call init_fsd
106 :
107 83 : call calendar(time) ! determine the initial date
108 :
109 83 : call init_state ! initialize the ice state
110 83 : call init_restart ! initialize restart variables
111 83 : call init_history_therm ! initialize thermo history variables
112 :
113 83 : if (restart) &
114 27 : call init_shortwave ! initialize radiative transfer
115 :
116 83 : call icepack_write_parameters(nu_diag)
117 :
118 83 : istep = istep + 1 ! update time step counters
119 83 : istep1 = istep1 + 1
120 83 : time = time + dt ! determine the time and date
121 83 : call calendar(time) ! at the end of the first timestep
122 :
123 : !--------------------------------------------------------------------
124 : ! coupler communication or forcing data initialization
125 : !--------------------------------------------------------------------
126 83 : call icepack_query_parameters(skl_bgc_out=skl_bgc)
127 83 : call icepack_query_parameters(z_tracers_out=z_tracers)
128 83 : call icepack_query_parameters(wave_spec_out=wave_spec)
129 83 : call icepack_query_tracer_flags(tr_snow_out=tr_snow)
130 83 : call icepack_query_tracer_flags(tr_aero_out=tr_aero)
131 83 : call icepack_query_tracer_flags(tr_iso_out=tr_iso)
132 83 : call icepack_query_tracer_flags(tr_zaero_out=tr_zaero)
133 83 : call icepack_warnings_flush(nu_diag)
134 83 : if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
135 0 : file=__FILE__,line= __LINE__)
136 :
137 83 : call init_forcing ! initialize forcing (standalone)
138 83 : if (skl_bgc .or. z_tracers) call init_forcing_bgc !cn
139 83 : if (tr_fsd .and. wave_spec) call get_wave_spec ! wave spectrum in ice
140 83 : call get_forcing(istep1) ! get forcing from data arrays
141 :
142 83 : if (tr_snow) then
143 12 : call icepack_init_snow ! snow aging table
144 12 : call icepack_warnings_flush(nu_diag)
145 12 : if (icepack_warnings_aborted(subname)) then
146 0 : call icedrv_system_abort(file=__FILE__,line=__LINE__)
147 : endif
148 : endif
149 :
150 83 : if (tr_iso) call fiso_default ! default values
151 : ! aerosols
152 : ! if (tr_aero) call faero_data ! data file
153 : ! if (tr_zaero) call fzaero_data ! data file (gx1)
154 83 : if (tr_aero .or. tr_zaero) call faero_default ! default values
155 83 : if (skl_bgc .or. z_tracers) call get_forcing_bgc ! biogeochemistry
156 :
157 83 : if (.not. restart) &
158 56 : call init_shortwave ! initialize radiative transfer using current swdn
159 :
160 83 : call init_flux_atm_ocn ! initialize atmosphere, ocean fluxes
161 :
162 83 : call icedrv_system_flush(nu_diag)
163 :
164 83 : end subroutine icedrv_initialize
165 :
166 : !=======================================================================
167 :
168 332 : subroutine init_restart
169 :
170 : use icedrv_calendar, only: time, calendar
171 : use icedrv_constants, only: nu_restart
172 : use icepack_intfc, only: icepack_aggregate
173 : use icedrv_domain_size, only: ncat, max_ntrcr, nx
174 : use icedrv_init, only: ice_ic
175 : use icedrv_init, only: tmask
176 : use icedrv_init_column, only: init_hbrine, init_bgc
177 : use icedrv_flux, only: Tf
178 : use icedrv_restart, only: restartfile
179 : use icedrv_restart_shared, only: restart
180 : use icedrv_restart_bgc, only: read_restart_bgc
181 : use icedrv_state ! almost everything
182 :
183 : integer(kind=int_kind) :: &
184 : i, & ! horizontal indices
185 : ntrcr ! tracer count
186 :
187 : logical (kind=log_kind) :: &
188 : skl_bgc, & ! from icepack
189 : z_tracers, & ! from icepack
190 : tr_brine, & ! from icepack
191 : tr_fsd ! from icepack
192 :
193 : character(len=*), parameter :: subname='(init_restart)'
194 :
195 : !-----------------------------------------------------------------
196 : ! query Icepack values
197 : !-----------------------------------------------------------------
198 :
199 83 : call icepack_query_parameters(skl_bgc_out=skl_bgc)
200 83 : call icepack_query_parameters(z_tracers_out=z_tracers)
201 83 : call icepack_query_tracer_flags(tr_brine_out=tr_brine, tr_fsd_out=tr_fsd)
202 83 : call icepack_query_tracer_sizes(ntrcr_out=ntrcr)
203 83 : call icepack_warnings_flush(nu_diag)
204 83 : if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
205 0 : file=__FILE__,line= __LINE__)
206 :
207 : !-----------------------------------------------------------------
208 :
209 83 : if (tr_brine .or. skl_bgc) then ! brine height tracer
210 9 : call init_hbrine
211 : endif
212 :
213 83 : if (restart) then
214 27 : call restartfile (ice_ic)
215 27 : call calendar (time)
216 : endif
217 :
218 83 : if (skl_bgc .or. z_tracers) then
219 9 : if (tr_fsd) then
220 0 : write (nu_diag,*) 'FSD implementation incomplete for use with BGC'
221 0 : call icedrv_system_abort(string=subname,file=__FILE__,line=__LINE__)
222 : endif
223 9 : call init_bgc
224 9 : if (restart) call read_restart_bgc ! complete BGC initialization
225 : endif
226 :
227 83 : close (nu_restart)
228 :
229 : !-----------------------------------------------------------------
230 : ! aggregate tracers
231 : !-----------------------------------------------------------------
232 415 : do i = 1, nx
233 332 : if (tmask(i)) &
234 : call icepack_aggregate(trcrn=trcrn(i,1:ntrcr,:), &
235 : aicen=aicen(i,:), &
236 : vicen=vicen(i,:), &
237 : vsnon=vsnon(i,:), &
238 : trcr=trcr (i,1:ntrcr), &
239 : aice=aice (i), &
240 : vice=vice (i), &
241 : vsno=vsno (i), &
242 : aice0=aice0(i), &
243 : trcr_depend=trcr_depend(1:ntrcr), &
244 : trcr_base=trcr_base (1:ntrcr,:), &
245 : n_trcr_strata=n_trcr_strata(1:ntrcr), &
246 : nt_strata=nt_strata (1:ntrcr,:), &
247 332 : Tf = Tf(i))
248 : enddo
249 83 : call icepack_warnings_flush(nu_diag)
250 83 : if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
251 0 : file=__FILE__, line=__LINE__)
252 :
253 83 : end subroutine init_restart
254 :
255 : !=======================================================================
256 :
257 : end module icedrv_InitMod
258 :
259 : !=======================================================================
|