SICOPOLIS V3.2
 All Classes Files Functions Variables Macros
calc_elra.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Subroutine : c a l c _ e l r a
4 !
5 !> @file
6 !!
7 !! Computation of the isostatic steady-state displacement of the lithosphere
8 !! (wss) for the ELRA model.
9 !!
10 !! @section Copyright
11 !!
12 !! Copyright 2009-2016 Ralf Greve, Sascha Knell
13 !!
14 !! @section License
15 !!
16 !! This file is part of SICOPOLIS.
17 !!
18 !! SICOPOLIS is free software: you can redistribute it and/or modify
19 !! it under the terms of the GNU General Public License as published by
20 !! the Free Software Foundation, either version 3 of the License, or
21 !! (at your option) any later version.
22 !!
23 !! SICOPOLIS is distributed in the hope that it will be useful,
24 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
25 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 !! GNU General Public License for more details.
27 !!
28 !! You should have received a copy of the GNU General Public License
29 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
30 !<
31 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32 
33 !-------------------------------------------------------------------------------
34 !> Computation of the isostatic steady-state displacement of the lithosphere
35 !! (wss) for the ELRA model.
36 !<------------------------------------------------------------------------------
37 subroutine calc_elra(z_sl, dxi, deta)
38 
39 use sico_types
41 use sico_vars
42 
43 implicit none
44 
45 real(dp), intent(in) :: z_sl, dxi, deta
46 
47 integer(i4b) :: i, j, ir, jr, il, jl, n
48 integer(i4b) :: ir_max, jr_max, min_imax_jmax
49 integer(i4b) :: il_begin, il_end, jl_begin, jl_end
50 real(dp) :: rho_g, rho_sw_g, rho_a_g_inv
51 real(dp) :: dxi_inv, deta_inv
52 real(dp) :: kei_r_incr_inv
53 real(dp), dimension(0:JMAX,0:IMAX) :: l_r, l_r_inv, fac_wss
54 real(dp) :: ra_max
55 real(dp), allocatable, dimension(:,:) :: f_0
56 
57 real(dp), parameter :: r_infl = 8.0_dp
58  ! Radius of non-locality influence of the elastic
59  ! lithosphere plate (in units of l_r)
60 
61 !-------- Initialisations --------
62 
63 rho_g = rho*g
64 rho_sw_g = rho_sw*g
65 rho_a_g_inv = 1.0_dp/(rho_a*g)
66 
67 dxi_inv = 1.0_dp/dxi
68 deta_inv = 1.0_dp/deta
69 
70 kei_r_incr_inv = 1.0_dp/kei_r_incr
71 
72 do i=0, imax
73 do j=0, jmax
74  l_r(j,i) = (flex_rig_lith(j,i)*rho_a_g_inv)**0.25_dp
75  l_r_inv(j,i) = 1.0_dp/l_r(j,i)
76  fac_wss(j,i) = l_r(j,i)*l_r(j,i)/(2.0_dp*pi*flex_rig_lith(j,i))
77 end do
78 end do
79 
80 ra_max = r_infl*maxval(l_r) ! Radius of non-locality influence (in m)
81 
82 ir_max = floor(ra_max*dxi_inv)
83 jr_max = floor(ra_max*deta_inv)
84  ! Radius of non-locality influence (in grid points)
85 
86 min_imax_jmax = min(imax, jmax)
87 ir_max = min(ir_max, min_imax_jmax)
88 jr_max = min(jr_max, min_imax_jmax)
89  ! ir_max and jr_max constrained by size of domain
90 
91 il_begin = -ir_max
92 il_end = ir_max+imax
93 jl_begin = -jr_max
94 jl_end = jr_max+jmax
95 
96 !-------- Ice/water load --------
97 
98 allocate(f_0(jl_begin:jl_end, il_begin:il_end))
99 
100 do il=il_begin, il_end
101 do jl=jl_begin, jl_end
102 
103  i = min(max(il, 0), imax)
104  j = min(max(jl, 0), jmax)
105 
106  if (maske(j,i)==0) then
107  f_0(jl,il) = rho_g * area(j,i) * (h_c(j,i) + h_t(j,i))
108  else if (maske(j,i)==1) then
109  f_0(jl,il) = 0.0_dp
110  else ! (maske(j,i)>=2)
111  f_0(jl,il) = rho_sw_g * area(j,i) * z_sl
112  ! Water load relative to the present sea-level stand (0 m)
113  ! -> can be positive or negative
114  end if
115 
116 end do
117 end do
118 
119 !-------- Computation of the steady-state displacement of the lithosphere
120 ! (wss, positive downward) --------
121 
122 do i=0, imax
123 do j=0, jmax
124 
125  wss(j,i) = 0.0_dp
126 
127  do ir=-ir_max, ir_max
128  do jr=-jr_max, jr_max
129 
130 #if GRID==0
131  n = nint( dist_dxdy(jr,ir)*l_r_inv(j,i)*kei_r_incr_inv )
132 #elif GRID==1
133  n = nint( sq_g11_g(j,i)*dist_dxdy(jr,ir)*l_r_inv(j,i)*kei_r_incr_inv )
134  ! The correction with g11 only is OK because g11=g22 for this case
135 #elif GRID==2
136  n = nint( dist_dxdy(jr,ir)*l_r_inv(j,i)*kei_r_incr_inv )
137  ! The distortion due to g11 and g22 is already accounted for in
138  ! the variable dist_dxdy(jr,ir)
139 #endif
140 
141  wss(j,i) = wss(j,i) - fac_wss(j,i)*f_0(jr+j,ir+i)*kei(n)
142 
143  end do
144  end do
145 
146 end do
147 end do
148 
149 deallocate (f_0)
150 
151 end subroutine calc_elra
152 !
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_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.