[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