
Encoding: The encoder takes as input the given PDE solution \(\lbrace x_t\rbrace _{1\le t\le T}\)  at each point of the parent mesh \(\lbrace p_i\rbrace _{1\le i \le N}\)  and generates a state-representation of original frames, which can be referred to as embeddings, and which we note \(\lbrace z_t\rbrace _{1\le t\le T}\) . This representation will be used in the interpolation step to find the PDE solution at the spatial queries \(\lbrace c_i\rbrace _{1\le i \le M}\) . Note that in this encoding step, we can generate one embedding for each frame such that we have \(T\)  embeddings or summarize all the information in the \(T\)  frames into one embedding. We will explain the methodology using \(T\)  embeddings, as it is easier to grasp the time dimension in this formulation, but the implementation has been done using a summarized single embedding, as mentioned in section REF . We also note that the embedded mesh remains the same, i.e. we don't change it by upsampling or downsampling it.

Interpolation: We follow the same approach as [1]} and [2]} by performing an interpolation in the feature space. Note that in case we generate one representation that summarizes all \(T\)  frames into one, then \(z_t=z\)  for \(t=1,\dots ,T\) . Let \(\lbrace t_k\rbrace _{1\le k\le T}\)  denote the timesteps at which the \(x_t\)  are generated.
For each spatial query \(c_i\) , let \(\mathcal {N}(c_i)\)  denote the nearest points in the parent mesh \(p_j\) . We generate an interpolation of the features \(z_k[c_i]\)  at coordinates \(c_i\)  and at timestep \(t_k\)  as follows:
\(\forall k\in \lbrace 1,T\rbrace ,\forall i \in \lbrace 1,M\rbrace : z_k[c_i] = \frac{\sum _{p_j\in \mathcal {N}(c_i)} w_j g_{\theta }(x_k[p_j], z_k[p_j], c_i-p_j, t_k)}{\sum _{p_j\in \mathcal {N}(c_i)} w_j}\) 
Where \(z_k[p_j]\)  and \(x_k[p_j]\)  denote the embedding and input frame at position \(p_j\)  and time \(t_k\)  respectively. Moreover, \(w_j\)  are interpolation weights and are positive and sum to one. Weights are chosen such that points closer to the spatial query have a higher contribution to the interpolated feature than points farther away from the spatial query. The \(g_{\theta }\)  is an MLP. To get the PDE solution \(x_k[c_i]\)  at coordinate \(c_i\) , we use a decoder \(d_{\theta }\)  which is an MLP here: \(x_k[c_i] = d_{\theta }(z_k[c_i])\) . In practice, the number of neighbors that we choose is \(2^n\)  where \(n\)  is the dimensionality of the coordinates.

Forecasting: Now that we generated the PDE solution at the spatial queries \(c_i\)  for all the past frames, we forecast the PDE solution at future time points at both spatial queries and the parent mesh coordinates. Let \(\mathcal {G}\)  denote the Nearest-Neighbors Graph (NNG) that has as nodes all the \(N\)  locations in the parent mesh (at original coordinates \(\lbrace p_i\rbrace _{1\le i \le N}\)  ) as well as all the \(M\)  query points (at locations \(\lbrace c_i\rbrace _{1\le i \le M}\) ), with edges that include only the nearest neighbors of each node among the \(N+M-1\)  others. This corresponds to a new mesh represented by the graph \(\mathcal {G}\) . Let \(\lbrace c^{\prime }_i\rbrace _{1\le i \le M+N}\)  denote the corresponding new coordinates. We generate the PDE solution for subsequent time steps on this graph auto-regressively using a decoder \(\Delta _{\theta }\)  as follows:
\(x_{k+1}[c^{\prime }_i] = x_{k}[c^{\prime }_i] + (t_{k+1}-t_k)\Delta _{\theta }(x_k[c^{\prime }_i], \dots , x_1[c^{\prime }_i]), \quad k=T, T+1, \dots \) 

