50 subroutine sico_init(delta_ts, glac_index, &
52 dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, &
53 time, time_init, time_end, time_output, &
54 dxi, deta, dzeta_c, dzeta_t, dzeta_r, &
55 z_sl, dzsl_dtau, z_mar, &
57 ndat2d, ndat3d, n_output, &
79 integer(i4b),
intent(out) :: ii((imax+1)*(jmax+1)), &
80 jj((imax+1)*(jmax+1)), &
82 integer(i4b),
intent(out) :: ndat2d, ndat3d
83 integer(i4b),
intent(out) :: n_output
84 real(dp),
intent(out) :: delta_ts, glac_index
85 real(dp),
intent(out) :: mean_accum
86 real(dp),
intent(out) :: dtime, dtime_temp, dtime_wss, &
88 real(dp),
intent(out) :: time, time_init, time_end, time_output(100)
89 real(dp),
intent(out) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
90 real(dp),
intent(out) :: z_sl, dzsl_dtau, z_mar
91 character(len=100),
intent(out) :: runname
93 integer(i4b) :: i, j, kc, kt, kr, m, n, ir, jr
94 integer(i4b) :: ios, ios1, ios2, ios3, ios4
96 real(dp) :: dtime0, dtime_temp0, dtime_wss0, dtime_out0, dtime_ser0
97 real(dp) :: time_init0, time_end0, time_output0(100)
99 character(len=100) :: anfdatname
100 character(len=256) :: filename_with_path
101 character(len=256) :: shell_command
102 character :: ch_dummy
103 logical :: flag_init_output, flag_3d_output
105 character(len=64),
parameter :: fmt1 =
'(a)', &
110 write(unit=6, fmt=
'(a)')
' ' 111 write(unit=6, fmt=
'(a)')
' -------- sico_init --------' 112 write(unit=6, fmt=
'(a)')
' ' 124 #elif (defined(EMTP2SGE)) 132 #elif (defined(NHEM)) 136 #elif (defined(SCAND)) 140 #elif (defined(TIBET)) 144 #elif (defined(NMARS)) 148 #elif (defined(SMARS)) 160 stop
' >>> sico_init: No valid domain specified!' 181 #if (CALCTHK==3 || CALCTHK==6 || MARGIN==3 || DYNAMICS==2) 182 call lis_initialize(ierr)
191 #if (!defined(SURFACE_FORCING) || SURFACE_FORCING==1) 198 s_b =
s_b *1.0e-03_dp/year_sec
201 #elif (SURFACE_FORCING==2) 204 gamma_t = gamma_t *1.0e-03_dp
206 m_0 = m_0 *1.0e-03_dp/year_sec
207 ela = ela *1.0e+03_dp
210 stop
' >>> sico_init: SURFACE_FORCING must be either 1 or 2!' 220 if ( trim(version) /= trim(sico_version) ) &
221 stop
' >>> sico_init: SICOPOLIS version not compatible with header file!' 225 #if (!defined(DYNAMICS)) 226 stop
' >>> sico_init: DYNAMICS not defined in the header file!' 229 #if (!defined(CALCMOD)) 230 stop
' >>> sico_init: CALCMOD not defined in the header file!' 233 #if (defined(ENTHMOD)) 234 write(6, fmt=
'(a)')
' >>> sico_init: ENTHMOD must not be defined any more.' 235 write(6, fmt=
'(a)')
' Please update your header file!' 244 if (approx_equal(dx, 5.0_dp,
eps_sp_dp))
then 246 if ((imax /= 300).or.(jmax /= 300))
then 247 stop
' >>> sico_init: IMAX and/or JMAX wrong!' 250 else if (approx_equal(dx, 10.0_dp,
eps_sp_dp))
then 252 if ((imax /= 150).or.(jmax /= 150))
then 253 stop
' >>> sico_init: IMAX and/or JMAX wrong!' 256 else if (approx_equal(dx, 25.0_dp,
eps_sp_dp))
then 258 if ((imax /= 60).or.(jmax /= 60))
then 259 stop
' >>> sico_init: IMAX and/or JMAX wrong!' 262 else if (approx_equal(dx, 75.0_dp,
eps_sp_dp))
then 264 if ((imax /= 20).or.(jmax /= 20))
then 265 stop
' >>> sico_init: IMAX and/or JMAX wrong!' 269 stop
' >>> sico_init: DX wrong!' 274 stop
' >>> sico_init: GRID==1 not allowed for this application!' 278 stop
' >>> sico_init: GRID==2 not allowed for this application!' 286 #if (CALCMOD==0 || CALCMOD==2 || CALCMOD==3 || CALCMOD==-1) 289 write(6, fmt=
'(a)')
' >>> sico_init: For options CALCMOD==0, 2, 3 or -1,' 290 write(6, fmt=
'(a)')
' the separate kt domain is redundant.' 291 write(6, fmt=
'(a)')
' Therefore, consider setting KTMAX to 2.' 292 write(6, fmt=
'(a)')
' ' 301 stop
' >>> sico_init: Option ADV_HOR==1 (central differences) not defined!' 309 #if ((MARGIN==3 && DYNAMICS==1) || DYNAMICS==2) /* requires SSA or SStA */ 311 write(6, fmt=
'(a)')
' >>> sico_init: Distortion correction not implemented' 312 write(6, fmt=
'(a)')
' for the shallow shelf approximation (SSA)' 313 write(6, fmt=
'(a)')
' or the shelfy stream approximation (SStA)' 314 write(6, fmt=
'(a)')
' -> GRID==0 required!' 326 dtime_temp0 = dtime_temp0
330 dzeta_c = 1.0_dp/
real(kcmax,dp)
331 dzeta_t = 1.0_dp/
real(ktmax,dp)
332 dzeta_r = 1.0_dp/
real(krmax,dp)
341 if (deform >=
eps)
then 421 if ((i <= imax).and.(j <= jmax))
then 433 anfdatname = anfdatname
435 #if (defined(YEAR_ZERO)) 441 time_init0 = time_init0
442 time_end0 = time_end0
443 dtime_ser0 = dtime_ser0
445 #if (OUTPUT==1 || OUTPUT==3) 446 dtime_out0 = dtime_out0
449 #if (OUTPUT==2 || OUTPUT==3) 451 time_output0( 1) = time_out0_01
452 time_output0( 2) = time_out0_02
453 time_output0( 3) = time_out0_03
454 time_output0( 4) = time_out0_04
455 time_output0( 5) = time_out0_05
456 time_output0( 6) = time_out0_06
457 time_output0( 7) = time_out0_07
458 time_output0( 8) = time_out0_08
459 time_output0( 9) = time_out0_09
460 time_output0(10) = time_out0_10
461 time_output0(11) = time_out0_11
462 time_output0(12) = time_out0_12
463 time_output0(13) = time_out0_13
464 time_output0(14) = time_out0_14
465 time_output0(15) = time_out0_15
466 time_output0(16) = time_out0_16
467 time_output0(17) = time_out0_17
468 time_output0(18) = time_out0_18
469 time_output0(19) = time_out0_19
470 time_output0(20) = time_out0_20
475 shell_command =
'if [ ! -d' 476 shell_command = trim(shell_command)//
' '//outpath
477 shell_command = trim(shell_command)//
' '//
'] ; then mkdir' 478 shell_command = trim(shell_command)//
' '//outpath
479 shell_command = trim(shell_command)//
' '//
'; fi' 480 call system(trim(shell_command))
483 filename_with_path = trim(outpath)//
'/'//trim(runname)//
'.log' 485 open(10, iostat=ios, file=trim(filename_with_path), status=
'new')
487 if (ios /= 0) stop
' >>> sico_init: Error when opening the log file!' 489 write(10, fmt=trim(fmt1))
'Computational domain:' 491 write(10, fmt=trim(fmt1))
' ' 493 write(10, fmt=trim(fmt2a))
'GRID = ', grid
494 write(10, fmt=trim(fmt1))
' ' 496 write(10, fmt=trim(fmt2))
'imax =', imax
497 write(10, fmt=trim(fmt2))
'jmax =', jmax
498 write(10, fmt=trim(fmt2))
'kcmax =', kcmax
499 write(10, fmt=trim(fmt2))
'ktmax =', ktmax
500 write(10, fmt=trim(fmt2))
'krmax =', krmax
501 write(10, fmt=trim(fmt1))
' ' 503 write(10, fmt=trim(fmt3))
'a =',
aa 504 write(10, fmt=trim(fmt1))
' ' 506 #if (GRID==0 || GRID==1) 507 write(10, fmt=trim(fmt3))
'x0 =', x0
508 write(10, fmt=trim(fmt3))
'y0 =', y0
509 write(10, fmt=trim(fmt3))
'dx =', dx
511 write(10, fmt=trim(fmt3))
'dlambda =', dlambda
512 write(10, fmt=trim(fmt3))
'dphi =', dphi
514 write(10, fmt=trim(fmt1))
' ' 516 write(10, fmt=trim(fmt3))
'year_zero =',
year_zero 517 write(10, fmt=trim(fmt3))
'time_init =', time_init0
518 write(10, fmt=trim(fmt3))
'time_end =', time_end0
519 write(10, fmt=trim(fmt3))
'dtime =', dtime0
520 write(10, fmt=trim(fmt3))
'dtime_temp =', dtime_temp0
521 write(10, fmt=trim(fmt1))
' ' 523 write(10, fmt=trim(fmt2))
'ANF_DAT =', anf_dat
524 #if (defined(LAND_OCEAN_TRANSITION_WIDTH)) 525 write(10, fmt=trim(fmt3))
'land_ocean_transition_width =', &
526 land_ocean_transition_width
528 #if (ANF_DAT==1 && defined(TEMP_INIT)) 529 write(10, fmt=trim(fmt2))
'TEMP_INIT =', temp_init
532 write(10, fmt=trim(fmt1))
'Initial-value file = '//anfdatname
533 write(10, fmt=trim(fmt1))
'Path to initial-value file = '//anfdatpath
535 write(10, fmt=trim(fmt1))
' ' 537 write(10, fmt=trim(fmt1))
'Physical-parameter file = '//phys_para_file
538 write(10, fmt=trim(fmt1))
' ' 540 #if (CALCTHK==2 || CALCTHK==3 || CALCTHK==5 || CALCTHK==6) 541 write(10, fmt=trim(fmt3))
'ovi_weight =', ovi_weight
542 #if (CALCTHK==2 || CALCTHK==5) 543 write(10, fmt=trim(fmt3))
'omega_sor =', omega_sor
545 write(10, fmt=trim(fmt2a))
'iter_max_sor = ', iter_max_sor
548 write(10, fmt=trim(fmt1))
' ' 551 #if (defined(SURFACE_FORCING)) 552 write(10, fmt=trim(fmt2))
'SURFACE_FORCING =', surface_forcing
554 #if (!defined(SURFACE_FORCING) || SURFACE_FORCING==1) 555 write(10, fmt=trim(fmt3))
'temp_min =',
temp_min 556 write(10, fmt=trim(fmt3))
's_t =',
s_t 557 write(10, fmt=trim(fmt3))
'x_hat =',
x_hat 558 write(10, fmt=trim(fmt3))
'y_hat =',
y_hat 559 write(10, fmt=trim(fmt3))
'b_max =',
b_max 560 write(10, fmt=trim(fmt3))
's_b =',
s_b 561 write(10, fmt=trim(fmt3))
'eld =',
eld 562 #elif (SURFACE_FORCING==2) 563 write(10, fmt=trim(fmt3))
'temp_0 =', temp_0
564 write(10, fmt=trim(fmt3))
'gamma_t =', gamma_t
565 write(10, fmt=trim(fmt3))
's_0 =', s_0
566 write(10, fmt=trim(fmt3))
'm_0 =', m_0
567 write(10, fmt=trim(fmt3))
'ela =', ela
569 write(10, fmt=trim(fmt1))
' ' 572 write(10, fmt=trim(fmt3))
'delta_ts0 =', delta_ts0
574 write(10, fmt=trim(fmt3))
'sine_amplit =', sine_amplit
575 write(10, fmt=trim(fmt3))
'sine_period =', sine_period
577 write(10, fmt=trim(fmt1))
'GRIP file = '//grip_temp_file
578 write(10, fmt=trim(fmt3))
'grip_temp_fact =', grip_temp_fact
581 write(10, fmt=trim(fmt2a))
'SEA_LEVEL = ', sea_level
583 write(10, fmt=trim(fmt3))
'z_sl0 =', z_sl0
585 write(10, fmt=trim(fmt1))
'sea-level file = '//sea_level_file
587 write(10, fmt=trim(fmt1))
' ' 590 #if (MARINE_ICE_CALVING==2 || MARINE_ICE_CALVING==3) 591 write(10, fmt=trim(fmt3))
'z_mar =', z_mar
592 write(10, fmt=trim(fmt1))
' ' 593 #elif (MARINE_ICE_CALVING==4 || MARINE_ICE_CALVING==5 \ 594 || marine_ice_calving==6 || marine_ice_calving==7)
595 write(10, fmt=trim(fmt3))
'fact_z_mar =', fact_z_mar
596 write(10, fmt=trim(fmt1))
' ' 597 #elif (MARINE_ICE_FORMATION==2 && MARINE_ICE_CALVING==9) 598 write(10, fmt=trim(fmt3))
'calv_uw_coeff =', calv_uw_coeff
599 write(10, fmt=trim(fmt3))
'r1_calv_uw =', r1_calv_uw
600 write(10, fmt=trim(fmt3))
'r2_calv_uw =', r2_calv_uw
601 write(10, fmt=trim(fmt1))
' ' 604 #if (ICE_SHELF_CALVING==2) 605 write(10, fmt=trim(fmt3))
'H_calv =', h_calv
606 write(10, fmt=trim(fmt1))
' ' 610 #if (defined(BASAL_HYDROLOGY)) 611 write(10, fmt=trim(fmt2a))
'BASAL_HYDROLOGY = ', basal_hydrology
613 write(10, fmt=trim(fmt2a))
'SLIDE_LAW = ', slide_law
614 write(10, fmt=trim(fmt3))
'c_slide =',
c_slide 615 write(10, fmt=trim(fmt3))
'gamma_slide =', gamma_slide
616 write(10, fmt=trim(fmt2a))
'p_weert = ',
p_weert 617 write(10, fmt=trim(fmt2a))
'q_weert = ',
q_weert 618 #if (defined(TIME_RAMP_UP_SLIDE)) 619 write(10, fmt=trim(fmt3))
'time_ramp_up_slide =', time_ramp_up_slide
622 write(10, fmt=trim(fmt3))
'red_pres_limit_fact =', red_pres_limit_fact
624 #if (BASAL_HYDROLOGY==1) 625 write(10, fmt=trim(fmt3))
'c_Hw_slide =', c_hw_slide
626 write(10, fmt=trim(fmt3))
'Hw0_slide =', hw0_slide
628 write(10, fmt=trim(fmt1))
' ' 630 write(10, fmt=trim(fmt2a))
'Q_GEO_MOD = ', q_geo_mod
632 write(10, fmt=trim(fmt3))
'q_geo =',
q_geo 634 write(10, fmt=trim(fmt1))
' ' 636 #if (defined(MARINE_ICE_BASAL_MELTING)) 637 write(10, fmt=trim(fmt2))
'MARINE_ICE_BASAL_MELTING =', marine_ice_basal_melting
638 #if (MARINE_ICE_BASAL_MELTING==2 || MARINE_ICE_BASAL_MELTING==3) 639 write(10, fmt=trim(fmt3))
'qbm_marine =', qbm_marine
641 write(10, fmt=trim(fmt1))
' ' 645 write(10, fmt=trim(fmt2))
'FLOATING_ICE_BASAL_MELTING =', floating_ice_basal_melting
646 #if (FLOATING_ICE_BASAL_MELTING<=3) 647 write(10, fmt=trim(fmt3))
'qbm_float_1 =', qbm_float_1
648 write(10, fmt=trim(fmt3))
'qbm_float_2 =', qbm_float_2
650 write(10, fmt=trim(fmt3))
'qbm_float_3 =', qbm_float_3
651 write(10, fmt=trim(fmt3))
'z_abyss =', z_abyss
652 #if (FLOATING_ICE_BASAL_MELTING==4) 653 write(10, fmt=trim(fmt3))
'temp_ocean =', temp_ocean
654 write(10, fmt=trim(fmt3))
'Omega_qbm =', omega_qbm
655 write(10, fmt=trim(fmt3))
'alpha_qbm =', alpha_qbm
657 #if (FLOATING_ICE_BASAL_MELTING==4 || FLOATING_ICE_BASAL_MELTING==5) 658 write(10, fmt=trim(fmt3))
'H_w_0 =', h_w_0
660 write(10, fmt=trim(fmt1))
' ' 663 write(10, fmt=trim(fmt2))
'REBOUND =', rebound
665 write(10, fmt=trim(fmt3))
'frac_llra =', frac_llra
667 #if (REBOUND==1 || REBOUND==2) 668 write(10, fmt=trim(fmt2))
'TIME_LAG_MOD =', time_lag_mod
669 #if (TIME_LAG_MOD==1) 670 write(10, fmt=trim(fmt3))
'time_lag =', time_lag
671 #elif (TIME_LAG_MOD==2) 672 write(10, fmt=trim(fmt1))
'time_lag_file = '//time_lag_file
674 stop
' >>> sico_init: TIME_LAG_MOD must be either 1 or 2!' 678 write(10, fmt=trim(fmt2))
'FLEX_RIG_MOD =', flex_rig_mod
679 #if (FLEX_RIG_MOD==1) 680 write(10, fmt=trim(fmt3))
'flex_rig =', flex_rig
681 #elif (FLEX_RIG_MOD==2) 682 write(10, fmt=trim(fmt1))
'flex_rig_file = '//flex_rig_file
684 stop
' >>> sico_init: FLEX_RIG_MOD must be either 1 or 2!' 687 write(10, fmt=trim(fmt2))
'Q_LITHO =', q_litho
688 write(10, fmt=trim(fmt1))
' ' 691 write(10, fmt=trim(fmt3))
'gr_size =', gr_size
692 write(10, fmt=trim(fmt1))
' ' 695 write(10, fmt=trim(fmt3))
'sigma_res =', sigma_res
696 write(10, fmt=trim(fmt1))
' ' 699 write(10, fmt=trim(fmt2))
'ENHMOD =', enhmod
700 #if (ENHMOD==1 || ENHMOD==2 || ENHMOD==3) 701 write(10, fmt=trim(fmt3))
'enh_fact =', enh_fact
703 #if (ENHMOD==2 || ENHMOD==3) 704 write(10, fmt=trim(fmt3))
'enh_intg =', enh_intg
707 write(10, fmt=trim(fmt3))
'age_trans =', age_trans_0
710 write(10, fmt=trim(fmt3))
'date_trans1 =', date_trans1_0
711 write(10, fmt=trim(fmt3))
'date_trans2 =', date_trans2_0
712 write(10, fmt=trim(fmt3))
'date_trans3 =', date_trans3_0
714 #if (ENHMOD==4 || ENHMOD==5) 715 write(10, fmt=trim(fmt3))
'enh_compr =', enh_compr
716 write(10, fmt=trim(fmt3))
'enh_shear =', enh_shear
718 #if ((ENHMOD==1 || ENHMOD==2 || ENHMOD==3 || ENHMOD==4) && MARGIN==3) 719 write(10, fmt=trim(fmt3))
'enh_shelf =', enh_shelf
721 write(10, fmt=trim(fmt1))
' ' 723 write(10, fmt=trim(fmt3))
'numdiff_H_t =', numdiff_h_t
724 write(10, fmt=trim(fmt3))
'tau_cts =', tau_cts
725 write(10, fmt=trim(fmt3))
'vh_max =', vh_max
726 write(10, fmt=trim(fmt3))
'hd_min =', hd_min
727 write(10, fmt=trim(fmt3))
'hd_max =', hd_max
728 #if (defined(QBM_MIN)) 729 write(10, fmt=trim(fmt3))
'qbm_min =', qbm_min
730 #elif (defined(QB_MIN)) /* obsolete */ 731 write(10, fmt=trim(fmt3))
'qb_min =', qb_min
733 #if (defined(QBM_MAX)) 734 write(10, fmt=trim(fmt3))
'qbm_max =', qbm_max
735 #elif (defined(QB_MAX)) /* obsolete */ 736 write(10, fmt=trim(fmt3))
'qb_max =', qb_max
738 write(10, fmt=trim(fmt3))
'age_min =', age_min
739 write(10, fmt=trim(fmt3))
'age_max =', age_max
740 write(10, fmt=trim(fmt3))
'mean_accum =', mean_accum
742 write(10, fmt=trim(fmt3))
'age_diff =', agediff
744 write(10, fmt=trim(fmt1))
' ' 746 write(10, fmt=trim(fmt2a))
'DYNAMICS = ', dynamics
747 #if ((DYNAMICS==1 && MARGIN==3) || DYNAMICS==2) 748 #if (defined(LIS_OPTS)) 749 write(10, fmt=trim(fmt1))
'lis_opts = '//lis_opts
751 #if (defined(N_ITER_SSA)) 752 write(10, fmt=trim(fmt2a))
'n_iter_ssa = ', n_iter_ssa
754 #if (defined(RELAX_FACT_SSA)) 755 write(10, fmt=trim(fmt3))
'relax_fact_ssa =', relax_fact_ssa
758 #if (DYNAMICS==2 && defined(RATIO_SL_THRESH)) 759 write(10, fmt=trim(fmt3))
'ratio_sl_thresh =', ratio_sl_thresh
761 #if (DYNAMICS==2 && defined(SSTA_SIA_WEIGH_FCT)) 762 write(10, fmt=trim(fmt2a))
'SSTA_SIA_WEIGH_FCT = ', ssta_sia_weigh_fct
764 write(10, fmt=trim(fmt1))
' ' 766 write(10, fmt=trim(fmt2))
'CALCMOD =', calcmod
767 #if (CALCMOD==-1 && defined(TEMP_CONST)) 768 write(10, fmt=trim(fmt3))
'TEMP_CONST =', temp_const
770 #if (CALCMOD==-1 && defined(AGE_CONST)) 771 write(10, fmt=trim(fmt3))
'AGE_CONST =', age_const
773 #if (CALCMOD==1 && defined(CTS_MELTING_FREEZING)) 774 write(10, fmt=trim(fmt2))
'CTS_MELTING_FREEZING =', cts_melting_freezing
776 write(10, fmt=trim(fmt2))
'FLOW_LAW =', flow_law
777 write(10, fmt=trim(fmt2))
'FIN_VISC =', fin_visc
778 write(10, fmt=trim(fmt2))
'MARGIN =', margin
780 write(10, fmt=trim(fmt2))
'MARINE_ICE_FORMATION =', marine_ice_formation
781 write(10, fmt=trim(fmt2))
'MARINE_ICE_CALVING =', marine_ice_calving
783 write(10, fmt=trim(fmt2))
'ICE_SHELF_CALVING =', ice_shelf_calving
785 #if (defined(THK_EVOL)) 786 write(10, fmt=trim(fmt2))
'THK_EVOL =', thk_evol
788 stop
' >>> sico_init: Define THK_EVOL in header file!' 790 #if (defined(CALCTHK)) 791 write(10, fmt=trim(fmt2))
'CALCTHK =', calcthk
793 stop
' >>> sico_init: Define CALCTHK in header file!' 795 write(10, fmt=trim(fmt2))
'ADV_HOR =', adv_hor
796 write(10, fmt=trim(fmt2))
'ADV_VERT =', adv_vert
797 write(10, fmt=trim(fmt2))
'TOPOGRAD =', topograd
798 write(10, fmt=trim(fmt2))
'TSURFACE =', tsurface
799 #if (defined(MB_ACCOUNT)) 800 write(10, fmt=trim(fmt2a))
'MB_ACCOUNT = ', mb_account
802 write(10, fmt=trim(fmt1))
' ' 804 #if (defined(OUT_TIMES)) 805 write(10, fmt=trim(fmt2a))
'OUT_TIMES = ', out_times
807 #if (defined(OUTPUT_INIT)) 808 write(10, fmt=trim(fmt2a))
'OUTPUT_INIT = ', output_init
810 write(10, fmt=trim(fmt2a))
'OUTPUT = ', output
811 #if (OUTPUT==1 || OUTPUT==3) 812 write(10, fmt=trim(fmt3))
'dtime_out =' , dtime_out0
814 write(10, fmt=trim(fmt3))
'dtime_ser =' , dtime_ser0
815 #if (OUTPUT==1 || OUTPUT==2) 816 write(10, fmt=trim(fmt2a))
'ERGDAT = ', ergdat
818 write(10, fmt=trim(fmt2a))
'NETCDF = ', netcdf
819 #if (OUTPUT==2 || OUTPUT==3) 820 write(10, fmt=trim(fmt2a))
'n_output = ', n_output
822 write(10, fmt=trim(fmt3))
'time_output =' , time_output0(n)
825 write(10, fmt=trim(fmt1))
' ' 827 write(10, fmt=trim(fmt1))
'Program version and date: '//version//
' / '//date
829 close(10, status=
'keep')
834 time_init = time_init0*year_sec
835 time_end = time_end0*year_sec
836 dtime = dtime0*year_sec
837 dtime_temp = dtime_temp0*year_sec
838 dtime_ser = dtime_ser0*year_sec
839 #if (OUTPUT==1 || OUTPUT==3) 840 dtime_out = dtime_out0*year_sec
842 #if (OUTPUT==2 || OUTPUT==3) 844 time_output(n) = time_output0(n)*year_sec
848 if (.not.approx_integer_multiple(dtime_temp, dtime,
eps_sp_dp)) &
849 stop
' >>> sico_init: dtime_temp must be a multiple of dtime!' 851 if (.not.approx_integer_multiple(dtime_ser, dtime,
eps_sp_dp)) &
852 stop
' >>> sico_init: dtime_ser must be a multiple of dtime!' 854 #if (OUTPUT==1 || OUTPUT==3) 855 if (.not.approx_integer_multiple(dtime_out, dtime,
eps_sp_dp)) &
856 stop
' >>> sico_init: dtime_out must be a multiple of dtime!' 863 mean_accum = mean_accum*(1.0e-03_dp/year_sec)*(
rho_w/
rho)
870 filename_with_path = trim(inpath)//
'/general/'//trim(grip_temp_file)
872 open(21, iostat=ios, file=trim(filename_with_path), status=
'old')
874 if (ios /= 0) stop
' >>> sico_init: Error when opening the data file for delta_ts!' 878 if (ch_dummy /=
'#')
then 879 write(6, fmt=*)
' >>> sico_init: grip_time_min, grip_time_stp, grip_time_max' 880 write(6, fmt=*)
' not defined in data file for delta_ts!' 889 read(21, fmt=*) d_dummy,
griptemp(n)
892 close(21, status=
'keep')
900 filename_with_path = trim(inpath)//
'/general/'//trim(sea_level_file)
902 open(21, iostat=ios, file=trim(filename_with_path), status=
'old')
904 if (ios /= 0) stop
' >>> sico_init: Error when opening the data file for z_sl!' 908 if (ch_dummy /=
'#')
then 909 write(6, fmt=*)
' >>> sico_init: specmap_time_min, specmap_time_stp, specmap_time_max' 910 write(6, fmt=*)
' not defined in data file for z_sl!' 922 close(21, status=
'keep')
940 stop
' >>> sico_init: Option Q_GEO_MOD==2 not available for this application!' 947 #if (REBOUND==1 || REBOUND==2) 949 #if (TIME_LAG_MOD==1) 953 #elif (TIME_LAG_MOD==2) 958 open(29, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
960 if (ios /= 0) stop
' >>> sico_init: Error when opening the time-lag file!' 962 do n=1, 6;
read(29, fmt=
'(a)') ch_dummy;
end do 968 close(29, status=
'keep')
984 #if (FLEX_RIG_MOD==1) 988 #elif (FLEX_RIG_MOD==2) 993 open(29, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
995 if (ios /= 0) stop
' >>> sico_init: Error when opening the flex-rig file!' 997 do n=1, 6;
read(29, fmt=
'(a)') ch_dummy;
end do 1003 close(29, status=
'keep')
1007 #elif (REBOUND==0 || REBOUND==1) 1019 stop
' >>> sico_init: ANF_DAT==1 not allowed for this application!' 1029 call boundary(time_init, dtime, dxi, deta, &
1030 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1054 stop
' >>> sico_init: Parameter ENHMOD must be between 1 and 5!' 1063 call boundary(time_init, dtime, dxi, deta, &
1064 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1095 #if (MARGIN==1 || MARGIN==2) 1104 if ( (
maske(j,i)==0_i2b) &
1106 ( (
maske(j,i+1)==3_i2b) &
1107 .or.(
maske(j,i-1)==3_i2b) &
1108 .or.(
maske(j+1,i)==3_i2b) &
1109 .or.(
maske(j-1,i)==3_i2b) ) &
1113 if ( (
maske(j,i)==3_i2b) &
1115 ( (
maske(j,i+1)==0_i2b) &
1116 .or.(
maske(j,i-1)==0_i2b) &
1117 .or.(
maske(j+1,i)==0_i2b) &
1118 .or.(
maske(j-1,i)==0_i2b) ) &
1122 if ( (
maske(j,i)==3_i2b) &
1124 ( (
maske(j,i+1)==2_i2b) &
1125 .or.(
maske(j,i-1)==2_i2b) &
1126 .or.(
maske(j+1,i)==2_i2b) &
1127 .or.(
maske(j-1,i)==2_i2b) ) &
1131 if ( (
maske(j,i)==2_i2b) &
1133 ( (
maske(j,i+1)==3_i2b) &
1134 .or.(
maske(j,i-1)==3_i2b) &
1135 .or.(
maske(j+1,i)==3_i2b) &
1136 .or.(
maske(j-1,i)==3_i2b) ) &
1146 if ( (
maske(j,i)==2_i2b) &
1147 .and. (
maske(j+1,i)==3_i2b) &
1152 if ( (
maske(j,i)==2_i2b) &
1153 .and. (
maske(j-1,i)==3_i2b) &
1162 if ( (
maske(j,i)==2_i2b) &
1163 .and. (
maske(j,i+1)==3_i2b) &
1168 if ( (
maske(j,i)==2_i2b) &
1169 .and. (
maske(j,i-1)==3_i2b) &
1176 stop
' >>> sico_init: MARGIN must be either 1, 2 or 3!' 1181 #if (GRID==0 || GRID==1) 1185 dist_dxdy(jr,ir) = sqrt( (
real(ir,dp)*dxi)**2 + (
real(jr,dp)*deta)**2 )
1196 #if (DYNAMICS==1 || DYNAMICS==2) 1201 #if (MARGIN==3 || DYNAMICS==2) 1202 call calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
1217 stop
' >>> sico_init: DYNAMICS must be either 0, 1 or 2!' 1220 call calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
1224 #if (CALCMOD==0 || CALCMOD==-1) 1249 if ( (
maske(j,i) == 0_i2b).and.(
n_cts(j,i) == 1_i2b) )
then 1262 #elif (CALCMOD==2 || CALCMOD==3) 1280 stop
' >>> sico_init: Parameter CALCMOD must be either -1, 0, 1, 2 or 3!' 1288 filename_with_path = trim(outpath)//
'/'//trim(runname)//
'.ser' 1290 open(12, iostat=ios, file=trim(filename_with_path), status=
'new')
1292 if (ios /= 0) stop
' >>> sico_init: Error when opening the ser file!' 1297 1102
format(
' t(a) D_Ts(deg C) z_sl(m)',/, &
1298 ' V(m^3) V_g(m^3) V_f(m^3)', &
1299 ' A(m^2) A_g(m^2) A_f(m^2)',/, &
1300 ' V_sle(m) V_t(m^3)', &
1302 ' H_max(m) H_t_max(m)', &
1303 ' zs_max(m) vs_max(m/a) Tbh_max(C)')
1304 1103
format(
'----------------------------------------------------', &
1305 '---------------------------------------')
1317 x_core(1) = 750.0_dp *1.0e+03_dp
1318 y_core(1) = 750.0_dp *1.0e+03_dp
1324 x_core(2) = 750.0_dp *1.0e+03_dp
1325 y_core(2) = 1125.0_dp *1.0e+03_dp
1328 filename_with_path = trim(outpath)//
'/'//trim(runname)//
'.core' 1330 open(14, iostat=ios, file=trim(filename_with_path), status=
'new')
1332 if (ios /= 0) stop
' >>> sico_init: Error when opening the core file!' 1339 1106
format(
' t(a) D_Ts(C) z_sl(m)',/, &
1340 ' H_P1(m) H_P2(m)',/, &
1341 ' v_P1(m/a) v_P2(m/a)',/, &
1343 1107
format(
'---------------------------------------')
1349 #if (defined(OUTPUT_INIT)) 1351 #if (OUTPUT_INIT==0) 1352 flag_init_output = .false.
1353 #elif (OUTPUT_INIT==1) 1354 flag_init_output = .true.
1356 stop
' >>> sico_init: OUTPUT_INIT must be either 0 or 1!' 1360 flag_init_output = .true.
1366 flag_3d_output = .false.
1368 flag_3d_output = .true.
1370 stop
' >>> sico_init: ERGDAT must be either 0 or 1!' 1373 if (flag_init_output) &
1374 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1375 flag_3d_output, ndat2d, ndat3d)
1379 if (time_output(1) <= time_init+
eps)
then 1382 flag_3d_output = .false.
1384 flag_3d_output = .true.
1386 stop
' >>> sico_init: ERGDAT must be either 0 or 1!' 1389 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1390 flag_3d_output, ndat2d, ndat3d)
1396 flag_3d_output = .false.
1398 if (flag_init_output) &
1399 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1400 flag_3d_output, ndat2d, ndat3d)
1402 if (time_output(1) <= time_init+
eps)
then 1404 flag_3d_output = .true.
1406 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1407 flag_3d_output, ndat2d, ndat3d)
1412 stop
' >>> sico_init: OUTPUT must be either 1, 2 or 3!' 1415 if (flag_init_output)
then 1416 call output2(time_init, dxi, deta, delta_ts, glac_index, z_sl)
1417 call output4(time_init, dxi, deta, delta_ts, glac_index, z_sl)
1432 real(dp),
intent(out) :: dxi, deta
1438 dxi=0.0_dp; deta=0.0_dp
1440 write(6,
'(/1x,a)')
'>>> topography1: ANF_DAT==1 not defined for this domain!' 1452 #if (GRID==0 || GRID==1) 1461 real(dp),
intent(out) :: dxi, deta
1463 integer(i4b) :: i, j, n
1465 real(dp) :: xi0, eta0
1467 real(dp) :: half_width
1468 real(dp),
dimension(0:JMAX,0:IMAX) :: zl0_update
1470 real(dp),
parameter :: zl0_ocean = -2000.0_dp
1471 real(dp),
parameter :: epss = 0.01_dp
1475 #if (!defined(LAND_OCEAN_TRANSITION_WIDTH)) 1477 write(6, fmt=
'(a)')
' >>> topography2: LAND_OCEAN_TRANSITION_WIDTH not defined.' 1478 write(6, fmt=
'(a)')
' Value 0 assumed by default!' 1479 write(6, fmt=
'(a)')
' ' 1485 half_width = 0.5_dp*abs(land_ocean_transition_width) *1000.0_dp
1491 zl0(0,:) = zl0_ocean
1492 zl0(jmax,:) = zl0_ocean
1494 zl0(:,0) = zl0_ocean
1495 zl0(:,imax) = zl0_ocean
1507 #if (GRID==0 || GRID==1) 1510 deta = dx *1000.0_dp
1513 eta0 = y0 *1000.0_dp
1517 stop
' >>> topography2: GRID==2 not allowed for this application!' 1522 xi(i) = xi0 +
real(i,
dp)*dxi
1526 eta(j) = eta0 +
real(j,
dp)*deta
1532 if ( (
xi(i) >= (1150.0e+03_dp+half_width-epss)) &
1533 .and.(
eta(j) >= (625.0e+03_dp+half_width-epss)) &
1534 .and.(
eta(j) <= (875.0e+03_dp-half_width+epss)) )
then 1537 zl0(j,i) = zl0_ocean
1544 if (half_width > epss)
then 1553 if ( ( .not.( (
xi(i) >= (1150.0e+03_dp+half_width-epss)) &
1554 .and.(
eta(j) >= (625.0e+03_dp+half_width-epss)) &
1555 .and.(
eta(j) <= (875.0e+03_dp-half_width+epss)) ) ) &
1557 ( (
xi(i) >= (1150.0e+03_dp-half_width-epss)) &
1558 .and.(
eta(j) >= (625.0e+03_dp-half_width-epss)) &
1559 .and.(
eta(j) <= (875.0e+03_dp+half_width+epss)) ) )
then 1563 zl0_update(j,i) =
zl0(j,i) &
1565 * (
zl0(j,i+1)-2.0_dp*
zl0(j,i)+
zl0(j,i-1)) &
1567 * (
zl0(j+1,i)-2.0_dp*
zl0(j,i)+
zl0(j-1,i))
1584 if (
maske(j,i) <= 1)
then 1591 #if (MARGIN==1 || MARGIN==2) 1626 #if (GRID==0 || GRID==1) /* Stereographic projection */ 1631 #elif (GRID==2) /* Geographic coordinates */ 1664 subroutine topography3(dxi, deta, z_sl, anfdatname)
1668 #if (GRID==0 || GRID==1) 1677 character(len=100),
intent(in) :: anfdatname
1679 real(dp),
intent(out) :: dxi, deta, z_sl
1681 integer(i4b) :: i, j, n
1683 real(dp) :: half_width
1684 real(dp),
dimension(0:JMAX,0:IMAX) :: zl0_update
1686 real(dp),
parameter :: zl0_ocean = -2000.0_dp
1687 real(dp),
parameter :: epss = 0.01_dp
1695 #if (!defined(LAND_OCEAN_TRANSITION_WIDTH)) 1697 write(6, fmt=
'(a)')
' >>> topography3: LAND_OCEAN_TRANSITION_WIDTH not defined.' 1698 write(6, fmt=
'(a)')
' Value 0 assumed by default!' 1699 write(6, fmt=
'(a)')
' ' 1705 half_width = 0.5_dp*abs(land_ocean_transition_width) *1000.0_dp
1711 zl0(0,:) = zl0_ocean
1712 zl0(jmax,:) = zl0_ocean
1714 zl0(:,0) = zl0_ocean
1715 zl0(:,imax) = zl0_ocean
1719 #if (GRID==0 || GRID==1) 1722 deta = dx *1000.0_dp
1726 stop
' >>> topography3: GRID==2 not allowed for this application!' 1733 if ( (
xi(i) >= (1150.0e+03_dp+half_width-epss)) &
1734 .and.(
eta(j) >= (625.0e+03_dp+half_width-epss)) &
1735 .and.(
eta(j) <= (875.0e+03_dp-half_width+epss)) )
then 1737 zl0(j,i) = zl0_ocean
1744 if (half_width > epss)
then 1753 if ( ( .not.( (
xi(i) >= (1150.0e+03_dp+half_width-epss)) &
1754 .and.(
eta(j) >= (625.0e+03_dp+half_width-epss)) &
1755 .and.(
eta(j) <= (875.0e+03_dp-half_width+epss)) ) ) &
1757 ( (
xi(i) >= (1150.0e+03_dp-half_width-epss)) &
1758 .and.(
eta(j) >= (625.0e+03_dp-half_width-epss)) &
1759 .and.(
eta(j) <= (875.0e+03_dp+half_width+epss)) ) )
then 1761 zl0_update(j,i) =
zl0(j,i) &
1763 * (
zl0(j,i+1)-2.0_dp*
zl0(j,i)+
zl0(j,i-1)) &
1765 * (
zl0(j+1,i)-2.0_dp*
zl0(j,i)+
zl0(j-1,i))
1785 #if (GRID==0 || GRID==1) /* Stereographic projection */ 1790 #elif (GRID==2) /* Geographic coordinates */ real(dp), dimension(0:kcmax, 0:jmax, 0:imax) temp_c
temp_c(kc,j,i): Temperature in the upper (kc) ice domain
real(dp), dimension(0:jmax, 0:imax) c_slide
c_slide(j,i): Basal sliding coefficient
real(dp), dimension(0:jmax, 0:imax) phi
phi(j,i): Geographic latitude of grid point (i,j)
subroutine, public read_erg_nc(z_sl, filename)
Reading of time-slice files in native binary or NetCDF format.
real(dp), dimension(:), allocatable phi_core
phi_core(n): Geographical latitude of the prescribed borehole positions
logical, dimension(0:jmax, 0:imax) flag_inner_point
flag_inner_point(j,i): Inner-point flag. .true.: inner point, .false.: margin point ...
integer(i4b) grip_time_stp
grip_time_stp: Time step of the data values for the surface temperature anomaly
integer(i2b), dimension(0:jmax, 0:imax) n_cts
n_cts(j,i): Mask for thermal conditions. -1: cold ice base, 0: temperate ice base with cold ice above...
integer(i4b) ndata_specmap
ndata_specmap: Number of data values for the sea level
subroutine, public calc_c_int_inv_table()
Computation of the inverse of the temperature integral of the specific heat of ice as a table (c_int_...
real(dp), dimension(0:kcmax) eaz_c
eaz_c(kc): Abbreviation for exp(aa*zeta(kc))
real(dp), dimension(0:jmax, 0:imax) q_geo
q_geo(j,i): Geothermal heat flux
subroutine sico_init(delta_ts, glac_index, mean_accum, dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, time, time_init, time_end, time_output, dxi, deta, dzeta_c, dzeta_t, dzeta_r, z_sl, dzsl_dtau, z_mar, ii, jj, nn, ndat2d, ndat3d, n_output, runname)
Main routine of sico_init_m: Initialisations for SICOPOLIS.
real(dp) rho_w
RHO_W: Density of pure water.
subroutine, public calc_enhance_2()
Computation of the flow enhancement factor. Case ENHMOD==2: two different values depending on age for...
real(dp) a
A: Semi-major axis of the planet.
subroutine, public calc_vz_floating(z_sl, dxi, deta, dzeta_c)
Computation of the vertical velocity vz for floating ice.
subroutine, public output1(runname, time, delta_ts, glac_index, z_sl, flag_3d_output, ndat2d, ndat3d)
Writing of time-slice files in native binary or NetCDF format.
integer(i4b) specmap_time_max
specmap_time_max: Maximum time of the data values for the sea level
Material properties of ice: Rate factor, heat conductivity, specific heat (heat capacity), creep function, viscosity.
real(dp) s_b
s_b: Gradient of accumulation rate change with horizontal distance
real(dp), parameter eps
eps: Small number
subroutine, public read_phys_para()
Reading of physical parameters.
integer(i2b) forcing_flag
forcing_flag: Flag for the forcing type. 1: forcing by a spatially constant surface temperature anoma...
logical, dimension(0:jmax, 0:imax) flag_grounding_line_1
flag_grounding_line_1(j,i): Grounding line flag. .true.: grounding line point (grounded ice point wit...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) enth_t
enth_t(kt,j,i): Enthalpy in the lower (kt) ice domain
Conversion from temperature (temp) and water content (omega) to enthalpy (enth) and vice versa...
subroutine, public init_temp_water_age_2()
Initial temperature, water content and age (case ANF_DAT==2: ice-free conditions with relaxed bedrock...
real(dp), dimension(0:jmax, 0:imax) dh_t_dtau
dH_t_dtau(j,i): Derivative of H_t by tau (time)
real(dp), dimension(0:jmax, 0:imax) lambda
lambda(j,i): Geographic longitude of grid point (i,j)
real(dp), dimension(0:jmax, 0:imax) dh_c_dtau
dH_c_dtau(j,i): Derivative of H_c by tau (time)
integer(i2b), dimension(0:jmax, 0:imax) maske
maske(j,i): Ice-land-ocean mask. 0: grounded ice, 1: ice-free land, 2: ocean, 3: floating ice ...
real(dp), dimension(0:jmax, 0:imax) p_b_w
p_b_w(j,i): Basal water pressure
integer(i4b) specmap_time_min
specmap_time_min: Minimum time of the data values for the sea level
real(dp), dimension(0:jmax, 0:imax) as_perp
as_perp(j,i): Accumulation-ablation function at the ice surface (SMB)
real(dp), dimension(0:jmax, 0:imax) area
area(j,i): Area of grid cell associated with grid point (i,j)
Computation of all components of the strain-rate tensor, the full effective strain rate and the shear...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) temp_t_m
temp_t_m(kt,j,i): Melting temperature in the lower (kt) ice domain
subroutine, public stereo_inv_ellipsoid(x_val, y_val, A, B, lambda0, phi0, lambda_val, phi_val)
Inverse stereographic projection for an ellipsoidal planet.
subroutine topograd_1(dxi, deta, n_switch)
Calculation of topography gradients on the staggered grid and on the grid points (the latter by secon...
subroutine, public calc_enhance_5()
Computation of the flow enhancement factor. Case ENHMOD==5: minimal anisotropic enhancement factor fo...
real(dp) b
B: Semi-minor axis of the planet.
real(dp), dimension(0:jmax, 0:imax) zl
zl(j,i): Coordinate z of the lithosphere surface
subroutine, public calc_vxy_static()
Computation of the horizontal velocity vx, vy, the horizontal volume flux qx, qy etc. for static ice.
subroutine, public output4(time, dxi, deta, delta_ts, glac_index, z_sl)
Writing of time-series data of the deep ice cores on file in ASCII format (and optionally in NetCDF f...
integer(i2b), dimension(0:jmax, 0:imax) kc_cts
kc_cts(j,i): Position kc of the CTS (for COLD, ENTC, ENTM)
integer(i4b) grip_time_max
grip_time_max: Maximum time of the data values for the surface temperature anomaly ...
real(dp), dimension(0:jmax, 0:imax) q_tld
Q_tld(j,i): Water drainage rate from the temperate layer.
subroutine, public calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
Computation of the horizontal velocity vx, vy, the horizontal volume flux qx, qy and the flux across ...
real(dp) b_max
b_max: Maximum accumulation rate
Declarations of global variables for SICOPOLIS (for the ANT domain).
integer(i4b), parameter rcl1
rcl1: Maximum length of record for input files (with factor 3 safety margin)
Initialisations for SICOPOLIS.
Computation of the flow enhancement factor.
integer(i4b) ndata_grip
ndata_grip: Number of data values for the surface temperature anomaly
Computation of the horizontal velocity vx, vy.
integer(i4b), dimension(0:jmax, 0:imax) q_weert
q_weert(j,i): Weertman exponent for the basal pressure
subroutine, public calc_temp_melt()
Computation of the melting temperatures.
real(dp) ea
ea: Abbreviation for exp(aa)
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) enth_c
enth_c(kc,j,i): Enthalpy in the upper (kc) ice domain
logical flag_aa_nonzero
flag_aa_nonzero: Flag for the exponential stretch parameter aa. .true.: aa greater than zero (non-equ...
Initial temperature, water content and age.
subroutine, public calc_vz_grounded(dxi, deta, dzeta_c, dzeta_t)
Computation of the vertical velocity vz for grounded ice.
real(dp) aa
aa: Exponential stretch parameter of the non-equidistant vertical grid in the upper (kc) ice domain ...
Reading of several input data.
Declarations of kind types for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) zs
zs(j,i): Coordinate z of the surface topography
real(dp), dimension(0:jmax, 0:imax) h_c
H_c(j,i): Thickness of ice in the upper (kc) domain (thickness of the cold-ice layer for POLY...
real(dp) year_zero
year_zero: SICOPOLIS year zero in astronomical year numbering [ = signed year CE (AD) ] ...
real(dp), dimension(:), allocatable specmap_zsl
specmap_zsl(n): Data values for the sea level
Computation of the melting and basal temperatures.
subroutine topograd_2(dxi, deta, n_switch)
Calculation of topography gradients on the staggered grid and on the grid points (the latter by fourt...
real(dp) eld
eld: Equilibrium line distance
real(dp), dimension(-190:10) kappa
KAPPA(n): Tabulated values for the heat conductivity of ice.
Computation of the vertical velocity vz.
real(dp), dimension(0:jmax, 0:imax) dzm_dtau
dzm_dtau(j,i): Derivative of zm by tau (time)
real(dp), dimension(0:krmax) zeta_r
zeta_r(kr): Sigma coordinate zeta_r of grid point kr
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) omega_c
omega_c(kc,j,i): Water content in the upper (kc) ice domain
real(dp), dimension(:), allocatable y_core
y_core(n): Coordinate eta (= y) of the prescribed borehole positions
integer(i2b), dimension(0:jmax, 0:imax) maske_old
maske_old(j,i): Old value of maske (at the previous time step)
character(len=64) ch_domain_long
ch_domain_long: Long name of the computational domain
Definition of the components g11 and g22 of the metric tensor of the applied numerical coordinates...
Computation of the forward or inverse stereographic projection, alternatively for a spherical or an e...
real(dp), dimension(0:jmax, 0:imax) zl0
zl0(j,i): zl for isostatically relaxed ice-free conditions
subroutine, public calc_vz_static()
Computation of the vertical velocity vz for static ice.
real(dp) phi0
PHI0: Standard parallel of the stereographic projection.
subroutine, public ice_mat_eqs_pars(RF_table, R_T_val, KAPPA_table, C_table, n_tmp_min, n_tmp_max, RHO_I_val, RHO_C_val, KAPPA_C_val, C_C_val)
Setting of required physical parameters.
Comparison of single- or double-precision floating-point numbers.
subroutine, public calc_enhance_1()
Computation of the flow enhancement factor. Case ENHMOD==1: constant for grounded ice...
real(dp), dimension(0:jmax, 0:imax) zm
zm(j,i): Coordinate z of the bottom of the upper (kc) ice domain = top of the lower (kt) ice domain (...
real(dp), dimension(-190:10) rf
RF(n): Tabulated values for the rate factor of cold ice.
real(dp) s_t
s_t: Gradient of surface temperature change with horizontal distance
real(dp), dimension(0:jmax, 0:imax) q_b_tot
Q_b_tot(j,i): Sum of Q_bm and Q_tld.
real(dp), dimension(0:jmax, 0:imax) q_bm
Q_bm(j,i): Basal melting rate.
real(dp) function, public enth_fct_temp_omega(temp_val, omega_val)
Enthalpy as a function of temperature and water content.
subroutine, public calc_vxy_sia(dzeta_c, dzeta_t)
Computation of the shear stresses txz, tyz, the effective shear stress sigma, the depth-averaged flui...
real(dp), dimension(-190:10) c
C(n): Tabulated values for the specific heat of ice.
real(dp), dimension(0:kcmax) eaz_c_quotient
eaz_c_quotient(kc): Abbreviation for (eaz_c(kc)-1.0)/(ea-1.0)
subroutine boundary(time, dtime, dxi, deta, delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
Main routine of boundary_m: Computation of the surface temperature (must be less than 0 deg C!) and o...
integer(i4b) specmap_time_stp
specmap_time_stp: Time step of the data values for the sea level
subroutine, public output2(time, dxi, deta, delta_ts, glac_index, z_sl)
Writing of time-series data on file in ASCII format (and optionally in NetCDF format).
real(dp), dimension(-jmax:jmax,-imax:imax) dist_dxdy
dist_dxdy(jr,ir): Distance between grid points with delta_i=ir, delta_j=jr
Calculation of topography gradients on the staggered grid and on the grid points (including length re...
character(len=16), dimension(:), allocatable ch_core
ch_core(n): Names of the prescribed borehole positions
real(dp), dimension(0:jmax, 0:imax) sq_g11_g
sq_g11_g(j,i): Square root of the coefficient g11 of the metric tensor on grid point (i...
real(dp), dimension(0:jmax, 0:imax) as_perp_apl
as_perp_apl(j,i): Applied accumulation-ablation function (SMB)
logical, dimension(0:jmax, 0:imax) flag_calving_front_1
flag_calving_front_1(j,i): Calving front flag. .true.: calving front point (floating ice point with a...
subroutine, public metric()
Main routine of module metric_m: Definition of the components g11 and g22 of the metric tensor of the...
subroutine, public calc_enhance_3(time)
Computation of the flow enhancement factor. Case ENHMOD==3: two different values depending on time of...
integer(i4b) grip_time_min
grip_time_min: Minimum time of the data values for the surface temperature anomaly ...
real(dp), dimension(0:jmax, 0:imax) time_lag_asth
time_lag_asth(j,i): Time lag of the relaxing asthenosphere
real(dp), dimension(0:jmax) eta
eta(j): Coordinate eta (= y) of grid point j
real(dp), dimension(:), allocatable x_core
x_core(n): Coordinate xi (= x) of the prescribed borehole positions
real(dp) temp_min
temp_min: Minimum surface temperature
real(dp), dimension(0:imax) xi
xi(i): Coordinate xi (= x) of grid point i
character(len=16) ch_domain_short
ch_domain_short: Short name of the computational domain
real(dp) r_t
R_T: Coefficient of the water-content dependence in the rate factor for temperate ice...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) omega_t
omega_t(kt,j,i): Water content in the lower (kt) ice domain
subroutine, public calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
Main subroutine of calc_dxyz_m: Computation of all components of the strain-rate tensor, the full effective strain rate and the shear fraction.
subroutine, public calc_enhance_4()
Computation of the flow enhancement factor. Case ENHMOD==4: minimal anisotropic enhancement factor fo...
real(dp), dimension(0:ktmax) zeta_t
zeta_t(kt): Sigma coordinate zeta_t of grid point kt
logical, dimension(0:jmax, 0:imax) flag_calving_front_2
flag_calving_front_2(j,i): Calving front flag. .true.: calving front point (ocean point with at least...
Computation of the surface temperature (must be less than 0 deg C!) and of the accumulation-ablation ...
real(dp) l
L: Latent heat of ice.
real(dp), parameter eps_sp_dp
eps_sp_dp: Small number to single-precision accuracy in double precision
real(dp) y_hat
y_hat: Coordinate eta (= y) of the centre of the model domain
real(dp) rho
RHO: Density of ice.
real(dp) x_hat
x_hat: Coordinate xi (= x) of the centre of the model domain
subroutine topography3(dxi, deta, z_sl, anfdatname)
Definition of the initial surface and bedrock topography (including gradients) and of the horizontal ...
integer(i4b), dimension(0:jmax, 0:imax) p_weert
p_weert(j,i): Weertman exponent for the basal shear stress
real(dp), dimension(:), allocatable lambda_core
lambda_core(n): Geographical longitude of the prescribed borehole positions
integer(i4b) n_core
n_core: Number of positions to be considered in the time-series file for deep boreholes ...
integer, parameter dp
Double-precision reals.
subroutine topography2(dxi, deta)
Definition of the initial surface and bedrock topography (including gradients) and of the horizontal ...
real(dp), dimension(0:jmax, 0:imax) zb
zb(j,i): Coordinate z of the ice base
logical, dimension(0:jmax, 0:imax) flag_grounding_line_2
flag_grounding_line_2(j,i): Grounding line flag. .true.: grounding line point (floating ice point wit...
Writing of output data on files.
real(dp), dimension(0:jmax, 0:imax) dzb_dtau
dzb_dtau(j,i): Derivative of zb by tau (time)
real(dp), dimension(0:kcmax) zeta_c
zeta_c(kc): Sigma coordinate zeta_c of grid point kc
real(dp) lambda0
LAMBDA0: Reference longitude (central meridian) of the stereographic projection.
subroutine, public calc_c_int_table(c_table, n_tmp_min, n_tmp_max, L_val)
Computation of the temperature integral of the specific heat of ice as a table (c_int_table). Further, definition of the latent heat of ice.
real(dp), dimension(0:jmax, 0:imax) h_t
H_t(j,i): Thickness of ice in the lower (kt) domain (thickness of the temperate layer for POLY...
subroutine topography1(dxi, deta)
Definition of the initial surface and bedrock topography (including gradients) and of the horizontal ...
real(dp), dimension(0:jmax, 0:imax) h_w
H_w(j,i): Thickness of the water column under the ice base.
subroutine, public calc_vxy_b_sia(time, z_sl)
Computation of the basal horizontal velocity vx_b, vy_b in the shallow ice approximation.
Declarations of global variables for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) dzs_dtau
dzs_dtau(j,i): Derivative of zs by tau (time)
real(dp), dimension(0:jmax, 0:imax) flex_rig_lith
flex_rig_lith(j,i): Flexural rigidity of the lithosphere
real(dp), dimension(:), allocatable griptemp
griptemp(n): Data values for the surface temperature anomaly
real(dp), dimension(0:jmax, 0:imax) dzl_dtau
dzl_dtau(j,i): Derivative of zl by tau (time)
real(dp), dimension(0:jmax, 0:imax) sq_g22_g
sq_g22_g(j,i): Square root of the coefficient g22 of the metric tensor on grid point (i...