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 integer(i4b) :: ndata_insol
97 real(dp) :: dtime0, dtime_temp0, dtime_wss0, dtime_out0, dtime_ser0
98 real(dp) :: time_init0, time_end0, time_output0(100)
99 real(dp) :: time_chasm_init0, time_chasm_end0
101 character(len=100) :: anfdatname
102 character(len=256) :: filename_with_path
103 character(len=256) :: shell_command
104 character :: ch_dummy
105 logical :: flag_init_output, flag_3d_output
107 character(len=64),
parameter :: fmt1 =
'(a)', &
112 character(len= 8) :: ch_imax
113 character(len=128) :: fmt4
115 write(ch_imax, fmt=
'(i8)') imax
116 write(fmt4, fmt=
'(a)')
'('//trim(adjustl(ch_imax))//
'(i1),i1)' 118 write(unit=6, fmt=
'(a)')
' ' 119 write(unit=6, fmt=
'(a)')
' -------- sico_init --------' 120 write(unit=6, fmt=
'(a)')
' ' 132 #elif (defined(EMTP2SGE)) 140 #elif (defined(NHEM)) 144 #elif (defined(SCAND)) 148 #elif (defined(TIBET)) 152 #elif (defined(NMARS)) 156 #elif (defined(SMARS)) 168 stop
' >>> sico_init: No valid domain specified!' 189 #if (CALCTHK==3 || CALCTHK==6 || MARGIN==3 || DYNAMICS==2) 190 call lis_initialize(ierr)
212 if ( trim(version) /= trim(sico_version) ) &
213 stop
' >>> sico_init: SICOPOLIS version not compatible with header file!' 217 #if (!defined(DYNAMICS)) 218 stop
' >>> sico_init: DYNAMICS not defined in the header file!' 221 #if (!defined(CALCMOD)) 222 stop
' >>> sico_init: CALCMOD not defined in the header file!' 225 #if (defined(ENTHMOD)) 226 write(6, fmt=
'(a)')
' >>> sico_init: ENTHMOD must not be defined any more.' 227 write(6, fmt=
'(a)')
' Please update your header file!' 234 #if (GRID==0 || GRID==1) 236 if (approx_equal(dx, 20.0_dp,
eps_sp_dp))
then 238 if ((imax /= 120).or.(jmax /= 120))
then 239 stop
' >>> sico_init: Wrong values for IMAX and JMAX!' 242 else if (approx_equal(dx, 10.0_dp,
eps_sp_dp))
then 244 if ((imax /= 240).or.(jmax /= 240))
then 245 stop
' >>> sico_init: Wrong values for IMAX and JMAX!' 248 else if (approx_equal(dx, 5.0_dp,
eps_sp_dp))
then 250 if ((imax /= 480).or.(jmax /= 480))
then 251 stop
' >>> sico_init: Wrong values for IMAX and JMAX!' 255 stop
' >>> sico_init: Wrong value for DX!' 260 stop
' >>> sico_init: GRID==2 not allowed for smars application!' 268 #if (CALCMOD==0 || CALCMOD==2 || CALCMOD==3 || CALCMOD==-1) 271 write(6, fmt=
'(a)')
' >>> sico_init: For options CALCMOD==0, 2, 3 or -1,' 272 write(6, fmt=
'(a)')
' the separate kt domain is redundant.' 273 write(6, fmt=
'(a)')
' Therefore, consider setting KTMAX to 2.' 274 write(6, fmt=
'(a)')
' ' 283 stop
' >>> sico_init: Option ADV_HOR==1 (central differences) not defined!' 291 #if ((MARGIN==3 && DYNAMICS==1) || DYNAMICS==2) /* requires SSA or SStA */ 293 write(6, fmt=
'(a)')
' >>> sico_init: Distortion correction not implemented' 294 write(6, fmt=
'(a)')
' for the shallow shelf approximation (SSA)' 295 write(6, fmt=
'(a)')
' or the shelfy stream approximation (SStA)' 296 write(6, fmt=
'(a)')
' -> GRID==0 required!' 308 dtime_temp0 = dtime_temp0
310 dtime_wss0 = dtime_wss0
315 dzeta_c = 1.0_dp/
real(kcmax,dp)
316 dzeta_t = 1.0_dp/
real(ktmax,dp)
317 dzeta_r = 1.0_dp/
real(krmax,dp)
326 if (deform >=
eps)
then 406 if ((i <= imax).and.(j <= jmax))
then 418 anfdatname = anfdatname
420 #if (defined(YEAR_ZERO)) 426 time_init0 = time_init0
427 time_end0 = time_end0
428 dtime_ser0 = dtime_ser0
431 time_chasm_init0 = time_chasm_init0
432 time_chasm_end0 = time_chasm_end0
435 #if (OUTPUT==1 || OUTPUT==3) 436 dtime_out0 = dtime_out0
439 #if (OUTPUT==2 || OUTPUT==3) 441 time_output0( 1) = time_out0_01
442 time_output0( 2) = time_out0_02
443 time_output0( 3) = time_out0_03
444 time_output0( 4) = time_out0_04
445 time_output0( 5) = time_out0_05
446 time_output0( 6) = time_out0_06
447 time_output0( 7) = time_out0_07
448 time_output0( 8) = time_out0_08
449 time_output0( 9) = time_out0_09
450 time_output0(10) = time_out0_10
451 time_output0(11) = time_out0_11
452 time_output0(12) = time_out0_12
453 time_output0(13) = time_out0_13
454 time_output0(14) = time_out0_14
455 time_output0(15) = time_out0_15
456 time_output0(16) = time_out0_16
457 time_output0(17) = time_out0_17
458 time_output0(18) = time_out0_18
459 time_output0(19) = time_out0_19
460 time_output0(20) = time_out0_20
465 shell_command =
'if [ ! -d' 466 shell_command = trim(shell_command)//
' '//outpath
467 shell_command = trim(shell_command)//
' '//
'] ; then mkdir' 468 shell_command = trim(shell_command)//
' '//outpath
469 shell_command = trim(shell_command)//
' '//
'; fi' 470 call system(trim(shell_command))
473 filename_with_path = trim(outpath)//
'/'//trim(runname)//
'.log' 475 open(10, iostat=ios, file=trim(filename_with_path), status=
'new')
477 if (ios /= 0) stop
' >>> sico_init: Error when opening the log file!' 479 write(10, fmt=trim(fmt1))
'Computational domain:' 481 write(10, fmt=trim(fmt1))
' ' 483 write(10, fmt=trim(fmt2a))
'GRID = ', grid
484 write(10, fmt=trim(fmt1))
' ' 486 write(10, fmt=trim(fmt2))
'imax =', imax
487 write(10, fmt=trim(fmt2))
'jmax =', jmax
488 write(10, fmt=trim(fmt2))
'kcmax =', kcmax
489 write(10, fmt=trim(fmt2))
'ktmax =', ktmax
490 write(10, fmt=trim(fmt2))
'krmax =', krmax
491 write(10, fmt=trim(fmt1))
' ' 493 write(10, fmt=trim(fmt3))
'a =',
aa 494 write(10, fmt=trim(fmt1))
' ' 496 write(10, fmt=trim(fmt3))
'x0 =', x0
497 write(10, fmt=trim(fmt3))
'y0 =', y0
498 write(10, fmt=trim(fmt3))
'dx =', dx
499 write(10, fmt=trim(fmt1))
' ' 501 write(10, fmt=trim(fmt3))
'year_zero =',
year_zero 502 write(10, fmt=trim(fmt3))
'time_init =', time_init0
503 write(10, fmt=trim(fmt3))
'time_end =', time_end0
504 write(10, fmt=trim(fmt3))
'dtime =', dtime0
505 write(10, fmt=trim(fmt3))
'dtime_temp =', dtime_temp0
507 write(10, fmt=trim(fmt3))
'dtime_wss =', dtime_wss0
509 write(10, fmt=trim(fmt1))
' ' 511 write(10, fmt=trim(fmt2))
'ANF_DAT =', anf_dat
512 write(10, fmt=trim(fmt1))
'zs_present file = '//zs_present_file
514 write(10, fmt=trim(fmt1))
'zl_present file = '//zl_present_file
516 write(10, fmt=trim(fmt1))
'zl0 file = '//zl0_file
517 write(10, fmt=trim(fmt1))
'mask_present file = '//mask_present_file
518 #if (ANF_DAT==1 && defined(TEMP_INIT)) 519 write(10, fmt=trim(fmt2))
'TEMP_INIT =', temp_init
522 write(10, fmt=trim(fmt1))
'Initial-value file = '//anfdatname
523 write(10, fmt=trim(fmt1))
'Path to initial-value file = '//anfdatpath
525 write(10, fmt=trim(fmt1))
' ' 527 write(10, fmt=trim(fmt1))
'Physical-parameter file = '//phys_para_file
528 write(10, fmt=trim(fmt1))
' ' 530 #if (CALCTHK==2 || CALCTHK==3 || CALCTHK==5 || CALCTHK==6) 531 write(10, fmt=trim(fmt3))
'ovi_weight =', ovi_weight
532 #if (CALCTHK==2 || CALCTHK==5) 533 write(10, fmt=trim(fmt3))
'omega_sor =', omega_sor
535 write(10, fmt=trim(fmt2a))
'iter_max_sor = ', iter_max_sor
538 write(10, fmt=trim(fmt1))
' ' 541 #if (TSURFACE==1 || TSURFACE==6) 542 write(10, fmt=trim(fmt3))
'delta_ts0 =', delta_ts0
544 write(10, fmt=trim(fmt3))
'sine_amplit =', sine_amplit
545 write(10, fmt=trim(fmt3))
'sine_period =', sine_period
547 #if (TSURFACE==1 || TSURFACE==2 || TSURFACE==3) 548 write(10, fmt=trim(fmt3))
'temp0_ma_90S =', temp0_ma_90s
550 #if (TSURFACE==1 || TSURFACE==2 || TSURFACE==3 || TSURFACE==4 || TSURFACE==5) 551 write(10, fmt=trim(fmt3))
'c_ma =', c_ma
552 write(10, fmt=trim(fmt3))
'gamma_ma =', gamma_ma
555 write(10, fmt=trim(fmt1))
'Insolation file = '//insol_ma_90s_file
557 #if (TSURFACE==4 || TSURFACE==5 || TSURFACE==6) 558 write(10, fmt=trim(fmt3))
'albedo =', albedo
562 write(10, fmt=trim(fmt3))
'acc_present_val =', acc_present_val
565 #if (ACCSURFACE==1 || ACCSURFACE==2) 566 write(10, fmt=trim(fmt3))
'gamma_s =', gamma_s
569 #if (ABLSURFACE==1 || ABLSURFACE==2) 570 write(10, fmt=trim(fmt3))
'eld_0 =', eld_0
571 write(10, fmt=trim(fmt3))
'g_mb_0 =', g_0
572 write(10, fmt=trim(fmt3))
'gamma_eld =', gamma_eld
573 write(10, fmt=trim(fmt3))
'gamma_g =', gamma_g
576 write(10, fmt=trim(fmt2a))
'SEA_LEVEL = ', sea_level
578 write(10, fmt=trim(fmt3))
'z_sl0 =', z_sl0
580 write(10, fmt=trim(fmt1))
'sea-level file = '//sea_level_file
582 write(10, fmt=trim(fmt1))
' ' 585 #if (MARINE_ICE_CALVING==2 || MARINE_ICE_CALVING==3) 586 write(10, fmt=trim(fmt3))
'z_mar =', z_mar
587 write(10, fmt=trim(fmt1))
' ' 588 #elif (MARINE_ICE_CALVING==4 || MARINE_ICE_CALVING==5 \ 589 || marine_ice_calving==6 || marine_ice_calving==7)
590 write(10, fmt=trim(fmt3))
'fact_z_mar =', fact_z_mar
591 write(10, fmt=trim(fmt1))
' ' 592 #elif (MARINE_ICE_FORMATION==2 && MARINE_ICE_CALVING==9) 593 write(10, fmt=trim(fmt3))
'calv_uw_coeff =', calv_uw_coeff
594 write(10, fmt=trim(fmt3))
'r1_calv_uw =', r1_calv_uw
595 write(10, fmt=trim(fmt3))
'r2_calv_uw =', r2_calv_uw
596 write(10, fmt=trim(fmt1))
' ' 599 #if (ICE_SHELF_CALVING==2) 600 write(10, fmt=trim(fmt3))
'H_calv =', h_calv
601 write(10, fmt=trim(fmt1))
' ' 605 #if (defined(BASAL_HYDROLOGY)) 606 write(10, fmt=trim(fmt2a))
'BASAL_HYDROLOGY = ', basal_hydrology
608 write(10, fmt=trim(fmt2a))
'SLIDE_LAW = ', slide_law
609 write(10, fmt=trim(fmt3))
'c_slide =',
c_slide 610 write(10, fmt=trim(fmt3))
'gamma_slide =', gamma_slide
611 write(10, fmt=trim(fmt2a))
'p_weert = ',
p_weert 612 write(10, fmt=trim(fmt2a))
'q_weert = ',
q_weert 613 #if (defined(TIME_RAMP_UP_SLIDE)) 614 write(10, fmt=trim(fmt3))
'time_ramp_up_slide =', time_ramp_up_slide
617 write(10, fmt=trim(fmt3))
'red_pres_limit_fact =', red_pres_limit_fact
619 #if (BASAL_HYDROLOGY==1) 620 write(10, fmt=trim(fmt3))
'c_Hw_slide =', c_hw_slide
621 write(10, fmt=trim(fmt3))
'Hw0_slide =', hw0_slide
623 write(10, fmt=trim(fmt1))
' ' 625 write(10, fmt=trim(fmt2a))
'Q_GEO_MOD = ', q_geo_mod
627 write(10, fmt=trim(fmt3))
'q_geo =',
q_geo 629 write(10, fmt=trim(fmt1))
'q_geo file = '//q_geo_file
631 write(10, fmt=trim(fmt1))
' ' 633 write(10, fmt=trim(fmt2))
'REBOUND =', rebound
635 write(10, fmt=trim(fmt3))
'frac_llra =', frac_llra
637 #if (REBOUND==1 || REBOUND==2) 638 write(10, fmt=trim(fmt2))
'TIME_LAG_MOD =', time_lag_mod
639 #if (TIME_LAG_MOD==1) 640 write(10, fmt=trim(fmt3))
'time_lag =', time_lag
641 #elif (TIME_LAG_MOD==2) 642 write(10, fmt=trim(fmt1))
'time_lag_file = '//time_lag_file
644 stop
' >>> sico_init: TIME_LAG_MOD must be either 1 or 2!' 648 write(10, fmt=trim(fmt2))
'FLEX_RIG_MOD =', flex_rig_mod
649 #if (FLEX_RIG_MOD==1) 650 write(10, fmt=trim(fmt3))
'flex_rig =', flex_rig
651 #elif (FLEX_RIG_MOD==2) 652 write(10, fmt=trim(fmt1))
'flex_rig_file = '//flex_rig_file
654 stop
' >>> sico_init: FLEX_RIG_MOD must be either 1 or 2!' 657 write(10, fmt=trim(fmt2))
'Q_LITHO =', q_litho
658 write(10, fmt=trim(fmt1))
' ' 661 write(10, fmt=trim(fmt3))
'gr_size =', gr_size
662 write(10, fmt=trim(fmt1))
' ' 665 write(10, fmt=trim(fmt3))
'sigma_res =', sigma_res
666 write(10, fmt=trim(fmt1))
' ' 668 write(10, fmt=trim(fmt3))
'frac_dust =', frac_dust
669 write(10, fmt=trim(fmt1))
' ' 671 write(10, fmt=trim(fmt2))
'ENHMOD =', enhmod
672 #if (ENHMOD==1 || ENHMOD==2 || ENHMOD==3) 673 write(10, fmt=trim(fmt3))
'enh_fact =', enh_fact
675 #if (ENHMOD==2 || ENHMOD==3) 676 write(10, fmt=trim(fmt3))
'enh_intg =', enh_intg
679 write(10, fmt=trim(fmt3))
'age_trans =', age_trans_0
682 write(10, fmt=trim(fmt3))
'date_trans1 =', date_trans1_0
683 write(10, fmt=trim(fmt3))
'date_trans2 =', date_trans2_0
684 write(10, fmt=trim(fmt3))
'date_trans3 =', date_trans3_0
686 #if (ENHMOD==4 || ENHMOD==5) 687 write(10, fmt=trim(fmt3))
'enh_compr =', enh_compr
688 write(10, fmt=trim(fmt3))
'enh_shear =', enh_shear
690 #if ((ENHMOD==1 || ENHMOD==2 || ENHMOD==3 || ENHMOD==4) && MARGIN==3) 691 write(10, fmt=trim(fmt3))
'enh_shelf =', enh_shelf
693 write(10, fmt=trim(fmt1))
' ' 695 write(10, fmt=trim(fmt2a))
'CHASM =', chasm
697 write(10, fmt=trim(fmt1))
'mask_chasm file = '//mask_chasm_file
698 write(10, fmt=trim(fmt3))
'time_chasm_init =', time_chasm_init0
699 write(10, fmt=trim(fmt3))
'time_chasm_end =', time_chasm_end0
700 write(10, fmt=trim(fmt3))
'q_geo_chasm =', q_geo_chasm
701 write(10, fmt=trim(fmt3))
'erosion_chasm =', erosion_chasm
702 write(10, fmt=trim(fmt1))
' ' 705 write(10, fmt=trim(fmt3))
'numdiff_H_t =', numdiff_h_t
706 write(10, fmt=trim(fmt3))
'tau_cts =', tau_cts
707 write(10, fmt=trim(fmt3))
'vh_max =', vh_max
708 write(10, fmt=trim(fmt3))
'hd_min =', hd_min
709 write(10, fmt=trim(fmt3))
'hd_max =', hd_max
710 #if (defined(QBM_MIN)) 711 write(10, fmt=trim(fmt3))
'qbm_min =', qbm_min
712 #elif (defined(QB_MIN)) /* obsolete */ 713 write(10, fmt=trim(fmt3))
'qb_min =', qb_min
715 #if (defined(QBM_MAX)) 716 write(10, fmt=trim(fmt3))
'qbm_max =', qbm_max
717 #elif (defined(QB_MAX)) /* obsolete */ 718 write(10, fmt=trim(fmt3))
'qb_max =', qb_max
720 write(10, fmt=trim(fmt3))
'age_min =', age_min
721 write(10, fmt=trim(fmt3))
'age_max =', age_max
722 write(10, fmt=trim(fmt3))
'mean_accum =', mean_accum
724 write(10, fmt=trim(fmt3))
'age_diff =', agediff
726 write(10, fmt=trim(fmt1))
' ' 728 write(10, fmt=trim(fmt2a))
'DYNAMICS = ', dynamics
729 #if ((DYNAMICS==1 && MARGIN==3) || DYNAMICS==2) 730 #if (defined(LIS_OPTS)) 731 write(10, fmt=trim(fmt1))
'lis_opts = '//lis_opts
733 #if (defined(N_ITER_SSA)) 734 write(10, fmt=trim(fmt2a))
'n_iter_ssa = ', n_iter_ssa
736 #if (defined(RELAX_FACT_SSA)) 737 write(10, fmt=trim(fmt3))
'relax_fact_ssa =', relax_fact_ssa
740 #if (DYNAMICS==2 && defined(RATIO_SL_THRESH)) 741 write(10, fmt=trim(fmt3))
'ratio_sl_thresh =', ratio_sl_thresh
743 #if (DYNAMICS==2 && defined(SSTA_SIA_WEIGH_FCT)) 744 write(10, fmt=trim(fmt2a))
'SSTA_SIA_WEIGH_FCT = ', ssta_sia_weigh_fct
746 write(10, fmt=trim(fmt1))
' ' 748 write(10, fmt=trim(fmt2))
'CALCMOD =', calcmod
749 #if (CALCMOD==-1 && defined(TEMP_CONST)) 750 write(10, fmt=trim(fmt3))
'TEMP_CONST =', temp_const
752 #if (CALCMOD==-1 && defined(AGE_CONST)) 753 write(10, fmt=trim(fmt3))
'AGE_CONST =', age_const
755 #if (CALCMOD==1 && defined(CTS_MELTING_FREEZING)) 756 write(10, fmt=trim(fmt2))
'CTS_MELTING_FREEZING =', cts_melting_freezing
758 write(10, fmt=trim(fmt2))
'FLOW_LAW =', flow_law
759 write(10, fmt=trim(fmt2))
'FIN_VISC =', fin_visc
760 write(10, fmt=trim(fmt2))
'MARGIN =', margin
762 write(10, fmt=trim(fmt2))
'MARINE_ICE_FORMATION =', marine_ice_formation
763 write(10, fmt=trim(fmt2))
'MARINE_ICE_CALVING =', marine_ice_calving
765 write(10, fmt=trim(fmt2))
'ICE_SHELF_CALVING =', ice_shelf_calving
767 #if (defined(THK_EVOL)) 768 write(10, fmt=trim(fmt2))
'THK_EVOL =', thk_evol
770 stop
' >>> sico_init: Define THK_EVOL in header file!' 772 #if (defined(CALCTHK)) 773 write(10, fmt=trim(fmt2))
'CALCTHK =', calcthk
775 stop
' >>> sico_init: Define CALCTHK in header file!' 777 write(10, fmt=trim(fmt2))
'ADV_HOR =', adv_hor
778 write(10, fmt=trim(fmt2))
'ADV_VERT =', adv_vert
779 write(10, fmt=trim(fmt2))
'TOPOGRAD =', topograd
780 write(10, fmt=trim(fmt2))
'TSURFACE =', tsurface
781 write(10, fmt=trim(fmt2))
'ACC_UNIT =', acc_unit
782 write(10, fmt=trim(fmt2))
'ACC_PRESENT=', acc_present
783 write(10, fmt=trim(fmt2))
'ACCSURFACE =', accsurface
784 write(10, fmt=trim(fmt2))
'ABLSURFACE =', ablsurface
785 #if (defined(MB_ACCOUNT)) 786 write(10, fmt=trim(fmt2a))
'MB_ACCOUNT = ', mb_account
788 write(10, fmt=trim(fmt1))
' ' 790 #if (defined(OUT_TIMES)) 791 write(10, fmt=trim(fmt2a))
'OUT_TIMES = ', out_times
793 #if (defined(OUTPUT_INIT)) 794 write(10, fmt=trim(fmt2a))
'OUTPUT_INIT = ', output_init
796 write(10, fmt=trim(fmt2a))
'OUTPUT = ', output
797 #if (OUTPUT==1 || OUTPUT==3) 798 write(10, fmt=trim(fmt3))
'dtime_out =' , dtime_out0
800 write(10, fmt=trim(fmt3))
'dtime_ser =' , dtime_ser0
801 #if (OUTPUT==1 || OUTPUT==2) 802 write(10, fmt=trim(fmt2a))
'ERGDAT = ', ergdat
804 write(10, fmt=trim(fmt2a))
'NETCDF = ', netcdf
805 #if (OUTPUT==2 || OUTPUT==3) 806 write(10, fmt=trim(fmt2a))
'n_output = ', n_output
808 write(10, fmt=trim(fmt3))
'time_output =' , time_output0(n)
811 write(10, fmt=trim(fmt1))
' ' 813 write(10, fmt=trim(fmt1))
'Program version and date: '//version//
' / '//date
815 close(10, status=
'keep')
820 time_init = time_init0*year_sec
821 time_end = time_end0*year_sec
822 dtime = dtime0*year_sec
823 dtime_temp = dtime_temp0*year_sec
825 dtime_wss = dtime_wss0*year_sec
831 dtime_ser = dtime_ser0*year_sec
832 #if (OUTPUT==1 || OUTPUT==3) 833 dtime_out = dtime_out0*year_sec
835 #if (OUTPUT==2 || OUTPUT==3) 837 time_output(n) = time_output0(n)*year_sec
841 if (.not.approx_integer_multiple(dtime_temp, dtime,
eps_sp_dp)) &
842 stop
' >>> sico_init: dtime_temp must be a multiple of dtime!' 845 if (.not.approx_integer_multiple(dtime_wss, dtime,
eps_sp_dp)) &
846 stop
' >>> sico_init: dtime_wss must be a multiple of dtime!' 849 if (.not.approx_integer_multiple(dtime_ser, dtime,
eps_sp_dp)) &
850 stop
' >>> sico_init: dtime_ser must be a multiple of dtime!' 852 #if (OUTPUT==1 || OUTPUT==3) 853 if (.not.approx_integer_multiple(dtime_out, dtime,
eps_sp_dp)) &
854 stop
' >>> sico_init: dtime_out must be a multiple of dtime!' 881 *(1.0_dp/(1.0_dp-frac_dust))
896 mean_accum = mean_accum*(1.0e-03_dp/year_sec)*(
rho_w/
rho_i) &
897 *(1.0_dp/(1.0_dp-frac_dust))
902 mean_accum = mean_accum*(1.0e-03_dp/year_sec)
912 trim(mask_chasm_file)
914 open(24, iostat=ios, file=trim(filename_with_path), recl=
rcl2, status=
'old')
916 if (ios /= 0) stop
' >>> sico_init: Error when opening the chasm mask file!' 918 do n=1, 6;
read(24, fmt=
'(a)') ch_dummy;
end do 921 read(24, fmt=trim(fmt4)) (
maske_chasm(j,i), i=0,imax)
924 close(24, status=
'keep')
932 stop
' >>> sico_init: SEA_LEVEL==3 not allowed for smars application!' 944 #if (TSURFACE==5 || TSURFACE==6) 947 trim(insol_ma_90s_file)
949 open(21, iostat=ios, file=trim(filename_with_path), status=
'old')
951 if (ios /= 0) stop
' >>> sico_init: Error when opening the insolation-data file!' 955 if (ch_dummy /=
'#')
then 956 write(6, fmt=*)
' >>> sico_init: insol_time_min, insol_time_stp, insol_time_max' 957 write(6, fmt=*)
' not defined in insolation-data file!' 963 if (ndata_insol > 100000) &
964 stop
' >>> sico_init: Too many data in insolation-data file!' 972 close(21, status=
'keep')
996 open(21, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
998 if (ios /= 0) stop
' >>> sico_init: Error when opening the qgeo file!' 1000 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do 1006 close(21, status=
'keep')
1018 #if (REBOUND==0 || REBOUND==1) 1031 #if (REBOUND==1 || REBOUND==2) 1033 #if (TIME_LAG_MOD==1) 1037 #elif (TIME_LAG_MOD==2) 1039 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1042 open(29, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1044 if (ios /= 0) stop
' >>> sico_init: Error when opening the time-lag file!' 1046 do n=1, 6;
read(29, fmt=
'(a)') ch_dummy;
end do 1052 close(29, status=
'keep')
1068 #if (FLEX_RIG_MOD==1) 1072 #elif (FLEX_RIG_MOD==2) 1074 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1077 open(29, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1079 if (ios /= 0) stop
' >>> sico_init: Error when opening the flex-rig file!' 1081 do n=1, 6;
read(29, fmt=
'(a)') ch_dummy;
end do 1087 close(29, status=
'keep')
1091 #elif (REBOUND==0 || REBOUND==1) 1107 call boundary(time_init, dtime, dxi, deta, &
1108 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1124 #if (!defined(TEMP_INIT) || TEMP_INIT==1) 1126 #elif (TEMP_INIT==2) 1128 #elif (TEMP_INIT==3) 1130 #elif (TEMP_INIT==4) 1133 write(6, fmt=
'(a)')
' >>> sico_init:' 1134 write(6, fmt=
'(a)')
' TEMP_INIT must be set to either 1, 2, 3 or 4!' 1149 stop
' >>> sico_init: Parameter ENHMOD must be between 1 and 5!' 1160 call boundary(time_init, dtime, dxi, deta, &
1161 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1185 stop
' >>> sico_init: Parameter ENHMOD must be between 1 and 5!' 1194 call boundary(time_init, dtime, dxi, deta, &
1195 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
1226 #if (MARGIN==1 || MARGIN==2) 1235 if ( (
maske(j,i)==0_i2b) &
1237 ( (
maske(j,i+1)==3_i2b) &
1238 .or.(
maske(j,i-1)==3_i2b) &
1239 .or.(
maske(j+1,i)==3_i2b) &
1240 .or.(
maske(j-1,i)==3_i2b) ) &
1244 if ( (
maske(j,i)==3_i2b) &
1246 ( (
maske(j,i+1)==0_i2b) &
1247 .or.(
maske(j,i-1)==0_i2b) &
1248 .or.(
maske(j+1,i)==0_i2b) &
1249 .or.(
maske(j-1,i)==0_i2b) ) &
1253 if ( (
maske(j,i)==3_i2b) &
1255 ( (
maske(j,i+1)==2_i2b) &
1256 .or.(
maske(j,i-1)==2_i2b) &
1257 .or.(
maske(j+1,i)==2_i2b) &
1258 .or.(
maske(j-1,i)==2_i2b) ) &
1262 if ( (
maske(j,i)==2_i2b) &
1264 ( (
maske(j,i+1)==3_i2b) &
1265 .or.(
maske(j,i-1)==3_i2b) &
1266 .or.(
maske(j+1,i)==3_i2b) &
1267 .or.(
maske(j-1,i)==3_i2b) ) &
1277 if ( (
maske(j,i)==2_i2b) &
1278 .and. (
maske(j+1,i)==3_i2b) &
1283 if ( (
maske(j,i)==2_i2b) &
1284 .and. (
maske(j-1,i)==3_i2b) &
1293 if ( (
maske(j,i)==2_i2b) &
1294 .and. (
maske(j,i+1)==3_i2b) &
1299 if ( (
maske(j,i)==2_i2b) &
1300 .and. (
maske(j,i-1)==3_i2b) &
1307 stop
' >>> sico_init: MARGIN must be either 1, 2 or 3!' 1312 #if (GRID==0 || GRID==1) 1316 dist_dxdy(jr,ir) = sqrt( (
real(ir,dp)*dxi)**2 + (
real(jr,dp)*deta)**2 )
1327 #if (DYNAMICS==1 || DYNAMICS==2) 1332 #if (MARGIN==3 || DYNAMICS==2) 1333 call calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
1348 stop
' >>> sico_init: DYNAMICS must be either 0, 1 or 2!' 1351 call calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
1355 #if (CALCMOD==0 || CALCMOD==-1) 1380 if ( (
maske(j,i) == 0_i2b).and.(
n_cts(j,i) == 1_i2b) )
then 1393 #elif (CALCMOD==2 || CALCMOD==3) 1411 stop
' >>> sico_init: Parameter CALCMOD must be either -1, 0, 1, 2 or 3!' 1419 filename_with_path = trim(outpath)//
'/'//trim(runname)//
'.ser' 1421 open(12, iostat=ios, file=trim(filename_with_path), status=
'new')
1423 if (ios /= 0) stop
' >>> sico_init: Error when opening the ser file!' 1428 1102
format(
' t(a) D_Ts(C) z_sl(m)',/, &
1429 ' V(m^3) V_g(m^3) V_f(m^3)', &
1430 ' A(m^2) A_g(m^2) A_f(m^2)',/, &
1431 ' V_sle(m) V_t(m^3)', &
1433 ' H_max(m) H_t_max(m)', &
1434 ' zs_max(m) vs_max(m/a) Tbh_max(C)')
1435 1103
format(
'----------------------------------------------------', &
1436 '---------------------------------------')
1442 filename_with_path = trim(outpath)//
'/'//trim(runname)//
'.core' 1444 open(14, iostat=ios, file=trim(filename_with_path), status=
'new')
1446 write(14,
'(1x,a)')
'---------------------' 1447 write(14,
'(1x,a)')
'No boreholes defined.' 1448 write(14,
'(1x,a)')
'---------------------' 1452 #if (defined(OUTPUT_INIT)) 1454 #if (OUTPUT_INIT==0) 1455 flag_init_output = .false.
1456 #elif (OUTPUT_INIT==1) 1457 flag_init_output = .true.
1459 stop
' >>> sico_init: OUTPUT_INIT must be either 0 or 1!' 1463 flag_init_output = .true.
1469 flag_3d_output = .false.
1471 flag_3d_output = .true.
1473 stop
' >>> sico_init: ERGDAT must be either 0 or 1!' 1476 if (flag_init_output) &
1477 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1478 flag_3d_output, ndat2d, ndat3d)
1482 if (time_output(1) <= time_init+
eps)
then 1485 flag_3d_output = .false.
1487 flag_3d_output = .true.
1489 stop
' >>> sico_init: ERGDAT must be either 0 or 1!' 1492 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1493 flag_3d_output, ndat2d, ndat3d)
1499 flag_3d_output = .false.
1501 if (flag_init_output) &
1502 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1503 flag_3d_output, ndat2d, ndat3d)
1505 if (time_output(1) <= time_init+
eps)
then 1507 flag_3d_output = .true.
1509 call output1(runname, time_init, delta_ts, glac_index, z_sl, &
1510 flag_3d_output, ndat2d, ndat3d)
1515 stop
' >>> sico_init: OUTPUT must be either 1, 2 or 3!' 1518 if (flag_init_output)
then 1519 call output2(time_init, dxi, deta, delta_ts, glac_index, z_sl)
1520 call output4(time_init, dxi, deta, delta_ts, glac_index, z_sl)
1532 #if (GRID==0 || GRID==1) 1541 real(dp),
intent(out) :: dxi, deta
1543 integer(i4b) :: i, j, n
1544 integer(i4b) :: ios, n_dummy
1546 real(dp) :: xi0, eta0
1547 character :: ch_dummy
1549 character(len= 8) :: ch_imax
1550 character(len=128) :: fmt4
1551 character(len=256) :: filename_with_path
1553 write(ch_imax, fmt=
'(i8)') imax
1554 write(fmt4, fmt=
'(a)')
'('//trim(adjustl(ch_imax))//
'(i1),i1)' 1558 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1559 trim(zs_present_file)
1561 open(21, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1563 if (ios /= 0) stop
' >>> topography1: Error when opening the zs file!' 1565 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1566 trim(zl_present_file)
1568 open(22, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1570 if (ios /= 0) stop
' >>> topography1: Error when opening the zl file!' 1572 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1575 open(23, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1577 if (ios /= 0) stop
' >>> topography1: Error when opening the zl0 file!' 1579 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1580 trim(mask_present_file)
1582 open(24, iostat=ios, file=trim(filename_with_path), recl=
rcl2, status=
'old')
1584 if (ios /= 0) stop
' >>> topography1: Error when opening the mask file!' 1586 do n=1, 6;
read(21, fmt=
'(a)') ch_dummy;
end do 1587 do n=1, 6;
read(22, fmt=
'(a)') ch_dummy;
end do 1588 do n=1, 6;
read(23, fmt=
'(a)') ch_dummy;
end do 1589 do n=1, 6;
read(24, fmt=
'(a)') ch_dummy;
end do 1592 read(21, fmt=*) (
zs(j,i), i=0,imax)
1593 read(22, fmt=*) (
zl(j,i), i=0,imax)
1594 read(23, fmt=*) (
zl0(j,i), i=0,imax)
1595 read(24, fmt=trim(fmt4)) (
maske(j,i), i=0,imax)
1598 close(21, status=
'keep')
1599 close(22, status=
'keep')
1600 close(23, status=
'keep')
1601 close(24, status=
'keep')
1606 deta = dx *1000.0_dp
1609 eta0 = y0 *1000.0_dp
1614 if (
maske(j,i) <= 1)
then 1617 stop
' >>> topography1: maske(j,i)>=2 not allowed for initial topography!' 1620 zs(j,i) =
zs(j,i) *1000.0_dp
1621 zb(j,i) =
zb(j,i) *1000.0_dp
1622 zl(j,i) =
zl(j,i) *1000.0_dp
1623 zl0(j,i) =
zl0(j,i)*1000.0_dp
1625 xi(i) = xi0 +
real(i,
dp)*dxi
1626 eta(j) = eta0 +
real(j,
dp)*deta
1653 #if (GRID==0 || GRID==1) /* Stereographic projection */ 1658 #elif (GRID==2) /* Geographic coordinates */ 1693 #if (GRID==0 || GRID==1) 1702 real(dp),
intent(out) :: dxi, deta
1704 integer(i4b) :: i, j, n
1706 real(dp) :: xi0, eta0
1707 character :: ch_dummy
1709 character(len= 8) :: ch_imax
1710 character(len=128) :: fmt4
1711 character(len=256) :: filename_with_path
1713 write(ch_imax, fmt=
'(i8)') imax
1714 write(fmt4, fmt=
'(a)')
'('//trim(adjustl(ch_imax))//
'(i1),i1)' 1718 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1721 open(23, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1723 if (ios /= 0) stop
' >>> topography2: Error when opening the zl0 file!' 1725 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1726 trim(mask_present_file)
1728 open(24, iostat=ios, file=trim(filename_with_path), recl=
rcl2, status=
'old')
1730 if (ios /= 0) stop
' >>> topography2: Error when opening the mask file!' 1732 do n=1, 6;
read(23, fmt=
'(a)') ch_dummy;
end do 1735 read(23, fmt=*) (
zl0(j,i), i=0,imax)
1738 do n=1, 6;
read(24, fmt=
'(a)') ch_dummy;
end do 1741 read(24, fmt=trim(fmt4)) (
maske(j,i), i=0,imax)
1744 close(23, status=
'keep')
1745 close(24, status=
'keep')
1750 deta = dx *1000.0_dp
1753 eta0 = y0 *1000.0_dp
1758 if (
maske(j,i) <= 1)
then 1764 stop
' >>> topography2: maske(j,i)>=2 not allowed for initial topography!' 1767 zs(j,i) =
zs(j,i) *1000.0_dp
1768 zb(j,i) =
zb(j,i) *1000.0_dp
1769 zl(j,i) =
zl(j,i) *1000.0_dp
1770 zl0(j,i) =
zl0(j,i)*1000.0_dp
1772 xi(i) = xi0 +
real(i,
dp)*dxi
1773 eta(j) = eta0 +
real(j,
dp)*deta
1800 #if (GRID==0 || GRID==1) /* Stereographic projection */ 1805 #elif (GRID==2) /* Geographic coordinates */ 1838 subroutine topography3(dxi, deta, z_sl, anfdatname)
1842 #if (GRID==0 || GRID==1) 1851 character(len=100),
intent(in) :: anfdatname
1853 real(dp),
intent(out) :: dxi, deta, z_sl
1855 integer(i4b) :: i, j, n
1857 character(len=256) :: filename_with_path
1858 character :: ch_dummy
1866 filename_with_path = trim(inpath)//
'/'//trim(
ch_domain_short)//
'/'// &
1869 open(23, iostat=ios, file=trim(filename_with_path), recl=
rcl1, status=
'old')
1871 if (ios /= 0) stop
' >>> topography3: Error when opening the zl0 file!' 1873 do n=1, 6;
read(23, fmt=
'(a)') ch_dummy;
end do 1876 read(23, fmt=*) (
zl0(j,i), i=0,imax)
1879 close(23, status=
'keep')
1884 deta = dx *1000.0_dp
1894 #if (GRID==0 || GRID==1) /* Stereographic projection */ 1899 #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.
subroutine, public read_kei()
Reading of the tabulated kei function.
logical, dimension(0:jmax, 0:imax) flag_inner_point
flag_inner_point(j,i): Inner-point flag. .true.: inner point, .false.: margin point ...
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...
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
integer(i4b) insol_time_stp
insol_time_stp: Time step of the data values for the insolation etc.
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), dimension(0:100000) ecc_data
ecc_data(n): Data values for the eccentricity
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.
Material properties of ice: Rate factor, heat conductivity, specific heat (heat capacity), creep function, viscosity.
real(dp), parameter eps
eps: Small number
subroutine, public read_phys_para()
Reading of physical parameters.
real(dp), dimension(0:jmax, 0:imax) q_geo_normal
q_geo_normal(j,i): Geothermal heat flux for normal (non-chasma) areas
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) insol_time_min
insol_time_min: Minimum time of the data values for the insolation etc.
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.
subroutine, public init_temp_water_age_1_2()
Initial temperature, water content and age (case ANF_DAT==1, TEMP_INIT==2: present-day initial topogr...
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)
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 ...
Declarations of global variables for SICOPOLIS (for the ANT domain).
integer(i4b) insol_time_max
insol_time_max: Maximum time of the data values for the insolation etc.
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.
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), parameter pi_180
pi_180: pi divided by 180 (-> deg to rad)
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 ...
integer(i2b), dimension(0:jmax, 0:imax) maske_chasm
maske_chasm(j,i): Chasma mask. 0: grounded ice, 1: ice-free land (normal area), 7: chasma area ...
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) rho_c
RHO_C: Density of crustal material (dust)
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) time_chasm_end
time_chasm_end: Final time for active chasma area
real(dp) kei_r_max
kei_r_max: Maximum value of the argument r of the tabulated kei function
real(dp) year_zero
year_zero: SICOPOLIS year zero in astronomical year numbering [ = signed year CE (AD) ] ...
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), 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
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
real(dp), dimension(0:jmax, 0:imax) accum_present
accum_present(j,i): Present-day accumulation rate at the ice surface (for EISMINT, ISMIP HEINO and the north and south polar caps of Mars)
real(dp) kappa_c
KAPPA_C: Heat conductivity of crustal material (dust)
real(dp) rho_i
RHO_I: Density of ice.
Definition of the components g11 and g22 of the metric tensor of the applied numerical coordinates...
real(dp) c_c
C_C: Specific heat of crustal material (dust)
Computation of the forward or inverse stereographic projection, alternatively for a spherical or an e...
real(dp) rho_inv
rho_inv: Inverse of the density of ice-dust mixture
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) time_chasm_init
time_chasm_init: Initial time for active chasma area
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.
real(dp), dimension(0:100000) cp_data
cp_data(n): Data values for Laskar's climate parameter = eccentricity *sin(Laskar's longitude of peri...
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), 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)
real(dp), dimension(-10000:10000) kei
kei(n): Tabulated values of the kei function (Kelvin function of zero order)
subroutine, public init_temp_water_age_1_3()
Initial temperature, water content and age (case ANF_DAT==1, TEMP_INIT==3: present-day initial topogr...
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...
real(dp), dimension(0:100000) obl_data
obl_data(n): Data values for the obliquity
integer(i4b), parameter rcl2
rcl2: Maximum length of record for input mask files (with factor 3 safety margin) ...
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...
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...
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(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) kei_r_incr
kei_r_incr: Increment of the argument r of the tabulated kei function
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), dimension(0:100000) insol_ma_90
insol_ma_90(n): Data values for the mean-annual north- or south-polar insolation
integer(i4b) n_data_kei
n_data_kei: Number of tabulated values of the kei function
real(dp) rho
RHO: Density of ice.
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
subroutine, public init_temp_water_age_1_4()
Initial temperature, water content and age (case ANF_DAT==1, TEMP_INIT==4: present-day initial topogr...
subroutine, public init_temp_water_age_1_1()
Initial temperature, water content and age (case ANF_DAT==1, TEMP_INIT==1: present-day initial topogr...
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...
real(dp), dimension(0:100000) ave_data
ave_data(n): Data values for the anomaly of vernal equinox (= 360 deg - Ls of perihelion ) ...
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(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...