Configurations

Empty template configuration.yaml files can be generated with:

The contents of these files must then be fully completed by the user either manually or with self-written scripts.

Note

The configuration file reader yet dont perform any type or spell checks. User should fill the form like indicated below to avoid mysterious errors further downstream in the application. For instance, settings.spatial_derivative_order: 10 will work, while "10" would throw an error.

2D

using ElasticFDSG 

configuration_file_path = "path/to/my/config_file.yaml" 
ElasticFDSG.dim2.configtemplate(configuration_file_path)

This creates:

# This is a template configuration.yaml file for a 2D ElasticFDSG simulation.
# Any other configuration file can be prepared in the same manner.
# All keywords are case sensitive, and must be named as shown below.
# The templates is filled with some example placeholder values.
# The user must fill them before running a simulation. 
# The velocity model is prepared in another file.

settings:
    device: cpu                         # cpu / gpu-cuda / gpu-metal 
    precision: Float64                  # Float64 / Float32
    spatial_derivative_order: 10        # (1-10)
    show_summary_in_console: true       # true / false  
    show_progress_in_console: true      # true / false
    save_results: true                  # true / false  
    output:
        destination_folder: path/to/destination/folder
        file_name: cool_simulation 
        format: h5                   # h5 (only supported format yet) 

time:
    start: 0              # [sec]
    end: 1                # [sec]
    timestep: 0.005       # [sec] (will be checked and changed if unstable)

source:
    dominant_frequency: 15        # [Hz]
    wavelet_type: gauss1d         # ricker / gauss1d (first derivative of a gaussian)
    wavelet_center: 0.067         # (should be ≥ 1/fdom) [sec]
    amplitude: 1e5                # wavelet amplifier
    location: 
        x: 2500                   # [m]
        y: 2500                   # [m]             

    point_source:             
        use: true               # Enables point source (if true, double_couple.use should be false)
        act_on:
            on_vx: true         # Apply only on vx-component
            on_vy: false        # Apply only on vy-component
            on_vx_and_vy: 
                force_angle: 0   # [°] Only used if both on_vx and on_vy are enabled. ∈[0°,360°] 0° -> in y negative direction, 180° -> in x negative direction

    double_couple:            
        use: false               # Enables double couple source (if true, point_source.use should be false)
        strike: 0                # ∈[0°,360°] 0° -> in y negative direction, 180° -> in x negative direction

boundaries: # (absorbing / else)
    xstart: absorbing      
    xend: absorbing       
    ystart: absorbing       
    yend: absorbing

pml:
    nlayer: 10                      # about 10-20 works reasonable
    reflection_coefficient: 1e-5    # about 1e-5 works reasonable

receivers:
    geophones:
         - { x: 3000, y: 3000 }        # [m] Example geophone

    das:
        x_aligned:
        - { x_range: "0:25:10000", y: 4000 }  # [m] Example das
        
        y_aligned:
        - { x: 1000, y_range: "1000:25:9000"} # [m] Example das
        
    snapshots:
        times: 
             [0.25, 0.5, 0.75, 1.0] # [sec] Example
        fields: 
             [vx, vy, sxx, sxy, syy] # Example

3D

using ElasticFDSG 

configuration_file_path = "path/to/my/config_file.yaml"  # add your actual path here 
ElasticFDSG.dim3.configtemplate(configuration_file_path)

This creates:

# This is a template configuration.yaml file for a 3D ElasticFDSG simulation.
# Any other configuration file can be prepared in the same manner.
# All keywords are case sensitive, and must be named as shown below.
# The templates is filled with some example placeholder values.
# The user must fill them before running a simulation. 
# The velocity model is prepared in another file.

settings:
    device: cpu                         # cpu / gpu-cuda / gpu-metal 
    precision: Float64                  # Float64 / Float32
    spatial_derivative_order: 10        # (1-10)
    show_summary_in_console: true       # true / false  
    show_progress_in_console: true      # true / false
    save_results: true                  # true / false  
    output:
        destination_folder: path/to/destination/folder
        file_name: cool_simulation 
        format: h5                   # h5 (only supported format yet) 

time:
    start: 0              # [sec]
    end: 1                # [sec]
    timestep: 0.005       # [sec] (will be checked and changed if unstable)

source:
    dominant_frequency: 25                 # [Hz]
    wavelet_type: ricker                   # ricker / gauss1d 
    wavelet_center: 0.04                   # (should be ≥ 1/fdom) [sec]
    amplitude: 1 
    location:
        x: 200                             # [m]
        y: 200                             # [m]
        z: 100                             # [m]      
    point_source:                 
        use: true                          # true / false (if true, double_couple.use should be false)
        act_on:
            on_vx: true                    # Apply only on vx-component 
            on_vy: false                   # Apply only on vy-component
            on_vz: false                   # Apply only on vz-component
            on_all:                        # Only activates, if all v-components are enabled true
                phi: 0                     # [°] Elevation angle
                theta: 0                   # [°] Azimuth angle (x-y plane)
    double_couple: 
        use: false                         # true / false  (if true, point_source.use should be false)
        strike: 0                          # [°] ∈ [0, 360]
        dip: 0                             # [°] ∈ [0, 90]
        rake: 0                            # [°] ∈ [0, 360]
        anisotropic_moment_tensor: true    # true / false

boundaries: # (absorbing / else)
    xstart: absorbing      
    xend:   absorbing       
    ystart: absorbing       
    yend:   absorbing         
    zstart: absorbing        
    zend:   absorbing          

pml:
    nlayer: 10                       # about 10-20 works reasonable
    reflection_coefficient: 1e-15    # about 1e-5 works reasonable

receivers:
    geophones: 
        - { x: 100, y: 200, z: 300 }    #[m] Example geophone

    das:
        x_aligned: 
            - { x_range: "0:2.5:500", y: 100, z: 100 }  #[m] Example das 
        
        y_aligned: 
            - { x: 200, y_range: "100:2.5:400", z: 100 } #[m] Example das 

        z_aligned:
            - { x: 300, y: 250, z_range: "0:2.5:400" } #[m] Example das 
                
                
    snapshots: # 2D plane-snapshots: XY, XZ, YZ planes only
        times: 
             [0.25, 0.5, 0.75, 1.0] # [sec] Example
        fields: 
             [vx, vy, vz, sxx, sxy, sxz, syy, syz, szz] # Example 
        origins:
             { x: 250, y: 250, z: 250 } # [m] Coordinates of snapshot origin. Example: XY-plane snapshots will be at z=250m