SICOPOLIS V3.1
 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-2013 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 
44 implicit none
45 
46 real(dp), intent(out) :: dxi, deta
47 
48 integer(i4b) :: i, j, n
49 integer(i4b) :: ios
50 real(dp) :: xi0, eta0
51 character :: ch_dummy
52 
53 character(len= 8) :: ch_imax
54 character(len=128) :: fmt4
55 
56 write(ch_imax, fmt='(i8)') imax
57 write(fmt4, fmt='(a)') '('//trim(adjustl(ch_imax))//'(i1),i1)'
58 
59 !-------- Read topography --------
60 
61 open(23, iostat=ios, &
62  file=inpath//'/nhem/'//zl0_file, &
63  recl=16384, status='old')
64 
65 if (ios.ne.0) stop ' topography2: Error when opening the zl0 file!'
66 
67 open(24, iostat=ios, &
68  file=inpath//'/nhem/'//mask_present_file, &
69  recl=1024, status='old')
70 
71 if (ios.ne.0) stop ' topography2: Error when opening the mask file!'
72 
73 do n=1, 6; read(23, fmt='(a)') ch_dummy; end do
74 
75 do j=jmax, 0, -1
76  read(23, fmt=*) (zl0(j,i), i=0,imax)
77 end do
78 
79 do n=1, 6; read(24, fmt='(a)') ch_dummy; end do
80 
81 do j=jmax, 0, -1
82  read(24, fmt=trim(fmt4)) (maske(j,i), i=0,imax)
83 end do
84 
85 close(23, status='keep')
86 close(24, status='keep')
87 
88 !-------- Further stuff --------
89 
90 dxi = dx *1000.0_dp ! km -> m
91 deta = dx *1000.0_dp ! km -> m
92 
93 xi0 = x0 *1000.0_dp ! km -> m
94 eta0 = y0 *1000.0_dp ! km -> m
95 
96 do i=0, imax
97 do j=0, jmax
98 
99  if (maske(j,i) <= 1 ) then
100  maske(j,i) = 1
101  zs(j,i) = zl0(j,i)
102  zb(j,i) = zl0(j,i)
103  zl(j,i) = zl0(j,i)
104  else ! (maske(j,i) >= 2 )
105  maske(j,i) = 2
106 #if ( MARGIN==1 || MARGIN==2 )
107  zs(j,i) = zl0(j,i)
108  zb(j,i) = zl0(j,i)
109 #elif ( MARGIN==3 )
110  zs(j,i) = 0.0_dp ! present-day
111  zb(j,i) = 0.0_dp ! sea level
112 #endif
113  zl(j,i) = zl0(j,i)
114  end if
115 
116  xi(i) = xi0 + real(i,dp)*dxi
117  eta(j) = eta0 + real(j,dp)*deta
118 
119  call geo_coord(phi(j,i), lambda(j,i), xi(i), eta(j))
120 
121  zm(j,i) = zb(j,i)
122  n_cts(j,i) = -1
123 
124  h_c(j,i) = 0.0_dp
125  h_t(j,i) = 0.0_dp
126 
127  dzs_dtau(j,i) = 0.0_dp
128  dzm_dtau(j,i) = 0.0_dp
129  dzb_dtau(j,i) = 0.0_dp
130  dzl_dtau(j,i) = 0.0_dp
131  dh_c_dtau(j,i) = 0.0_dp
132  dh_t_dtau(j,i) = 0.0_dp
133 
134 end do
135 end do
136 
137 !-------- Metric tensor, gradients of the topography --------
138 
139 call metric()
140 
141 #if TOPOGRAD==0
142 call topograd_1(dxi, deta, 1)
143 #elif TOPOGRAD==1
144 call topograd_2(dxi, deta, 1)
145 #endif
146 
147 !-------- Corresponding area of grid points --------
148 
149 do i=0, imax
150 do j=0, jmax
151  area(j,i) = sq_g11_g(j,i)*sq_g22_g(j,i)*dxi*deta
152 end do
153 end do
154 
155 end subroutine topography2
156 !