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