[cig-commits] r21497 - in seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS: setup setup/adios_xml_files src/specfem3D

lefebvre at geodynamics.org lefebvre at geodynamics.org
Mon Mar 11 15:16:58 PDT 2013


Author: lefebvre
Date: 2013-03-11 15:16:57 -0700 (Mon, 11 Mar 2013)
New Revision: 21497

Added:
   seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/setup/adios_xml_files/
   seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/setup/adios_xml_files/par_header.xml
   seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/write_par_header_ADIOS.F90
Log:
Variables to be written in the header of the ADIOS output file are store in par_header.xml.
This xml file is used in write_par_header_ADIOS.F90.
	new file:   setup/adios_xml_files/par_header.xml
	new file:   src/specfem3D/write_par_header_ADIOS.F90

Added: seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/setup/adios_xml_files/par_header.xml
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/setup/adios_xml_files/par_header.xml	                        (rev 0)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/setup/adios_xml_files/par_header.xml	2013-03-11 22:16:57 UTC (rev 21497)
@@ -0,0 +1,114 @@
+<?xml version="1.0"?>
+<adios-config host-language="Fortran">
+  <adios-group name="SPECFEM3D_GLOBE_HEADER" coordination-communicator="comm">
+    <!--************************************************************-->
+    <!--*** Solver information ***-->
+    <attribute name="code_name"       path="/solver_info" value="SPECFEM3D_GLOBE" type="string"/>
+    <attribute name="version_name"    path="/solver_info" value="SUNFLOWER"       type="string"/>
+    <attribute name="version_number"  path="/solver_info" value="5.1"             type="string"/>
+    <!--************************************************************-->
+    <!--*** Values read from DATA/Par_file ***-->
+    <!-- double precision variables -->
+    <var name="ANGULAR_WIDTH_XI_IN_DEGREES"   path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="ANGULAR_WIDTH_ETA_IN_DEGREES"  path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="CENTER_LONGITUDE_IN_DEGREES"   path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="CENTER_LATITUDE_IN_DEGREES"    path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="GAMMA_ROTATION_AZIMUTH"        path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="HDUR_MOVIE"                    path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="MOVIE_TOP_KM"                  path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="MOVIE_BOTTOM_KM"               path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="MOVIE_EAST_DEG"                path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="MOVIE_WEST_DEG"                path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="MOVIE_NORTH_DEG"               path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="MOVIE_SOUTH_DEG"               path="/specfem3D_globe_parameter_file" type="double"/>
+    <var name="RECORD_LENGTH_IN_MINUTES"      path="/specfem3D_globe_parameter_file" type="double"/>
+    <!-- integer variables -->
+    <var name="NTSTEP_BETWEEN_OUTPUT_SEISMOS" path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NTSTEP_BETWEEN_READ_ADJSRC"    path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NTSTEP_BETWEEN_FRAMES"         path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NTSTEP_BETWEEN_OUTPUT_INFO"    path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NUMBER_OF_RUNS"                path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NUMBER_OF_THIS_RUN"            path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NCHUNKS"                       path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="SIMULATION_TYPE"               path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="MOVIE_VOLUME_TYPE"             path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="MOVIE_START"                   path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="MOVIE_STOP"                    path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NEX_XI"                        path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NEX_ETA"                       path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NPROC_XI"                      path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NPROC_ETA"                     path="/specfem3D_globe_parameter_file" type="integer"/>
+    <var name="NOISE_TOMOGRAPHY"              path="/specfem3D_globe_parameter_file" type="integer"/>
+    <!-- logical variables -->
+    <var name="ELLIPTICITY"                  path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="GRAVITY"                      path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="ROTATION"                     path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="TOPOGRAPHY"                   path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="OCEANS"                       path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="MOVIE_SURFACE"                path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="MOVIE_VOLUME"                 path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="MOVIE_COARSE"                 path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="RECEIVERS_CAN_BE_BURIED"      path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="PRINT_SOURCE_TIME_FUNCTION"   path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="SAVE_MESH_FILES"              path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="ATTENUATION"                  path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="ATTENUATION_NEW"              path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="ABSORBING_CONDITIONS"         path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="SAVE_FORWARD"                 path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="OUTPUT_SEISMOS_ASCII_TEXT"    path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="OUTPUT_SEISMOS_SAC_ALPHANUM"  path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="OUTPUT_SEISMOS_SAC_BINARY"    path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="ROTATE_SEISMOGRAMS_RT"        path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="WRITE_SEISMOGRAMS_BY_MASTER"  path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="SAVE_ALL_SEISMOS_IN_ONE_FILE" path="/specfem3D_globe_parameter_file" type="byte"/>
+    <var name="USE_BINARY_FOR_LARGE_FILE"    path="/specfem3D_globe_parameter_file" type="byte"/>
+    <!--************************************************************-->
+    <!--*** Values read from DATA/CMTSOLUTION ***-->
+    <!-- Number of SOURCES inside the CMTSOLUTION file -->
+    <var name="NSOURCES" path="/CMTSOLUTION" type="integer"/>
+    <!--var name="datasources_length" path="/CMTSOLUTION" type="integer"/-->
+    <!-- integer arrays -->
+    <var name="year"   gwrite="yr" path="/CMTSOLUTION" type="integer" dimensions="NSOURCES"/>
+    <var name="month"  gwrite="mo" path="/CMTSOLUTION" type="integer" dimensions="NSOURCES"/>
+    <var name="day"    gwrite="da" path="/CMTSOLUTION" type="integer" dimensions="NSOURCES"/>
+    <var name="hour"   gwrite="ho" path="/CMTSOLUTION" type="integer" dimensions="NSOURCES"/>
+    <var name="minute" gwrite="mi" path="/CMTSOLUTION" type="integer" dimensions="NSOURCES"/>
+    <!-- double precision arrays -->
+    <var name="second"        gwrite="sec"     path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="time_shift"    gwrite="t_shift" path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="half_duration" gwrite="hdur"    path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="latitude"      gwrite="lat"     path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="longitude"     gwrite="long"    path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="depth"                          path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="mrr"                            path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="mtt"                            path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="mpp"                            path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="mrt"                            path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="mrp"                            path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <var name="mtp"                            path="/CMTSOLUTION" type="double" dimensions="NSOURCES"/>
+    <!-- string arrays -->
+    <var name="datasource" path="/CMTSOLUTION" type="string"/>
+    <!--var name="datasource" path="/CMTSOLUTION" type="string" dimensions="datasources_length"/-->
+    <!--var name="datasource" path="/CMTSOLUTION" type="string" dimensions="5,NSOURCES"/-->
+    <!--var name="event_name" path="/CMTSOLUTION" type="string" dimensions="NSOURCES"/-->
+    <!--************************************************************-->
+    <!--*** Values read from DATA/STATIONS ***-->
+    <!-- Number of STATIONS inside the STATIONS file -->
+    <!--
+    -->
+    <var name="NSTATIONS" path="/STATIONS" type="integer"/>
+    <!--
+    -->
+    <!-- double precision arrays -->
+    <var name="station_latitude"  gwrite="stlat" path="/STATIONS" type="double" dimensions="NSTATIONS"/>
+    <var name="station_longitude" gwrite="stlon" path="/STATIONS" type="double" dimensions="NSTATIONS"/>
+    <var name="station_elevation" gwrite="stele" path="/STATIONS" type="double" dimensions="NSTATIONS"/>
+    <var name="station_burial"    gwrite="stbur" path="/STATIONS" type="double" dimensions="NSTATIONS"/>
+    <!-- string arrays -->
+    <var name="station_name" path="/STATIONS" type="string"/>
+    <var name="network_name" path="/STATIONS" type="string"/>
+  </adios-group>
+
+  <method group="SPECFEM3D_GLOBE_HEADER" method="MPI"/>
+  <buffer size-MB="200" allocate-time="now"/>
+</adios-config>

