SICOPOLIS V3.2
 All Classes Files Functions Variables Macros
calc_gia.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Subroutine : c a l c _ g i a
4 !
5 !> @file
6 !!
7 !! Computation of the glacial isostatic adjustment of the lithosphere surface.
8 !!
9 !! @section Copyright
10 !!
11 !! Copyright 2009-2016 Ralf Greve, Sascha Knell
12 !!
13 !! @section License
14 !!
15 !! This file is part of SICOPOLIS.
16 !!
17 !! SICOPOLIS is free software: you can redistribute it and/or modify
18 !! it under the terms of the GNU General Public License as published by
19 !! the Free Software Foundation, either version 3 of the License, or
20 !! (at your option) any later version.
21 !!
22 !! SICOPOLIS is distributed in the hope that it will be useful,
23 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
24 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 !! GNU General Public License for more details.
26 !!
27 !! You should have received a copy of the GNU General Public License
28 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
29 !<
30 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31 
32 !-------------------------------------------------------------------------------
33 !> Computation of the glacial isostatic adjustment of the lithosphere surface.
34 !<------------------------------------------------------------------------------
35 subroutine calc_gia(time, z_sl, dtime, dxi, deta, itercount, iter_wss)
36 
37 use sico_types
39 use sico_vars
40 
41 implicit none
42 
43 integer(i4b), intent(in) :: itercount, iter_wss
44 real(dp), intent(in) :: time
45 real(dp), intent(in) :: z_sl
46 real(dp), intent(in) :: dtime, dxi, deta
47 
48 integer(i4b) :: i, j
49 real(dp) :: tldt_inv(0:jmax,0:imax)
50 real(dp) :: dtime_inv
51 real(dp) :: rho_rhoa_ratio, rhosw_rhoa_ratio
52 real(dp) :: target_topo_time_lag
53 
54 !-------- Term abbreviations --------
55 
56 do i=0, imax
57 do j=0, jmax
58  tldt_inv(j,i) = 1.0_dp/(time_lag_asth(j,i)+dtime)
59 end do
60 end do
61 
62 rho_rhoa_ratio = rho/rho_a
63 rhosw_rhoa_ratio = rho_sw/rho_a
64 
65 dtime_inv = 1.0_dp/dtime
66 
67 !-------- Computation of zl_neu and its time derivative --------
68 
69 #if (REBOUND==0)
70 
71 do i=0, imax
72 do j=0, jmax
73  zl_neu(j,i) = zl(j,i)
74  dzl_dtau(j,i) = (zl_neu(j,i)-zl(j,i))*dtime_inv
75 end do
76 end do
77 
78 #elif (REBOUND==1)
79 
80 do i=0, imax
81 do j=0, jmax
82 
83  if (maske(j,i) <= 1_i2b) then ! grounded ice or ice-free land
84 
85  zl_neu(j,i) = tldt_inv(j,i)*( time_lag_asth(j,i)*zl(j,i) &
86  + dtime*(zl0(j,i) &
87  -frac_llra*rho_rhoa_ratio*(h_c(j,i)+h_t(j,i))) )
88 
89  else ! (maske(j,i) >= 2_i2b)
90 
91  zl_neu(j,i) = tldt_inv(j,i)*( time_lag_asth(j,i)*zl(j,i) &
92  + dtime*(zl0(j,i) &
93  -frac_llra*rhosw_rhoa_ratio*z_sl) )
94 
95  ! Water load relative to the present sea-level stand (0 m)
96  ! -> can be positive or negative
97 
98  end if
99 
100  dzl_dtau(j,i) = (zl_neu(j,i)-zl(j,i))*dtime_inv
101 
102 end do
103 end do
104 
105 #elif (REBOUND==2)
106 
107 if ((mod(itercount, iter_wss)==0).or.(itercount==1)) then
108  write(6,*) ' -------- Computation of wss'
109  call calc_elra(z_sl, dxi, deta) ! Update of the steady-state displacement
110  ! of the lithosphere (wss)
111 end if
112 
113 do i=0, imax
114 do j=0, jmax
115  zl_neu(j,i) = tldt_inv(j,i) &
116  * ( time_lag_asth(j,i)*zl(j,i) + dtime*(zl0(j,i)-wss(j,i)) )
117  dzl_dtau(j,i) = (zl_neu(j,i)-zl(j,i))*dtime_inv
118 end do
119 end do
120 
121 #endif
122 
123 ! ------ Adjustment due to prescribed target topography
124 
125 #if (ZS_EVOL==2)
126 
127 if (time >= time_target_topo_final) then
128 
129  zl_neu = zl_target
130  dzl_dtau = 0.0_dp ! previously this was (zl_neu-zl)*dtime_inv
131 
132 else if (time >= time_target_topo_init) then
133 
134  target_topo_time_lag = (time_target_topo_final-time)/3.0_dp
135 
136  zl_neu = ( target_topo_time_lag*zl_neu + dtime*zl_target ) &
137  / ( target_topo_time_lag + dtime )
138 
139  dzl_dtau = (zl_neu-zl)*dtime_inv
140 
141 end if
142 
143 #endif
144 
145 !======== Generation of an isostatically relaxed
146 ! lithosphere surface topography. Not to be used regularly! ========
147 
148 #if (defined(EXEC_MAKE_ZL0))
149 
150 call make_zl0()
151 
152 write(6, fmt='(a)') ' '
153 write(6, fmt='(a)') ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * '
154 write(6, fmt='(a)') ' calc_gia: Routine make_zl0 successfully completed, '
155 write(6, fmt='(a)') ' isostatically relaxed lithosphere topography '
156 write(6, fmt='(a)') ' written on file '
157 write(6, fmt='(a)') ' (in directory specified by OUTPATH). '
158 write(6, fmt='(a)') ' Execution of SICOPOLIS stopped. '
159 write(6, fmt='(a)') ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * '
160 write(6, fmt='(a)') ' '
161 
162 stop
163 
164 #endif
165 
166 end subroutine calc_gia
167 !
Declarations of kind types for SICOPOLIS.
Definition: sico_types.F90:35
Declarations of global variables for SICOPOLIS (for the ANT domain).
Definition: sico_vars.F90:35
subroutine calc_gia(time, z_sl, dtime, dxi, deta, itercount, iter_wss)
Computation of the glacial isostatic adjustment of the lithosphere surface.
Definition: calc_gia.F90:35
subroutine make_zl0()
Generation of an isostatically relaxed lithosphere surface topography for either the rigid lithospher...
Definition: make_zl0.F90:43
subroutine calc_elra(z_sl, dxi, deta)
Computation of the isostatic steady-state displacement of the lithosphere (wss) for the ELRA model...
Definition: calc_elra.F90:37
Declarations of global variables for SICOPOLIS.