SICOPOLIS V3.2
 All Classes Files Functions Variables Macros
topography2.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Subroutine : t o p o g r a p h y 2
4 !
5 !> @file
6 !!
7 !! Definition of the initial surface and bedrock topography
8 !! (including gradients) and of the horizontal grid spacings dxi, deta.
9 !! For ice-free initial topography with relaxed lithosphere.
10 !!
11 !! @section Copyright
12 !!
13 !! Copyright 2009-2016 Ralf Greve
14 !!
15 !! @section License
16 !!
17 !! This file is part of SICOPOLIS.
18 !!
19 !! SICOPOLIS is free software: you can redistribute it and/or modify
20 !! it under the terms of the GNU General Public License as published by
21 !! the Free Software Foundation, either version 3 of the License, or
22 !! (at your option) any later version.
23 !!
24 !! SICOPOLIS is distributed in the hope that it will be useful,
25 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
26 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 !! GNU General Public License for more details.
28 !!
29 !! You should have received a copy of the GNU General Public License
30 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
31 !<
32 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33 
34 !-------------------------------------------------------------------------------
35 !> Definition of the initial surface and bedrock topography
36 !! (including gradients) and of the horizontal grid spacings dxi, deta.
37 !! For ice-free initial topography with relaxed lithosphere.
38 !<------------------------------------------------------------------------------
39 subroutine topography2(dxi, deta)
40 
41 use sico_types
43 use sico_vars
44 
45 implicit none
46 
47 real(dp), intent(out) :: dxi, deta
48 
49 integer(i4b) :: i, j, n
50 integer(i4b) :: ios
51 real(dp) :: xi0, eta0
52 character :: ch_dummy
53 
54 character(len= 8) :: ch_imax
55 character(len=128) :: fmt4
56 
57 write(ch_imax, fmt='(i8)') imax
58 write(fmt4, fmt='(a)') '('//trim(adjustl(ch_imax))//'(i1),i1)'
59 
60 !-------- Read topography --------
61 
62 open(23, iostat=ios, &
63  file=inpath//'/'//trim(ch_domain_short)//'/'//zl0_file, &
64  recl=8192, status='old')
65 
66 if (ios.ne.0) stop ' topography2: Error when opening the zl0 file!'
67 
68 open(24, iostat=ios, &
69  file=inpath//'/'//trim(ch_domain_short)//'/'//mask_present_file, &
70  recl=1024, status='old')
71 
72 if (ios.ne.0) stop ' topography2: Error when opening the mask file!'
73 
74 do n=1, 6; read(23, fmt='(a)') ch_dummy; end do
75 
76 do j=jmax, 0, -1
77  read(23, fmt=*) (zl0(j,i), i=0,imax)
78 end do
79 
80 do n=1, 6; read(24, fmt='(a)') ch_dummy; end do
81 
82 do j=jmax, 0, -1
83  read(24, fmt=trim(fmt4)) (maske(j,i), i=0,imax)
84 end do
85 
86 close(23, status='keep')
87 close(24, status='keep')
88 
89 !-------- Further stuff --------
90 
91 dxi = dx *1000.0_dp ! km -> m
92 deta = dx *1000.0_dp ! km -> m
93 
94 xi0 = x0 *1000.0_dp ! km -> m
95 eta0 = y0 *1000.0_dp ! km -> m
96 
97 do i=0, imax
98 do j=0, jmax
99 
100  if (maske(j,i) <= 1 ) then
101  maske(j,i) = 1
102  zs(j,i) = zl0(j,i)
103  zb(j,i) = zl0(j,i)
104  zl(j,i) = zl0(j,i)
105  else ! (maske(j,i) >= 2 )
106  maske(j,i) = 2
107 #if ( MARGIN==1 || MARGIN==2 )
108  zs(j,i) = zl0(j,i)
109  zb(j,i) = zl0(j,i)
110 #elif ( MARGIN==3 )
111  zs(j,i) = 0.0_dp ! present-day
112  zb(j,i) = 0.0_dp ! sea level
113 #endif
114  zl(j,i) = zl0(j,i)
115  end if
116 
117  xi(i) = xi0 + real(i,dp)*dxi
118  eta(j) = eta0 + real(j,dp)*deta
119 
120  call geo_coord(phi(j,i), lambda(j,i), xi(i), eta(j))
121 
122  zm(j,i) = zb(j,i)
123  n_cts(j,i) = -1
124  kc_cts(j,i) = 0
125 
126  h_c(j,i) = 0.0_dp
127  h_t(j,i) = 0.0_dp
128 
129  dzs_dtau(j,i) = 0.0_dp
130  dzm_dtau(j,i) = 0.0_dp
131  dzb_dtau(j,i) = 0.0_dp
132  dzl_dtau(j,i) = 0.0_dp
133  dh_c_dtau(j,i) = 0.0_dp
134  dh_t_dtau(j,i) = 0.0_dp
135 
136 end do
137 end do
138 
139 !-------- Metric tensor, gradients of the topography --------
140 
141 call metric()
142 
143 #if TOPOGRAD==0
144 call topograd_1(dxi, deta, 1)
145 #elif TOPOGRAD==1
146 call topograd_2(dxi, deta, 1)
147 #endif
148 
149 !-------- Corresponding area of grid points --------
150 
151 do i=0, imax
152 do j=0, jmax
153  area(j,i) = sq_g11_g(j,i)*sq_g22_g(j,i)*dxi*deta
154 end do
155 end do
156 
157 end subroutine topography2
158 !
subroutine topograd_2(dxi, deta, n_switch)
Calculation of topography gradients on the staggered grid and on the grid points (the latter by fourt...
Definition: topograd_2.F90:41
Declarations of kind types for SICOPOLIS.
Definition: sico_types.F90:35
subroutine topograd_1(dxi, deta, n_switch)
Calculation of topography gradients on the staggered grid and on the grid points (the latter by secon...
Definition: topograd_1.F90:41
Declarations of global variables for SICOPOLIS (for the ANT domain).
Definition: sico_vars.F90:35
subroutine topography2(dxi, deta)
Definition of the initial surface and bedrock topography (including gradients) and of the horizontal ...
Definition: topography2.F90:39
subroutine geo_coord(phi_val, lambda_val, x_val, y_val)
Computation of longitude lambda and latitude phi for position (x,y) in the numerical domain...
Definition: geo_coord.F90:37
subroutine metric()
Definition of the components g11 and g22 of the metric tensor of the applied coordinates.
Definition: metric.F90:37
Declarations of global variables for SICOPOLIS.