## 3 Method
### Algorithmic Implementation
29 EvaluateEachRaysResponse(\(SensInfo\), \(FeatInfo\), \(StopInfo\), \(NextFeat\), \(CurrentFeat\), \(TransFnc\))
30
31 end for
32
33 end for
34 return\(SensorResponse\)
```  
**Algorithm 2**Recursive function  
```
1 FunctionEvaluateEachRaysResponse(\(SensInfo\), \(FeatInfo\), \(StopInfo\), \(CurrentFeat\), \(PrevFeat\), \(TransFnc\)):
2 Inputs:
3\(SensInfo\): Information about the sensor locations
4\(FeatInfo\): Information about the features' locations, types (e.g., notch, hole)
5\(StopInfo\): Information needed for the stopping criterion; e.g., time, order
6\(CurrentFeat\): Number of the current feature
7\(PrevFeat\): Number of the previous feature
8\(TransFnc\): Dictionary of transmissibility functions dependent on angle and distance
9\(SensorResponse=0\); // Initiates sensor response for all sensors to 0
10 forall Sensorsdo
11 Evaluate distance from current feature to sensor
12 Evaluate angle between previous feature, current feature and sensor
13 forall discrete frequencies of interestdo
14\(SensorResponse+=TransFnc(distance,angle)\)
15
16 end for
27
38 end for
49
50 end for
510 return\(SensorResponse\)
```  
**Algorithm 3**Recursive function  
```
1 FunctionEvaluateEachRaysResponse(\(SensInfo\), \(FeatInfo\), \(StopInfo\), \(CurrentFeat\), \(PrevFeat\), \(TransFnc\)):
2 Inputs:
3\(SensInfo\): Information about the sensor locations
4\(FeatInfo\): Information about the features' locations, types (e.g., notch, hole)
5\(StopInfo\): Information needed for the stopping criterion; e.g., time, order
6\(CurrentFeat\): Number of the current feature
7\(PrevFeat\): Number of the previous feature
8\(TransFnc\): Dictionary of transmissibility functions dependent on angle and distance
9\(SensorResponse=0\); // Initiates sensor response for all sensors to 0
10 forall Sensors do
11 Evaluate distance from current feature to sensor
12 Evaluate angle between previous feature, current feature and sensor
13 forall discrete frequencies of interestdo
14\(SensorResponse+=TransFnc(distance,angle)\)
15\(SensorResponse+=TransFnc(distance,angle)\)
16
17 end for
28
39 end for
410 return\(SensorResponse\)
```  
**Algorithm 4**Recursive function  
```
1 FunctionEvaluateEachRaysResponse(\(SensInfo\), \(FeatInfo\), \(StopInfo\), \(CurrentFeat\), \(PrevFeat\), \(TransFnc\)):
2 Inputs:
3 Outputs:
4\(SensInfo\): Information about the sensor locations
5\(FeatInfo\): Information about the features' locations, types (e.g., notch, hole)
6\(StopInfo\): Information needed for the stopping criterion; e.g., time, order
7\(CurrentFeat\): Number of the current feature
8\(PrevFeat\): Number of the previous feature
9\(TransFnc\): Dictionary of transmissibility functions dependent on angle and distance
10\(SensorResponse=0\); // Initiates sensor response for all sensors to 0
11\(SensorResponse+=TransFnc(distance,angle)\)
12



eturn\(SensorResponse\)
```  
**Algorithm 5**Recursive function  
```
1 FunctionEvaluateEachRaysResponse(\(SensInfo\), \(FeatInfo\), \(StopInfo\), \(CurrentFeat\), \(PrevFeat\), \(TransFnc\)):



## 4 Results

The application of the described model to a synthetic example is described next. The performance of the surrogate is evaluated in terms of precision and speedup compared to the Full Order Models (FOMs). ### Full Order Model (FOM)

To train the described surrogate and to evaluate its efficiency, high-fidelity simulations are necessary. Several spatial discretization methods are available for offering high-order Ansatz spaces that can effectively represent wave propagation according to Equation (2). See for instance the FEM with high polynomial degree (p-FEM) [75, 76], the Scaled Boundary Finite Element Method (SBFEM) [77], or IsoGeometric Analysis (IGA) [78]. The Spectral Element Method (SEM) [79], which is also adopted in this work, is often one of the preferred alternatives due to its optimal mass lumping [80], rendering the use of fast explicit solvers (i.e., integrators in the time domain) straightforward.