+/* Create a new matrix of NEW_SIZE x NEW_SIZE and copy the elements of
+ matrix IN into it. IN must be a square matrix, and in normal usage
+ it will be smaller than NEW_SIZE.
+ IN is destroyed by this function. The return value must be destroyed
+ when no longer required.
+*/
+static gsl_matrix *
+resize_matrix (gsl_matrix *in, size_t new_size)
+{
+ size_t i, j;
+
+ gsl_matrix *out = NULL;
+
+ assert (in->size1 == in->size2);
+
+ if (new_size <= in->size1)
+ return in;
+
+ out = gsl_matrix_calloc (new_size, new_size);
+
+ for (i = 0; i < in->size1; ++i)
+ {
+ for (j = 0; j < in->size2; ++j)
+ {
+ double x = gsl_matrix_get (in, i, j);
+
+ gsl_matrix_set (out, i, j, x);
+ }
+ }
+
+ gsl_matrix_free (in);
+
+ return out;
+}
+