[cig-commits] [commit] devel, master: Added coordinate netcdf write. (782728a)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Thu Nov 6 08:31:46 PST 2014


Repository : https://github.com/geodynamics/specfem3d_globe

On branches: devel,master
Link       : https://github.com/geodynamics/specfem3d_globe/compare/bc58e579b3b0838a0968725a076f5904845437ca...be63f20cbb6f462104e949894dbe205d2398cd7f

>---------------------------------------------------------------

commit 782728a945c4b1ae9e981f7a5a4a774836a6687d
Author: Michael Afanasiev <michael.afanasiev at erdw.ethz.ch>
Date:   Tue Sep 23 16:35:49 2014 +0200

    Added coordinate netcdf write.


>---------------------------------------------------------------

782728a945c4b1ae9e981f7a5a4a774836a6687d
 src/specfem3D/read_write_netcdf.f90 | 62 ++++++++++++++++++++++++++++++++++---
 src/specfem3D/save_kernels.F90      | 14 +++++----
 2 files changed, 66 insertions(+), 10 deletions(-)

diff --git a/src/specfem3D/read_write_netcdf.f90 b/src/specfem3D/read_write_netcdf.f90
index 7f66816..ef5a445 100644
--- a/src/specfem3D/read_write_netcdf.f90
+++ b/src/specfem3D/read_write_netcdf.f90
@@ -1,3 +1,60 @@
+subroutine write_coordinates_netcdf (fName)
+  
+  ! This writes the corresponding kernel coordinates.
+  
+  use :: mpi
+  use :: netcdf
+  use :: specfem_par
+  use :: specfem_par_crustmantle
+  
+  implicit none
+  
+  intent (in) :: fName
+  
+  character (1024)           :: fName
+  
+  integer, parameter         :: NDIMS=2  
+                            
+  integer                    :: ncid
+  integer                    :: commWorldSize
+  integer                    :: procDimId, kernDimId, varIdRadius, varIdTheta, varIdPhi
+  
+  integer, dimension (NDIMS) :: start, count, ids
+  
+  ! Get the total number of processors.
+  call world_size (commWorldSize)
+  
+  ! Create parallel NetCDF file.
+  call checkNC (nf90_create (fName, IOR(NF90_NETCDF4, NF90_MPIIO), ncid, &
+    comm = MPI_COMM_WORLD, info = MPI_INFO_NULL))
+  
+  ! Define the processor array.
+  call checkNC (nf90_def_dim (ncid, 'glob', NGLOB_CRUST_MANTLE, kernDimId))
+  call checkNC (nf90_def_dim (ncid, 'proc', commWorldSize, procDimID))
+  
+  ! Sort ids into array.
+  ids = (/ kernDimID, procDimID /)
+  
+  ! Define the kernel variable.
+  call checkNC (nf90_def_var (ncid, 'radius', NF90_float, ids, varIdRadius))
+  call checkNC (nf90_def_var (ncid, 'theta',  NF90_float, ids, varIdTheta))
+  call checkNC (nf90_def_var (ncid, 'phi',    NF90_float, ids, varIdPhi))
+  
+  ! End definitions.
+  call checkNC (nf90_enddef (ncid))
+  
+  ! Each processor writes one row.
+  start = (/ 1, myRank + 1 /)
+  count = (/ NGLOB_CRUST_MANTLE, 1 /)
+  call checkNC (nf90_put_var (ncid, varIdRadius, xstore_crust_mantle, start = start, count = count))
+  call checkNC (nf90_put_var (ncid, varIdTheta,  ystore_crust_mantle, start = start, count = count))
+  call checkNC (nf90_put_var (ncid, varIdPhi,    zstore_crust_mantle, start = start, count = count))
+  
+  ! Close the netcdf file.
+  call checkNC (nf90_close (ncid))
+    
+end subroutine write_coordinates_netcdf
+
 subroutine write_kernel_netcdf (fName, param)
   
   ! This guy converts the kernels to global numbering, and writes to a NetCDF file in parallel.
@@ -17,11 +74,8 @@ subroutine write_kernel_netcdf (fName, param)
   real (kind=CUSTOM_REAL), dimension (NGLLX, NGLLY, NGLLZ, NSPEC_CRUST_MANTLE) :: param
   
   integer, parameter         :: NDIMS=2  
-  integer, parameter         :: shuOn=1
-  integer, parameter         :: comLvl=9
-  integer, parameter         :: comOn=1
                             
-  integer                    :: ncid, stat
+  integer                    :: ncid
   integer                    :: i, j, k, ispec, iglob
   integer                    :: commWorldSize
   integer                    :: procDimId, kernDimId, varId
diff --git a/src/specfem3D/save_kernels.F90 b/src/specfem3D/save_kernels.F90
index 0ee9e1f..5194b97 100644
--- a/src/specfem3D/save_kernels.F90
+++ b/src/specfem3D/save_kernels.F90
@@ -438,12 +438,14 @@
         ! Output these kernels as netcdf files -- one per processor.
 #if defined (CEM)
 
-        call write_kernel_netcdf ('alphavKernelCrustMantle.nc', alphav_kl_crust_mantle)
-        call write_kernel_netcdf ('alphahKernelCrustMantle.nc', alphah_kl_crust_mantle)
-        call write_kernel_netcdf ('betavKernelCrustMantle.nc',  betav_kl_crust_mantle)
-        call write_kernel_netcdf ('betahKernelCrustMantle.nc',  betah_kl_crust_mantle)
-        call write_kernel_netcdf ('etaKernelCrustMantle.nc',    eta_kl_crust_mantle)
-        call write_kernel_netcdf ('rhoKernelCrustMantle.nc',    rho_kl_crust_mantle)
+        call write_kernel_netcdf ('./OUTPUT_FILES/alphavKernelCrustMantle.nc', alphav_kl_crust_mantle)
+        call write_kernel_netcdf ('./OUTPUT_FILES/alphahKernelCrustMantle.nc', alphah_kl_crust_mantle)
+        call write_kernel_netcdf ('./OUTPUT_FILES/betavKernelCrustMantle.nc',  betav_kl_crust_mantle)
+        call write_kernel_netcdf ('./OUTPUT_FILES/betahKernelCrustMantle.nc',  betah_kl_crust_mantle)
+        call write_kernel_netcdf ('./OUTPUT_FILES/etaKernelCrustMantle.nc',    eta_kl_crust_mantle)
+        call write_kernel_netcdf ('./OUTPUT_FILES/rhoKernelCrustMantle.nc',    rho_kl_crust_mantle)
+        
+        call write_coordinates_netcdf ('./OUTPUT_FILES/xyzCrustMantle.nc')
                 
 #endif
 



More information about the CIG-COMMITS mailing list