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