{"id":364,"date":"2026-08-06T03:47:11","date_gmt":"2026-08-06T03:47:11","guid":{"rendered":"https:\/\/summergeometry.org\/sgi2026\/?p=364"},"modified":"2026-08-06T03:59:51","modified_gmt":"2026-08-06T03:59:51","slug":"exploring-dependence-between-curvature-and-heat-diffusion-on-a-mesh","status":"publish","type":"post","link":"https:\/\/summergeometry.org\/sgi2026\/exploring-dependence-between-curvature-and-heat-diffusion-on-a-mesh\/","title":{"rendered":"Exploring Dependence Between Curvature and Heat Diffusion on a Mesh"},"content":{"rendered":"\n<p class=\"has-small-font-size wp-block-paragraph\">By Shannon Cudworth, Mentors: Alek Fr\u00f6hlich and Daniel Perazzo<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Introduction<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">The goal of the project was to study statistical dependence from geometric perspective, where we define two random variables X, Y are defined on a surface <math><semantics><mi class=\"mathcal\">\u2133<\/mi><annotation encoding=\"application\/x-tex\">\\mathcal{M}<\/annotation><\/semantics><\/math>, rather than in a Euclidean space. Specifically, we explore whether heat diffusion across a surface is dependent on the local curvature. <\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To study this relationship, we randomly sample a triangle face from a mesh and then construct one heat diffusion variable and one curvature variable for this sampled face. The former variable was defined using the Laplace-Beltrami operator, and for the latter variable we used the mean curvature value at the sampled face&#8217;s barycenter. We then employed the Hilbert&#8211;Schmidt Independence Criterion (HSIC) to investigate if faces with similar heat diffusion also have similar curvature. <\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To implement, we first sample faces with a probability proportional to their area, to avoid oversampling smaller triangles. After constructing the two aforementioned variables, we make curvature and heat kernel matrices to describe pairwise curvature and heat similarity, run a permutation test, and repeat for various sample sizes to estimate the power of the sample HSIC test. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Constructing the Heat Diffusion Variable<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To approximate heat diffusion, we&#8217;re going to use the Laplace-Beltrami operator. For this, we need the cotangent Laplacian and mass matrix.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong>Cotangent Laplacian:<\/strong> A discrete approximation of the Laplace-Beltrami operator, used on triangle meshes. We define this matrix using the piecewise function:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>L<\/mi><mrow><mi>i<\/mi><mi>j<\/mi><\/mrow><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">{<\/mo><mtable><mtr><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em\"><mrow><mo>\u2212<\/mo><mfrac><mn>1<\/mn><mn>2<\/mn><\/mfrac><mrow><mo fence=\"true\" form=\"prefix\">(<\/mo><mrow><mi>cot<\/mi><mo>\u2061<\/mo><mspace width=\"0.1667em\"><\/mspace><\/mrow><msub><mi>\u03b1<\/mi><mrow><mi>i<\/mi><mi>j<\/mi><\/mrow><\/msub><mo>+<\/mo><mrow><mi>cot<\/mi><mo>\u2061<\/mo><mspace width=\"0.1667em\"><\/mspace><\/mrow><msub><mi>\u03b2<\/mi><mrow><mi>i<\/mi><mi>j<\/mi><\/mrow><\/msub><mo fence=\"true\" form=\"postfix\">)<\/mo><\/mrow><mo separator=\"true\">,<\/mo><\/mrow><\/mtd><mtd class=\"tml-left\" style=\"padding-left:1em;padding-right:0em\"><mrow><mi>i<\/mi><mo>\u2260<\/mo><mi>j<\/mi><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>i<\/mi><mo separator=\"true\">,<\/mo><mi>j<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2208<\/mo><mi>E<\/mi><mo separator=\"true\">,<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em\"><mrow><msub><mo>\u2211<\/mo><mrow><mi>k<\/mi><mo>\u2208<\/mo><mi class=\"mathcal\">\ud835\udca9<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>i<\/mi><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><\/msub><mfrac><mn>1<\/mn><mn>2<\/mn><\/mfrac><mrow><mo fence=\"true\" form=\"prefix\">(<\/mo><mrow><mi>cot<\/mi><mo>\u2061<\/mo><mspace width=\"0.1667em\"><\/mspace><\/mrow><msub><mi>\u03b1<\/mi><mrow><mi>i<\/mi><mi>k<\/mi><\/mrow><\/msub><mo>+<\/mo><mrow><mi>cot<\/mi><mo>\u2061<\/mo><mspace width=\"0.1667em\"><\/mspace><\/mrow><msub><mi>\u03b2<\/mi><mrow><mi>i<\/mi><mi>k<\/mi><\/mrow><\/msub><mo fence=\"true\" form=\"postfix\">)<\/mo><\/mrow><mo separator=\"true\">,<\/mo><\/mrow><\/mtd><mtd class=\"tml-left\" style=\"padding-left:1em;padding-right:0em\"><mrow><mi>i<\/mi><mo>=<\/mo><mi>j<\/mi><mo separator=\"true\">,<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em\"><mrow><mn>0<\/mn><mo separator=\"true\">,<\/mo><\/mrow><\/mtd><mtd class=\"tml-left\" style=\"padding-left:1em;padding-right:0em\"><mtext>otherwise.<\/mtext><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\"><\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">L_{ij} =\n\\begin{cases}\n-\\frac{1}{2}\\left(\\cot\\alpha_{ij}+\\cot\\beta_{ij}\\right), &amp; i\\neq j,\\ (i,j)\\in E,\\\\\n\\sum_{k\\in\\mathcal{N}(i)}\n\\frac{1}{2}\\left(\\cot\\alpha_{ik}+\\cot\\beta_{ik}\\right), &amp; i=j,\\\\\n0, &amp; \\text{otherwise.}\n\\end{cases}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Where <math><semantics><msub><mi>\u03b1<\/mi><mrow><mi>i<\/mi><mi>j<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">\\alpha_{ij}<\/annotation><\/semantics><\/math> and <math><semantics><msub><mi>\u03b2<\/mi><mrow><mi>i<\/mi><mi>j<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">\\beta_{ij}<\/annotation><\/semantics><\/math> are opposite angles for the edge (ij), and N(i) is the set of neighboring vertices to vertex i.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong>Mass Matrix: <\/strong>Represents how much of the mesh&#8217;s surface area is associated with each individual vertex, and was defined using gpy toolbox.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">With both of these components, we can understand the geometric variation of the mesh&#8217;s surface (through the Laplacian), and how much the variation contributes to the overall surface area of the mesh (though the Mass Matrix). <\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To actually approximate the heat diffusion over the area, we need to solve the eigenvalue problem:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>L<\/mi><msub><mi>\u03d5<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><msub><mi>\u03bb<\/mi><mi>i<\/mi><\/msub><mi>M<\/mi><msub><mi>\u03d5<\/mi><mi>i<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">L\\phi_i = \\lambda_iM\\phi_i<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">where L is the cotangent laplacian, M is the mass matrix, <math><semantics><msub><mi>\u03d5<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\phi_i<\/annotation><\/semantics><\/math> is the ith eigenvector, and <math><semantics><msub><mi>\u03bb<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\lambda_i<\/annotation><\/semantics><\/math> is the corresponding ith eigenvalue. <\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Using Scipy, we solve for the first 100 eigenvector-eigenvalue pairs, which represents the 100 smoothest solutions to the equation above. The eigenvector defines a basis function over the mesh vertices, and the eigenvalue is the rate of decay under heat diffusion. <\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Now, to construct our random variable X, we must recall that we have sampled a random face of the triangle mesh, and we have two arrays eigenvectors and eigenvalues, where:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>eigenvectors&#091;i]\neigenvalues&#091;i]<\/code><\/pre>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">returns the first 100 eigenvectors and eigenvalues at vertex i of the mesh. To utilize these arrays, we must directly evaluate the eigenvalue problem at the sampled face&#8217;s barycenter. Then for the sampled face with vertices i,j,k we calculate:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>(eigenvectors&#091;i] + eigenvectors&#091;j] + eigenvectors&#091;k]) \/ 3<\/code><\/pre>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">which gives us a vector of the form:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msub><mi>\u03d5<\/mi><mn>1<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msub><mi>\u03d5<\/mi><mn>2<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><mi>\u22ee<\/mi><mspace width=\"0pt\" height=\"14.944pt\"><\/mspace><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msub><mi>\u03d5<\/mi><mn>100<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\begin{bmatrix}\n\\phi_1(b_i) \\\\\n\\phi_2(b_i) \\\\\n\\vdots \\\\\n\\phi_{100}(b_i)\n\\end{bmatrix}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">where <math><semantics><msub><mi>b<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">b_i<\/annotation><\/semantics><\/math> is the barycenter of the ith sampled face.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Then using the respective eigenvalue, we can construct a random variable <math><semantics><msub><mi>X<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">X_i<\/annotation><\/semantics><\/math> that represents the heat diffusion from barycenter of the ith sampled face with:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mn>1<\/mn><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mn>1<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mn>2<\/mn><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mn>2<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><mi>\u22ee<\/mi><mspace width=\"0pt\" height=\"14.944pt\"><\/mspace><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mn>100<\/mn><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mn>100<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mi>.<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">X_i = \\begin{bmatrix}\ne^{-t\\lambda_1\/2}\\phi_1(b_i) \\\\\ne^{-t\\lambda_2\/2}\\phi_2(b_i) \\\\\n\\vdots \\\\\ne^{-t\\lambda_{100}\/2}\\phi_{100}(b_i)\n\\end{bmatrix}.<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"944\" height=\"812\" src=\"https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-1.png\" alt=\"\" class=\"wp-image-455\" srcset=\"https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-1.png 944w, https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-1-300x258.png 300w, https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-1-768x661.png 768w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><figcaption class=\"wp-element-caption\"><strong>Figure:<\/strong> Heat diffusion from the barycenter of the sampled face on the dragon mesh<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Constructing the Curvature Variable<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To construct the curvature variable, we calculate the mean curvature at each of the sampled face&#8217;s three vertices. Using libigl&#8217;s principal curvature value function, we return <math><semantics><mrow><msub><mi>k<\/mi><mn>1<\/mn><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>k<\/mi><mn>2<\/mn><\/msub><mo separator=\"true\">,<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">k_1, \\space k_2, <\/annotation><\/semantics><\/math> the maximum and minimum curvature values at a vertex, respectively. We can then calculate the mean curvature value, defined as:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>H<\/mi><mo>=<\/mo><mfrac><mrow><mo form=\"prefix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">(<\/mo><msub><mi>k<\/mi><mn>1<\/mn><\/msub><mo>+<\/mo><msub><mi>k<\/mi><mn>2<\/mn><\/msub><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><mn>2<\/mn><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">H = \\frac{(k_1 + k_2)}{2}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">If the mean curvature is small or 0, we can interpret either a locally flat surface, or a saddle structure where <math><semantics><msub><mi>k<\/mi><mn>1<\/mn><\/msub><annotation encoding=\"application\/x-tex\">k_1<\/annotation><\/semantics><\/math> and <math><semantics><msub><mi>k<\/mi><mn>2<\/mn><\/msub><annotation encoding=\"application\/x-tex\">k_2<\/annotation><\/semantics><\/math> cancel each other out. A larger mean curvature indicates bending.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Then for the ith sampled face with vertices i,j,k, we can construct the random variable <math><semantics><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">Y_i<\/annotation><\/semantics><\/math>, which will calculate the curvature at the face&#8217;s barycenter, defined as:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mi>H<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mfrac><mrow><mo form=\"prefix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">(<\/mo><msub><mi>H<\/mi><mi>i<\/mi><\/msub><mo>+<\/mo><msub><mi>H<\/mi><mi>j<\/mi><\/msub><mo>+<\/mo><msub><mi>H<\/mi><mi>k<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><mn>3<\/mn><\/mfrac><\/mrow><annotation encoding=\"application\/x-tex\">Y_i = H(b_i) = \n\n\\frac{(H_i + H_j + H_k\n)}{3}\n<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">where <math><semantics><mrow><msub><mi>H<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>H<\/mi><mi>j<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>H<\/mi><mi>k<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">H_i,\\space H_j, \\space H_k<\/annotation><\/semantics><\/math> are the mean curvature values at vertex i, j, k, and <math><semantics><mrow><mi>H<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">H(b_i) <\/annotation><\/semantics><\/math> is the mean curvature at the barycenter of the ith sampled face.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kernels<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To check independence between our two random variables X and Y, we must construct kernel matrices, which will measure the similarity between pairs <math><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>X<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">X_i, \\space X_j<\/annotation><\/semantics><\/math> and <math><semantics><mrow><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>Y<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">Y_i, \\space Y_j<\/annotation><\/semantics><\/math> (Schrab 19).<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong>X variable: <\/strong>By construction of the laplacian, we can calculate the heat kernel <math><semantics><msub><mi>K<\/mi><mi>X<\/mi><\/msub><annotation encoding=\"application\/x-tex\">K_X<\/annotation><\/semantics><\/math> by:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>K<\/mi><mi>X<\/mi><\/msub><mo>=<\/mo><mi>X<\/mi><msup><mi>X<\/mi><mi>T<\/mi><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">K_X = XX^T<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">By definition:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mtable columnalign=\"center\"><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mn>1<\/mn><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mn>1<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mn>2<\/mn><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mn>2<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><mi>\u22ee<\/mi><mspace width=\"0pt\" height=\"14.944pt\"><\/mspace><\/mrow><\/mtd><\/mtr><mtr><mtd style=\"padding-left:0em;padding-right:0em\"><mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mn>100<\/mn><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mn>100<\/mn><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><\/mtable><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><mi>.<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">X_i = \\begin{bmatrix}\ne^{-t\\lambda_1\/2}\\phi_1(b_i) \\\\\ne^{-t\\lambda_2\/2}\\phi_2(b_i) \\\\\n\\vdots \\\\\ne^{-t\\lambda_{100}\/2}\\phi_{100}(b_i)\n\\end{bmatrix}.<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Then we can say for any i,j:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><msubsup><mi>X<\/mi><mi>j<\/mi><mi>\u22a4<\/mi><\/msubsup><mo>=<\/mo><mrow><munderover><mo>\u2211<\/mo><mrow><mi>\u2113<\/mi><mo>=<\/mo><mn>1<\/mn><\/mrow><mn>100<\/mn><\/munderover><\/mrow><mrow><mo fence=\"true\" form=\"prefix\">(<\/mo><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mi>\u2113<\/mi><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mi>\u2113<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo fence=\"true\" form=\"postfix\">)<\/mo><\/mrow><mrow><mo fence=\"true\" form=\"prefix\">(<\/mo><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mi>\u2113<\/mi><\/msub><mi>\/<\/mi><mn>2<\/mn><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mi>\u2113<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>j<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo fence=\"true\" form=\"postfix\">)<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">X_{i}X_{j}^{\\top}\n=\n\\sum_{\\ell=1}^{100}\n\\left(\ne^{-t\\lambda_\\ell\/2}\\phi_\\ell(b_i)\n\\right)\n\\left(\ne^{-t\\lambda_\\ell\/2}\\phi_\\ell(b_j)\n\\right)<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Then, <\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><msubsup><mi>X<\/mi><mi>j<\/mi><mi>\u22a4<\/mi><\/msubsup><mo>=<\/mo><mrow><munderover><mo>\u2211<\/mo><mrow><mi>\u2113<\/mi><mo>=<\/mo><mn>1<\/mn><\/mrow><mn>100<\/mn><\/munderover><\/mrow><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>t<\/mi><msub><mi>\u03bb<\/mi><mi>\u2113<\/mi><\/msub><\/mrow><\/msup><msub><mi>\u03d5<\/mi><mi>\u2113<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>i<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><msub><mi>\u03d5<\/mi><mi>\u2113<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>b<\/mi><mi>j<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">X_{i}X_{j}^{\\top}\n=\n\\sum_{\\ell=1}^{100}\n\ne^{-t\\lambda_\\ell}\\phi_\\ell(b_i)\n\\phi_\\ell(b_j)\n<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">which is the heat kernel formula (Mostowsky et al.).<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong>Y variable:<\/strong> Unlike the heat diffusion variable X, we need to do a few more calculations to compute the curvature kernel <math><semantics><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><annotation encoding=\"application\/x-tex\">K_Y<\/annotation><\/semantics><\/math>, which we will do by using the Gaussian Kernel formula.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">First, we define <math><semantics><msub><mi>\u03c3<\/mi><mi>Y<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\sigma_Y<\/annotation><\/semantics><\/math>, which represents the median pairwise distance for each <math><semantics><mrow><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>Y<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">Y_i,\\space Y_j<\/annotation><\/semantics><\/math> pair. Then we can calculate the kernel <math><semantics><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><annotation encoding=\"application\/x-tex\">K_Y<\/annotation><\/semantics><\/math> using the formula, for each i,j pair:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>i<\/mi><mo separator=\"true\">,<\/mo><mi>j<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mi>e<\/mi><mi>x<\/mi><mi>p<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mo form=\"prefix\" stretchy=\"false\">\u2212<\/mo><mfrac><mrow><mi>|<\/mi><mi>|<\/mi><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><mo>\u2212<\/mo><msub><mi>Y<\/mi><mi>j<\/mi><\/msub><mi>|<\/mi><msup><mi>|<\/mi><mn>2<\/mn><\/msup><\/mrow><mrow><mn>2<\/mn><msubsup><mi>\u03c3<\/mi><mi>Y<\/mi><mn>2<\/mn><\/msubsup><\/mrow><\/mfrac><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">K_Y(i,j) = exp(-\\frac{||Y_i &#8211; Y_j||^2}{2\\sigma_Y^2})<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">If <math><semantics><mrow><msub><mi>K<\/mi><mi>X<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">K_X, \\space K_Y<\/annotation><\/semantics><\/math> are large, then it follows that the ith and jth sampled faces have similar diffusion or similar curvature, respectively. Rather, if the kernels are small, then we can say the ith and jth sampled faces have different diffusion or curvature, respectively.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hilbert-Schmidt Independence Criterion (HSIC)<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">The kernel matrices <math><semantics><mrow><msub><mi>K<\/mi><mi>X<\/mi><\/msub><mo separator=\"true\">,<\/mo><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">K_X, K_Y<\/annotation><\/semantics><\/math> allow us to determine if there are any similarities between pairs <math><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><mtext>&nbsp;<\/mtext><msub><mi>X<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">X_i, \\space X_j<\/annotation><\/semantics><\/math> or <math><semantics><mrow><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><msub><mi>Y<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">Y_i, Y_j<\/annotation><\/semantics><\/math>. Now, we want to examine that if pair <math><semantics><mrow><msub><mi>X<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><msub><mi>X<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">X_i, X_j<\/annotation><\/semantics><\/math> are similar, if it is true that pair <math><semantics><mrow><msub><mi>Y<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">,<\/mo><msub><mi>Y<\/mi><mi>j<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">Y_i, Y_j<\/annotation><\/semantics><\/math> are similar as well. To acheive this, we compute the sample HSIC.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">To ensure valid comparability between variables, we first make a centering matrix, defined as:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>H<\/mi><mo>=<\/mo><msub><mi>I<\/mi><mrow><mi>n<\/mi><mi>x<\/mi><mi>n<\/mi><\/mrow><\/msub><mo>\u2212<\/mo><mfrac><mn>1<\/mn><mi>n<\/mi><\/mfrac><msub><mi>J<\/mi><mrow><mi>n<\/mi><mi>x<\/mi><mi>n<\/mi><\/mrow><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">H = I_{nxn} &#8211; \\frac{1}{n}J_{nxn}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">where <math><semantics><msub><mi>J<\/mi><mrow><mi>n<\/mi><mi>x<\/mi><mi>n<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">J_{nxn}<\/annotation><\/semantics><\/math> is a matrix of all ones.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">We can then define the centered kernels for X and Y as:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><msub><mi>K<\/mi><mrow><mi>X<\/mi><mi>C<\/mi><\/mrow><\/msub><mo>=<\/mo><mi>H<\/mi><msub><mi>K<\/mi><mi>x<\/mi><\/msub><mi>H<\/mi><mo><\/mo><mo><\/mo><mo><\/mo><mo><\/mo><mo><\/mo><mo><\/mo><mtext>&nbsp;<\/mtext><msub><mi>K<\/mi><mrow><mi>Y<\/mi><mi>C<\/mi><\/mrow><\/msub><mo>=<\/mo><mi>H<\/mi><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><mi>H<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">K_{XC} = HK_xH \\\\\\\\\\\\\\\\\\\\\\\\\\\nK_{YC} = HK_YH<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Then, by definition,<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>H<\/mi><mi>S<\/mi><mi>I<\/mi><mi>C<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>K<\/mi><mi>X<\/mi><\/msub><mo separator=\"true\">,<\/mo><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mfrac><mn>1<\/mn><mrow><mo form=\"prefix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">(<\/mo><mi>n<\/mi><mo>\u2212<\/mo><mn>1<\/mn><msup><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mn>2<\/mn><\/msup><\/mrow><\/mfrac><mi>t<\/mi><mi>r<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><msub><mi>K<\/mi><mrow><mi>X<\/mi><mi>C<\/mi><\/mrow><\/msub><msub><mi>K<\/mi><mrow><mi>Y<\/mi><mi>C<\/mi><\/mrow><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">HSIC(K_X,K_Y) = \\frac{1}{(n-1)^2}tr(K_{XC}K_{YC})<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Here, a large sample HSIC value indicates dependence between heat diffusion and curvature (Schrab 25).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Permutation Testing and Power<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">One sample HSIC value isn&#8217;t enough to statistically determine whether or not X, Y have dependence. So, we must undergo a permutation test. To start, we define a null and alternative hypothesis:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><math><semantics><mtable columnalign=\"left\" rowspacing=\"0em\"><mtr><mtd style=\"text-align:left\"><mrow><msub><mi>H<\/mi><mn>0<\/mn><\/msub><mo lspace=\"0.2222em\" rspace=\"0.2222em\">:<\/mo><mi>X<\/mi><mo separator=\"true\">,<\/mo><mi>Y<\/mi><mtext>&nbsp;<\/mtext><mi>a<\/mi><mi>r<\/mi><mi>e<\/mi><mtext>&nbsp;<\/mtext><mi>i<\/mi><mi>n<\/mi><mi>d<\/mi><mi>e<\/mi><mi>p<\/mi><mi>e<\/mi><mi>n<\/mi><mi>d<\/mi><mi>e<\/mi><mi>n<\/mi><mi>t<\/mi><\/mrow><mo><\/mo><\/mtd><\/mtr><mtr><mtd style=\"text-align:left\"><mrow><msub><mi>H<\/mi><mi>A<\/mi><\/msub><mo lspace=\"0.2222em\" rspace=\"0.2222em\">:<\/mo><mi>X<\/mi><mo separator=\"true\">,<\/mo><mi>Y<\/mi><mtext>&nbsp;<\/mtext><mi>a<\/mi><mi>r<\/mi><mi>e<\/mi><mtext>&nbsp;<\/mtext><mi>d<\/mi><mi>e<\/mi><mi>p<\/mi><mi>e<\/mi><mi>n<\/mi><mi>d<\/mi><mi>e<\/mi><mi>n<\/mi><mi>t<\/mi><\/mrow><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">H_0: X, Y \\space are \\space independent \\\\ H_A: X, Y \\space are \\space dependent<\/annotation><\/semantics><\/math><\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Our goal for this test is to simulate under the null hypothesis, and then see how likely our originally observed sample HSIC is to occur in those conditions. We permute the order of <math><semantics><msub><mi>K<\/mi><mi>Y<\/mi><\/msub><annotation encoding=\"application\/x-tex\">K_Y<\/annotation><\/semantics><\/math>, recompute the sample HSIC, and repeat 200 times to create the null distribution. We then use the observed sample HSIC to calculate a p-value, which indicates whether or not we should reject or fail to reject the null hypothesis.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Taking a step further, we calculated the power of the sample HSIC test, which will give us the probability that, when X and Y are dependent, the sample HSIC will correctly detect that dependence. We do this by repeating the permutation test, and dividing the amount of times we rejected the null (p-value was less than 0.05, depending on significance level) by the total amount of retrials.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">In our project, we compared the power of the sample HSIC test across sample sizes: 5, 10, 25, 50, 75, and repeated the permutation test 100 times per each sample size. We also compared the sample HSIC using the aforementioned heat diffusion kernel that was calculate with the Laplace-Beltrami operator, and another heat diffusion X variable and kernel, that was constructed using a numerical approximation and Gaussian Kernel method.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"725\" src=\"https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-2-1024x725.png\" alt=\"\" class=\"wp-image-460\" srcset=\"https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-2-1024x725.png 1024w, https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-2-300x212.png 300w, https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-2-768x544.png 768w, https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-2-1200x849.png 1200w, https:\/\/summergeometry.org\/sgi2026\/wp-content\/uploads\/2026\/08\/image-2.png 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Figure:<\/strong> Shows the HSIC test power between random variables X,Y with a Gaussian heat diffusion kernel and Laplace-Beltrami heat diffusion kernel. Note that while the Laplace-Beltrami kernel does better for smaller samples, both converge to 1 as sample size increases.<\/figcaption><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">From the figure, we can see that, as the sample size increases, the power of sample HSIC test equals 1. This means that every trial rejected the null hypothesis, and the sample HSIC test is successful at detecting dependence between heat diffusion and curvature.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Possible Extensions of the Project<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">I think it would be fun to compare the sample HSIC across different meshes, and maybe how quickly the power of the sample HSIC test converges to one across different meshes. We could also compare different curvature formulas with heat diffusion, or vary the time that we allow heat diffusion to occur. Or, we can explore with different variables, such as letting X represent the geodesic field from a sampled face, and compare that to curvature.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Works Cited<\/h2>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Schrab, Antonin. \u201cOptimal Kernel Hypothesis Testing.\u201d <em>University College London<\/em>, 2025.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Mostowsky, Peter, et al. &#8220;The GeometricKernels Package: Heat and Mat\u00e9rn Kernels for Geometric Learning on Manifolds, Meshes, and Graphs.&#8221; <em>Journal of Machine Learning Research<\/em>, vol. 26, no. 276, 2025, pp. 1\u201314.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">odedstein. <em>sgi-introduction-course<\/em>. GitHub, <a>https:\/\/github.com\/ddecatur\/sgi-introduction-course<\/a>.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By Shannon Cudworth, Mentors: Alek Fr\u00f6hlich and Daniel Perazzo Introduction The goal of the project was to study statistical dependence from geometric perspective, where we define two random variables X, Y are defined on a surface \u2133\\mathcal{M}, rather than in a Euclidean space. Specifically, we explore whether heat diffusion across a surface is dependent on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[110],"tags":[],"ppma_author":[92],"class_list":["post-364","post","type-post","status-publish","format-standard","hentry","category-research"],"authors":[{"term_id":92,"user_id":0,"is_guest":1,"slug":"cap-shannon-cudworth","display_name":"shannon.cudworth","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","author_category":"","first_name":"","last_name":"","user_url":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/posts\/364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/comments?post=364"}],"version-history":[{"count":10,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/posts\/364\/revisions"}],"predecessor-version":[{"id":514,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/posts\/364\/revisions\/514"}],"wp:attachment":[{"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/media?parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/categories?post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/tags?post=364"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2026\/wp-json\/wp\/v2\/ppma_author?post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}