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 real(dp) :: h_ice, freeboard_ratio
54 character :: ch_dummy
55 
56 character(len= 8) :: ch_imax
57 character(len=128) :: fmt4
58 
59 write(ch_imax, fmt='(i8)') imax
60 write(fmt4, fmt='(a)') '('//trim(adjustl(ch_imax))//'(i1),i1)'
61 
62 !-------- Read topography --------
63 
64 open(21, iostat=ios, &
65  file=inpath//'/'//trim(ch_domain_short)//'/'//zs_present_file, &
66  recl=8192, status='old')
67 
68 if (ios /= 0) stop ' topography1: Error when opening the zs file!'
69 
70 open(25, iostat=ios, &
71  file=inpath//'/'//trim(ch_domain_short)//'/'//zb_present_file, &
72  recl=8192, status='old')
73 
74 if (ios /= 0) stop ' topography1: Error when opening the zb file!'
75 
76 open(22, iostat=ios, &
77  file=inpath//'/'//trim(ch_domain_short)//'/'//zl_present_file, &
78  recl=8192, status='old')
79 
80 if (ios /= 0) stop ' topography1: Error when opening the zl file!'
81 
82 open(23, iostat=ios, &
83  file=inpath//'/'//trim(ch_domain_short)//'/'//zl0_file, &
84  recl=8192, status='old')
85 
86 if (ios /= 0) stop ' topography1: Error when opening the zl0 file!'
87 
88 open(24, iostat=ios, &
89  file=inpath//'/'//trim(ch_domain_short)//'/'//mask_present_file, &
90  recl=1024, status='old')
91 
92 if (ios /= 0) stop ' topography1: Error when opening the mask file!'
93 
94 do n=1, 6; read(21, fmt='(a)') ch_dummy; end do
95 do n=1, 6; read(25, fmt='(a)') ch_dummy; end do
96 do n=1, 6; read(22, fmt='(a)') ch_dummy; end do
97 do n=1, 6; read(23, fmt='(a)') ch_dummy; end do
98 do n=1, 6; read(24, fmt='(a)') ch_dummy; end do
99 
100 do j=jmax, 0, -1
101  read(21, fmt=*) (zs(j,i), i=0,imax)
102  read(25, fmt=*) (zb(j,i), i=0,imax)
103  read(22, fmt=*) (zl(j,i), i=0,imax)
104  read(23, fmt=*) (zl0(j,i), i=0,imax)
105  read(24, fmt=trim(fmt4)) (maske(j,i), i=0,imax)
106 end do
107 
108 close(21, status='keep')
109 close(25, status='keep')
110 close(22, status='keep')
111 close(23, status='keep')
112 close(24, status='keep')
113 
114 !-------- Further stuff --------
115 
116 dxi = dx *1000.0_dp ! km -> m
117 deta = dx *1000.0_dp ! km -> m
118 
119 xi0 = x0 *1000.0_dp ! km -> m
120 eta0 = y0 *1000.0_dp ! km -> m
121 
122 freeboard_ratio = (rho_sw-rho)/rho_sw
123 
124 do i=0, imax
125 do j=0, jmax
126 
127  if (maske(j,i) <= 1 ) then
128 
129  zb(j,i) = zl(j,i) ! ensure consistency
130 
131  else if (maske(j,i) == 2 ) then
132 
133 #if ( MARGIN==1 || MARGIN==2 )
134  zs(j,i) = zl(j,i) ! ensure
135  zb(j,i) = zl(j,i) ! consistency
136 #elif ( MARGIN==3 )
137  zs(j,i) = 0.0_dp ! present-day
138  zb(j,i) = 0.0_dp ! sea level
139 #endif
140 
141  else if (maske(j,i) == 3 ) then
142 
143 #if ( MARGIN==1 || ( MARGIN==2 && MARINE_ICE_FORMATION==1 ) )
144  maske(j,i) = 2 ! floating ice cut off
145  zs(j,i) = zl(j,i)
146  zb(j,i) = zl(j,i)
147 #elif ( MARGIN==2 && MARINE_ICE_FORMATION==2 )
148  maske(j,i) = 0 ! floating ice becomes "underwater ice"
149  h_ice = zs(j,i)-zb(j,i) ! ice thickness
150  zs(j,i) = zl(j,i)+h_ice
151  zb(j,i) = zl(j,i)
152 #elif ( MARGIN==3 )
153  h_ice = zs(j,i)-zb(j,i) ! ice thickness
154  zs(j,i) = freeboard_ratio*h_ice ! ensure properly
155  zb(j,i) = zs(j,i)-h_ice ! floating ice
156 #endif
157 
158  end if
159 
160  xi(i) = xi0 + real(i,dp)*dxi
161  eta(j) = eta0 + real(j,dp)*deta
162 
163  call geo_coord(phi(j,i), lambda(j,i), xi(i), eta(j))
164 
165  zm(j,i) = zb(j,i)
166  n_cts(j,i) = -1
167  kc_cts(j,i) = 0
168 
169  h_c(j,i) = zs(j,i)-zm(j,i)
170  h_t(j,i) = 0.0_dp
171 
172  dzs_dtau(j,i) = 0.0_dp
173  dzm_dtau(j,i) = 0.0_dp
174  dzb_dtau(j,i) = 0.0_dp
175  dzl_dtau(j,i) = 0.0_dp
176  dh_c_dtau(j,i) = 0.0_dp
177  dh_t_dtau(j,i) = 0.0_dp
178 
179 end do
180 end do
181 
182 !-------- Metric tensor, gradients of the topography --------
183 
184 call metric()
185 
186 #if TOPOGRAD==0
187 call topograd_1(dxi, deta, 1)
188 #elif TOPOGRAD==1
189 call topograd_2(dxi, deta, 1)
190 #endif
191 
192 !-------- Corresponding area of grid points --------
193 
194 do i=0, imax
195 do j=0, jmax
196  area(j,i) = sq_g11_g(j,i)*sq_g22_g(j,i)*dxi*deta
197 end do
198 end do
199 
200 end subroutine topography1
201 !
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.