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, &
54 integer(i4b),
intent(out) :: ii((imax+1)*(jmax+1)), &
55 jj((imax+1)*(jmax+1)), &
57 integer(i4b),
intent(out) :: ndat2d, ndat3d
58 integer(i4b),
intent(out) :: n_output
59 real(dp),
intent(out) :: delta_ts, glac_index
60 real(dp),
intent(out) :: mean_accum, mean_accum_inv
61 real(dp),
intent(out) :: dtime, dtime_temp, dtime_wss, &
63 real(dp),
intent(out) :: time, time_init, time_end, time_output(100)
64 real(dp),
intent(out) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
65 real(dp),
intent(out) :: z_sl, dzsl_dtau, z_mar
66 character(len=100),
intent(out) :: runname
68 integer(i4b) :: i, j, kc, kt, kr, m, n, ir, jr
69 integer(i4b) :: ios, ios1, ios2, ios3, ios4
71 real(dp) :: dtime0, dtime_temp0, dtime_wss0, dtime_out0, dtime_ser0
72 real(dp) :: time_init0, time_end0, time_output0(100)
74 character(len=100) :: anfdatname, target_topo_dat_name
75 character(len=256) :: shell_command
77 logical :: flag_3d_output
86 character(len=64),
parameter :: thisroutine =
'sico_init'
88 character(len=64),
parameter :: fmt1 =
'(a)', &
92 character(len= 8) :: ch_imax
93 character(len=128) :: fmt4
95 write(ch_imax, fmt=
'(i8)') imax
96 write(fmt4, fmt=
'(a)')
'('//trim(adjustl(ch_imax))//
'(i1),i1)'
116 #if (CALCZS==4 || MARGIN==3)
119 call lis_initialize(ierr)
129 if ( trim(version) /= trim(sico_version) ) &
130 stop
' sico_init: SICOPOLIS version not compatible with header file!'
135 #if (GRID==0 || GRID==1)
137 if (abs(dx-40.0_dp) < eps)
then
139 if ( (imax /= 150).or.(jmax /= 150) )
then
140 stop
' sico_init: IMAX and/or JMAX wrong!'
143 else if (abs(dx-20.0_dp) < eps)
then
145 if ( (imax /= 300).or.(jmax /= 300) )
then
146 stop
' sico_init: IMAX and/or JMAX wrong!'
149 else if (abs(dx-10.0_dp) < eps)
then
151 if ( (imax /= 600).or.(jmax /= 600) )
then
152 stop
' sico_init: IMAX and/or JMAX wrong!'
156 stop
' sico_init: DX wrong!'
161 stop
' sico_init: GRID==2 not allowed for this application!'
168 #if ((TSURFACE == 5) && (ACCSURFACE != 5))
169 stop
' sico_init: Options TSURFACE==5 and ACCSURFACE==5 must be used together!'
172 #if ((TSURFACE != 5) && (ACCSURFACE == 5))
173 stop
' sico_init: Options TSURFACE==5 and ACCSURFACE==5 must be used together!'
177 #if (ACCSURFACE != 6)
178 write(6, fmt=
'(a)')
' sico_init: Options TSURFACE==6, ACCSURFACE==6'
179 write(6, fmt=
'(a)')
' and NETCDF==2 must be used together!'
182 write(6, fmt=
'(a)')
' sico_init: Options TSURFACE==6, ACCSURFACE==6'
183 write(6, fmt=
'(a)')
' and NETCDF==2 must be used together!'
188 #if (ACCSURFACE == 6)
190 write(6, fmt=
'(a)')
' sico_init: Options TSURFACE==6, ACCSURFACE==6'
191 write(6, fmt=
'(a)')
' and NETCDF==2 must be used together!'
194 write(6, fmt=
'(a)')
' sico_init: Options TSURFACE==6, ACCSURFACE==6'
195 write(6, fmt=
'(a)')
' and NETCDF==2 must be used together!'
204 stop
' sico_init: Option ADV_HOR==1 (central differences) not defined!'
211 #if ( MARGIN == 3 && GRID != 0 )
212 write(6, fmt=
'(a)')
' sico_init: Option MARGIN==3 requires GRID==0'
213 write(6, fmt=
'(a)')
' because distortion correction is not'
214 write(6, fmt=
'(a)')
' implemented for the shallow shelf approximation!'
224 #elif (TSURFACE == 5)
228 #elif (TSURFACE == 6)
238 dtime_temp0 = dtime_temp0
240 dtime_wss0 = dtime_wss0
245 dzeta_c = 1.0_dp/
real(kcmax,dp)
246 dzeta_t = 1.0_dp/
real(ktmax,dp)
247 dzeta_r = 1.0_dp/
real(krmax,dp)
260 if ((i <= imax).and.(j <= jmax))
then
272 anfdatname = anfdatname
274 #if defined(YEAR_ZERO)
275 year_zero = year_zero
277 year_zero = 2000.0_dp
280 time_init0 = time_init0
281 time_end0 = time_end0
282 dtime_ser0 = dtime_ser0
284 #if ( OUTPUT==1 || OUTPUT==3 )
285 dtime_out0 = dtime_out0
288 #if ( OUTPUT==2 || OUTPUT==3 )
290 time_output0( 1) = time_out0_01
291 time_output0( 2) = time_out0_02
292 time_output0( 3) = time_out0_03
293 time_output0( 4) = time_out0_04
294 time_output0( 5) = time_out0_05
295 time_output0( 6) = time_out0_06
296 time_output0( 7) = time_out0_07
297 time_output0( 8) = time_out0_08
298 time_output0( 9) = time_out0_09
299 time_output0(10) = time_out0_10
300 time_output0(11) = time_out0_11
301 time_output0(12) = time_out0_12
302 time_output0(13) = time_out0_13
303 time_output0(14) = time_out0_14
304 time_output0(15) = time_out0_15
305 time_output0(16) = time_out0_16
306 time_output0(17) = time_out0_17
307 time_output0(18) = time_out0_18
308 time_output0(19) = time_out0_19
309 time_output0(20) = time_out0_20
314 shell_command =
'if [ ! -d'
315 shell_command = trim(shell_command)//
' '//outpath
316 shell_command = trim(shell_command)//
' '//
'] ; then mkdir'
317 shell_command = trim(shell_command)//
' '//outpath
318 shell_command = trim(shell_command)//
' '//
'; fi'
319 call system(trim(shell_command))
322 open(10, iostat=ios, &
323 file=outpath//
'/'//trim(runname)//
'.log', &
326 stop
' sico_init: Error when opening the log file!'
328 write(10, fmt=trim(fmt1))
'Computational domain:'
330 write(10, fmt=trim(fmt1))
'Antarctica'
332 write(10, fmt=trim(fmt1))
'Greenland'
334 write(10, fmt=trim(fmt1))
'Scandinavia and Eurasia'
336 write(10, fmt=trim(fmt1))
'Northern hemisphere'
337 #elif defined(EMTP2SGE)
338 write(10, fmt=trim(fmt1))
'EISMINT Phase 2 Simplified Geometry Experiment'
340 write(10, fmt=trim(fmt1))
'North polar cap of Mars'
342 write(10, fmt=trim(fmt1))
'South polar cap of Mars'
344 stop
' sico_init: No valid domain specified!'
346 write(10, fmt=trim(fmt1))
' '
348 write(10, fmt=trim(fmt2))
'imax =', imax
349 write(10, fmt=trim(fmt2))
'jmax =', jmax
350 write(10, fmt=trim(fmt2))
'kcmax =', kcmax
351 write(10, fmt=trim(fmt2))
'ktmax =', ktmax
352 write(10, fmt=trim(fmt2))
'krmax =', krmax
353 write(10, fmt=trim(fmt1))
' '
355 write(10, fmt=trim(fmt3))
'a =', deform
356 write(10, fmt=trim(fmt1))
' '
358 #if (GRID==0 || GRID==1)
359 write(10, fmt=trim(fmt3))
'x0 =', x0
360 write(10, fmt=trim(fmt3))
'y0 =', y0
361 write(10, fmt=trim(fmt3))
'dx =', dx
363 stop
' sico_init: GRID==2 not allowed for this application!'
365 write(10, fmt=trim(fmt1))
' '
367 write(10, fmt=trim(fmt3))
'year_zero =', year_zero
368 write(10, fmt=trim(fmt3))
'time_init =', time_init0
369 write(10, fmt=trim(fmt3))
'time_end =', time_end0
370 write(10, fmt=trim(fmt3))
'dtime =', dtime0
371 write(10, fmt=trim(fmt3))
'dtime_temp =', dtime_temp0
373 write(10, fmt=trim(fmt3))
'dtime_wss =', dtime_wss0
375 #if ( OUTPUT==1 || OUTPUT==3 )
376 write(10, fmt=trim(fmt3))
'dtime_out =', dtime_out0
378 write(10, fmt=trim(fmt3))
'dtime_ser =', dtime_ser0
379 write(10, fmt=trim(fmt1))
' '
381 write(10, fmt=trim(fmt1))
'zs_present file = '//zs_present_file
383 write(10, fmt=trim(fmt1))
'zl_present file = '//zl_present_file
385 write(10, fmt=trim(fmt1))
'zl0 file = '//zl0_file
386 write(10, fmt=trim(fmt1))
'mask_present file = '//mask_present_file
388 write(10, fmt=trim(fmt1))
'Initial-value file = '//anfdatname
389 write(10, fmt=trim(fmt1))
'Path to initial-value file = '//anfdatpath
391 write(10, fmt=trim(fmt1))
' '
394 write(10, fmt=trim(fmt3))
'time_target_topo_init =', time_target_topo_init0
395 write(10, fmt=trim(fmt3))
'time_target_topo_final =', time_target_topo_final0
396 write(10, fmt=trim(fmt1))
'Target-topography file = '//target_topo_dat_name
397 write(10, fmt=trim(fmt1))
'Path to target-topography file = '//target_topo_dat_path
398 write(10, fmt=trim(fmt1))
' '
402 write(10, fmt=trim(fmt1))
'Maximum ice extent mask file = '//mask_maxextent_file
403 write(10, fmt=trim(fmt1))
' '
406 write(10, fmt=trim(fmt1))
'Physical-parameter file = '//phys_para_file
407 write(10, fmt=trim(fmt1))
' '
409 #if (CALCZS==3 || CALCZS==4)
410 write(10, fmt=trim(fmt3))
'ovi_weight =', ovi_weight
412 write(10, fmt=trim(fmt3))
'omega_sor =', omega_sor
414 write(10, fmt=trim(fmt1))
' '
418 write(10, fmt=trim(fmt3))
'delta_ts0 =', delta_ts0
420 write(10, fmt=trim(fmt3))
'sine_amplit =', sine_amplit
421 write(10, fmt=trim(fmt3))
'sine_period =', sine_period
423 write(10, fmt=trim(fmt1))
'GRIP file = '//grip_temp_file
424 write(10, fmt=trim(fmt3))
'grip_temp_fact =', grip_temp_fact
426 write(10, fmt=trim(fmt1))
'Glacial-index file = '//glac_ind_file
427 write(10, fmt=trim(fmt1))
'temp_ma_anom file = '//temp_ma_anom_file
428 write(10, fmt=trim(fmt3))
'temp_ma_anom fact = ', temp_ma_anom_fact
429 write(10, fmt=trim(fmt1))
'temp_mj_anom file = '//temp_mj_anom_file
430 write(10, fmt=trim(fmt3))
'temp_mj_anom fact = ', temp_mj_anom_fact
432 write(10, fmt=trim(fmt1))
'temp_precip_anom file = '//temp_precip_anom_file
433 write(10, fmt=trim(fmt3))
'temp_ma_anom fact = ', temp_ma_anom_fact
434 write(10, fmt=trim(fmt3))
'temp_mj_anom fact = ', temp_mj_anom_fact
437 write(10, fmt=trim(fmt1))
'precip_present file = '//precip_present_file
439 write(10, fmt=trim(fmt3))
'accfact =', accfact
440 #elif ( ACCSURFACE==2 || ACCSURFACE==3 )
441 write(10, fmt=trim(fmt3))
'gamma_s =', gamma_s
442 #elif ( ACCSURFACE==5 )
443 write(10, fmt=trim(fmt1))
'precip_anom file = '//precip_anom_file
444 write(10, fmt=trim(fmt3))
'precip_anom fact = ', precip_anom_fact
445 #elif ( ACCSURFACE==6 )
446 write(10, fmt=trim(fmt1))
'temp_precip_anom file = '//temp_precip_anom_file
447 write(10, fmt=trim(fmt3))
'precip_anom fact = ', precip_anom_fact
449 #if (ACCSURFACE <= 3)
450 write(10, fmt=trim(fmt2))
'ELEV_DESERT =', elev_desert
451 #if (ELEV_DESERT == 1)
452 write(10, fmt=trim(fmt3))
'gamma_p =', gamma_p
453 write(10, fmt=trim(fmt3))
'zs_thresh =', zs_thresh
458 write(10, fmt=trim(fmt3))
'lambda_lti =', lambda_lti
459 write(10, fmt=trim(fmt3))
'temp_lti =', temp_lti
463 write(10, fmt=trim(fmt3))
'z_sl0 =', z_sl0
465 write(10, fmt=trim(fmt1))
'sea-level file = '//sea_level_file
467 write(10, fmt=trim(fmt1))
' '
470 #if ( MARINE_ICE_CALVING==2 || MARINE_ICE_CALVING==3 )
471 write(10, fmt=trim(fmt3))
'z_mar =', z_mar
472 write(10, fmt=trim(fmt1))
' '
473 #elif ( MARINE_ICE_CALVING==4 || MARINE_ICE_CALVING==5 \
474 || marine_ice_calving==6 || marine_ice_calving==7 )
475 write(10, fmt=trim(fmt3))
'fact_z_mar =', fact_z_mar
476 write(10, fmt=trim(fmt1))
' '
477 #elif ( ( MARINE_ICE_FORMATION==2 ) && ( MARINE_ICE_CALVING==9 ) )
478 write(10, fmt=trim(fmt3))
'calv_uw_coeff =', calv_uw_coeff
479 write(10, fmt=trim(fmt3))
'r1_calv_uw =', r1_calv_uw
480 write(10, fmt=trim(fmt3))
'r2_calv_uw =', r2_calv_uw
481 write(10, fmt=trim(fmt1))
' '
484 #if ICE_SHELF_CALVING==2
485 write(10, fmt=trim(fmt3))
'H_calv =', h_calv
486 write(10, fmt=trim(fmt1))
' '
490 write(10, fmt=trim(fmt3))
'c_slide =', c_slide
491 write(10, fmt=trim(fmt3))
'gamma_slide =', gamma_slide
492 write(10, fmt=trim(fmt2))
'p_weert =', p_weert
493 write(10, fmt=trim(fmt2))
'q_weert =', q_weert
495 write(10, fmt=trim(fmt3))
'red_pres_limit_fact =', red_pres_limit_fact
497 write(10, fmt=trim(fmt1))
' '
499 #if ( defined(SEDI_SLIDE) && SEDI_SLIDE==2 )
500 write(10, fmt=trim(fmt1))
'Sediment-mask file = '//mask_sedi_file
501 write(10, fmt=trim(fmt1))
' '
503 write(10, fmt=trim(fmt3))
'c_slide_sedi =', c_slide_sedi
504 write(10, fmt=trim(fmt3))
'gamma_slide_sedi =', gamma_slide_sedi
505 write(10, fmt=trim(fmt2))
'p_weert_sedi =', p_weert_sedi
506 write(10, fmt=trim(fmt2))
'q_weert_sedi =', q_weert_sedi
507 write(10, fmt=trim(fmt1))
' '
511 write(10, fmt=trim(fmt3))
'q_geo =', q_geo
513 write(10, fmt=trim(fmt1))
'q_geo file = '//q_geo_file
515 write(10, fmt=trim(fmt1))
' '
517 #if defined(MARINE_ICE_BASAL_MELTING)
518 write(10, fmt=trim(fmt2))
'MARINE_ICE_BASAL_MELTING =', marine_ice_basal_melting
519 #if ( MARINE_ICE_BASAL_MELTING==2 || MARINE_ICE_BASAL_MELTING==3 )
520 write(10, fmt=trim(fmt3))
'qbm_marine =', qbm_marine
522 write(10, fmt=trim(fmt1))
' '
526 write(10, fmt=trim(fmt2))
'FLOATING_ICE_BASAL_MELTING =', floating_ice_basal_melting
527 #if FLOATING_ICE_BASAL_MELTING<=3
528 write(10, fmt=trim(fmt3))
'qbm_float_1 =', qbm_float_1
529 write(10, fmt=trim(fmt3))
'qbm_float_2 =', qbm_float_2
530 write(10, fmt=trim(fmt3))
'qbm_float_3 =', qbm_float_3
531 write(10, fmt=trim(fmt3))
'z_abyss =', z_abyss
533 write(10, fmt=trim(fmt1))
' '
537 write(10, fmt=trim(fmt3))
'frac_llra =', frac_llra
538 write(10, fmt=trim(fmt1))
' '
542 write(10, fmt=trim(fmt3))
'gr_size =', gr_size
543 write(10, fmt=trim(fmt1))
' '
546 write(10, fmt=trim(fmt3))
'sigma_res =', sigma_res
547 write(10, fmt=trim(fmt1))
' '
550 write(10, fmt=trim(fmt2))
'ENHMOD =', enhmod
551 write(10, fmt=trim(fmt3))
'enh_fact =', enh_fact
552 #if ( ENHMOD==2 || ENHMOD==3 )
553 write(10, fmt=trim(fmt3))
'enh_intg =', enh_intg
556 write(10, fmt=trim(fmt3))
'age_trans =', age_trans_0
559 write(10, fmt=trim(fmt3))
'date_trans1 =', date_trans1_0
560 write(10, fmt=trim(fmt3))
'date_trans2 =', date_trans2_0
561 write(10, fmt=trim(fmt3))
'date_trans3 =', date_trans3_0
564 write(10, fmt=trim(fmt3))
'enh_shelf =', enh_shelf
566 write(10, fmt=trim(fmt1))
' '
568 write(10, fmt=trim(fmt3))
'numdiff_H_t =', numdiff_h_t
569 write(10, fmt=trim(fmt3))
'tau_cts =', tau_cts
570 write(10, fmt=trim(fmt3))
'H_min =', h_min
571 write(10, fmt=trim(fmt3))
'vh_max =', vh_max
572 write(10, fmt=trim(fmt3))
'hd_min =', hd_min
573 write(10, fmt=trim(fmt3))
'hd_max =', hd_max
575 write(10, fmt=trim(fmt3))
'qbm_min =', qbm_min
576 #elif defined(QB_MIN) /* obsolete */
577 write(10, fmt=trim(fmt3))
'qb_min =', qb_min
580 write(10, fmt=trim(fmt3))
'qbm_max =', qbm_max
581 #elif defined(QB_MAX) /* obsolete */
582 write(10, fmt=trim(fmt3))
'qb_max =', qb_max
584 write(10, fmt=trim(fmt3))
'age_min =', age_min
585 write(10, fmt=trim(fmt3))
'age_max =', age_max
586 write(10, fmt=trim(fmt3))
'mean_accum =', mean_accum
588 write(10, fmt=trim(fmt3))
'age_diff =', agediff
590 write(10, fmt=trim(fmt1))
' '
592 write(10, fmt=trim(fmt2))
'GRID =', grid
593 write(10, fmt=trim(fmt2))
'CALCMOD =', calcmod
594 write(10, fmt=trim(fmt2))
'FLOW_LAW =', flow_law
595 write(10, fmt=trim(fmt2))
'FIN_VISC =', fin_visc
596 write(10, fmt=trim(fmt2))
'MARGIN =', margin
598 write(10, fmt=trim(fmt2))
'MARINE_ICE_FORMATION =', marine_ice_formation
599 write(10, fmt=trim(fmt2))
'MARINE_ICE_CALVING =', marine_ice_calving
601 write(10, fmt=trim(fmt2))
'ICE_SHELF_CALVING =', ice_shelf_calving
603 write(10, fmt=trim(fmt2))
'ANF_DAT =', anf_dat
604 write(10, fmt=trim(fmt2))
'REBOUND =', rebound
605 write(10, fmt=trim(fmt2))
'Q_LITHO =', q_litho
606 write(10, fmt=trim(fmt2))
'ZS_EVOL =', zs_evol
607 write(10, fmt=trim(fmt2))
'CALCZS =', calczs
608 write(10, fmt=trim(fmt2))
'ADV_HOR =', adv_hor
609 write(10, fmt=trim(fmt2))
'ADV_VERT =', adv_vert
610 write(10, fmt=trim(fmt2))
'TOPOGRAD =', topograd
611 write(10, fmt=trim(fmt2))
'TEMP_PRESENT_PARA =', temp_present_para
612 write(10, fmt=trim(fmt2))
'TSURFACE =', tsurface
613 write(10, fmt=trim(fmt2))
'ACCSURFACE =', accsurface
615 write(10, fmt=trim(fmt2))
'PRECIP_ANOM_INTERPOL =', precip_anom_interpol
617 write(10, fmt=trim(fmt2))
'SOLID_PRECIP =', solid_precip
618 write(10, fmt=trim(fmt2))
'ABLSURFACE =', ablsurface
619 write(10, fmt=trim(fmt2))
'SEA_LEVEL =', sea_level
620 write(10, fmt=trim(fmt2))
'SLIDE_LAW =', slide_law
621 #if defined(SEDI_SLIDE)
622 write(10, fmt=trim(fmt2))
'SEDI_SLIDE =', sedi_slide
624 write(10, fmt=trim(fmt2))
'Q_GEO_MOD =', q_geo_mod
625 write(10, fmt=trim(fmt1))
' '
627 #if defined(OUT_TIMES)
628 write(10, fmt=trim(fmt2))
'OUT_TIMES =', out_times
630 write(10, fmt=trim(fmt2))
'OUTPUT =', output
631 write(10, fmt=trim(fmt2))
'OUTSER =', outser
632 #if defined(OUTSER_V_A)
633 write(10, fmt=trim(fmt2))
'OUTSER_V_A =', outser_v_a
635 #if ( OUTPUT==1 || OUTPUT==2 )
636 write(10, fmt=trim(fmt2))
'ERGDAT =', ergdat
638 write(10, fmt=trim(fmt2))
'NETCDF =', netcdf
639 write(10, fmt=trim(fmt1))
' '
640 #if ( OUTPUT==2 || OUTPUT==3 )
641 write(10, fmt=trim(fmt2))
'n_output =', n_output
643 write(10, fmt=trim(fmt3))
'time_output =', time_output0(n)
645 write(10, fmt=trim(fmt1))
' '
648 write(10, fmt=trim(fmt1))
'Program version and date: '//version//
' / '//date
650 close(10, status=
'keep')
654 year_zero = year_zero*year_sec
655 time_init = time_init0*year_sec
656 time_end = time_end0*year_sec
657 dtime = dtime0*year_sec
658 dtime_temp = dtime_temp0*year_sec
660 dtime_wss = dtime_wss0*year_sec
662 dtime_ser = dtime_ser0*year_sec
663 #if ( OUTPUT==1 || OUTPUT==3 )
664 dtime_out = dtime_out0*year_sec
666 #if ( OUTPUT==2 || OUTPUT==3 )
668 time_output(n) = time_output0(n)*year_sec
672 if (abs(dtime_temp/dtime-nint(dtime_temp/dtime)) > eps) &
673 stop
' sico_init: dtime_temp must be a multiple of dtime!'
676 if (abs(dtime_wss/dtime-nint(dtime_wss/dtime)) > eps) &
677 stop
' sico_init: dtime_wss must be a multiple of dtime!'
681 time_target_topo_init = time_target_topo_init0 *year_sec
682 time_target_topo_final = time_target_topo_final0*year_sec
689 #if (GRID==0 || GRID==1)
691 open(21, iostat=ios, &
692 file=inpath//
'/ant/'//precip_present_file, &
693 recl=8192, status=
'old')
697 stop
' sico_init: GRID==2 not allowed for this application!'
701 if (ios /= 0) stop
' sico_init: Error when opening the precip file!'
703 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do
706 read(21, fmt=*) (precip_ma_present(j,i), i=0,imax)
709 close(21, status=
'keep')
711 precip_ma_present = precip_ma_present *(1.0e-03_dp/year_sec)*(rho_w/rho)
720 precip_present(j,i,n) = precip_ma_present(j,i)
729 #if (GRID==0 || GRID==1)
731 open(21, iostat=ios, &
732 file=inpath//
'/ant/'//precip_anom_file, &
733 recl=8192, status=
'old')
737 if (ios /= 0) stop
' sico_init: Error when opening the precip anomaly file!'
739 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do
742 read(21, fmt=*) (precip_ma_lgm_anom(j,i), i=0,imax)
745 close(21, status=
'keep')
747 precip_ma_lgm_anom = precip_ma_lgm_anom * precip_anom_fact
756 precip_lgm_anom(j,i,n) = max(precip_ma_lgm_anom(j,i), eps)
759 #if (PRECIP_ANOM_INTERPOL==1)
760 gamma_precip_lgm_anom(j,i,n) = 0.0_dp
761 #elif (PRECIP_ANOM_INTERPOL==2)
762 gamma_precip_lgm_anom(j,i,n) = -log(precip_lgm_anom(j,i,n))
764 stop
' sico_init: Wrong value of switch PRECIP_ANOM_INTERPOL!'
775 mean_accum = mean_accum*(1.0e-03_dp/year_sec)*(rho_w/rho)
778 mean_accum_inv = 1.0_dp/mean_accum
782 #if (GRID==0 || GRID==1)
784 open(24, iostat=ios, &
785 file=inpath//
'/ant/'//mask_present_file, &
790 stop
' sico_init: GRID==2 not allowed for this application!'
794 if (ios /= 0) stop
' sico_init: Error when opening the mask file!'
796 do n=1, 6;
read(24, fmt=
'(a)') ch_dummy;
end do
799 read(24, fmt=trim(fmt4)) (maske_help(j,i), i=0,imax)
802 close(24, status=
'keep')
806 #if ( defined(SEDI_SLIDE) && SEDI_SLIDE==2 )
808 open(24, iostat=ios, &
809 file=inpath//
'/ant/'//mask_sedi_file, &
810 recl=8192, status=
'old')
812 if (ios /= 0) stop
' sico_init: Error when opening the rock/sediment mask file!'
814 do n=1, 6;
read(24, fmt=
'(a)') ch_dummy;
end do
817 read(24, fmt=trim(fmt4)) (maske_sedi(j,i), i=0,imax)
820 close(24, status=
'keep')
826 #if (GRID==0 || GRID==1)
828 open(21, iostat=ios, &
829 file=inpath//
'/ant/'//zs_present_file, &
830 recl=8192, status=
'old')
834 stop
' sico_init: GRID==2 not allowed for this application!'
838 if (ios /= 0) stop
' sico_init: Error when opening the zs file!'
840 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do
843 read(21, fmt=*) (zs_ref(j,i), i=0,imax)
846 close(21, status=
'keep')
853 if (maske_help(j,i) >= 2) zs_ref(j,i) = 0.0_dp
861 target_topo_dat_name = trim(target_topo_dat_name)
864 write(6, fmt=
'(a)')
' sico_init: Reading of target topography'
865 write(6, fmt=
'(a)')
' only implemented for NetCDF files (NETCDF==2)!'
870 stop
' sico_init: Parameter NETCDF must be either 1 or 2!'
879 #if (GRID==0 || GRID==1)
881 open(24, iostat=ios, &
882 file=inpath//
'/ant/'//mask_maxextent_file, &
883 recl=8192, status=
'old')
887 stop
' sico_init: GRID==2 not allowed for this application!'
892 stop
' sico_init: Error when opening the maximum ice extent mask file!'
894 do n=1, 6;
read(24, fmt=
'(a)') ch_dummy;
end do
897 read(24, fmt=trim(fmt4)) (maske_maxextent(j,i), i=0,imax)
900 close(24, status=
'keep')
909 #if (GRID==0 || GRID==1)
911 open(21, iostat=ios, &
912 file=inpath//
'/ant/'//temp_ma_anom_file, &
913 recl=8192, status=
'old')
917 if (ios /= 0) stop
' sico_init: Error when opening the temp_ma anomaly file!'
919 #if (GRID==0 || GRID==1)
921 open(22, iostat=ios, &
922 file=inpath//
'/ant/'//temp_mj_anom_file, &
923 recl=8192, status=
'old')
927 if (ios /= 0) stop
' sico_init: Error when opening the temp_mj anomaly file!'
929 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do
930 do n=1, 6;
read(22, fmt=
'(a)') ch_dummy;
end do
933 read(21, fmt=*) (temp_ma_lgm_anom(j,i), i=0,imax)
934 read(22, fmt=*) (temp_mj_lgm_anom(j,i), i=0,imax)
937 close(21, status=
'keep')
938 close(22, status=
'keep')
940 temp_ma_lgm_anom = temp_ma_lgm_anom * temp_ma_anom_fact
941 temp_mj_lgm_anom = temp_mj_lgm_anom * temp_mj_anom_fact
949 open(21, iostat=ios, &
950 file=inpath//
'/general/'//grip_temp_file, &
953 stop
' sico_init: Error when opening the data file for delta_ts!'
955 read(21, fmt=*) ch_dummy, grip_time_min, grip_time_stp, grip_time_max
957 if (ch_dummy /=
'#')
then
958 write(6, fmt=*)
' sico_init: grip_time_min, grip_time_stp, grip_time_max'
959 write(6, fmt=*)
' not defined in data file for delta_ts!'
963 ndata_grip = (grip_time_max-grip_time_min)/grip_time_stp
965 allocate(griptemp(0:ndata_grip))
968 read(21, fmt=*) d_dummy, griptemp(n)
971 close(21, status=
'keep')
979 open(21, iostat=ios, &
980 file=inpath//
'/general/'//glac_ind_file, status=
'old')
981 if (ios /= 0) stop
' sico_init: Error when opening the glacial-index file!'
983 read(21, fmt=*) ch_dummy, gi_time_min, gi_time_stp, gi_time_max
985 if (ch_dummy /=
'#')
then
986 write(6, fmt=*)
' sico_init: gi_time_min, gi_time_stp, gi_time_max'
987 write(6, fmt=*)
' not defined in glacial-index file!'
991 ndata_gi = (gi_time_max-gi_time_min)/gi_time_stp
993 allocate(glacial_index(0:ndata_gi))
996 read(21, fmt=*) d_dummy, glacial_index(n)
999 close(21, status=
'keep')
1006 #if ( (TSURFACE==6) && (ACCSURFACE==6) )
1008 call
check( nf90_open(inpath//
'/ant/'//temp_precip_anom_file, &
1009 nf90_nowrite, ncid_temp_precip), thisroutine )
1011 call
check( nf90_inquire(ncid_temp_precip, unlimiteddimid = dimid), &
1014 call
check( nf90_inquire_dimension(ncid_temp_precip, dimid, &
1015 len = ndata_temp_precip), thisroutine )
1017 ndata_temp_precip = ndata_temp_precip-1
1019 allocate(temp_precip_time(0:ndata_temp_precip))
1021 call
check( nf90_inq_varid(ncid_temp_precip,
'time', ncv), thisroutine )
1022 call
check( nf90_get_var(ncid_temp_precip, ncv, temp_precip_time), thisroutine )
1025 temp_precip_time_min = temp_precip_time(0)
1026 temp_precip_time_stp = temp_precip_time(1)-temp_precip_time(0)
1028 temp_precip_time_max = temp_precip_time(ndata_temp_precip)
1036 open(21, iostat=ios, &
1037 file=inpath//
'/general/'//sea_level_file, &
1040 stop
' sico_init: Error when opening the data file for z_sl!'
1042 read(21, fmt=*) ch_dummy, specmap_time_min, specmap_time_stp, specmap_time_max
1044 if (ch_dummy /=
'#')
then
1045 write(6, fmt=*)
' sico_init: specmap_time_min, specmap_time_stp, specmap_time_max'
1046 write(6, fmt=*)
' not defined in data file for z_sl!'
1050 ndata_specmap = (specmap_time_max-specmap_time_min)/specmap_time_stp
1052 allocate(specmap_zsl(0:ndata_specmap))
1054 do n=0, ndata_specmap
1055 read(21, fmt=*) d_dummy, specmap_zsl(n)
1058 close(21, status=
'keep')
1070 q_geo(j,i) = q_geo *1.0e-03_dp
1078 open(21, iostat=ios, &
1079 file=inpath//
'/ant/'//q_geo_file, &
1080 recl=8192, status=
'old')
1082 if (ios /= 0) stop
' sico_init: Error when opening the qgeo file!'
1084 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do
1087 read(21, fmt=*) (q_geo(j,i), i=0,imax)
1090 close(21, status=
'keep')
1094 q_geo(j,i) = q_geo(j,i) *1.0e-03_dp
1102 #if (REBOUND==0 || REBOUND==1)
1104 kei = 0.0_dp; n_data_kei = 0; kei_r_max = 0.0_dp; kei_r_incr = 0.0_dp
1122 call
boundary(time_init, dtime, dxi, deta, &
1123 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1130 q_b_tot(j,i) = 0.0_dp
1136 temp_c(kc,j,i) = -10.0_dp
1137 age_c(kc,j,i) = 15000.0_dp*year_sec
1141 omega_t(kt,j,i) = 0.0_dp
1142 age_t(kt,j,i) = 15000.0_dp*year_sec
1146 temp_r(kr,j,i) = -10.0_dp+q_geo(j,i)*h_r/kappa_r &
1147 *(1.0_dp-
real(kr,dp)/
real(krmax,dp))
1165 call
boundary(time_init, dtime, dxi, deta, &
1166 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1173 q_b_tot(j,i) = 0.0_dp
1179 temp_c(kc,j,i) = temp_s(j,i)
1180 age_c(kc,j,i) = 15000.0_dp*year_sec
1184 omega_t(kt,j,i) = 0.0_dp
1185 age_t(kt,j,i) = 15000.0_dp*year_sec
1189 temp_r(kr,j,i) = temp_s(j,i)+q_geo(j,i)*h_r/kappa_r &
1190 *(1.0_dp-
real(kr,dp)/
real(krmax,dp))
1209 stop
' sico_init: Parameter NETCDF must be either 1 or 2!'
1212 call
boundary(time_init, dtime, dxi, deta, &
1213 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1215 q_b_tot = q_bm + q_tld
1223 #if (GRID==0 || GRID==1)
1227 dist_dxdy(jr,ir) = sqrt( (
real(ir,dp)*dxi)**2 + (
real(jr,dp)*deta)**2 )
1239 zeta_c(kc) = kc*dzeta_c
1240 eaz_c(kc) = exp(deform*zeta_c(kc))
1241 eaz_c_quotient(kc) = (eaz_c(kc)-1.0_dp)/(ea-1.0_dp)
1245 zeta_t(kt) = kt*dzeta_t
1256 call
calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, ii, jj, nn)
1269 open(12, iostat=ios, &
1270 file=outpath//
'/'//trim(runname)//
'.ser', &
1273 stop
' sico_init: Error when opening the ser file!'
1275 if (forcing_flag == 1)
then
1280 #if ( !defined(OUTSER_V_A) || OUTSER_V_A==1 )
1282 1102
format(
' t(a) D_Ts(deg C) z_sl(m)',/, &
1283 ' H_max(m) zs_max(m) V_g(m^3)', &
1284 ' V_t(m^3) V_fw(m^3/a) V_sle(m)',/, &
1285 ' A_g(m^2) A_t(m^2) V_bm(m^3/a)', &
1286 ' V_tld(m^3/a) H_t_max(m) vs_max(m/a)')
1287 1103
format(
'----------------------------------------------------', &
1288 '---------------------------------------')
1292 1102
format(
' t(a) D_Ts(deg C) z_sl(m)',/, &
1293 ' V(m^3) V_g(m^3) V_f(m^3)', &
1294 ' A(m^2) A_g(m^2) A_f(m^2)',/, &
1295 ' H_max(m) zs_max(m)', &
1296 ' V_t(m^3) V_fw(m^3/a) V_sle(m)',/, &
1297 ' A_t(m^2) V_bm(m^3/a)', &
1298 ' V_tld(m^3/a) H_t_max(m) vs_max(m/a)')
1299 1103
format(
'----------------------------------------------------', &
1300 '---------------------------------------')
1303 stop
' sico_init: OUTSER_V_A must be either 1 or 2!'
1306 else if (forcing_flag == 2)
then
1311 #if ( !defined(OUTSER_V_A) || OUTSER_V_A==1 )
1313 1112
format(
' t(a) glac_ind(1) z_sl(m)',/, &
1314 ' H_max(m) zs_max(m) V_g(m^3)', &
1315 ' V_t(m^3) V_fw(m^3/a) V_sle(m)',/, &
1316 ' A_g(m^2) A_t(m^2) V_bm(m^3/a)', &
1317 ' V_tld(m^3/a) H_t_max(m) vs_max(m/a)')
1318 1113
format(
'----------------------------------------------------', &
1319 '---------------------------------------')
1323 1112
format(
' t(a) glac_ind(1) z_sl(m)',/, &
1324 ' V(m^3) V_g(m^3) V_f(m^3)', &
1325 ' A(m^2) A_g(m^2) A_f(m^2)',/, &
1326 ' H_max(m) zs_max(m)', &
1327 ' V_t(m^3) V_fw(m^3/a) V_sle(m)',/, &
1328 ' A_t(m^2) V_bm(m^3/a)', &
1329 ' V_tld(m^3/a) H_t_max(m) vs_max(m/a)')
1330 1113
format(
'----------------------------------------------------', &
1331 '---------------------------------------')
1334 stop
' sico_init: OUTSER_V_A must be either 1 or 2!'
1337 else if (forcing_flag == 3)
then
1342 #if ( !defined(OUTSER_V_A) || OUTSER_V_A==1 )
1344 1122
format(
' t(a) (Dummy)(1) z_sl(m)',/, &
1345 ' H_max(m) zs_max(m) V_g(m^3)', &
1346 ' V_t(m^3) V_fw(m^3/a) V_sle(m)',/, &
1347 ' A_g(m^2) A_t(m^2) V_bm(m^3/a)', &
1348 ' V_tld(m^3/a) H_t_max(m) vs_max(m/a)')
1349 1123
format(
'----------------------------------------------------', &
1350 '---------------------------------------')
1354 1122
format(
' t(a) (Dummy)(1) z_sl(m)',/, &
1355 ' V(m^3) V_g(m^3) V_f(m^3)', &
1356 ' A(m^2) A_g(m^2) A_f(m^2)',/, &
1357 ' H_max(m) zs_max(m)', &
1358 ' V_t(m^3) V_fw(m^3/a) V_sle(m)',/, &
1359 ' A_t(m^2) V_bm(m^3/a)', &
1360 ' V_tld(m^3/a) H_t_max(m) vs_max(m/a)')
1361 1123
format(
'----------------------------------------------------', &
1362 '---------------------------------------')
1365 stop
' sico_init: OUTSER_V_A must be either 1 or 2!'
1374 open(13, iostat=ios, &
1375 file=outpath//
'/'//trim(runname)//
'.thk', &
1377 if (ios /= 0) stop
' sico_init: Error when opening the thk file!'
1379 if (forcing_flag == 1)
then
1384 1104
format(
' t(a) D_Ts(deg C) z_sl(m)',/, &
1385 ' H(m): JMAX+1 records [j = JMAX (-1) 0] with',/, &
1386 ' IMAX+1 values [i = 0 (1) IMAX] in each record')
1387 1105
format(
'----------------------------------------------------')
1389 else if (forcing_flag == 2)
then
1394 1114
format(
' t(a) glac_ind(1) z_sl(m)',/, &
1395 ' H(m): JMAX+1 records [j = JMAX (-1) 0] with',/, &
1396 ' IMAX+1 values [i = 0 (1) IMAX] in each record')
1397 1115
format(
'----------------------------------------------------')
1399 else if (forcing_flag == 3)
then
1404 1124
format(
' t(a) (Dummy)(1) z_sl(m)',/, &
1405 ' H(m): JMAX+1 records [j = JMAX (-1) 0] with',/, &
1406 ' IMAX+1 values [i = 0 (1) IMAX] in each record')
1407 1125
format(
'----------------------------------------------------')
1419 allocate(lambda_core(n_core), phi_core(n_core), &
1420 x_core(n_core), y_core(n_core))
1422 phi_core(1) = -78.467_dp *pi_180
1423 lambda_core(1) = 106.8_dp *pi_180
1424 call
num_coord(lambda_core(1), phi_core(1), x_core(1), y_core(1))
1426 phi_core(2) = -80.367_dp *pi_180
1427 lambda_core(2) = 77.35_dp *pi_180
1428 call
num_coord(lambda_core(2), phi_core(2), x_core(2), y_core(2))
1430 phi_core(3) = -75.1_dp *pi_180
1431 lambda_core(3) = 123.4_dp *pi_180
1432 call
num_coord(lambda_core(3), phi_core(3), x_core(3), y_core(3))
1434 phi_core(4) = -77.317_dp *pi_180
1435 lambda_core(4) = 39.7_dp *pi_180
1436 call
num_coord(lambda_core(4), phi_core(4), x_core(4), y_core(4))
1438 phi_core(5) = -75.0_dp *pi_180
1439 lambda_core(5) = 0.067_dp *pi_180
1440 call
num_coord(lambda_core(5), phi_core(5), x_core(5), y_core(5))
1442 phi_core(6) = -80.017_dp *pi_180
1443 lambda_core(6) = -119.517_dp *pi_180
1444 call
num_coord(lambda_core(6), phi_core(6), x_core(6), y_core(6))
1446 open(14, iostat=ios, &
1447 file=outpath//
'/'//trim(runname)//
'.core', &
1449 if (ios /= 0) stop
' sico_init: Error when opening the core file!'
1451 if (forcing_flag == 1)
then
1456 1106
format(
' t(a) D_Ts(C) z_sl(m)',/, &
1457 ' H_Vo(m) H_DA(m) H_DC(m)', &
1458 ' H_DF(m) H_Ko(m) H_By(m)',/, &
1459 ' v_Vo(m/a) v_DA(m/a) v_DC(m/a)', &
1460 ' v_DF(m/a) v_Ko(m/a) v_By(m/a)',/, &
1461 ' T_Vo(C) T_DA(C) T_DC(C)', &
1462 ' T_DF(C) T_Ko(C) T_By(C)',/, &
1463 ' Rb_Vo(W/m2) Rb_DA(W/m2) Rb_DC(W/m2)', &
1464 ' Rb_DF(W/m2) Rb_Ko(W/m2) Rb_By(W/m2)')
1465 1107
format(
'----------------------------------------------------', &
1466 '---------------------------------------')
1468 else if (forcing_flag == 2)
then
1473 1116
format(
' t(a) glac_ind(1) z_sl(m)',/, &
1474 ' H_Vo(m) H_DA(m) H_DC(m)', &
1475 ' H_DF(m) H_Ko(m) H_By(m)',/, &
1476 ' v_Vo(m/a) v_DA(m/a) v_DC(m/a)', &
1477 ' v_DF(m/a) v_Ko(m/a) v_By(m/a)',/, &
1478 ' T_Vo(C) T_DA(C) T_DC(C)', &
1479 ' T_DF(C) T_Ko(C) T_By(C)',/, &
1480 ' Rb_Vo(W/m2) Rb_DA(W/m2) Rb_DC(W/m2)', &
1481 ' Rb_DF(W/m2) Rb_Ko(W/m2) Rb_By(W/m2)')
1482 1117
format(
'----------------------------------------------------', &
1483 '---------------------------------------')
1485 else if (forcing_flag == 3)
then
1490 1126
format(
' t(a) (Dummy)(1) z_sl(m)',/, &
1491 ' H_Vo(m) H_DA(m) H_DC(m)', &
1492 ' H_DF(m) H_Ko(m) H_By(m)',/, &
1493 ' v_Vo(m/a) v_DA(m/a) v_DC(m/a)', &
1494 ' v_DF(m/a) v_Ko(m/a) v_By(m/a)',/, &
1495 ' T_Vo(C) T_DA(C) T_DC(C)', &
1496 ' T_DF(C) T_Ko(C) T_By(C)',/, &
1497 ' Rb_Vo(W/m2) Rb_DA(W/m2) Rb_DC(W/m2)', &
1498 ' Rb_DF(W/m2) Rb_Ko(W/m2) Rb_By(W/m2)')
1499 1127
format(
'----------------------------------------------------', &
1500 '---------------------------------------')
1511 flag_3d_output = .false.
1513 flag_3d_output = .true.
1515 stop
' sico_init: ERGDAT must be either 0 or 1!'
1519 call
output1(runname, time_init, delta_ts, glac_index, z_sl, &
1520 flag_3d_output, ndat2d, ndat3d)
1522 call
output_nc(runname, time_init, delta_ts, glac_index, z_sl, &
1523 flag_3d_output, ndat2d, ndat3d)
1525 stop
' sico_init: Parameter NETCDF must be either 1 or 2!'
1530 if (time_output(1) <= time_init+eps)
then
1533 flag_3d_output = .false.
1535 flag_3d_output = .true.
1537 stop
' sico_init: ERGDAT must be either 0 or 1!'
1541 call
output1(runname, time_init, delta_ts, glac_index, z_sl, &
1542 flag_3d_output, ndat2d, ndat3d)
1544 call
output_nc(runname, time_init, delta_ts, glac_index, z_sl, &
1545 flag_3d_output, ndat2d, ndat3d)
1547 stop
' sico_init: Parameter NETCDF must be either 1 or 2!'
1554 flag_3d_output = .false.
1557 call
output1(runname, time_init, delta_ts, glac_index, z_sl, &
1558 flag_3d_output, ndat2d, ndat3d)
1560 call
output_nc(runname, time_init, delta_ts, glac_index, z_sl, &
1561 flag_3d_output, ndat2d, ndat3d)
1563 stop
' sico_init: Parameter NETCDF must be either 1 or 2!'
1566 if (time_output(1) <= time_init+eps)
then
1568 flag_3d_output = .true.
1571 call
output1(runname, time_init, delta_ts, glac_index, z_sl, &
1572 flag_3d_output, ndat2d, ndat3d)
1574 call
output_nc(runname, time_init, delta_ts, glac_index, z_sl, &
1575 flag_3d_output, ndat2d, ndat3d)
1577 stop
' sico_init: Parameter NETCDF must be either 1 or 2!'
1583 stop
' sico_init: OUTPUT must be either 1, 2 or 3!'
1586 call
output2(time_init, dxi, deta, delta_ts, glac_index, z_sl)
1588 call
output3(time_init, delta_ts, glac_index, z_sl)
1591 call
output4(time_init, dxi, deta, delta_ts, glac_index, z_sl)