2011-05-11 15:32:01 -03:00
|
|
|
!!******************************************************************************
|
|
|
|
!!
|
2012-07-22 12:30:20 -03:00
|
|
|
!! This file is part of the AMUN source code, a program to perform
|
|
|
|
!! Newtonian or relativistic magnetohydrodynamical simulations on uniform or
|
|
|
|
!! adaptive mesh.
|
2011-05-11 15:32:01 -03:00
|
|
|
!!
|
2014-01-02 11:52:59 -02:00
|
|
|
!! Copyright (C) 2008-2014 Grzegorz Kowal <grzegorz@amuncode.org>
|
2011-05-11 15:32:01 -03:00
|
|
|
!!
|
2012-07-22 12:30:20 -03:00
|
|
|
!! This program is free software: you can redistribute it and/or modify
|
|
|
|
!! it under the terms of the GNU General Public License as published by
|
|
|
|
!! the Free Software Foundation, either version 3 of the License, or
|
|
|
|
!! (at your option) any later version.
|
2011-05-11 15:32:01 -03:00
|
|
|
!!
|
|
|
|
!! This program is distributed in the hope that it will be useful,
|
|
|
|
!! but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
!! GNU General Public License for more details.
|
|
|
|
!!
|
|
|
|
!! You should have received a copy of the GNU General Public License
|
2012-07-22 12:30:20 -03:00
|
|
|
!! along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2011-05-11 15:32:01 -03:00
|
|
|
!!
|
|
|
|
!!******************************************************************************
|
|
|
|
!!
|
2012-07-22 22:26:51 -03:00
|
|
|
!! module: COORDINATES
|
|
|
|
!!
|
|
|
|
!! This module provides variables and subroutines handling the coordinates
|
|
|
|
!! for all refinement levels.
|
2012-07-22 12:30:20 -03:00
|
|
|
!!
|
|
|
|
!!******************************************************************************
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2012-07-22 22:26:51 -03:00
|
|
|
module coordinates
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-23 22:43:23 -03:00
|
|
|
! module variables are not implicit by default
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
implicit none
|
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
! MODULE PARAMETERS:
|
|
|
|
! =================
|
|
|
|
!
|
2012-07-27 15:10:31 -03:00
|
|
|
! the domain block dimensions
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
integer , save :: nn = 8, in = 8, jn = 8, kn = 1
|
2012-07-27 15:10:31 -03:00
|
|
|
|
|
|
|
! the number of ghost zones
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
integer , save :: ng = 2, nh = 1, nd = 4
|
2012-07-27 15:10:31 -03:00
|
|
|
|
|
|
|
! the domain block dimensions including the ghost zones
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
integer , save :: im = 12, jm = 12, km = 1
|
2012-07-27 15:10:31 -03:00
|
|
|
|
2014-03-30 12:23:38 -03:00
|
|
|
! the domain block dimensions including the ghost zones
|
|
|
|
!
|
|
|
|
integer , save :: it = 11, jt = 11, kt = 1
|
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! the domain division
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
integer , save :: ir = 1, jr = 1, kr = 1
|
2012-07-27 15:10:31 -03:00
|
|
|
|
|
|
|
! the limits of refinement level
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
integer , save :: minlev = 1, maxlev = 1, toplev = 1
|
2012-07-27 15:10:31 -03:00
|
|
|
|
2012-07-27 16:01:01 -03:00
|
|
|
! block indices
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
integer , save :: ih = 6, jh = 6, kh = 1
|
|
|
|
integer , save :: ib = 3, jb = 3, kb = 1
|
|
|
|
integer , save :: ie = 10, je = 10, ke = 1
|
|
|
|
integer , save :: ibl = 2, jbl = 2, kbl = 1
|
|
|
|
integer , save :: ibu = 4, jbu = 4, kbu = 1
|
|
|
|
integer , save :: iel = 9, jel = 9, kel = 1
|
|
|
|
integer , save :: ieu = 11, jeu = 11, keu = 1
|
2012-07-27 16:01:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! the domain bounds
|
2012-07-23 22:43:23 -03:00
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
real(kind=8), save :: xmin = 0.0d+00
|
|
|
|
real(kind=8), save :: xmax = 1.0d+00
|
|
|
|
real(kind=8), save :: xlen = 1.0d+00
|
|
|
|
real(kind=8), save :: ymin = 0.0d+00
|
|
|
|
real(kind=8), save :: ymax = 1.0d+00
|
|
|
|
real(kind=8), save :: ylen = 1.0d+00
|
|
|
|
real(kind=8), save :: zmin = 0.0d+00
|
|
|
|
real(kind=8), save :: zmax = 1.0d+00
|
|
|
|
real(kind=8), save :: zlen = 1.0d+00
|
2012-07-23 22:43:23 -03:00
|
|
|
|
2011-05-11 15:32:01 -03:00
|
|
|
! the block coordinates for all levels of refinement
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
real(kind=8), dimension(:,:), allocatable, save :: ax , ay , az
|
|
|
|
real(kind=8), dimension(: ), allocatable, save :: adx , ady , adz, adr
|
|
|
|
real(kind=8), dimension(: ), allocatable, save :: adxi, adyi, adzi
|
|
|
|
real(kind=8), dimension(: ), allocatable, save :: advol
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-23 22:43:23 -03:00
|
|
|
! by default everything is private
|
|
|
|
!
|
|
|
|
public
|
|
|
|
|
|
|
|
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
contains
|
|
|
|
!
|
|
|
|
!===============================================================================
|
|
|
|
!
|
2012-07-23 22:43:23 -03:00
|
|
|
! subroutine INITIALIZE_COORDINATES:
|
|
|
|
! ---------------------------------
|
|
|
|
!
|
|
|
|
! Subroutine initializes mesh coordinates and other coordinate parameters.
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
! Arguments:
|
|
|
|
!
|
|
|
|
! verbose - flag determining if the subroutine should be verbose;
|
|
|
|
! iret - return flag of the procedure execution status;
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
!===============================================================================
|
|
|
|
!
|
2013-12-11 17:01:22 -02:00
|
|
|
subroutine initialize_coordinates(verbose, iret)
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
! include external procedures
|
2012-07-27 15:10:31 -03:00
|
|
|
!
|
|
|
|
use parameters, only : get_parameter_integer, get_parameter_real
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! local variables are not implicit by default
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
implicit none
|
|
|
|
|
2013-12-11 17:01:22 -02:00
|
|
|
! subroutine arguments
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2013-12-11 17:01:22 -02:00
|
|
|
logical, intent(in) :: verbose
|
|
|
|
integer, intent(inout) :: iret
|
2011-05-11 15:32:01 -03:00
|
|
|
|
|
|
|
! local variables
|
|
|
|
!
|
2014-01-29 14:49:34 -02:00
|
|
|
integer :: i, j, k, l, ff
|
2011-05-11 15:32:01 -03:00
|
|
|
integer :: ni, nj, nk
|
|
|
|
logical :: info
|
|
|
|
|
|
|
|
! local arrays
|
|
|
|
!
|
2012-07-27 15:10:31 -03:00
|
|
|
integer(kind=4), dimension(3) :: cm, rm, dm
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
|
|
|
!-------------------------------------------------------------------------------
|
|
|
|
!
|
2012-07-27 15:10:31 -03:00
|
|
|
! obtain the number of cells along each block dimension in the case when all
|
|
|
|
! dimensions are the same
|
|
|
|
!
|
|
|
|
call get_parameter_integer("ncells", nn )
|
|
|
|
|
|
|
|
! set the block dimensions
|
|
|
|
!
|
|
|
|
in = nn
|
|
|
|
jn = nn
|
|
|
|
#if NDIMS == 3
|
|
|
|
kn = nn
|
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
! change individual block dimension if requested
|
2012-07-23 22:43:23 -03:00
|
|
|
!
|
2012-07-27 15:10:31 -03:00
|
|
|
call get_parameter_integer("icells", in )
|
|
|
|
call get_parameter_integer("jcells", jn )
|
|
|
|
#if NDIMS == 3
|
|
|
|
call get_parameter_integer("kcells", kn )
|
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
|
|
|
! obtain the number of ghost zones
|
|
|
|
!
|
|
|
|
call get_parameter_integer("nghost", ng )
|
|
|
|
|
2012-07-27 16:01:01 -03:00
|
|
|
! calculate half and double of the number of ghose zones
|
|
|
|
!
|
|
|
|
nh = ng / 2
|
|
|
|
nd = ng * 2
|
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! calculate the block dimensions including ghost cells
|
|
|
|
!
|
|
|
|
im = in + 2 * ng
|
|
|
|
jm = jn + 2 * ng
|
|
|
|
#if NDIMS == 3
|
|
|
|
km = kn + 2 * ng
|
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
2014-03-30 12:23:38 -03:00
|
|
|
! prepare indices
|
|
|
|
!
|
|
|
|
it = im - nh + 1
|
|
|
|
jt = jm - nh + 1
|
|
|
|
#if NDIMS == 3
|
|
|
|
kt = km - nh + 1
|
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
2012-07-27 16:01:01 -03:00
|
|
|
! calculate block indices
|
|
|
|
!
|
2012-07-27 17:18:24 -03:00
|
|
|
ih = im / 2
|
|
|
|
ib = ng + 1
|
|
|
|
ie = ng + in
|
|
|
|
ibl = ib - 1
|
|
|
|
ibu = ib + ng - 1
|
|
|
|
iel = ie - ng + 1
|
|
|
|
ieu = ie + 1
|
|
|
|
jh = jm / 2
|
|
|
|
jb = ng + 1
|
|
|
|
je = ng + jn
|
|
|
|
jbl = jb - 1
|
|
|
|
jbu = jb + ng - 1
|
|
|
|
jel = je - ng + 1
|
|
|
|
jeu = je + 1
|
2012-07-27 16:01:01 -03:00
|
|
|
#if NDIMS == 3
|
2012-07-27 17:18:24 -03:00
|
|
|
kh = km / 2
|
|
|
|
kb = ng + 1
|
|
|
|
ke = ng + kn
|
|
|
|
kbl = kb - 1
|
|
|
|
kbu = kb + ng - 1
|
|
|
|
kel = ke - ng + 1
|
|
|
|
keu = ke + 1
|
2012-07-27 16:01:01 -03:00
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! obtain the refinement level bounds
|
|
|
|
!
|
|
|
|
call get_parameter_integer("minlev", minlev)
|
|
|
|
call get_parameter_integer("maxlev", maxlev)
|
|
|
|
|
|
|
|
! set the top level
|
|
|
|
!
|
|
|
|
toplev = maxlev
|
|
|
|
|
|
|
|
! obtain the domain base division
|
|
|
|
!
|
|
|
|
call get_parameter_integer("rdimx" , ir )
|
|
|
|
call get_parameter_integer("rdimy" , jr )
|
|
|
|
#if NDIMS == 3
|
|
|
|
call get_parameter_integer("rdimz" , kr )
|
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
|
|
|
! obtain the domain bounds
|
|
|
|
!
|
|
|
|
call get_parameter_real ("xmin" , xmin )
|
|
|
|
call get_parameter_real ("xmax" , xmax )
|
|
|
|
call get_parameter_real ("ymin" , ymin )
|
|
|
|
call get_parameter_real ("ymax" , ymax )
|
2014-05-29 13:12:17 -03:00
|
|
|
#if NDIMS == 3
|
2012-07-27 15:10:31 -03:00
|
|
|
call get_parameter_real ("zmin" , zmin )
|
|
|
|
call get_parameter_real ("zmax" , zmax )
|
2014-05-29 13:12:17 -03:00
|
|
|
#endif /* NDIMS == 3 */
|
2012-07-23 22:43:23 -03:00
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
! allocate space for coordinate variables
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2011-06-06 17:31:51 -03:00
|
|
|
allocate(ax (toplev, im))
|
|
|
|
allocate(ay (toplev, jm))
|
|
|
|
allocate(az (toplev, km))
|
|
|
|
allocate(adx (toplev))
|
|
|
|
allocate(ady (toplev))
|
|
|
|
allocate(adz (toplev))
|
|
|
|
allocate(adr (toplev))
|
|
|
|
allocate(adxi (toplev))
|
|
|
|
allocate(adyi (toplev))
|
|
|
|
allocate(adzi (toplev))
|
|
|
|
allocate(advol(toplev))
|
2011-05-11 15:32:01 -03:00
|
|
|
|
|
|
|
! reset all coordinate variables to initial values
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
ax (:,:) = 0.0d+00
|
|
|
|
ay (:,:) = 0.0d+00
|
|
|
|
az (:,:) = 0.0d+00
|
|
|
|
adx (:) = 1.0d+00
|
|
|
|
ady (:) = 1.0d+00
|
|
|
|
adz (:) = 1.0d+00
|
|
|
|
adr (:) = 1.0d+00
|
|
|
|
adxi (:) = 1.0d+00
|
|
|
|
adyi (:) = 1.0d+00
|
|
|
|
adzi (:) = 1.0d+00
|
|
|
|
advol(:) = 1.0d+00
|
2011-05-11 15:32:01 -03:00
|
|
|
|
|
|
|
! generate the coordinate variables for each level
|
|
|
|
!
|
2011-06-06 17:31:51 -03:00
|
|
|
do l = 1, toplev
|
2011-05-11 15:32:01 -03:00
|
|
|
|
|
|
|
! calculate the block resolution at each level
|
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
ff = 2**(l - 1)
|
|
|
|
ni = in * ff
|
|
|
|
nj = jn * ff
|
|
|
|
nk = kn * ff
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! calculate the cell sizes for each level
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2012-07-27 15:10:31 -03:00
|
|
|
adx (l) = (xmax - xmin) / (ir * ni)
|
|
|
|
ady (l) = (ymax - ymin) / (jr * nj)
|
2011-05-11 15:32:01 -03:00
|
|
|
#if NDIMS == 3
|
2012-07-27 15:10:31 -03:00
|
|
|
adz (l) = (zmax - zmin) / (kr * nk)
|
2011-05-11 15:32:01 -03:00
|
|
|
#endif /* NDIMS == 3 */
|
2011-05-12 08:52:03 -03:00
|
|
|
#if NDIMS == 2
|
|
|
|
adr (l) = sqrt(adx(l)**2 + ady(l)**2)
|
|
|
|
#endif /* NDIMS == 2 */
|
|
|
|
#if NDIMS == 3
|
|
|
|
adr (l) = sqrt(adx(l)**2 + ady(l)**2 + adz(l)**2)
|
|
|
|
#endif /* NDIMS == 3 */
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! calculate the inverse of cell size
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
adxi(l) = 1.0d+00 / adx(l)
|
|
|
|
adyi(l) = 1.0d+00 / ady(l)
|
2011-05-11 15:32:01 -03:00
|
|
|
#if NDIMS == 3
|
2014-01-29 16:05:45 -02:00
|
|
|
adzi(l) = 1.0d+00 / adz(l)
|
2011-05-11 15:32:01 -03:00
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! calculate the block coordinates for each level
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
ax(l,:) = ((/(i, i = 1, im)/) - ng - 5.0d-01) * adx(l)
|
|
|
|
ay(l,:) = ((/(j, j = 1, jm)/) - ng - 5.0d-01) * ady(l)
|
2011-05-11 15:32:01 -03:00
|
|
|
#if NDIMS == 3
|
2014-01-29 16:05:45 -02:00
|
|
|
az(l,:) = ((/(k, k = 1, km)/) - ng - 5.0d-01) * adz(l)
|
2011-05-11 15:32:01 -03:00
|
|
|
#endif /* NDIMS == 3 */
|
|
|
|
|
|
|
|
! calculate the cell volume at each level
|
|
|
|
!
|
|
|
|
advol(l) = adx(l) * ady(l) * adz(l)
|
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
end do ! l = 1, toplev
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! print general information about the level resolutions
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2013-12-11 17:01:22 -02:00
|
|
|
if (verbose) then
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! the base resolution
|
|
|
|
!
|
|
|
|
cm(1) = ir * in
|
|
|
|
cm(2) = jr * jn
|
|
|
|
cm(3) = kr * kn
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! the effective resolution
|
|
|
|
!
|
2014-01-29 14:49:34 -02:00
|
|
|
ff = 2**(maxlev - 1)
|
|
|
|
rm(1) = cm(1) * ff
|
|
|
|
rm(2) = cm(2) * ff
|
|
|
|
rm(3) = cm(3) * ff
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! the top level block division
|
|
|
|
!
|
|
|
|
dm(1) = rm(1) / in
|
|
|
|
dm(2) = rm(2) / jn
|
|
|
|
dm(3) = rm(3) / kn
|
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
! obtain the maximum number of block
|
|
|
|
!
|
|
|
|
ff = product(dm(1:NDIMS))
|
|
|
|
|
2012-07-27 15:10:31 -03:00
|
|
|
! print info
|
|
|
|
!
|
2013-12-23 21:52:58 -02:00
|
|
|
write(*,"(4x,a, 1x,i6 )" ) "refinement to level =", toplev
|
|
|
|
write(*,"(4x,a,3(1x,i6 ))") "base configuration =", ir, jr, kr
|
2014-01-29 14:49:34 -02:00
|
|
|
write(*,"(4x,a,3(1x,i6 ))") "top level blocks =", dm(1:NDIMS)
|
2014-01-29 16:05:45 -02:00
|
|
|
write(*,"(4x,a, 3x,i18)" ) "maximum cover blocks =", ff
|
2013-12-23 21:52:58 -02:00
|
|
|
write(*,"(4x,a,3(1x,i6 ))") "base resolution =", cm(1:NDIMS)
|
|
|
|
write(*,"(4x,a,3(1x,i6 ))") "effective resolution =", rm(1:NDIMS)
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2014-01-29 16:05:45 -02:00
|
|
|
end if ! verbose
|
2011-05-11 15:32:01 -03:00
|
|
|
|
|
|
|
!-------------------------------------------------------------------------------
|
|
|
|
!
|
2012-07-23 22:43:23 -03:00
|
|
|
end subroutine initialize_coordinates
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
|
|
|
!===============================================================================
|
|
|
|
!
|
2012-07-27 15:14:05 -03:00
|
|
|
! subroutine FINALIZE_COORDINATES:
|
|
|
|
! -------------------------------
|
2012-07-23 22:43:23 -03:00
|
|
|
!
|
2012-07-27 15:14:05 -03:00
|
|
|
! Subroutine deallocates mesh coordinates.
|
2011-05-11 15:32:01 -03:00
|
|
|
!
|
2014-01-29 16:05:45 -02:00
|
|
|
! Arguments:
|
|
|
|
!
|
|
|
|
! iret - return flag of the procedure execution status;
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
!===============================================================================
|
|
|
|
!
|
2013-12-11 17:01:22 -02:00
|
|
|
subroutine finalize_coordinates(iret)
|
2011-05-11 15:32:01 -03:00
|
|
|
|
2012-07-23 22:43:23 -03:00
|
|
|
! local variables are not implicit by default
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
implicit none
|
|
|
|
|
2013-12-11 17:01:22 -02:00
|
|
|
! subroutine arguments
|
|
|
|
!
|
|
|
|
integer, intent(inout) :: iret
|
|
|
|
!
|
2011-05-11 15:32:01 -03:00
|
|
|
!-------------------------------------------------------------------------------
|
|
|
|
!
|
|
|
|
! deallocating coordinate variables
|
|
|
|
!
|
|
|
|
if (allocated(ax) ) deallocate(ax)
|
|
|
|
if (allocated(ay) ) deallocate(ay)
|
|
|
|
if (allocated(az) ) deallocate(az)
|
|
|
|
if (allocated(adx) ) deallocate(adx)
|
|
|
|
if (allocated(ady) ) deallocate(ady)
|
|
|
|
if (allocated(adz) ) deallocate(adz)
|
2011-05-12 08:52:03 -03:00
|
|
|
if (allocated(adr) ) deallocate(adr)
|
2011-05-11 15:32:01 -03:00
|
|
|
if (allocated(adxi) ) deallocate(adxi)
|
|
|
|
if (allocated(adyi) ) deallocate(adyi)
|
|
|
|
if (allocated(adzi) ) deallocate(adzi)
|
|
|
|
if (allocated(advol)) deallocate(advol)
|
|
|
|
|
|
|
|
!-------------------------------------------------------------------------------
|
|
|
|
!
|
2012-07-23 22:43:23 -03:00
|
|
|
end subroutine finalize_coordinates
|
2011-05-11 15:32:01 -03:00
|
|
|
|
|
|
|
!===============================================================================
|
|
|
|
!
|
|
|
|
end module
|