[cig-commits] [commit] master: refactoring: moving routines related to procesorwise snapshot file to own module (612fd27)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Fri Oct 17 05:29:49 PDT 2014
Repository : https://github.com/geodynamics/axisem
On branch : master
Link : https://github.com/geodynamics/axisem/compare/607f803cf074063627513d235f9ed0837fc1dd44...b6457db24acdde4a4e1c08935ae1b22adf87f5bf
>---------------------------------------------------------------
commit 612fd275bf101672bb59739a4a139f13bc08b565
Author: martinvandriel <vandriel at erdw.ethz.ch>
Date: Thu Oct 16 19:22:07 2014 +0200
refactoring: moving routines related to procesorwise snapshot file to own module
>---------------------------------------------------------------
612fd275bf101672bb59739a4a139f13bc08b565
SOLVER/meshes_io.F90 | 2 +-
SOLVER/nc_routines.F90 | 186 +------------------------------------
SOLVER/nc_snapshots.F90 | 236 +++++++++++++++++++++++++++++++++++++++++++++++
SOLVER/wavefields_io.f90 | 3 +-
4 files changed, 243 insertions(+), 184 deletions(-)
diff --git a/SOLVER/meshes_io.F90 b/SOLVER/meshes_io.F90
index 5ef64e3..cf84483 100644
--- a/SOLVER/meshes_io.F90
+++ b/SOLVER/meshes_io.F90
@@ -111,7 +111,7 @@ end subroutine dump_glob_grid_midpoint
!-----------------------------------------------------------------------------------------
subroutine dump_xdmf_grid()
- use nc_routines, only: nc_dump_snap_points, nc_dump_snap_grid, nc_make_snapfile
+ use nc_snapshots, only: nc_dump_snap_points, nc_dump_snap_grid, nc_make_snapfile
use data_mesh
integer :: iel, ipol, jpol, ipol1, jpol1, i, j, ct, ipt, idest
diff --git a/SOLVER/nc_routines.F90 b/SOLVER/nc_routines.F90
index 40e9700..93e76b9 100644
--- a/SOLVER/nc_routines.F90
+++ b/SOLVER/nc_routines.F90
@@ -105,13 +105,6 @@ module nc_routines
character(len=12), allocatable :: nc_varnamelist(:)
integer :: nvar = -1
- !! Variables for dumping of wavefields for plotting purposes
- integer :: nc_snap_disp_varid, nc_coord_dimid
- integer :: nc_snap_point_varid, nc_snap_grid_varid
- integer :: nc_snap_pwave_varid, nc_snap_swave_varid
- integer :: ncid_out_snap
- integer :: ndim_disp !< 2 for monopole, 3 for rest
-
!! Buffer variables to hand over to the dumping thread
real(kind=sp), allocatable, dimension(:,:,:) :: copy_oneddumpvar
real(kind=sp), allocatable, dimension(:,:,:) :: copy_surfdumpvar_disp
@@ -142,8 +135,7 @@ module nc_routines
public :: nc_dump_mesh_kwf
public :: nc_dump_mesh_mp_kwf
public :: nc_dump_elastic_parameters
- public :: nc_dump_snapshot, nc_dump_snap_points, nc_dump_snap_grid
- public :: nc_make_snapfile, nc_dump_stf, nc_rec_checkpoint
+ public :: nc_dump_stf, nc_rec_checkpoint
public :: nc_dumpbuffersize
public :: set_npoints
@@ -2031,6 +2023,7 @@ subroutine nc_end_output
#ifdef enable_netcdf
use data_mesh, only: num_rec
use data_io, only: dump_xdmf
+ use nc_snapshots
integer :: iproc
call flush(6)
@@ -2054,12 +2047,12 @@ subroutine nc_end_output
endif
#endif
if (dump_xdmf) then
- call check(nf90_close(ncid_out_snap))
+ call nc_close_snapfile
end if
!Set the finalized flag to true in the output file
#ifndef enable_parallel_netcdf
- if(mynum.eq.0) &
+ if(mynum == 0) &
#endif
call nc_finalize()
@@ -2087,176 +2080,5 @@ subroutine nc_finalize
end subroutine nc_finalize
!-----------------------------------------------------------------------------------------
-!-----------------------------------------------------------------------------------------
-subroutine nc_make_snapfile
-
- use data_mesh, only: npoint_plot, nelem_plot
- use data_proc, only: appmynum
- use data_io, only: datapath, lfdata, nsnap
- use data_source, only: src_type
-
-#ifdef enable_netcdf
- integer :: nmode, nc_snappoint_dimid, nc_snapelem_dimid, nc_snapdim_dimid
- integer :: nc_snaptime_dimid, nc_snapconnec_dimid
- character(len=120) :: fname
-
- if (lpr .and. verbose > 1) write(6,*) ' .... preparing xdmf nc file'
-
- if (src_type(1) == 'monopole') then
- ndim_disp = 2
- else
- ndim_disp = 3
- end if
-
- fname = datapath(1:lfdata) // '/netcdf_snap_' // appmynum // '.nc'
- nmode = ior(NF90_CLOBBER, NF90_NETCDF4)
- call check(nf90_create(path=fname, cmode=nmode, ncid=ncid_out_snap) )
-
- call check(nf90_def_dim(ncid_out_snap, 'points', npoint_plot, nc_snappoint_dimid) )
- call check(nf90_def_dim(ncid_out_snap, 'elements', nelem_plot, nc_snapelem_dimid) )
- call check(nf90_def_dim(ncid_out_snap, 'dimensions', ndim_disp , nc_snapdim_dimid) )
- call check(nf90_def_dim(ncid_out_snap, 's-z-coordinate', 2 , nc_coord_dimid) )
- call check(nf90_def_dim(ncid_out_snap, 'connections', 4 , nc_snapconnec_dimid) )
- call check(nf90_def_dim(ncid_out_snap, 'timesteps', nsnap , nc_snaptime_dimid) )
-
- call flush(6)
- call check(nf90_def_var(ncid = ncid_out_snap, &
- name = 'displacement', &
- xtype = NF90_FLOAT, &
- dimids = [nc_snapdim_dimid, nc_snappoint_dimid, &
- nc_snaptime_dimid], &
- chunksizes = [ndim_disp, npoint_plot, 1], &
- deflate_level = deflate_level, &
- varid = nc_snap_disp_varid) )
-
- call check(nf90_def_var(ncid = ncid_out_snap, &
- name = 'straintrace', &
- xtype = NF90_FLOAT, &
- dimids = [nc_snappoint_dimid, nc_snaptime_dimid], &
- chunksizes = [npoint_plot, 1], &
- deflate_level = deflate_level, &
- varid = nc_snap_pwave_varid) )
-
- call check(nf90_def_var(ncid = ncid_out_snap, &
- name = 'curlinplane', &
- xtype = NF90_FLOAT, &
- dimids = [nc_snappoint_dimid, nc_snaptime_dimid], &
- chunksizes = [npoint_plot, 1], &
- deflate_level = deflate_level, &
- varid = nc_snap_swave_varid) )
-
- call check(nf90_def_var(ncid = ncid_out_snap, &
- name = 'points', &
- xtype = NF90_FLOAT, &
- dimids = [nc_coord_dimid, nc_snappoint_dimid], &
- varid = nc_snap_point_varid) )
-
- call check(nf90_def_var(ncid = ncid_out_snap, &
- name = 'grid', &
- xtype = NF90_INT, &
- dimids = [nc_snapconnec_dimid, nc_snapelem_dimid], &
- varid = nc_snap_grid_varid) )
-
- call check(nf90_enddef(ncid = ncid_out_snap))
-
- if (lpr .and. verbose > 1) write(6,*) ' .... DONE'
-
-#endif
-
-end subroutine nc_make_snapfile
-!-----------------------------------------------------------------------------------------
-
-!-----------------------------------------------------------------------------------------
-subroutine nc_dump_snapshot(u, straintrace, curlinplane, isnap)
-
- use data_mesh, only: npoint_plot
- use data_io, only: nsnap
- use data_source, only: src_type
-
- real(kind=realkind), dimension(3,npoint_plot), intent(in) :: u
- real(kind=realkind), dimension(1,npoint_plot), intent(in) :: straintrace
- real(kind=realkind), dimension(1,npoint_plot), intent(in) :: curlinplane
- integer, intent(in) :: isnap
-
-#ifdef enable_netcdf
- if (src_type(1) == 'monopole') then
- call putvar_real3d(ncid = ncid_out_snap, &
- varid = nc_snap_disp_varid, &
- start = [1, 1, isnap], &
- count = [1, npoint_plot, 1], &
- values = reshape(u(1,:), [1, npoint_plot,1]) )
-
- call putvar_real3d(ncid = ncid_out_snap, &
- varid = nc_snap_disp_varid, &
- start = [2, 1, isnap], &
- count = [1, npoint_plot, 1], &
- values = reshape(u(3,:), [1, npoint_plot,1]) )
- else
- call putvar_real3d(ncid = ncid_out_snap, &
- varid = nc_snap_disp_varid, &
- start = [1, 1, isnap], &
- count = [1, npoint_plot, 1], &
- values = reshape(u(1,:), [1, npoint_plot,1]) )
-
- call putvar_real3d(ncid = ncid_out_snap, &
- varid = nc_snap_disp_varid, &
- start = [2, 1, isnap], &
- count = [1, npoint_plot, 1], &
- values = reshape(u(2,:), [1, npoint_plot,1]) )
-
- call putvar_real3d(ncid = ncid_out_snap, &
- varid = nc_snap_disp_varid, &
- start = [3, 1, isnap], &
- count = [1, npoint_plot, 1], &
- values = reshape(u(3,:), [1, npoint_plot,1]) )
- end if
-
- call check(nf90_put_var(ncid = ncid_out_snap, &
- varid = nc_snap_pwave_varid, &
- start = [1, isnap], &
- count = [npoint_plot, 1], &
- values = straintrace(1,:)) )
-
- call check(nf90_put_var(ncid = ncid_out_snap, &
- varid = nc_snap_swave_varid, &
- start = [1, isnap], &
- count = [npoint_plot, 1], &
- values = curlinplane(1,:)) )
-#endif
-
-end subroutine nc_dump_snapshot
-!-----------------------------------------------------------------------------------------
-
-!-----------------------------------------------------------------------------------------
-subroutine nc_dump_snap_points(points)
-
- use data_mesh, only: npoint_plot
- real(sp), dimension(2,npoint_plot), intent(in) :: points
-
-#ifdef enable_netcdf
- call check(nf90_put_var(ncid = ncid_out_snap, &
- varid = nc_snap_point_varid, &
- count = [2, npoint_plot], &
- values = points) )
-#endif
-
-end subroutine nc_dump_snap_points
-!-----------------------------------------------------------------------------------------
-
-!-----------------------------------------------------------------------------------------
-subroutine nc_dump_snap_grid(grid)
-
- use data_mesh, only: nelem_plot
- integer, dimension(4, nelem_plot), intent(in) :: grid
-
-#ifdef enable_netcdf
- call check(nf90_put_var(ncid = ncid_out_snap, &
- varid = nc_snap_grid_varid, &
- count = [4, nelem_plot], &
- values = grid) )
-#endif
-end subroutine nc_dump_snap_grid
-!-----------------------------------------------------------------------------------------
-
end module nc_routines
!=========================================================================================
diff --git a/SOLVER/nc_snapshots.F90 b/SOLVER/nc_snapshots.F90
new file mode 100644
index 0000000..fe0477a
--- /dev/null
+++ b/SOLVER/nc_snapshots.F90
@@ -0,0 +1,236 @@
+!
+! Copyright 2013, Tarje Nissen-Meyer, Alexandre Fournier, Martin van Driel
+! Simon Stähler, Kasra Hosseini, Stefanie Hempel
+!
+! This file is part of AxiSEM.
+! It is distributed from the webpage <http://www.axisem.info>
+!
+! AxiSEM 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.
+!
+! AxiSEM 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
+! along with AxiSEM. If not, see <http://www.gnu.org/licenses/>.
+!
+
+!=========================================================================================
+!> Contains some routines to ease interaction with netcdf files
+module nc_snapshots
+
+#ifdef enable_netcdf
+ use netcdf
+#endif
+ use nc_helpers
+ use global_parameters
+ use data_io, only : verbose, deflate_level
+ use data_proc, only : mynum, lpr
+
+ implicit none
+ private
+ save
+
+ !! Variables for dumping of wavefields for plotting purposes
+ integer :: nc_snap_disp_varid, nc_coord_dimid
+ integer :: nc_snap_point_varid, nc_snap_grid_varid
+ integer :: nc_snap_pwave_varid, nc_snap_swave_varid
+ integer :: ncid_out_snap
+ integer :: ndim_disp !< 2 for monopole, 3 for rest
+
+
+ public :: nc_dump_snap_points
+ public :: nc_dump_snap_grid
+ public :: nc_make_snapfile
+ public :: nc_close_snapfile
+ public :: nc_dump_snapshot
+
+contains
+
+!-----------------------------------------------------------------------------------------
+subroutine nc_make_snapfile
+
+ use data_mesh, only: npoint_plot, nelem_plot
+ use data_proc, only: appmynum
+ use data_io, only: datapath, lfdata, nsnap
+ use data_source, only: src_type
+
+#ifdef enable_netcdf
+ integer :: nmode, nc_snappoint_dimid, nc_snapelem_dimid, nc_snapdim_dimid
+ integer :: nc_snaptime_dimid, nc_snapconnec_dimid
+ character(len=120) :: fname
+
+ if (lpr .and. verbose > 1) write(6,*) ' .... preparing xdmf nc file'
+
+ if (src_type(1) == 'monopole') then
+ ndim_disp = 2
+ else
+ ndim_disp = 3
+ end if
+
+ fname = datapath(1:lfdata) // '/netcdf_snap_' // appmynum // '.nc'
+ nmode = ior(NF90_CLOBBER, NF90_NETCDF4)
+ call check(nf90_create(path=fname, cmode=nmode, ncid=ncid_out_snap) )
+
+ call check(nf90_def_dim(ncid_out_snap, 'points', npoint_plot, nc_snappoint_dimid) )
+ call check(nf90_def_dim(ncid_out_snap, 'elements', nelem_plot, nc_snapelem_dimid) )
+ call check(nf90_def_dim(ncid_out_snap, 'dimensions', ndim_disp , nc_snapdim_dimid) )
+ call check(nf90_def_dim(ncid_out_snap, 's-z-coordinate', 2 , nc_coord_dimid) )
+ call check(nf90_def_dim(ncid_out_snap, 'connections', 4 , nc_snapconnec_dimid) )
+ call check(nf90_def_dim(ncid_out_snap, 'timesteps', nsnap , nc_snaptime_dimid) )
+
+ call flush(6)
+ call check(nf90_def_var(ncid = ncid_out_snap, &
+ name = 'displacement', &
+ xtype = NF90_FLOAT, &
+ dimids = [nc_snapdim_dimid, nc_snappoint_dimid, &
+ nc_snaptime_dimid], &
+ chunksizes = [ndim_disp, npoint_plot, 1], &
+ deflate_level = deflate_level, &
+ varid = nc_snap_disp_varid) )
+
+ call check(nf90_def_var(ncid = ncid_out_snap, &
+ name = 'straintrace', &
+ xtype = NF90_FLOAT, &
+ dimids = [nc_snappoint_dimid, nc_snaptime_dimid], &
+ chunksizes = [npoint_plot, 1], &
+ deflate_level = deflate_level, &
+ varid = nc_snap_pwave_varid) )
+
+ call check(nf90_def_var(ncid = ncid_out_snap, &
+ name = 'curlinplane', &
+ xtype = NF90_FLOAT, &
+ dimids = [nc_snappoint_dimid, nc_snaptime_dimid], &
+ chunksizes = [npoint_plot, 1], &
+ deflate_level = deflate_level, &
+ varid = nc_snap_swave_varid) )
+
+ call check(nf90_def_var(ncid = ncid_out_snap, &
+ name = 'points', &
+ xtype = NF90_FLOAT, &
+ dimids = [nc_coord_dimid, nc_snappoint_dimid], &
+ varid = nc_snap_point_varid) )
+
+ call check(nf90_def_var(ncid = ncid_out_snap, &
+ name = 'grid', &
+ xtype = NF90_INT, &
+ dimids = [nc_snapconnec_dimid, nc_snapelem_dimid], &
+ varid = nc_snap_grid_varid) )
+
+ call check(nf90_enddef(ncid = ncid_out_snap))
+
+ if (lpr .and. verbose > 1) write(6,*) ' .... DONE'
+
+#endif
+
+end subroutine nc_make_snapfile
+!-----------------------------------------------------------------------------------------
+
+!-----------------------------------------------------------------------------------------
+subroutine nc_dump_snap_points(points)
+
+ use data_mesh, only: npoint_plot
+ real(sp), dimension(2,npoint_plot), intent(in) :: points
+
+#ifdef enable_netcdf
+ call check(nf90_put_var(ncid = ncid_out_snap, &
+ varid = nc_snap_point_varid, &
+ count = [2, npoint_plot], &
+ values = points) )
+#endif
+
+end subroutine nc_dump_snap_points
+!-----------------------------------------------------------------------------------------
+
+!-----------------------------------------------------------------------------------------
+subroutine nc_dump_snap_grid(grid)
+
+ use data_mesh, only: nelem_plot
+ integer, dimension(4, nelem_plot), intent(in) :: grid
+
+#ifdef enable_netcdf
+ call check(nf90_put_var(ncid = ncid_out_snap, &
+ varid = nc_snap_grid_varid, &
+ count = [4, nelem_plot], &
+ values = grid) )
+#endif
+end subroutine nc_dump_snap_grid
+!-----------------------------------------------------------------------------------------
+
+!-----------------------------------------------------------------------------------------
+subroutine nc_dump_snapshot(u, straintrace, curlinplane, isnap)
+
+ use data_mesh, only: npoint_plot
+ use data_io, only: nsnap
+ use data_source, only: src_type
+
+ real(kind=realkind), dimension(3,npoint_plot), intent(in) :: u
+ real(kind=realkind), dimension(1,npoint_plot), intent(in) :: straintrace
+ real(kind=realkind), dimension(1,npoint_plot), intent(in) :: curlinplane
+ integer, intent(in) :: isnap
+
+#ifdef enable_netcdf
+ if (src_type(1) == 'monopole') then
+ call putvar_real3d(ncid = ncid_out_snap, &
+ varid = nc_snap_disp_varid, &
+ start = [1, 1, isnap], &
+ count = [1, npoint_plot, 1], &
+ values = reshape(u(1,:), [1, npoint_plot,1]) )
+
+ call putvar_real3d(ncid = ncid_out_snap, &
+ varid = nc_snap_disp_varid, &
+ start = [2, 1, isnap], &
+ count = [1, npoint_plot, 1], &
+ values = reshape(u(3,:), [1, npoint_plot,1]) )
+ else
+ call putvar_real3d(ncid = ncid_out_snap, &
+ varid = nc_snap_disp_varid, &
+ start = [1, 1, isnap], &
+ count = [1, npoint_plot, 1], &
+ values = reshape(u(1,:), [1, npoint_plot,1]) )
+
+ call putvar_real3d(ncid = ncid_out_snap, &
+ varid = nc_snap_disp_varid, &
+ start = [2, 1, isnap], &
+ count = [1, npoint_plot, 1], &
+ values = reshape(u(2,:), [1, npoint_plot,1]) )
+
+ call putvar_real3d(ncid = ncid_out_snap, &
+ varid = nc_snap_disp_varid, &
+ start = [3, 1, isnap], &
+ count = [1, npoint_plot, 1], &
+ values = reshape(u(3,:), [1, npoint_plot,1]) )
+ end if
+
+ call check(nf90_put_var(ncid = ncid_out_snap, &
+ varid = nc_snap_pwave_varid, &
+ start = [1, isnap], &
+ count = [npoint_plot, 1], &
+ values = straintrace(1,:)) )
+
+ call check(nf90_put_var(ncid = ncid_out_snap, &
+ varid = nc_snap_swave_varid, &
+ start = [1, isnap], &
+ count = [npoint_plot, 1], &
+ values = curlinplane(1,:)) )
+#endif
+
+end subroutine nc_dump_snapshot
+!-----------------------------------------------------------------------------------------
+
+!-----------------------------------------------------------------------------------------
+subroutine nc_close_snapfile
+
+#ifdef enable_netcdf
+ call check(nf90_close(ncid_out_snap))
+#endif
+
+end subroutine
+!-----------------------------------------------------------------------------------------
+
+end module nc_snapshots
+!=========================================================================================
diff --git a/SOLVER/wavefields_io.f90 b/SOLVER/wavefields_io.f90
index 6ed92ab..97902f5 100644
--- a/SOLVER/wavefields_io.f90
+++ b/SOLVER/wavefields_io.f90
@@ -29,6 +29,7 @@ module wavefields_io
use data_proc
use data_io
use nc_routines
+ use nc_snapshots
implicit none
@@ -119,7 +120,7 @@ subroutine glob_snapshot_xdmf(f_sol, chi, t, isnap)
use data_source, only: src_type
use data_pointwise, only: inv_rho_fluid
use pointwise_derivatives, only: axisym_gradient_fluid, dsdf_fluid_axis
- use nc_routines, only: nc_dump_snapshot
+ use nc_snapshots, only: nc_dump_snapshot
use data_mesh, only: npol, nel_solid, nel_fluid
real(kind=realkind), intent(in) :: f_sol(0:,0:,:,:)
More information about the CIG-COMMITS
mailing list