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