[cig-commits] [commit] : created v1.4.4_last_BASIN as a copy of the current v1.4.3_BASIN (c3c2ba2)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Thu Nov 14 20:16:16 PST 2013


Repository : ssh://geoshell/specfem3d

On branch  : 
Link       : https://github.com/geodynamics/specfem2d/compare/1e201257d91c794056b990a43329e05d04f77454...0000000000000000000000000000000000000000

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

commit c3c2ba2ad61e1522b98fe9c6e96d490eb90b3de5
Author: Dimitri Komatitsch <komatitsch at lma.cnrs-mrs.fr>
Date:   Tue Dec 29 16:52:45 2009 +0000

    created  v1.4.4_last_BASIN as a copy of the current v1.4.3_BASIN


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

c3c2ba2ad61e1522b98fe9c6e96d490eb90b3de5
 Makefile.in                                |  22 +--
 README_SPECFEM3D                           | 166 +++++++++++-----
 Specfem3D/Mesher.py                        |  71 -------
 Specfem3D/Model.py                         |  23 ---
 Specfem3D/Solver.py                        | 291 -----------------------------
 Specfem3D/Specfem.py                       | 147 ---------------
 Specfem3D/__init__.py                      |   7 -
 Specfem3D/models/Harvard_LA.odb            |  45 -----
 Specfem3D/models/Lacq_gas_field_France.odb |  11 --
 Specfem3D/models/Min_Chen_anisotropy.odb   |  11 --
 Specfem3D/models/SoCal.odb                 |  11 --
 Specfem3D/models/__vault__.odb             |   0
 combine_vol_data.f90                       |  20 +-
 flags.guess                                |   6 +-
 locate_source.f90                          |   2 +-
 meshfem3D.f90                              |  99 +++++++---
 specfem3D.f90                              |  99 +++++++---
 write_c_binary.c                           |   1 +
 18 files changed, 295 insertions(+), 737 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index ae117f8..5c28e08 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -165,8 +165,7 @@ LIBSPECFEM = $(COND_PYRE_OBJECTS) $O/libspecfem.a
 @COND_PYRE_FALSE@	check_mesh_quality_AVS_DX \
 @COND_PYRE_FALSE@	combine_AVS_DX \
 @COND_PYRE_FALSE@	convolve_source_timefunction \
- at COND_PYRE_FALSE@	create_movie_AVS_DX \
- at COND_PYRE_FALSE@	create_movie_GMT \
+ at COND_PYRE_FALSE@	create_movie_shakemap_AVS_DX_GMT \
 @COND_PYRE_FALSE@	meshfem3D \
 @COND_PYRE_FALSE@	$(EMPTY_MACRO)
 
@@ -218,8 +217,7 @@ check_mesh_quality_AVS_DX: xcheck_mesh_quality_AVS_DX
 combine_AVS_DX: xcombine_AVS_DX
 convolve_source_timefunction: xconvolve_source_timefunction
 create_header_file: xcreate_header_file
-create_movie_AVS_DX: xcreate_movie_AVS_DX
-create_movie_GMT: xcreate_movie_GMT
+create_movie_shakemap_AVS_DX_GMT: xcreate_movie_shakemap_AVS_DX_GMT
 combine_vol_data: xcombine_vol_data
 combine_surf_data: xcombine_surf_data
 
@@ -230,8 +228,8 @@ xconvolve_source_timefunction: $O/convolve_source_timefunction.o
 xcreate_header_file: $O/program_create_header_file.o $(LIBSPECFEM)
 	${FCCOMPILE_CHECK} -o xcreate_header_file $O/program_create_header_file.o $(LIBSPECFEM)
 
- at COND_PYRE_FALSE@xcreate_movie_AVS_DX: $O/create_movie_AVS_DX.o $(LIBSPECFEM)
- at COND_PYRE_FALSE@	${FCCOMPILE_CHECK} -o xcreate_movie_AVS_DX $O/create_movie_AVS_DX.o $(LIBSPECFEM)
+ at COND_PYRE_FALSE@xcreate_movie_shakemap_AVS_DX_GMT: $O/create_movie_shakemap_AVS_DX_GMT.o $(LIBSPECFEM)
+ at COND_PYRE_FALSE@	${FCCOMPILE_CHECK} -o xcreate_movie_shakemap_AVS_DX_GMT $O/create_movie_shakemap_AVS_DX_GMT.o $(LIBSPECFEM)
 
 xcombine_AVS_DX: $O/combine_AVS_DX.o $(LIBSPECFEM)
 	${FCCOMPILE_CHECK} -o xcombine_AVS_DX $O/combine_AVS_DX.o $(LIBSPECFEM)
@@ -248,11 +246,8 @@ xcombine_vol_data: $O/combine_vol_data.o $O/write_c_binary.o
 xcombine_surf_data: $O/combine_surf_data.o $O/write_c_binary.o
 	${FCCOMPILE_CHECK} -o xcombine_surf_data  $O/combine_surf_data.o $O/write_c_binary.o
 
-xcreate_movie_GMT:  $O/create_movie_GMT.o $(LIBSPECFEM)
-	${FCCOMPILE_CHECK} -o xcreate_movie_GMT  $O/create_movie_GMT.o $(LIBSPECFEM)
-
 clean:
