SOFI3D

SOFI3D SOFI3D is an application for 3D Finite-Difference Seismic Wave Simulation.

Usage

The SOFI3D module is available on Puhti using the following command:

module load sofi3D

The application can be run with:

sofi3D

Available tools

  • partmodel
  • seismerge
  • snapmerge
  • sofi3D
  • sofi3D_acoustic

Example batch job

SOFI3D creates many auxiliary files, so in this example subdirectories are used to reduce clutter.

 #!/bin/bash
 #SBATCH --account=<your-project-unix-id>
 #SBATCH --ntasks=8
 #SBATCH --mem=2G
 #SBATCH --time=00:05:00
 #SBATCH --partition=small

 # Load the prerequisites for sofi3D
 module load intel/19.0.4
 module load intel-mpi/18.0.5
 module load sofi3D

 # move to working directory
 cd /scratch/<your-project-unix-id>

 # create folders for output
 # The folder names and locations can be configured in the json file
 mkdir  log model snap su tmp

 # create folders for input
 # The folder names and locations can be configured in the json file
 mkdir  sources receiver

 # Write some input data (This could also just be a separate file)
 cat <<EOF > receiver/receiver.dat
 540.0   2106.0  2592.0
 1080.0  2106.0  2592.0
 1620.0  2106.0  2592.0
 2160.0  2106.0  2592.0
 2700.0  2106.0  2592.0
 3240.0  2106.0  2592.0
 3780.0  2106.0  2592.0
 4320.0  2106.0  2592.0
 4860.0  2106.0  2592.0
 5400.0  2106.0  2592.0
 EOF

 # Write some more input data (This could again just be a separate file )
 cat <<EOF > sources/sources.dat
 2592.0        2106.0     2592.0      0.0           5.0           1.0
 EOF

 # run the program
 srun sofi3D sofi3D.json > simulation.out

 # Remove created folders
 # test run, so saving only the simulation output
 # not the actual data
 rm -r sources receiver log model snap su tmp`

Where the input file is sofi3D.json defined as:

#-----------------------------------------------------------------
#      JSON PARAMETER FILE FOR SOFI3D
#-----------------------------------------------------------------
# description: example of json input file
# description/name of the model: homogeneous full space (hh.c)
#

{
"Domain Decomposition" : "comment",
            "NPROCX" : "2",
            "NPROCY" : "4",
            "NPROCZ" : "2",

"3-D Grid" : "comment",
            "NX" : "100",
            "NY" : "100",
            "NZ" : "100",
            "DX" : "54.0",
            "DY" : "54.0",
            "DZ" : "54.0",

"FD order" : "comment",
            "FDORDER" : "4",
            "FDORDER_TIME" : "2",
            "FDCOEFF" : "2",
            "fdcoeff values: Taylor=1, Holberg=2" : "comment",

"Time Stepping" : "comment",
            "TIME" : "5.0",
            "DT" : "6.6e-3",

"Source" : "comment",

            "SOURCE_SHAPE" : "1",
            "source shape values: ricker=1;fumue=2;from_SIGNAL_FILE=3;SIN**3=4" : "comment",
            "SIGNAL_FILE" : "signal_mseis.tz",

            "SOURCE_TYPE" : "1",
            "source_type values (point_source): explosive=1;force_in_x=2;in_y=3;in_z=4;custom=5;earthquake=6" : "comment",
            "SOURCE_ALPHA, SOURCE_BETA" : "0.0 , 0.0",
            "AMON, STR, DIP, RAKE" : "1.0e2 , 45.0 , 90.0 , 45.0",
            "SRCREC" : "1",
            "srcrec values :  read from SOURCE_FILE=1, PLANE_WAVE=2 (internal)" : "comment",

            "SOURCE_FILE" : "./sources/sources.dat",
            "RUN_MULTIPLE_SHOTS" : "0",

            "PLANE_WAVE_DEPTH" : "2106.0",
            "PLANE_WAVE_ANGLE" : "0.0",
            "TS" : "0.2",

"Model" : "comment",
            "READMOD" : "0",
            "MFILE" : "model/test",
            "WRITE_MODELFILES" : "2",

"Q-approximation" : "comment",
            "L" : "0",
            "FREF" : "5.0",
            "FL1" : "5.0",
            "TAU" : "0.00001",

"Boundary Conditions" : "comment",
            "FREE_SURF" : "1",
            "ABS_TYPE" : "1",
            "FW" : "20.0",
            "DAMPING" : "8.0",
            "FPML" : "5.0",
            "VPPML" : "3500.0",
            "NPOWER" : "4.0",
            "K_MAX_CPML" : "1.0",
            "BOUNDARY" : "0",

"Snapshots" : "comment",
            "SNAP" : "4",
            "TSNAP1" : "6.6e-3",
            "TSNAP2" : "4.8",
            "TSNAPINC" : "0.2",
            "IDX" : "1",
            "IDY" : "1",
            "IDZ" : "1",
            "SNAP_FORMAT" : "3",
            "SNAP_FILE" : "./snap/test",
            "SNAP_PLANE" : "2",

"Receiver" : "comment",
            "SEISMO" : "4",
            "READREC" : "0",
            "REC_FILE" : "./receiver/receiver.dat",
            "REFRECX, REFRECY, REFRECZ" : "0.0 , 0.0 , 0.0",
            "XREC1,YREC1, ZREC1" : "54.0 , 2106.0, 2592.0",
            "XREC2,YREC2, ZREC2" : "5400.0 , 2106.0, 2592.0",
            "NGEOPH" : "1",

"Receiver array" : "comment",

            "REC_ARRAY" : "0",
            "REC_ARRAY_DEPTH" : "1350.0",
            "REC_ARRAY_DIST" : "640.0",
            "DRX" : "2",
            "DRZ" : "2",

"Seismograms" : "comment",
            "NDT, NDTSHIFT" : "1, 0",
            "SEIS_FORMAT" : "1",
            "SEIS_FILE" : "./su/test",

"Monitoring the simulation" : "comment",
            "LOG_FILE" : "log/test.log",
            "LOG" : "1",
            "OUT_SOURCE_WAVELET" : "1",
            "OUT_TIMESTEP_INFO" : "10",

"Checkpoints" : "comment",
            "CHECKPTREAD" : "0",
            "CHECKPTWRITE" : "0",
            "CHECKPT_FILE" : "tmp/checkpoint_sofi3D",
}

Common errors

  • The variables NPROCX, NPROCY and NPROCZ can be found under Domain Decomposition in the json file. Their product has to be equal to the --ntasks option, otherwise the program will stop. So NPROCXNPROCYNPROCZ=16 in the example run.

  • A json file must be provided otherwise the application would try to read a default sofi3D.json file located in the current directory. sofi3D my_file.json

  • The folders specified in the json file have to exist when the program is run as it does not create them.

  • The output from different workers have to be accessible to each other, as one worker will merge the results from the other workers otherwise it will fail.

License

SOFI3D is a 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, version 2.0 of the License only.

In your publications please acknowledge also oGIIR and CSC, for example “The authors wish to acknowledge for computational resources CSC – IT Center for Science, Finland (urn:nbn:fi:research-infras-2016072531) and the Open Geospatial Information Infrastructure for Research (oGIIR, urn:nbn:fi:research-infras-2016072513).”

Reference