60 subroutine boundary(time, dtime, dxi, deta, &
61 delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
72 && (marine_ice_formation==2) \
73 && (marine_ice_calving==9))
79 real(dp),
intent(in) :: time, dtime, dxi, deta
81 real(dp),
intent(out) :: delta_ts, glac_index, dzsl_dtau, z_mar
82 real(dp),
intent(inout) :: z_sl
91 integer(i4b) :: i_gr, i_kl
92 integer(i4b) :: ndata_insol
94 real(dp) :: z_sl_min, t1, t2, t3, t4, t5, t6
95 real(dp) :: time_gr, time_kl
96 real(dp) :: z_sle_present, z_sle_help
97 real(dp),
dimension(0:JMAX,0:IMAX) :: temp_ma
98 real(dp) ::
eld, g_mb, accum_factor
99 real(dp) :: erosion_chasm
100 real(dp),
dimension(0:JMAX,0:IMAX) :: et
101 real(dp) :: t_obliq_main, t_obliq_mod, &
102 obliq_ampl_max, obliq_ampl_min, obliq_ampl, obliq0, obliq, &
104 real(dp) :: insol_ma_90_now, insol_ma_90_present, &
105 obl_now, obl_present, ecc_now, ecc_present, &
106 ave_now, ave_present, cp_now, cp_present, &
107 temp_ma_90, temp_ma_90_present, zs_90
108 real(dp),
dimension(0:JMAX,0:IMAX) :: dist
109 real(dp) :: ave_data_i_kl, ave_data_i_gr
110 real(dp) :: q_geo_chasm
111 logical,
dimension(0:JMAX,0:IMAX) :: check_point
112 logical,
save :: firstcall = .true.
115 type(
ins) :: temp_now, temp_present
118 real(dp),
parameter :: &
119 time_present = 0.0_dp, &
120 zs_90_present = 3.85e+03_dp
122 real(dp),
parameter :: &
127 real(dp),
parameter :: &
128 lambda_h2o = 2.86e+06_dp, &
132 real(dp),
parameter :: &
133 temp_s_min = -128.0_dp
153 delta_ts = -sine_amplit &
154 *cos(2.0_dp*
pi*time/(sine_period*year_sec)) &
161 t_obliq_main = 1.25e+05_dp *year_sec
162 t_obliq_mod = 1.3e+06_dp *year_sec
165 obliq_ampl_max = 10.0_dp *
pi_180 166 obliq_ampl_min = 2.5_dp *
pi_180 168 obliq_ampl = 0.5_dp*(obliq_ampl_max+obliq_ampl_min) &
169 -0.5_dp*(obliq_ampl_max-obliq_ampl_min) &
170 *cos(2.0_dp*
pi*time/t_obliq_mod)
172 obliq = obliq0 + obliq_ampl*sin(2.0_dp*
pi*time/t_obliq_main)
179 insol_ma_90_now = (sol/
pi)*sin(obliq)/sqrt(1.0_dp-ecc**2)
181 insol_ma_90_present = (sol/
pi)*sin(obliq0)/sqrt(1.0_dp-ecc0**2)
184 #elif (TSURFACE==5 || TSURFACE==6) 200 i_kl = floor(((time/year_sec) &
204 i_gr = ceiling(((time/year_sec) &
206 i_gr = min(i_gr, ndata_insol)
208 if (i_kl.eq.i_gr)
then 223 *(time-time_kl)/(time_gr-time_kl)
226 *(time-time_kl)/(time_gr-time_kl)
229 *(time-time_kl)/(time_gr-time_kl)
244 ave_now = ave_data_i_kl &
245 +(ave_data_i_gr-ave_data_i_kl) &
246 *(time-time_kl)/(time_gr-time_kl)
250 *(time-time_kl)/(time_gr-time_kl)
276 i_kl = floor(((time_present/year_sec) &
280 i_gr = ceiling(((time_present/year_sec) &
282 i_gr = min(i_gr, ndata_insol)
284 if (i_kl.eq.i_gr)
then 299 *(time_present-time_kl)/(time_gr-time_kl)
302 *(time_present-time_kl)/(time_gr-time_kl)
305 *(time_present-time_kl)/(time_gr-time_kl)
320 ave_present = ave_data_i_kl &
321 +(ave_data_i_gr-ave_data_i_kl) &
322 *(time_present-time_kl)/(time_gr-time_kl)
326 *(time_present-time_kl)/(time_gr-time_kl)
336 cp_present =
cp_data(ndata_insol)
342 #if (TSURFACE==4 || TSURFACE==5) 346 temp_ma_90 = sqrt(sqrt(insol_ma_90_now*(1.0_dp-albedo)/(epsilon*sigma))) &
352 = sqrt(sqrt(insol_ma_90_present*(1.0_dp-albedo)/(epsilon*sigma))) &
357 delta_ts = temp_ma_90 - temp_ma_90_present
365 obl = obl_now*
pi_180_inv, sa = albedo, ct = 148.7_dp)
367 temp_ma_90 =
instam(temp_now, -90.0_dp) + (delta_ts0) &
373 ecc = ecc_present, ave = ave_present*
pi_180_inv, &
374 obl = obl_present*
pi_180_inv, sa = albedo, ct = 148.7_dp)
376 temp_ma_90_present =
instam(temp_present, -90.0_dp) + (delta_ts0) &
381 delta_ts = temp_ma_90 - temp_ma_90_present
393 stop
' >>> boundary: SEA_LEVEL==2 not allowed for smars application!' 397 stop
' >>> boundary: SEA_LEVEL==3 not allowed for smars application!' 403 if ( z_sl_old > -999999.9_dp )
then 404 dzsl_dtau = (z_sl-z_sl_old)/dtime
413 #if (MARINE_ICE_CALVING==2 || MARINE_ICE_CALVING==3) 415 #elif (MARINE_ICE_CALVING==4 || MARINE_ICE_CALVING==5) 416 z_mar = fact_z_mar*z_sl
417 #elif (MARINE_ICE_CALVING==6 || MARINE_ICE_CALVING==7) 418 if (z_sl >= -80.0_dp)
then 421 z_mar = 10.25_dp*(z_sl+80.0_dp)-200.0_dp
423 z_mar = fact_z_mar*z_mar
435 check_point(j,i) = .false.
441 if (
maske(j,i).ge.2)
then 442 check_point(j ,i ) = .true.
443 check_point(j ,i+1) = .true.
444 check_point(j ,i-1) = .true.
445 check_point(j+1,i ) = .true.
446 check_point(j-1,i ) = .true.
453 if (check_point(j,i))
then 463 if (check_point(j,i))
then 471 call borehole(
zs, 0.0_dp, 0.0_dp, dxi, deta,
'grid', zs_90)
479 #if (TSURFACE==1 || TSURFACE==2 || TSURFACE==3) 481 temp_ma_90_present = temp0_ma_90s
483 temp_ma(j,i) = temp_ma_90_present &
484 + (gamma_ma)*(
zs(j,i)-zs_90_present) &
487 #elif (TSURFACE==4 || TSURFACE==5) 489 temp_ma(j,i) = temp_ma_90_present &
490 + (gamma_ma)*(
zs(j,i)-zs_90_present) &
497 #if (TSURFACE==1 || TSURFACE==2 || TSURFACE==3) 499 temp_ma(j,i) = temp_ma(j,i) + delta_ts
501 #elif (TSURFACE==4 || TSURFACE==5) 503 temp_ma(j,i) = temp_ma(j,i) + delta_ts &
504 - (gamma_ma)*(zs_90-zs_90_present)
525 accum_factor = 1.0_dp+gamma_s*delta_ts
526 #elif (ACCSURFACE==2) 527 accum_factor = exp(gamma_s*delta_ts)
528 #elif (ACCSURFACE==3) 529 accum_factor = exp(lambda_h2o/(r_h2o*temp0_ref) &
530 -lambda_h2o/(r_h2o*(temp0_ref+delta_ts)))
536 if (
accum(j,i).lt.0.0_dp) stop
' >>> boundary: Negative accumulation rate!' 542 #if (ABLSURFACE==1 || ABLSURFACE==2) 544 eld = eld_0 *1.0e+03_dp
547 g_mb = g_0 *(1.0e-06_dp/year_sec)*(
rho_w/
rho_i) &
548 *(1.0_dp/(1.0_dp-frac_dust))
551 g_mb = g_0 *(1.0e-06_dp/year_sec)
556 eld =
eld*(1.0_dp+gamma_eld*delta_ts)
557 g_mb = g_mb*(gamma_g*accum_factor)
558 #elif (ABLSURFACE==2) 559 eld =
eld*exp(gamma_eld*delta_ts)
560 g_mb = g_mb*(gamma_g*accum_factor)
563 if (
eld.lt.
eps) stop
' >>> boundary: Negative equilibrium line distance eld!' 567 dist(j,i) = sqrt(
xi(i)**2 +
eta(j)**2 )
576 erosion_chasm = erosion_chasm *(1.0e-03_dp/year_sec)*(
rho_w/
rho_i) &
577 *(1.0_dp/(1.0_dp-frac_dust))
580 erosion_chasm = erosion_chasm *(1.0e-03_dp/year_sec)
589 #if (ABLSURFACE==1 || ABLSURFACE==2) 606 evap(j,i) =
evap(j,i) + erosion_chasm
627 && (marine_ice_formation==2) \
628 && (marine_ice_calving==9))
643 q_geo_chasm = q_geo_chasm *1.0e-03_dp
651 q_geo(j,i) = q_geo_chasm
661 if (firstcall) firstcall = .false.
real(dp), dimension(0:jmax, 0:imax) phi
phi(j,i): Geographic latitude of grid point (i,j)
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.
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.
real(dp), parameter eps
eps: Small number
real(dp), dimension(0:jmax, 0:imax) q_geo_normal
q_geo_normal(j,i): Geothermal heat flux for normal (non-chasma) areas
real(dp), dimension(0:jmax, 0:imax) calv_grounded
calv_grounded(j,i): Calving rate of grounded ice
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 ...
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) runoff
runoff(j,i): Runoff rate at the ice surface
Martian surface temperatures.
integer(i2b) function, public mask_update_sea_level(z_sl, i, j)
Main function of mask_update_m: Update of the ice-land-ocean mask due to changes of the sea level...
real(dp), parameter pi_180_inv
pi_180_inv: 180 divided by pi (-> rad to deg)
real(dp), dimension(0:jmax, 0:imax) temp_s
temp_s(j,i): Ice surface temperature
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.
subroutine, public borehole(field, x_pos, y_pos, dxi, deta, ch_grid, field_val)
Computation of an arbitrary field quantity for a given borehole position x_pos, y_pos by weighed aver...
real(dp), dimension(0:jmax, 0:imax) calv_uw_ice
real(dp), parameter pi_180
pi_180: pi divided by 180 (-> deg to rad)
Calving of "underwater ice".
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 ...
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) evap
evap(j,i): Evaporation rate at the ice surface
real(dp), dimension(0:jmax, 0:imax) accum
accum(j,i): Accumulation rate at the ice surface (includes liquid precipitation = rainfall!) ...
real(dp) time_chasm_end
time_chasm_end: Final time for active chasma area
real(dp) eld
eld: Equilibrium line distance
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) rho_i
RHO_I: Density of ice.
real(dp) function instam(o, phi)
Annual mean temperature at latitude phi.
real(dp) time_chasm_init
time_chasm_init: Initial time for active chasma area
Computation of the daily mean surface temperature of Mars based on obliquity, eccentricity and the an...
real(dp), dimension(0:100000) cp_data
cp_data(n): Data values for Laskar's climate parameter = eccentricity *sin(Laskar's longitude of peri...
integer(i2b), dimension(0:jmax, 0:imax) maske_neu
maske_neu(j,i): New value of maske computed during an integration step
subroutine setinstemp(o, ecc, ave, obl, sma, sa, sac, op, ct)
Main subroutine of module mars_instemp_m.
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
real(dp), parameter pi
pi: Constant pi
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
subroutine calving_underwater_ice(z_sl)
Main routine: Calving of "underwater ice".
Computation of the surface temperature (must be less than 0 deg C!) and of the accumulation-ablation ...
real(dp), dimension(0:100000) insol_ma_90
insol_ma_90(n): Data values for the mean-annual north- or south-polar insolation
Update of the ice-land-ocean mask due to changes of the sea level.
integer, parameter dp
Double-precision reals.
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.
Declarations of global variables for SICOPOLIS.