-	rm -f $O/* *.o *.gnu OUTPUT_FILES/timestamp* OUTPUT_FILES/starttime*txt work.pc* xmeshfem3D xspecfem3D xcombine_AVS_DX xcheck_mesh_quality_AVS_DX xcheck_buffers_2D xconvolve_source_timefunction xcreate_header_file xcreate_movie_AVS_DX xcombine_vol_data xcombine_surf_data xcreate_movie_GMT
+	rm -f $O/* *.o *.gnu OUTPUT_FILES/timestamp* OUTPUT_FILES/starttime*txt work.pc* xmeshfem3D xspecfem3D xcombine_AVS_DX xcheck_mesh_quality_AVS_DX xcheck_buffers_2D xconvolve_source_timefunction xcreate_header_file xcreate_movie_shakemap_AVS_DX_GMT xcombine_vol_data xcombine_surf_data
 
 ###
 ### rule for the archive library
@@ -375,8 +370,8 @@ $O/get_MPI_cutplanes_eta.o: constants.h get_MPI_cutplanes_eta.f90
 $O/get_cmt.o: constants.h get_cmt.f90
 	${FCCOMPILE_CHECK} -c -o $O/get_cmt.o get_cmt.f90
 
-$O/create_movie_AVS_DX.o: constants.h create_movie_AVS_DX.f90
-	${FCCOMPILE_CHECK} -c -o $O/create_movie_AVS_DX.o create_movie_AVS_DX.f90
+$O/create_movie_shakemap_AVS_DX_GMT.o: constants.h create_movie_shakemap_AVS_DX_GMT.f90
+	${FCCOMPILE_CHECK} -c -o $O/create_movie_shakemap_AVS_DX_GMT.o create_movie_shakemap_AVS_DX_GMT.f90
 
 $O/get_global.o: constants.h get_global.f90
 	${FCCOMPILE_CHECK} -c -o $O/get_global.o get_global.f90
@@ -486,9 +481,6 @@ $O/combine_vol_data.o: constants.h combine_vol_data.f90
 $O/combine_surf_data.o: constants.h combine_surf_data.f90
 	${FCCOMPILE_CHECK} -c -o $O/combine_surf_data.o combine_surf_data.f90
 
-$O/create_movie_GMT.o: constants.h create_movie_GMT.f90
-	${FCCOMPILE_CHECK} -c -o $O/create_movie_GMT.o create_movie_GMT.f90
-
 ###
 ### rule for the header file
 ###
diff --git a/README_SPECFEM3D b/README_SPECFEM3D
index 36a27d7..ceb9eba 100644
--- a/README_SPECFEM3D
+++ b/README_SPECFEM3D
@@ -45,51 +45,127 @@ Min Chen
 +++++++++ NOTES ON USING THE SPECFEM3D PACKAGE +++++++++++
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-If you use this code for your own research, please send an email
-to Jeroen Tromp <jtromp AT caltech.edu> for information, and cite
-
- at article{KoLiTrSuStSh04,
-author={Dimitri Komatitsch and Qinya Liu and Jeroen Tromp and Peter S\"{u}ss
-  and Christiane Stidham and John H. Shaw},
-year=2004,
-title={Simulations of Ground Motion in the {L}os {A}ngeles {B}asin
-  based upon the Spectral-Element Method},
-journal={Bull. Seism. Soc. Am.},
-volume=94,
-pages={187-206}}
-
- at article{KoTr99,
- author={D. Komatitsch and J. Tromp},
- year=1999,
- title={Introduction to the spectral-element method for 3-{D} seismic wave propagation},
- journal={Geophys. J. Int.},
- volume=139,
- pages={806-822}}
-
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-REFERENCE FRAME - CONVENTION:
-
-The code uses the following convention for the reference frame:
-
- - X axis is East
- - Y axis is North
- - Z axis is up
-
-Note that this convention is different from both the Aki-Richards convention
-and the Harvard CMT convention.
-
-Let us recall that the Aki-Richards convention is:
-
- - X axis is North
- - Y axis is East
- - Z axis is down
-
-and that the Harvard CMT convention is:
-
- - X axis is South
- - Y axis is East
- - Z axis is up
+! If you use this code for your own research, please cite at least one article
+! written by the developers of the package, for instance:
+!
+! @ARTICLE{TrKoLi08,
+! author = {Jeroen Tromp and Dimitri Komatitsch and Qinya Liu},
+! title = {Spectral-Element and Adjoint Methods in Seismology},
+! journal = {Communications in Computational Physics},
+! year = {2008},
+! volume = {3},
+! pages = {1-32},
+! number = {1}}
+!
+! or
+!
+! @ARTICLE{LiPoKoTr04,
+! author = {Qinya Liu and Jascha Polet and Dimitri Komatitsch and Jeroen Tromp},
+! title = {Spectral-element moment tensor inversions for earthquakes in {S}outhern {C}alifornia},
+! journal={Bull. Seismol. Soc. Am.},
+! year = {2004},
+! volume = {94},
+! pages = {1748-1761},
+! number = {5},
+! doi = {10.1785/012004038}}
+!
+! @INCOLLECTION{ChKoViCaVaFe07,
+! author = {Emmanuel Chaljub and Dimitri Komatitsch and Jean-Pierre Vilotte and
+! Yann Capdeville and Bernard Valette and Gaetano Festa},
+! title = {Spectral Element Analysis in Seismology},
+! booktitle = {Advances in Wave Propagation in Heterogeneous Media},
+! publisher = {Elsevier - Academic Press},
+! year = {2007},
+! editor = {Ru-Shan Wu and Val\'erie Maupin},
+! volume = {48},
+! series = {Advances in Geophysics},
+! pages = {365-419}}
+!
+! @ARTICLE{KoVi98,
+! author={D. Komatitsch and J. P. Vilotte},
+! title={The spectral-element method: an efficient tool to simulate the seismic response of 2{D} and 3{D} geological structures},
+! journal={Bull. Seismol. Soc. Am.},
+! year=1998,
+! volume=88,
+! number=2,
+! pages={368-392}}
+!
+! @ARTICLE{KoTr99,
+! author={D. Komatitsch and J. Tromp},
+! year=1999,
+! title={Introduction to the spectral-element method for 3-{D} seismic wave propagation},
+! journal={Geophys. J. Int.},
+! volume=139,
+! number=3,
+! pages={806-822},
+! doi={10.1046/j.1365-246x.1999.00967.x}}
+!
+! @ARTICLE{KoLiTrSuStSh04,
+! author={Dimitri Komatitsch and Qinya Liu and Jeroen Tromp and Peter S\"{u}ss
+!   and Christiane Stidham and John H. Shaw},
+! year=2004,
+! title={Simulations of Ground Motion in the {L}os {A}ngeles {B}asin
+!   based upon the Spectral-Element Method},
+! journal={Bull. Seism. Soc. Am.},
+! volume=94,
+! number=1,
+! pages={187-206}}
+!
+! and/or another article from http://web.univ-pau.fr/~dkomati1/publications.html
+!
+!
+! If you use the kernel capabilities of the code, please cite at least one article
+! written by the developers of the package, for instance:
+!
+! @ARTICLE{TrKoLi08,
+! author = {Jeroen Tromp and Dimitri Komatitsch and Qinya Liu},
+! title = {Spectral-Element and Adjoint Methods in Seismology},
+! journal = {Communications in Computational Physics},
+! year = {2008},
+! volume = {3},
+! pages = {1-32},
+! number = {1}}
+!
+! or
+!
+! @ARTICLE{LiTr06,
+! author={Qinya Liu and Jeroen Tromp},
+! title={Finite-frequency kernels based on adjoint methods},
+! journal={Bull. Seismol. Soc. Am.},
+! year=2006,
+! volume=96,
+! number=6,
+! pages={2383-2397},
+! doi={10.1785/0120060041}}
+!
+!
+! Reference frame - convention:
+! ----------------------------
+!
+! The code uses the following convention for the reference frame:
+!
+!  - X axis is East
+!  - Y axis is North
+!  - Z axis is up
+!
+! Note that this convention is different from both the Aki-Richards convention
+! and the Harvard CMT convention.
+!
+! Let us recall that the Aki-Richards convention is:
+!
+!  - X axis is North
+!  - Y axis is East
+!  - Z axis is down
+!
+! and that the Harvard CMT convention is:
+!
+!  - X axis is South
+!  - Y axis is East
+!  - Z axis is up
+!
+! To report bugs or suggest improvements to the code, please send an email
+! to Jeroen Tromp <jtromp AT princeton.edu> and/or use our online
+! bug tracking system at http://www.geodynamics.org/roundup .
 
 
 PARAMETERS TO CHANGE ON DIFFERENT MACHINES:
diff --git a/Specfem3D/Mesher.py b/Specfem3D/Mesher.py
deleted file mode 100644
index 35a1a5e..0000000
--- a/Specfem3D/Mesher.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python
-
-
-from pyre.components import Component
-from pyre.units.length import km
-
-
-class Mesher(Component):
-
-
-    # name by which the user refers to this component
-    name = "mesher"
-
-
-    #
-    #--- parameters
-    #
-
-    import pyre.inventory as pyre
-
-    SAVE_MESH_FILES               = pyre.bool("save-files")
-    SUPPRESS_UTM_PROJECTION       = pyre.bool("suppress-utm-projection")
-    dry                           = pyre.bool("dry")
-
-    depth_block                   = pyre.dimensional('depth-block', default=0.0*km)
-
-    LATITUDE_MAX                  = pyre.float("latitude-max")
-    LATITUDE_MIN                  = pyre.float("latitude-min")
-    LONGITUDE_MAX                 = pyre.float("longitude-max")
-    LONGITUDE_MIN                 = pyre.float("longitude-min")
-
-    NEX_ETA                       = pyre.int("nex-eta", default=64)
-    NEX_XI                        = pyre.int("nex-xi", default=64)
-    NPROC_ETA                     = pyre.int("nproc-eta", validator=pyre.greaterEqual(1), default=1)
-    NPROC_XI                      = pyre.int("nproc-xi", validator=pyre.greaterEqual(1), default=1)
-    UTM_PROJECTION_ZONE           = pyre.int("utm-projection-zone")
-
-
-    #
-    #--- configuration
-    #
-    
-    def _configure(self):
-        Component._configure(self)
-
-        # convert to kilometers
-        self.DEPTH_BLOCK_KM = self.depth_block / km
-        
-        return
-
-
-    def nproc(self):
-        """Return the total number of processors needed."""
-        return self.NPROC_XI * self.NPROC_ETA
-
-
-    #
-    #--- execution
-    #
-    
-    def execute(self, script):
-        """Execute the mesher."""
-        from PyxMeshfem import meshfem3D
-        if self.dry:
-            print "execute", meshfem3D
-        else:
-            meshfem3D(script) # call into Fortran
-        return
-
-
-# end of file
diff --git a/Specfem3D/Model.py b/Specfem3D/Model.py
deleted file mode 100644
index 5dd0ea7..0000000
--- a/Specfem3D/Model.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-
-#
-# base class for all models
-#
-
-
-from pyre.components import Component
-
-
-class Model(Component):
-    
-    import pyre.inventory as pyre
-    
-    # parameters common to all models
-    ATTENUATION                   = pyre.bool("attenuation")
-    OCEANS                        = pyre.bool("oceans")
-    TOPOGRAPHY                    = pyre.bool("topography")
-    USE_OLSEN_ATTENUATION         = pyre.bool("use-olsen-attenuation")
-
-
-# end of file
diff --git a/Specfem3D/Solver.py b/Specfem3D/Solver.py
deleted file mode 100644
index 5fbbe0e..0000000
--- a/Specfem3D/Solver.py
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/env python
-
-
-from pyre.components import Component
-from pyre.units.time import second
-
-
-class Solver(Component):
-
-    
-    # name by which the user refers to this component
-    name = "solver"
-    
-    
-    #
-    #--- parameters
-    #
-    
-    import pyre.inventory as pyre
-    #from CMTSolution import cmtValidator
-
-    ABSORBING_CONDITIONS          = pyre.bool("absorbing-conditions")
-    CREATE_SHAKEMAP               = pyre.bool("create-shakemap")
-    MOVIE_SURFACE                 = pyre.bool("movie-surface")
-    MOVIE_VOLUME                  = pyre.bool("movie-volume")
-    PRINT_SOURCE_TIME_FUNCTION    = pyre.bool("print-source-time-function")
-    SAVE_DISPLACEMENT             = pyre.bool("save-displacement")
-    SAVE_FORWARD                  = pyre.bool("save-forward")
-    USE_HIGHRES_FOR_MOVIES        = pyre.bool("use-highres-for-movies")
-    dry                           = pyre.bool("dry")
-
-    record_length                 = pyre.dimensional("record-length", default=0.0*second)
-
-    HDUR_MOVIE                    = pyre.float("hdur-movie")
-
-    cmtSolution                   = pyre.inputFile("cmt-solution", default="DATA/CMTSOLUTION")
-    stations                      = pyre.inputFile("stations", default="DATA/STATIONS")
-    STATIONS_FILTERED             = pyre.str("stations-filtered", default="DATA/STATIONS_FILTERED")
-
-    NTSTEP_BETWEEN_FRAMES         = pyre.int("ntstep-between-frames")
-    NTSTEP_BETWEEN_OUTPUT_INFO    = pyre.int("ntstep-between-output-info")
-    NTSTEP_BETWEEN_OUTPUT_SEISMOS = pyre.int("ntstep-between-output-seismos")
-
-    simulation_type               = pyre.str("simulation-type", validator=pyre.choice(['forward', 'adjoint', 'both']), default='forward')
-
-    
-    #
-    #--- configuration
-    #
-    
-    def _configure(self):
-        Component._configure(self)
-        
-        # convert to seconds
-        self.RECORD_LENGTH_IN_SECONDS = self.record_length / second
-
-        st = { 'forward':1, 'adjoint':2, 'both':3 }
-        self.SIMULATION_TYPE = st[self.simulation_type]
-
-        return
-
-
-    #
-    #--- final initialization
-    #
-    
-    def _init(self):
-        Component._init(self)
-
-        from os.path import abspath, join
-        self.CMTSOLUTION = abspath(self.cmtSolution.name)
-        self.STATIONS = abspath(self.stations.name)
-
-
-    def setOutputDirectories(self, LOCAL_PATH, OUTPUT_FILES):
-        from os.path import abspath, join
-        
-        self.LOCAL_PATH = LOCAL_PATH
-        self.OUTPUT_FILES = OUTPUT_FILES
-
-        # always written by the mesher
-        self.HEADER_FILE = abspath(join(OUTPUT_FILES, 'values_from_mesher.h'))
-
-
-    #
-    #--- building
-    #
-    
-    def build(self, script, srcdir):
-        """Build the solver."""
-
-        import os, os.path, sys
-        from os.path import abspath, join
-
-        outputDir = abspath(script.outputDir)
-        pyspecfem3D = abspath(script.mpiExecutable)
-
-        wd = os.getcwd()
-        print "cd", srcdir
-        os.chdir(srcdir)
-        
-        # create the include file for the solver
-        self.createheader(script)
-        
-        # now finally build the solver
-        argv = ['make', 'OUTPUT_DIR=' + outputDir, pyspecfem3D]
-        print ' '.join(argv)
-        status = os.spawnvp(os.P_WAIT, argv[0], argv)
-        if status != 0:
-            sys.exit("%s: %s: exit %d" % (sys.argv[0], argv[0], status))
-
-        print "cd", wd
-        os.chdir(wd)
-
-        return
-    
-    
-    def createheader(self, script):
-        """Create the include file for the solver."""
-
-        import os, shutil, sys
-        from os.path import exists
-        from PyxParameters import create_header_file
-        
-        # This path is hardwired into the Fortran source.
-        oldHeader = 'OUTPUT_FILES/values_from_mesher.h'
-
-        # If the header doesn't exist, simply create it.
-        if not exists(oldHeader):
-            self.HEADER_FILE = oldHeader
-            create_header_file(script) # call into Fortran
-            return
-        
-        # First generate the header into a temporary file.
-        from tempfile import mktemp
-        newHeader  = mktemp()
-        self.HEADER_FILE = newHeader
-        create_header_file(script) # call into Fortran
-        
-        # Did the header file change?
-        argv = ['diff', oldHeader, newHeader]
-        print ' '.join(argv)
-        status = os.spawnvp(os.P_WAIT, argv[0], argv)
-        if status == 0:
-            # Nope!  Nothing to do here.
-            os.remove(newHeader)
-            return
-        if status != 1:
-            # diff countered a problem
-            os.remove(newHeader)
-            sys.exit("%s: %s: exit %d" % (sys.argv[0], argv[0], status))
-
-        # Replace the old header with the new one.
-        print "mv", newHeader, oldHeader
-        shutil.move(newHeader, oldHeader)
-
-        return
-    
-    
-    #
-    #--- execution
-    #
-    
-    def execute(self, script):
-        """Execute the solver."""
-        from PyxSpecfem import specfem3D
-        if self.dry:
-            print "execute", specfem3D
-        else:
-            specfem3D(script) # call into Fortran
-        return
-
-
-    #
-    #--- clean-up
-    #
-    
-    def collectSeismograms(self):
-        """collect seismograms"""
-
-        if self.dry:
-            return
-        
-        import os, shutil, tarfile
-        from os.path import basename, join
-        from glob import glob
-        from cig.seismo.sac import asc2sac
-        from mpi import MPI_Comm_rank, MPI_COMM_WORLD
-        
-        rank = MPI_Comm_rank(MPI_COMM_WORLD)
-        scratchSeismogramArchive = join(self.LOCAL_PATH, "seismograms-%d.tar.gz" % rank)
-        archive = self.scratchSeismogramArchive
-        
-        files = []
-        for sem in glob(join(self.LOCAL_PATH, "*.sem")):
-            files.append(sem)
-            sac = sem + ".sac"
-            asc2sac(sem, sac)
-            files.append(sac)
-        for semd in glob(join(self.LOCAL_PATH, "*.semd")):
-            files.append(semd)
-            sac = semd + ".sac"
-            asc2sac(semd, sac)
-            files.append(sac)
-        if len(files) == 0:
-            # no seismograms on this node
-            archive.close()
-            os.remove(archive.name)
-            return
-        
-        # A compressed tar file is between 10-15% of the size of the
-        # raw data files.  By taring and compressing it now -- in
-        # parallel, on local filesystems -- we sharply reduce the
-        # amount of data we have to shovel over the network.
-        
-        tgz = tarfile.open(archive.name, "w:gz", archive)
-        for name in files:
-            arcname = basename(name)
-            tgz.add(name, arcname)
-        tgz.close()
-        archive.close()
-
-        # Copy the archive to the shared filesystem.
-
-        src = archive.name
-        dst = join(self.OUTPUT_FILES, basename(src))
-        shutil.copyfile(src, dst)
-
-        return
-
-
-    def collectOutputFiles(self):
-        """collect output files"""
-        
-        if self.dry:
-            return
-        
-        import os, tarfile
-        from os.path import basename, join
-
-        seismogramArchive = join(self.OUTPUT_FILES, "seismograms.tar.gz")
-        archiveOut = open(seismogramArchive, "w")
-        skipList = ['pyspecfem3D', basename(archiveOut.name)]
-
-        # Archive output files -- including the intermediate seismogram
-        # archives delivered from the compute nodes.
-
-        filesIn = []
-        archivesIn = []
-        for name in os.listdir(self.OUTPUT_FILES):
-            if name in skipList:
-                continue
-            pathname = join(self.OUTPUT_FILES, name)
-            if name.startswith("seismograms-"):
-                archivesIn.append(pathname)
-            else:
-                filesIn.append((pathname, name))
-        if len(filesIn) == 0:
-            self._warning.log("No output files!")
-            archiveOut.close()
-            os.remove(archiveOut.name)
-            return
-
-        tgzOut = tarfile.open(archiveOut.name, "w:gz", archiveOut)
-        
-        # Rearchive seismograms.
-
-        for archiveIn in archivesIn:
-            tgzIn = tarfile.open(archiveIn, "r:gz")
-            for member in tgzIn.getmembers():
-                seismogram = tgzIn.extractfile(member)
-                tgzOut.addfile(member, seismogram)
-            tgzIn.close()
-
-        # Archive other output files.
-        
-        for name, arcname in filesIn:
-            tgzOut.add(name, arcname)
-        
-        tgzOut.close()
-        archiveOut.close()
-
-        # Delete the intermediate seismogram archives.
-        
-        for archiveIn in archivesIn:
-            os.remove(archiveIn)
-
-        return
-
-
-# end of file
diff --git a/Specfem3D/Specfem.py b/Specfem3D/Specfem.py
deleted file mode 100644
index 0326941..0000000
--- a/Specfem3D/Specfem.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env python
-
-
-try:
-    import _mpi
-except ImportError:
-    from pyre.applications import Script as Base
-else:
-    from mpi import Application as Base
-
-
-class Specfem(Base):
-    
-    
-    # name by which the user refers to this application
-    name = "Specfem3DBasin"
-    
-    
-    #
-    #--- inventory
-    #
-    
-    import pyre.inventory as pyre
-    
-    from Mesher import Mesher
-    from Solver import Solver
-
-    outputDir                     = pyre.str("output-dir", default="OUTPUT_FILES")
-    scratchDir                    = pyre.str("scratch-dir", default="/scratch")
-        
-    model                         = pyre.facility("model", default="Harvard_LA")
-    mesher                        = pyre.facility("mesher", factory=Mesher)
-    solver                        = pyre.facility("solver", factory=Solver)
-    
-    command = pyre.str("command", validator=pyre.choice(['mesh', 'solve', 'go']), default="go")
-
-
-    #
-    #--- configuration
-    #
-    
-    def _configure(self):
-        super(Specfem, self)._configure()
-        
-        from os import makedirs
-        from os.path import isdir
-        if not isdir(self.outputDir):
-            makedirs(self.outputDir)
-        
-        # declare the interpreter to be used on the compute nodes
-        from os.path import join
-        self.mpiExecutable = join(self.outputDir, "pyspecfem3D") # includes solver
-
-        # compute the total number of processors needed
-        self.nodes = self.mesher.nproc()
-        
-        return
-
-
-    #
-    #--- final initialization
-    #
-    
-    def _init(self):
-        super(Specfem, self)._init()
-        self.OUTPUT_FILES = self.outputDir
-        self.LOCAL_PATH = self.scratchDir
-        self.solver.setOutputDirectories(
-            LOCAL_PATH = self.LOCAL_PATH,
-            OUTPUT_FILES = self.OUTPUT_FILES
-            )
-
-
-    #
-    #--- .odb files
-    #
-    
-
-    def _getPrivateDepositoryLocations(self):
-        from os.path import dirname, isdir, join
-        models = join(dirname(__file__), 'models')
-        assert isdir(models)
-        return [models]
-
-    
-    #
-    #--- executed on the login node in response to the user's command
-    #
-    
-    def onLoginNode(self, *args, **kwds):
-        
-        # build the solver
-        import __main__
-        from os.path import dirname
-        srcdir = dirname(__main__.__file__)
-        self.solver.build(self, srcdir)
-        
-        # schedule the job (bsub)
-        super(Specfem, self).onLoginNode(*args, **kwds)
-        
-        return
-
-
-    #
-    #--- executed when the batch job is scheduled
-    #
-
-    def onLauncherNode(self, *args, **kwds):
-        super(Specfem, self).onLauncherNode(*args, **kwds) # mpirun
-        self.solver.collectOutputFiles()
-        return
-
-    
-    #
-    #--- executed in parallel on the compute nodes
-    #
-    
-    def onComputeNodes(self, *args, **kwds):
-
-        # execute mesher and/or solver
-        
-        if self.command == "mesh" or self.command == "go":
-            self.mesher.execute(self)
-        
-        if self.command == "solve" or self.command == "go":
-            self.solver.execute(self)
-            self.solver.collectSeismograms()
-
-        return
-
-
-    #
-    #--- executed by the serial version of the code
-    #
-    
-    def main(self, *args, **kwds):
-        self.onComputeNodes(self, *args, **kwds)
-
-
-# entry points
-
-def main(*args, **kwds):
-    script = Specfem()
-    script.run(*args, **kwds)
-
-
-# end of file
diff --git a/Specfem3D/__init__.py b/Specfem3D/__init__.py
deleted file mode 100644
index 61e84c1..0000000
--- a/Specfem3D/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env python
-
-
-from Specfem3DBasin.Model import Model
-
-
-# end of file
diff --git a/Specfem3D/models/Harvard_LA.odb b/Specfem3D/models/Harvard_LA.odb
deleted file mode 100644
index 67360cf..0000000
--- a/Specfem3D/models/Harvard_LA.odb
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-
-from Specfem3DBasin import Model
-
-
-class ModelHarvardLA(Model):
-
-
-    name = "Harvard_LA"
-
-
-    import pyre.inventory as pyre
-
-    basin_3d_high_res            = pyre.inputFile("basin-3d-high-res",
-                                                  default="DATA/la_3D_block_harvard/la_3D_high_res/LA_HR_voxet_extracted.txt")
-    basin_3d_medium_res          = pyre.inputFile("basin-3d-medium-res",
-                                                  default="DATA/la_3D_block_harvard/la_3D_medium_res/LA_MR_voxet_extracted.txt")
-    hauksson_regional            = pyre.inputFile("hauksson-regional",
-                                                  default="DATA/hauksson_model/hauksson_final_grid_smooth.dat")
-    moho_map                     = pyre.inputFile("moho-map",
-                                                  default="DATA/moho_map/moho_lupei_zhu.dat")
-    basement_map                 = pyre.inputFile("basement-map",
-                                                  default="DATA/la_basement/reggridbase2_filtered_ascii.dat")
-    salton_sea                   = pyre.inputFile("salton-sea",
-                                                  default="DATA/st_3D_block_harvard/regrid3_vel_p.bin")
-
-
-    def _init(self):
-        Model._init(self)
-
-        from os.path import abspath
-        self.BASIN_MODEL_3D_HIGH_RES_FILE     = abspath(self.basin_3d_high_res.name)
-        self.BASIN_MODEL_3D_MEDIUM_RES_FILE   = abspath(self.basin_3d_medium_res.name)
-        self.HAUKSSON_REGIONAL_MODEL_FILE     = abspath(self.hauksson_regional.name)
-        self.MOHO_MAP_FILE                    = abspath(self.moho_map.name)
-        self.BASEMENT_MAP_FILE                = abspath(self.basement_map.name)
-        self.SALTON_SEA_MODEL_FILE            = abspath(self.salton_sea.name)
-
-
-def model():
-    return ModelHarvardLA()
-
-
-# end of file
diff --git a/Specfem3D/models/Lacq_gas_field_France.odb b/Specfem3D/models/Lacq_gas_field_France.odb
deleted file mode 100644
index 5460285..0000000
--- a/Specfem3D/models/Lacq_gas_field_France.odb
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-
-from Specfem3DBasin import Model
-
-
-def model():
-    return Model("Lacq_gas_field_France")
-
-
-# end of file
diff --git a/Specfem3D/models/Min_Chen_anisotropy.odb b/Specfem3D/models/Min_Chen_anisotropy.odb
deleted file mode 100644
index 0454295..0000000
--- a/Specfem3D/models/Min_Chen_anisotropy.odb
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-
-from Specfem3DBasin import Model
-
-
-def model():
-    return Model("Min_Chen_anisotropy")
-
-
-# end of file
diff --git a/Specfem3D/models/SoCal.odb b/Specfem3D/models/SoCal.odb
deleted file mode 100644
index 69fc53f..0000000
--- a/Specfem3D/models/SoCal.odb
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-
-from Specfem3DBasin import Model
-
-
-def model():
-    return Model("SoCal")
-
-
-# end of file
diff --git a/Specfem3D/models/__vault__.odb b/Specfem3D/models/__vault__.odb
deleted file mode 100644
index e69de29..0000000
diff --git a/combine_vol_data.f90 b/combine_vol_data.f90
index 00f75fb..c6a2921 100644
--- a/combine_vol_data.f90
+++ b/combine_vol_data.f90
@@ -39,15 +39,15 @@
   integer i,j,k,ispec, ios, it
   integer iproc, proc1, proc2, num_node, node_list(300), nspec, nglob
   integer np, ne, npp, nee, npoint, nelement, njunk, njunk2, n1, n2, n3, n4, n5, n6, n7, n8
-  integer ibool(NGLLX,NGLLY,NGLLZ,NSPEC_AB)
+  integer ibool(NGLLX,NGLLY,NGLLZ,NSPEC_AB_VAL)
   integer numpoin, iglob1, iglob2, iglob3, iglob4, iglob5, iglob6, iglob7, iglob8, iglob
-  logical mask_ibool(NGLOB_AB)
-  real(kind=CUSTOM_REAL) data(NGLLX,NGLLY,NGLLZ,NSPEC_AB)
-  real(kind=CUSTOM_REAL),dimension(NGLOB_AB) :: xstore, ystore, zstore
-  real x, y, z, dat(NGLLX,NGLLY,NGLLZ,NSPEC_AB)
-  character(len=150) :: sline, arg(5), filename, indir, outdir, prname
+  logical mask_ibool(NGLOB_AB_VAL)
+  real(kind=CUSTOM_REAL) data(NGLLX,NGLLY,NGLLZ,NSPEC_AB_VAL)
+  real(kind=CUSTOM_REAL),dimension(NGLOB_AB_VAL) :: xstore, ystore, zstore
+  real x, y, z, dat(NGLLX,NGLLY,NGLLZ,NSPEC_AB_VAL)
+  character(len=150) :: sline, arg(6), filename, indir, outdir, prname
   character(len=150) :: mesh_file, local_point_file, local_element_file, local_file, local_data_file, local_ibool_file
-  integer :: num_ibool(NGLOB_AB)
+  integer :: num_ibool(NGLOB_AB_VAL)
   logical :: HIGH_RESOLUTION_MESH
   integer :: ires
 
@@ -56,7 +56,7 @@
   print *
 
   do i = 1, 6
-    call getarg(i,arg(i))
+    call get_command_argument(i,arg(i))
     if (i < 6 .and. trim(arg(i)) == '') then
       print *, 'Usage: xcombine_data start_slice end_slice filename input_dir output_dir high/low-resolution'
       print *, '    or xcombine_data slice_list filename input_dir output_dir high/low-resolution'
@@ -117,8 +117,8 @@
   mesh_file = trim(outdir) // '/' // trim(filename)//'.mesh'
   call open_file(trim(mesh_file)//char(0))
 
-  nspec = NSPEC_AB
-  nglob = NGLOB_AB
+  nspec = NSPEC_AB_VAL
+  nglob = NGLOB_AB_VAL
 
   np = 0
 
diff --git a/flags.guess b/flags.guess
index b6a6b1d..3d841f7 100644
--- a/flags.guess
+++ b/flags.guess
@@ -26,13 +26,13 @@ case $FC in
         # Intel ifort Fortran90 for Linux
         #
         if test x"$FLAGS_CHECK" = x; then
-            FLAGS_CHECK="-O3 -vec-report0 -e95 -std95 -implicitnone -warn truncated_source -warn argument_checking -warn unused -warn declarations -warn alignments -warn ignore_loc -warn usage -check nobounds -align sequence -assume byterecl -fpe0 -ftz -traceback -ftrapuv" # -mcmodel=medium
+            FLAGS_CHECK="-O3 -vec-report0 -e95 -std03 -implicitnone -warn truncated_source -warn argument_checking -warn unused -warn declarations -warn alignments -warn ignore_loc -warn usage -check nobounds -align sequence -assume byterecl -fpe0 -ftz -traceback -ftrapuv" # -mcmodel=medium
         fi
         if test x"$FLAGS_NO_CHECK" = x; then
 # standard options (leave option -ftz, which is *critical* for performance)
 # add -Winline to get information about routines that are inlined
 # add -vec-report3 to get information about loops that are vectorized or not
-            FLAGS_NO_CHECK="-O3 -xP -vec-report0 -e95 -std95 -implicitnone -warn truncated_source -warn argument_checking -warn unused -warn declarations -warn alignments -warn ignore_loc -warn usage -check nobounds -align sequence -assume byterecl -fpe3 -ftz" # -mcmodel=medium
+            FLAGS_NO_CHECK="-O3 -xP -vec-report0 -e95 -std03 -implicitnone -warn truncated_source -warn argument_checking -warn unused -warn declarations -warn alignments -warn ignore_loc -warn usage -check nobounds -align sequence -assume byterecl -fpe3 -ftz" # -mcmodel=medium
         fi
         #MPI_LIBS = -Vaxlib
         ;;
@@ -41,7 +41,7 @@ case $FC in
         # GNU gfortran
         #
         if test x"$FLAGS_NO_CHECK" = x; then
-            FLAGS_NO_CHECK="-std=f95 -fimplicit-none -frange-check -O3 -fmax-errors=10 -pedantic -pedantic-errors -Waliasing -Wampersand -Wcharacter-truncation -Wline-truncation -Wsurprising -Wno-tabs -Wunderflow -fno-trapping-math" # -mcmodel=medium
+            FLAGS_NO_CHECK="-std=f2003 -fimplicit-none -frange-check -O3 -fmax-errors=10 -pedantic -pedantic-errors -Waliasing -Wampersand -Wcharacter-truncation -Wline-truncation -Wsurprising -Wno-tabs -Wunderflow -fno-trapping-math" # -mcmodel=medium
 # older gfortran syntax
 #           FLAGS_NO_CHECK="-std=f95 -fimplicit-none -frange-check -O3 -Wunused-labels -Waliasing -Wampersand -Wsurprising -Wline-truncation -Wunderflow -fno-trapping-math" # -mcmodel=medium
         fi
diff --git a/locate_source.f90 b/locate_source.f90
index 45fc5d1..19ae5c6 100644
--- a/locate_source.f90
+++ b/locate_source.f90
@@ -373,7 +373,7 @@
 
     ispec_selected_source_all(:,:) = -1
 
-  call gather_all_i(ispec_selected_source(ns:ne),ng,ispec_selected_source_all(1:ng,:),ng)
+  call gather_all_i(ispec_selected_source(ns:ne),ng,ispec_selected_source_all(1:ng,:),ng,NPROC)
 
   call gather_all_dp(xi_source(ns:ne),ng,xi_source_all(1:ng,:),ng,NPROC)
   call gather_all_dp(eta_source(ns:ne),ng,eta_source_all(1:ng,:),ng,NPROC)
diff --git a/meshfem3D.f90 b/meshfem3D.f90
index 505a3ef..ae4ca61 100644
--- a/meshfem3D.f90
+++ b/meshfem3D.f90
@@ -39,7 +39,60 @@
 !                                                                             !
 !=============================================================================!
 !
-! If you use this code for your own research, please cite some of these articles:
+! If you use this code for your own research, please cite at least one article
+! written by the developers of the package, for instance:
+!
+! @ARTICLE{TrKoLi08,
+! author = {Jeroen Tromp and Dimitri Komatitsch and Qinya Liu},
+! title = {Spectral-Element and Adjoint Methods in Seismology},
+! journal = {Communications in Computational Physics},
+! year = {2008},
+! volume = {3},
+! pages = {1-32},
+! number = {1}}
+!
+! or
+!
+! @ARTICLE{LiPoKoTr04,
+! author = {Qinya Liu and Jascha Polet and Dimitri Komatitsch and Jeroen Tromp},
+! title = {Spectral-element moment tensor inversions for earthquakes in {S}outhern {C}alifornia},
+! journal={Bull. Seismol. Soc. Am.},
+! year = {2004},
+! volume = {94},
+! pages = {1748-1761},
+! number = {5},
+! doi = {10.1785/012004038}}
+!
+! @INCOLLECTION{ChKoViCaVaFe07,
+! author = {Emmanuel Chaljub and Dimitri Komatitsch and Jean-Pierre Vilotte and
+! Yann Capdeville and Bernard Valette and Gaetano Festa},
+! title = {Spectral Element Analysis in Seismology},
+! booktitle = {Advances in Wave Propagation in Heterogeneous Media},
+! publisher = {Elsevier - Academic Press},
+! year = {2007},
+! editor = {Ru-Shan Wu and Val\'erie Maupin},
+! volume = {48},
+! series = {Advances in Geophysics},
+! pages = {365-419}}
+!
+! @ARTICLE{KoVi98,
+! author={D. Komatitsch and J. P. Vilotte},
+! title={The spectral-element method: an efficient tool to simulate the seismic response of 2{D} and 3{D} geological structures},
+! journal={Bull. Seismol. Soc. Am.},
+! year=1998,
+! volume=88,
+! number=2,
+! pages={368-392}}
+!
+! @ARTICLE{KoTr99,
+! author={D. Komatitsch and J. Tromp},
+! year=1999,
+! title={Introduction to the spectral-element method for 3-{D} seismic wave propagation},
+! journal={Geophys. J. Int.},
+! volume=139,
+! number=3,
+! pages={806-822},
+! doi={10.1046/j.1365-246x.1999.00967.x}}
 !
 ! @ARTICLE{KoLiTrSuStSh04,
 ! author={Dimitri Komatitsch and Qinya Liu and Jeroen Tromp and Peter S\"{u}ss
@@ -52,26 +105,22 @@
 ! number=1,
 ! pages={187-206}}
 !
-! @ARTICLE{KoTr99,
-! author={D. Komatitsch and J. Tromp},
-! year=1999,
-! title={Introduction to the spectral-element method for 3-{D} seismic wave propagation},
-! journal={Geophys. J. Int.},
-! volume=139,
-! number=3,
-! pages={806-822},
-! doi={10.1046/j.1365-246x.1999.00967.x}}
+! and/or another article from http://web.univ-pau.fr/~dkomati1/publications.html
 !
-! @ARTICLE{KoVi98,
-! author={D. Komatitsch and J. P. Vilotte},
-! title={The spectral-element method: an efficient tool to simulate the seismic response of 2{D} and 3{D} geological structures},
-! journal={Bull. Seismol. Soc. Am.},
-! year=1998,
-! volume=88,
-! number=2,
-! pages={368-392}}
 !
-! If you use the kernel capabilities of the code, please cite
+! If you use the kernel capabilities of the code, please cite at least one article
+! written by the developers of the package, for instance:
+!
+! @ARTICLE{TrKoLi08,
+! author = {Jeroen Tromp and Dimitri Komatitsch and Qinya Liu},
+! title = {Spectral-Element and Adjoint Methods in Seismology},
+! journal = {Communications in Computational Physics},
+! year = {2008},
+! volume = {3},
+! pages = {1-32},
+! number = {1}}
+!
+! or
 !
 ! @ARTICLE{LiTr06,
 ! author={Qinya Liu and Jeroen Tromp},
@@ -83,6 +132,7 @@
 ! pages={2383-2397},
 ! doi={10.1785/0120060041}}
 !
+!
 ! Reference frame - convention:
 ! ----------------------------
 !
@@ -108,7 +158,7 @@
 !  - Z axis is up
 !
 ! To report bugs or suggest improvements to the code, please send an email
-! to Jeroen Tromp <jtromp AT caltech.edu> and/or use our online
+! to Jeroen Tromp <jtromp AT princeton.edu> and/or use our online
 ! bug tracking system at http://www.geodynamics.org/roundup .
 !
 ! Evolution of the code:
@@ -116,15 +166,18 @@
 !
 ! MPI v. 1.4 Dimitri Komatitsch, University of Pau, Qinya Liu and others, Caltech, September 2006:
 !  better adjoint and kernel calculations, faster and better I/Os
-!  on very large systems, new Pyre version, many small improvements and bug fixes
+!  on very large systems, many small improvements and bug fixes
+!
 ! MPI v. 1.3 Dimitri Komatitsch, University of Pau, and Qinya Liu, Caltech, July 2005:
 !  serial version, regular mesh, adjoint and kernel calculations, ParaView support
+!
 ! MPI v. 1.2 Min Chen and Dimitri Komatitsch, Caltech, July 2004:
 !  full anisotropy, volume movie
+!
 ! MPI v. 1.1 Dimitri Komatitsch, Caltech, October 2002: Zhu's Moho map, scaling
 !  of Vs with depth, Hauksson's regional model, attenuation, oceans, movies
-! MPI v. 1.0 Dimitri Komatitsch, Caltech, May 2002: first MPI version
-!                        based on global code
+!
+! MPI v. 1.0 Dimitri Komatitsch, Caltech, May 2002: first MPI version based on global code
 
 ! number of spectral elements in each block
   integer nspec,npointot
diff --git a/specfem3D.f90 b/specfem3D.f90
index 3e0acdd..88fd52c 100644
--- a/specfem3D.f90
+++ b/specfem3D.f90
@@ -41,7 +41,60 @@
 !                                                                             !
 !=============================================================================!
 !
-! If you use this code for your own research, please cite some of these articles:
+! If you use this code for your own research, please cite at least one article
+! written by the developers of the package, for instance:
+!
+! @ARTICLE{TrKoLi08,
+! author = {Jeroen Tromp and Dimitri Komatitsch and Qinya Liu},
+! title = {Spectral-Element and Adjoint Methods in Seismology},
+! journal = {Communications in Computational Physics},
+! year = {2008},
+! volume = {3},
+! pages = {1-32},
+! number = {1}}
+!
+! or
+!
+! @ARTICLE{LiPoKoTr04,
+! author = {Qinya Liu and Jascha Polet and Dimitri Komatitsch and Jeroen Tromp},
+! title = {Spectral-element moment tensor inversions for earthquakes in {S}outhern {C}alifornia},
+! journal={Bull. Seismol. Soc. Am.},
+! year = {2004},
+! volume = {94},
+! pages = {1748-1761},
+! number = {5},
+! doi = {10.1785/012004038}}
+!
+! @INCOLLECTION{ChKoViCaVaFe07,
+! author = {Emmanuel Chaljub and Dimitri Komatitsch and Jean-Pierre Vilotte and
+! Yann Capdeville and Bernard Valette and Gaetano Festa},
+! title = {Spectral Element Analysis in Seismology},
+! booktitle = {Advances in Wave Propagation in Heterogeneous Media},
+! publisher = {Elsevier - Academic Press},
+! year = {2007},
+! editor = {Ru-Shan Wu and Val\'erie Maupin},
+! volume = {48},
+! series = {Advances in Geophysics},
+! pages = {365-419}}
+!
+! @ARTICLE{KoVi98,
+! author={D. Komatitsch and J. P. Vilotte},
+! title={The spectral-element method: an efficient tool to simulate the seismic response of 2{D} and 3{D} geological structures},
+! journal={Bull. Seismol. Soc. Am.},
+! year=1998,
+! volume=88,
+! number=2,
+! pages={368-392}}
+!
+! @ARTICLE{KoTr99,
+! author={D. Komatitsch and J. Tromp},
+! year=1999,
+! title={Introduction to the spectral-element method for 3-{D} seismic wave propagation},
+! journal={Geophys. J. Int.},
+! volume=139,
+! number=3,
+! pages={806-822},
+! doi={10.1046/j.1365-246x.1999.00967.x}}
 !
 ! @ARTICLE{KoLiTrSuStSh04,
 ! author={Dimitri Komatitsch and Qinya Liu and Jeroen Tromp and Peter S\"{u}ss
@@ -54,26 +107,22 @@
 ! number=1,
 ! pages={187-206}}
 !
-! @ARTICLE{KoTr99,
-! author={D. Komatitsch and J. Tromp},
-! year=1999,
-! title={Introduction to the spectral-element method for 3-{D} seismic wave propagation},
-! journal={Geophys. J. Int.},
-! volume=139,
-! number=3,
-! pages={806-822},
-! doi={10.1046/j.1365-246x.1999.00967.x}}
+! and/or another article from http://web.univ-pau.fr/~dkomati1/publications.html
 !
-! @ARTICLE{KoVi98,
-! author={D. Komatitsch and J. P. Vilotte},
-! title={The spectral-element method: an efficient tool to simulate the seismic response of 2{D} and 3{D} geological structures},
-! journal={Bull. Seismol. Soc. Am.},
-! year=1998,
-! volume=88,
-! number=2,
-! pages={368-392}}
 !
-! If you use the kernel capabilities of the code, please cite
+! If you use the kernel capabilities of the code, please cite at least one article
+! written by the developers of the package, for instance:
+!
+! @ARTICLE{TrKoLi08,
+! author = {Jeroen Tromp and Dimitri Komatitsch and Qinya Liu},
+! title = {Spectral-Element and Adjoint Methods in Seismology},
+! journal = {Communications in Computational Physics},
+! year = {2008},
+! volume = {3},
+! pages = {1-32},
+! number = {1}}
+!
+! or
 !
 ! @ARTICLE{LiTr06,
 ! author={Qinya Liu and Jeroen Tromp},
@@ -85,6 +134,7 @@
 ! pages={2383-2397},
 ! doi={10.1785/0120060041}}
 !
+!
 ! Reference frame - convention:
 ! ----------------------------
 !
@@ -110,7 +160,7 @@
 !  - Z axis is up
 !
 ! To report bugs or suggest improvements to the code, please send an email
-! to Jeroen Tromp <jtromp AT caltech.edu> and/or use our online
+! to Jeroen Tromp <jtromp AT princeton.edu> and/or use our online
 ! bug tracking system at http://www.geodynamics.org/roundup .
 !
 ! Evolution of the code:
@@ -118,15 +168,18 @@
 !
 ! MPI v. 1.4 Dimitri Komatitsch, University of Pau, Qinya Liu and others, Caltech, September 2006:
 !  better adjoint and kernel calculations, faster and better I/Os
-!  on very large systems, new Pyre version, many small improvements and bug fixes
+!  on very large systems, many small improvements and bug fixes
+!
 ! MPI v. 1.3 Dimitri Komatitsch, University of Pau, and Qinya Liu, Caltech, July 2005:
 !  serial version, regular mesh, adjoint and kernel calculations, ParaView support
+!
 ! MPI v. 1.2 Min Chen and Dimitri Komatitsch, Caltech, July 2004:
 !  full anisotropy, volume movie
+!
 ! MPI v. 1.1 Dimitri Komatitsch, Caltech, October 2002: Zhu's Moho map, scaling
 !  of Vs with depth, Hauksson's regional model, attenuation, oceans, movies
-! MPI v. 1.0 Dimitri Komatitsch, Caltech, May 2002: first MPI version
-!                        based on global code
+!
+! MPI v. 1.0 Dimitri Komatitsch, Caltech, May 2002: first MPI version based on global code
 
 ! memory variables and standard linear solids for attenuation
   double precision, dimension(N_SLS) :: tau_mu_dble,tau_sigma_dble,beta_dble
diff --git a/write_c_binary.c b/write_c_binary.c
index e4b129e..8e9eb06 100644
--- a/write_c_binary.c
+++ b/write_c_binary.c
@@ -29,6 +29,7 @@
 
 #include "config.h"
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>



More information about the CIG-COMMITS mailing list