SICOPOLIS V3.1
 All Classes Files Functions Variables Macros
topography1.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Subroutine : t o p o g r a p h y 1
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 present-day initial topography.
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 present-day initial topography.
38 !<------------------------------------------------------------------------------
39 subroutine topography1(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, n_dummy
50 real(dp) :: d_dummy
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(21, iostat=ios, &
63  file=inpath//'/nmars/'//zs_present_file, &
64  recl=8192, status='old')
65 
66 if (ios.ne.0) stop ' topography1: Error when opening the zs file!'
67 
68 open(22, iostat=ios, &
69  file=inpath//'/nmars/'//zl_present_file, &
70  recl=8192, status='old')
71 
72 if (ios.ne.0) stop ' topography1: Error when opening the zl file!'
73 
74 open(23, iostat=ios, &
75  file=inpath//'/nmars/'//zl0_file, &
76  recl=8192, status='old')
77 
78 if (ios.ne.0) stop ' topography1: Error when opening the zl0 file!'
79 
80 open(24, iostat=ios, &
81  file=inpath//'/nmars/'//mask_present_file, &
82  recl=1024, status='old')
83 
84 if (ios.ne.0) stop ' topography1: Error when opening the mask file!'
85 
86 do n=1, 6; read(21, fmt='(a)') ch_dummy; end do
87 do n=1, 6; read(22, fmt='(a)') ch_dummy; end do
88 do n=1, 6; read(23, fmt='(a)') ch_dummy; end do
89 do n=1, 6; read(24, fmt='(a)') ch_dummy; end do
90 
91 do j=jmax, 0, -1
92  read(21, fmt=*) (zs(j,i), i=0,imax)
93  read(22, fmt=*) (zl(j,i), i=0,imax)
94  read(23, fmt=*) (zl0(j,i), i=0,imax)
95  read(24, fmt=trim(fmt4)) (maske(j,i), i=0,imax)
96 end do
97 
98 close(21, status='keep')
99 close(22, status='keep')
100 close(23, status='keep')
101 close(24, status='keep')
102 
103 !-------- Further stuff --------
104 
105 dxi = dx *1000.0_dp ! km -> m
106 deta = dx *1000.0_dp ! km -> m
107 
108 xi0 = x0 *1000.0_dp ! km -> m
109 eta0 = y0 *1000.0_dp ! km -> m
110 
111 do i=0, imax
112 do j=0, jmax
113 
114  if (maske(j,i) <= 1 ) then
115  zb(j,i) = zl(j,i)
116  else ! (maske(j,i)>=2)
117  stop ' topography1: maske(j,i)>=2 not allowed for initial topography!'
118  end if
119 
120  zs(j,i) = zs(j,i) *1000.0_dp
121  zb(j,i) = zb(j,i) *1000.0_dp ! km --> m
122  zl(j,i) = zl(j,i) *1000.0_dp
123  zl0(j,i) = zl0(j,i)*1000.0_dp
124 
125  xi(i) = xi0 + real(i,dp)*dxi
126  eta(j) = eta0 + real(j,dp)*deta
127 
128  call geo_coord(phi(j,i), lambda(j,i), xi(i), eta(j))
129 
130  zm(j,i) = zb(j,i)
131  n_cts(j,i) = -1
132 
133  h_c(j,i) = zs(j,i)-zm(j,i)
134  h_t(j,i) = 0.0_dp
135 
136  dzs_dtau(j,i) = 0.0_dp
137  dzm_dtau(j,i) = 0.0_dp
138  dzb_dtau(j,i) = 0.0_dp
139  dzl_dtau(j,i) = 0.0_dp
140  dh_c_dtau(j,i) = 0.0_dp
141  dh_t_dtau(j,i) = 0.0_dp
142 
143 end do
144 end do
145 
146 !-------- Metric tensor, gradients of the topography --------
147 
148 call metric()
149 
150 #if TOPOGRAD==0
151 call topograd_1(dxi, deta, 1)
152 #elif TOPOGRAD==1
153 call topograd_2(dxi, deta, 1)
154 #endif
155 
156 !-------- Corresponding area of grid points --------
157 
158 do i=0, imax
159 do j=0, jmax
160  area(j,i) = sq_g11_g(j,i)*sq_g22_g(j,i)*dxi*deta
161 end do
162 end do
163 
164 end subroutine topography1
165 !