36 mean_accum, mean_accum_inv, &
37 dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, &
38 time, time_init, time_end, time_output, &
39 dxi, deta, dzeta_c, dzeta_t, dzeta_r, &
40 z_sl, dzsl_dtau, z_mar, &
42 ndat2d, ndat3d, n_output, &
50 integer(i4b),
intent(in) :: ii((imax+1)*(jmax+1)), &
51 jj((imax+1)*(jmax+1)), &
53 integer(i4b),
intent(in) :: n_output
54 real(dp),
intent(in) :: mean_accum, mean_accum_inv
55 real(dp),
intent(in) :: dtime, dtime_temp, dtime_wss, &
57 real(dp),
intent(in) :: time_init, time_end, time_output(100)
58 real(dp),
intent(in) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
59 character(len=100),
intent(in) :: runname
61 integer(i4b),
intent(inout) :: ndat2d, ndat3d
62 real(dp),
intent(inout) :: delta_ts, glac_index
63 real(dp),
intent(inout) :: time
64 real(dp),
intent(inout) :: z_sl, dzsl_dtau, z_mar
66 integer(i4b) :: i, j, kc, kt, kr, n
67 integer(i4b) :: itercount, itercount_max
68 integer(i4b) :: iter_temp, iter_wss, iter_ser, iter_out, iter_output(100)
69 real(dp) :: dtime_temp_inv
70 logical :: flag_3d_output
74 write(unit=6, fmt=
'(a)')
' '
76 itercount_max = nint((time_end-time_init)/dtime)
78 iter_temp = nint(dtime_temp/dtime)
80 iter_wss = nint(dtime_wss/dtime)
82 iter_ser = nint(dtime_ser/dtime)
83 #if ( OUTPUT==1 || OUTPUT==3 )
84 iter_out = nint(dtime_out/dtime)
86 #if ( OUTPUT==2 || OUTPUT==3 )
88 iter_output(n) = nint((time_output(n)-time_init)/dtime)
92 main_loop :
do itercount=1, itercount_max
94 write(unit=6, fmt=
'(i7)') itercount
98 time = time_init +
real(itercount,dp)*dtime
106 call
boundary(time, dtime, dxi, deta, delta_ts, glac_index, &
107 z_sl, dzsl_dtau, z_mar)
111 if ( mod(itercount, iter_temp) == 0 )
then
113 write(unit=6, fmt=
'(a)')
' -------- Computation of T'
119 dtime_temp, mean_accum_inv)
123 dtime_temp, mean_accum_inv)
129 dtime_temp_inv = 1.0_dp/dtime_temp
131 dh_t_dtau = (h_t_neu - h_t)*dtime_temp_inv
171 z_sl, dzsl_dtau, z_mar, &
172 dtime, dxi, deta, dzeta_t, &
174 ii, jj, nn, itercount, iter_wss)
195 call
calc_qbm(time, z_sl, dzeta_c, dzeta_r)
205 if ( mod(itercount, iter_out) == 0 )
then
208 flag_3d_output = .false.
210 flag_3d_output = .true.
214 call
output1(runname, time, delta_ts, glac_index, z_sl, &
215 flag_3d_output, ndat2d, ndat3d)
217 call
output_nc(runname, time, delta_ts, glac_index, z_sl, &
218 flag_3d_output, ndat2d, ndat3d)
227 if (itercount == iter_output(n))
then
230 flag_3d_output = .false.
232 flag_3d_output = .true.
236 call
output1(runname, time, delta_ts, glac_index, z_sl, &
237 flag_3d_output, ndat2d, ndat3d)
239 call
output_nc(runname, time, delta_ts, glac_index, z_sl, &
240 flag_3d_output, ndat2d, ndat3d)
249 if ( mod(itercount, iter_out) == 0 )
then
251 flag_3d_output = .false.
254 call
output1(runname, time, delta_ts, glac_index, z_sl, &
255 flag_3d_output, ndat2d, ndat3d)
257 call
output_nc(runname, time, delta_ts, glac_index, z_sl, &
258 flag_3d_output, ndat2d, ndat3d)
265 if (itercount == iter_output(n))
then
267 flag_3d_output = .true.
270 call
output1(runname, time, delta_ts, glac_index, z_sl, &
271 flag_3d_output, ndat2d, ndat3d)
273 call
output_nc(runname, time, delta_ts, glac_index, z_sl, &
274 flag_3d_output, ndat2d, ndat3d)
283 if ( mod(itercount, iter_ser) == 0 )
then
284 call
output2(time, dxi, deta, delta_ts, glac_index, z_sl)
286 call
output3(time, delta_ts, glac_index, z_sl)
289 call
output4(time, dxi, deta, delta_ts, glac_index, z_sl)
291 #if ( defined(ASF) && OUTSER==4 )
292 call
output5(time, dxi, deta, delta_ts, glac_index, z_sl)