Added: seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/write_par_header_ADIOS.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/write_par_header_ADIOS.F90	                        (rev 0)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/write_par_header_ADIOS.F90	2013-03-11 22:16:57 UTC (rev 21497)
@@ -0,0 +1,273 @@
+!=====================================================================
+!
+!          S p e c f e m 3 D  G l o b e  V e r s i o n  5 . 1
+!          --------------------------------------------------
+!
+!          Main authors: Dimitri Komatitsch and Jeroen Tromp
+!                        Princeton University, USA
+!             and University of Pau / CNRS / INRIA, France
+! (c) Princeton University / California Institute of Technology and University of Pau / CNRS / INRIA
+!                            April 2011
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License along
+! with this program; if not, write to the Free Software Foundation, Inc.,
+! 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+!
+!=====================================================================
+
+!> @brief Write solver name and version into ADIOS result file header.
+!! The solver name, version name, version number are written down inside
+!! the xml file.
+!subroutine write_solver_info_header_ADIOS()
+!  use mpi
+!  use adios_write_mod
+!  use specfem_par, only : myrank
+  !-------------------------------------------------------------------
+  ! local parameters
+  !-------------------------------------------------------------------
+!  integer                 :: comm, ier, NUMBER_MPI_PROCESSES
+  ! Adios variables
+!  integer                 :: adios_err
+!  integer*8               :: adios_handle
+!  integer*8               :: adios_groupsize, adios_totalsize ! for the .fh file
+  ! TODO : find a better name once the use of ADIOS is more completely
+  ! implemented
+!  character(len=27)       :: filename = "OUTPUT_FILES/header_tmp.bp" 
+
+!    call MPI_COMM_DUP(MPI_COMM_WORLD, comm, ier)
+!    call world_size(NUMBER_MPI_PROCESSES)
+
+!  if(myrank == 0) then
+!    call adios_open (adios_handle, "solver_info", filename, "w", &
+!                     MPI_COMM_SELF, adios_err);
+!                     comm, adios_err);
+
+    ! Automatically generated Fortran code by ADIOS gpp.py script:
+    ! $> $ADIOS_DIR/bin/gpp.py par_header.xml
+    ! Re-run each time the xml file is modified.
+!#include "gwrite_solver_info.fh"
+
+!    call adios_close (adios_handle, adios_err)
+!  endif
+
+!end subroutine write_solver_info_header_ADIOS
+
+!
+!-------------------------------------------------------------------------------------------------
+!
+
+!> @brief Write data found in Par_file into ADIOS result file header.
+!! Write the ADIOS header containing values to ensure reproductibility of
+!! the simulation. These values come form the following files :
+!! DATA/Par_file, DATA/CMTSOLUTION, DATA/STATIONS
+subroutine write_par_file_header_ADIOS ()
+  use mpi
+  use adios_write_mod
+  use specfem_par, only : myrank, NSOURCES
+
+  implicit none
+  include "constants.h"
+
+  !-------------------------------------------------------------------
+  ! local parameters
+  !-------------------------------------------------------------------
+  ! parameters read from parameter file (cf. DATA/Par_file)
+  integer  :: NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
+          MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
+          NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,NOISE_TOMOGRAPHY
+
+  double precision :: ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,&
+          CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,&
+          HDUR_MOVIE,MOVIE_TOP_KM,MOVIE_BOTTOM_KM, &
+          MOVIE_EAST_DEG,MOVIE_WEST_DEG,MOVIE_NORTH_DEG,&
+          MOVIE_SOUTH_DEG,RECORD_LENGTH_IN_MINUTES
+
+  logical :: ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,&
+         MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE, &
+         RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
+         SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW, &
+         ABSORBING_CONDITIONS,SAVE_FORWARD, &
+         OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
+         ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
+         SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE
+  ! values from CMTSOLUTION
+  ! integer          :: NSOURCES -> in specfem_par module
+  integer,           dimension(NSOURCES) :: yr, mo, da, ho, mi
+  double precision,  dimension(NSOURCES) :: sec, t_shift, hdur, lat, long, depth
+  double precision,  dimension(NSOURCES) :: mrr, mtt, mpp, mrt, mrp, mtp 
+  integer :: datasources_length
+  character(len=5) :: datasource_tmp
+  character(len=16):: event_name
+  character(len=:), allocatable  :: datasource
+  !character(len=256) :: datasource
+
+  ! values from STATIONS
+  integer :: NSTATIONS
+  character(len=MAX_LENGTH_STATION_NAME) :: station_name_tmp
+  character(len=MAX_LENGTH_NETWORK_NAME) :: network_name_tmp
+  character(len=:),   allocatable :: station_name, network_name 
+  double precision, allocatable, dimension(:) :: stlat, stlon, stele, stbur
+
+  character(len=150) :: OUTPUT_FILES,LOCAL_PATH,LOCAL_TMP_PATH,MODEL
+  character(len=256) :: string, CMTSOLUTION, STATIONS
+
+  integer                 :: isource, irec, ier
+  ! Adios variables
+  integer                 :: adios_err
+  integer*8               :: adios_handle
+  integer*8               :: adios_groupsize, adios_totalsize ! for the .fh file
+  ! TODO : find a better name once the use of ADIOS is more completely
+  ! implemented
+  character(len=27)       :: filename = "OUTPUT_FILES/header_tmp.bp" 
+
+  ! ensure that only the master open the adios handle inside MPI_COMM_SELF
+  if(myrank == 0) then
+    ! extract all unmodified values from the Par_file
+    call read_parameter_file(OUTPUT_FILES,                                                                    & 
+                             LOCAL_PATH,LOCAL_TMP_PATH,MODEL,                                                 & 
+                             NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES,  & 
+                             NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,                                       & 
+                             NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE,                                      & 
+                             MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,                                        & 
+                             NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,                                               & 
+                             ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,                        & 
+                             CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,   & 
+                             HDUR_MOVIE,MOVIE_TOP_KM,MOVIE_BOTTOM_KM,RECORD_LENGTH_IN_MINUTES,                & 
+                             MOVIE_EAST_DEG,MOVIE_WEST_DEG,MOVIE_NORTH_DEG,MOVIE_SOUTH_DEG,                   & 
+                             ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,                                  & 
+                             MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE,                                         & 
+                             RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION,                              & 
+                             SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS,SAVE_FORWARD,   & 
+                             OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, & 
+                             ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,                               & 
+                             SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY)
+    ! extract all unmodified values from CMTSOLUTION
+    ! get_cmt() routine modify the read values
+    ! TODO factorize what follows and get_cmt.f90 and probably one or two other
+    !      routines
+    call get_value_string(CMTSOLUTION, 'solver.CMTSOLUTION', 'DATA/CMTSOLUTION')
+    open(unit=1,file=CMTSOLUTION,status='old',action='read')
+    datasources_length = 4*NSOURCES
+    allocate(character(len=(datasources_length)) :: datasource, stat=ier)
+    if (ier /=0) &
+        call exit_MPI (myrank, "error allocating datasource string for adios header")
+    datasource = ""
+    ! ADIOS only  (1) byte for a string. This may cause data overwriting.
+    ! => increase the generate by the string size -1
+    adios_groupsize = adios_groupsize + 4*NSOURCES - 1
+    do isource=1,NSOURCES
+
+      read(1,"(a256)") string
+      ! skips empty lines
+      do while( len_trim(string) == 0 )
+      read(1,"(a256)") string
+      enddo
+
+      ! read header with event information -- TODO there is more to add
+      !read(string,"(a4,i5,i3,i3,i3,i3,f6.2)") datasource(:,isource),yr(isource), &
+      read(string,"(a4,i5,i3,i3,i3,i3,f6.2)") datasource_tmp,yr(isource), &
+          mo(isource),da(isource),ho(isource),mi(isource),sec(isource)
+      datasource = datasource // datasource_tmp
+      ! read event name 
+      read(1,"(a)") string
+      read(string(12:len_trim(string)),*) event_name
+      ! read time shift
+      read(1,"(a)") string
+      read(string(12:len_trim(string)),*) t_shift(isource)
+      ! read half duration
+      read(1,"(a)") string
+      read(string(15:len_trim(string)),*) hdur(isource)
+      ! read latitude
+      read(1,"(a)") string
+      read(string(10:len_trim(string)),*) lat(isource)
+      ! read longitude
+      read(1,"(a)") string
+      read(string(11:len_trim(string)),*) long(isource)
+      ! read depth
+      read(1,"(a)") string
+      read(string(7:len_trim(string)),*) depth(isource)
+      ! read Mrr
+      read(1,"(a)") string
+      read(string(5:len_trim(string)),*) mrr(isource)
+      ! read Mtt
+      read(1,"(a)") string
+      read(string(5:len_trim(string)),*) mtt(isource)
+      ! read Mpp
+      read(1,"(a)") string
+      read(string(5:len_trim(string)),*) mpp(isource)
+      ! read Mrt
+      read(1,"(a)") string
+      read(string(5:len_trim(string)),*) mrt(isource)
+      ! read Mrp
+      read(1,"(a)") string
+      read(string(5:len_trim(string)),*) mrp(isource)
+      ! read Mtp
+      read(1,"(a)") string
+      read(string(5:len_trim(string)),*) mtp(isource)
+    enddo
+    close(1)
+
+    ! Extract values from STATIONS File
+    call get_value_string(STATIONS, 'solver.STATIONS', 'DATA/STATIONS')
+    open(unit=1,file=STATIONS,iostat=ier,status='old',action='read')
+    NSTATIONS = 0
+    do while(ier == 0)
+      read(1,"(a)",iostat=ier) string
+      if(ier == 0) NSTATIONS = NSTATIONS + 1
+    enddo
+    allocate (character (len=(MAX_LENGTH_STATION_NAME*NSTATIONS)) :: station_name)
+    allocate (character (len=(MAX_LENGTH_NETWORK_NAME*NSTATIONS)) :: network_name)
+    allocate (stlat (NSTATIONS)) 
+    allocate (stlon (NSTATIONS)) 
+    allocate (stele (NSTATIONS)) 
+    allocate (stbur (NSTATIONS)) 
+    station_name = ""
+    network_name = ""
+    rewind(1)
+    do irec = 1,NSTATIONS
+      !read(1,*,iostat=ier) station_name(irec),network_name(irec),stlat(irec),stlon(irec),stele(irec),stbur(irec)
+      read(1,*,iostat=ier) station_name_tmp, network_name_tmp, &
+                            stlat(irec),      stlon(irec),      &
+                            stele(irec),      stbur(irec)
+      if( ier /= 0 ) then
+        write(IMAIN,*) 'error reading in station ',irec
+        call exit_MPI(myrank,'error reading in station in STATIONS file')
+      endif
+      station_name = station_name // trim(station_name_tmp) // " " 
+      network_name = network_name // trim(network_name_tmp) // " " 
+    enddo
+    close(1)
+    station_name = trim(station_name)
+    network_name = trim(network_name)
+
+    call adios_open (adios_handle, "SPECFEM3D_GLOBE_HEADER", filename, "w", &
+                     MPI_COMM_SELF, adios_err);
+
+    ! Automatically generated Fortran code by ADIOS gpp.py script:
+    ! $> $ADIOS_DIR/bin/gpp.py par_header.xml
+    ! Re-run each time the xml file is modified.
+#include "gwrite_SPECFEM3D_GLOBE_HEADER.fh"
+
+    call adios_close (adios_handle, adios_err)
+
+    deallocate(datasource)
+    deallocate(station_name)
+    deallocate(network_name)
+    deallocate(stlat)
+    deallocate(stlon)
+    deallocate(stele)
+    deallocate(stbur)
+  endif
+
+end subroutine write_par_file_header_ADIOS



More information about the CIG-COMMITS mailing list