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
50 real(dp) :: xi0, eta0
51 real(dp) :: h_ice, freeboard_ratio
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//'/asf/'//zs_present_file, &
64  recl=16384, 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//'/asf/'//zl_present_file, &
70  recl=16384, 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//'/asf/'//zl0_file, &
76  recl=16384, 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//'/asf/'//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 freeboard_ratio = (rho_sw-rho)/rho_sw
112 
113 do i=0, imax
114 do j=0, jmax
115 
116  if (maske(j,i) <= 1 ) then
117 
118  zb(j,i) = zl(j,i) ! ensure consistency
119 
120  else if (maske(j,i) == 2 ) then
121 
122 #if ( MARGIN==1 || MARGIN==2 )
123  zs(j,i) = zl(j,i) ! ensure
124  zb(j,i) = zl(j,i) ! consistency
125 #elif ( MARGIN==3 )
126  zs(j,i) = 0.0_dp ! present-day
127  zb(j,i) = 0.0_dp ! sea level
128 #endif
129 
130  else if (maske(j,i) == 3 ) then
131 
132 #if ( MARGIN==1 || ( MARGIN==2 && MARINE_ICE_FORMATION==1 ) )
133  maske(j,i) = 2 ! floating ice cut off
134  zs(j,i) = zl(j,i)
135  zb(j,i) = zl(j,i)
136 #elif ( MARGIN==2 && MARINE_ICE_FORMATION==2 )
137  maske(j,i) = 0 ! floating ice becomes "underwater ice"
138  h_ice = zs(j,i)-zb(j,i) ! ice thickness
139  zs(j,i) = zl(j,i)+h_ice
140  zb(j,i) = zl(j,i)
141 #elif ( MARGIN==3 )
142  h_ice = zs(j,i)-zb(j,i) ! ice thickness
143  zs(j,i) = freeboard_ratio*h_ice ! ensure properly
144  zb(j,i) = zs(j,i)-h_ice ! floating ice
145 #endif
146 
147  end if
148 
149  xi(i) = xi0 + real(i,dp)*dxi
150  eta(j) = eta0 + real(j,dp)*deta
151 
152  call geo_coord(phi(j,i), lambda(j,i), xi(i), eta(j))
153 
154  zm(j,i) = zb(j,i)
155  n_cts(j,i) = -1
156 
157  h_c(j,i) = zs(j,i)-zm(j,i)
158  h_t(j,i) = 0.0_dp
159 
160  dzs_dtau(j,i) = 0.0_dp
161  dzm_dtau(j,i) = 0.0_dp
162  dzb_dtau(j,i) = 0.0_dp
163  dzl_dtau(j,i) = 0.0_dp
164  dh_c_dtau(j,i) = 0.0_dp
165  dh_t_dtau(j,i) = 0.0_dp
166 
167 end do
168 end do
169 
170 !-------- Metric tensor, gradients of the topography --------
171 
172 call metric()
173 
174 #if TOPOGRAD==0
175 call topograd_1(dxi, deta, 1)
176 #elif TOPOGRAD==1
177 call topograd_2(dxi, deta, 1)
178 #endif
179 
180 !-------- Corresponding area of grid points --------
181 
182 do i=0, imax
183 do j=0, jmax
184  area(j,i) = sq_g11_g(j,i)*sq_g22_g(j,i)*dxi*deta
185 end do
186 end do
187 
188 end subroutine topography1
189 !