summaryrefslogtreecommitdiff
path: root/gsl-1.9/matrix/getset_source.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/matrix/getset_source.c')
-rw-r--r--gsl-1.9/matrix/getset_source.c228
1 files changed, 228 insertions, 0 deletions
diff --git a/gsl-1.9/matrix/getset_source.c b/gsl-1.9/matrix/getset_source.c
new file mode 100644
index 0000000..e55c05b
--- /dev/null
+++ b/gsl-1.9/matrix/getset_source.c
@@ -0,0 +1,228 @@
+/**********************************************************************/
+/* The functions below are obsolete */
+/**********************************************************************/
+
+int
+FUNCTION (gsl_matrix, get_row) (TYPE (gsl_vector) * v,
+ const TYPE (gsl_matrix) * m,
+ const size_t i)
+{
+ const size_t M = m->size1;
+ const size_t N = m->size2;
+ const size_t tda = m->tda;
+
+ if (i >= M)
+ {
+ GSL_ERROR ("row index is out of range", GSL_EINVAL);
+ }
+
+ if (v->size != N)
+ {
+ GSL_ERROR ("matrix row size and vector length are not equal",
+ GSL_EBADLEN);
+ }
+
+ {
+ ATOMIC *v_data = v->data;
+ const ATOMIC *row_data = m->data + MULTIPLICITY * i * tda;
+ const size_t stride = v->stride ;
+ size_t j;
+
+ for (j = 0; j < N; j++)
+ {
+ unsigned int k;
+
+ for (k = 0; k < MULTIPLICITY; k++)
+ {
+ v_data[MULTIPLICITY * stride * j + k]
+ = row_data[MULTIPLICITY * j + k];
+ }
+ }
+ }
+
+ return GSL_SUCCESS;
+}
+
+int
+FUNCTION (gsl_matrix, get_col) (TYPE (gsl_vector) * v,
+ const TYPE (gsl_matrix) * m,
+ const size_t j)
+{
+ const size_t M = m->size1;
+ const size_t N = m->size2;
+ const size_t tda = m->tda;
+
+ if (j >= N)
+ {
+ GSL_ERROR ("column index is out of range", GSL_EINVAL);
+ }
+
+ if (v->size != M)
+ {
+ GSL_ERROR ("matrix column size and vector length are not equal",
+ GSL_EBADLEN);
+ }
+
+
+ {
+ ATOMIC *v_data = v->data;
+ const ATOMIC *column_data = m->data + MULTIPLICITY * j;
+ const size_t stride = v->stride ;
+ size_t i;
+
+ for (i = 0; i < M; i++)
+ {
+ unsigned int k;
+
+ for (k = 0; k < MULTIPLICITY; k++)
+ {
+ v_data[stride * MULTIPLICITY * i + k] =
+ column_data[MULTIPLICITY * i * tda + k];
+ }
+ }
+ }
+
+ return GSL_SUCCESS;
+}
+
+int
+FUNCTION (gsl_matrix, set_row) (TYPE (gsl_matrix) * m,
+ const size_t i,
+ const TYPE (gsl_vector) * v)
+{
+ const size_t M = m->size1;
+ const size_t N = m->size2;
+ const size_t tda = m->tda;
+
+ if (i >= M)
+ {
+ GSL_ERROR ("row index is out of range", GSL_EINVAL);
+ }
+
+ if (v->size != N)
+ {
+ GSL_ERROR ("matrix row size and vector length are not equal",
+ GSL_EBADLEN);
+ }
+
+ {
+ const ATOMIC *v_data = v->data;
+ ATOMIC *row_data = m->data + MULTIPLICITY * i * tda;
+ const size_t stride = v->stride ;
+ size_t j;
+
+ for (j = 0; j < N; j++)
+ {
+ unsigned int k;
+
+ for (k = 0; k < MULTIPLICITY; k++)
+ {
+ row_data[MULTIPLICITY*j + k]
+ = v_data[MULTIPLICITY * stride * j + k];
+ }
+ }
+ }
+
+ return GSL_SUCCESS;
+}
+
+int
+FUNCTION (gsl_matrix, set_col) (TYPE (gsl_matrix) * m,
+ const size_t j,
+ const TYPE (gsl_vector) * v)
+{
+ const size_t M = m->size1;
+ const size_t N = m->size2;
+ const size_t tda = m->tda;
+
+ if (j >= N)
+ {
+ GSL_ERROR ("column index is out of range", GSL_EINVAL);
+ }
+
+ if (v->size != M)
+ {
+ GSL_ERROR ("matrix column size and vector length are not equal",
+ GSL_EBADLEN);
+ }
+
+ {
+ const ATOMIC *v_data = v->data;
+ ATOMIC *column_data = m->data + MULTIPLICITY * j;
+ const size_t stride = v->stride ;
+ size_t i;
+
+ for (i = 0; i < M; i++)
+ {
+ unsigned int k;
+
+ for (k = 0; k < MULTIPLICITY; k++)
+ {
+ column_data[MULTIPLICITY * i * tda + k]
+ = v_data[MULTIPLICITY * stride * i + k];
+ }
+ }
+ }
+
+ return GSL_SUCCESS;
+}
+
+
+TYPE (gsl_vector) *
+FUNCTION (gsl_vector, alloc_row_from_matrix) (TYPE(gsl_matrix) * m,
+ const size_t i)
+{
+ TYPE (gsl_vector) * v;
+
+ const size_t M = m->size1;
+
+ if (i >= M)
+ {
+ GSL_ERROR_VAL ("row index is out of range", GSL_EINVAL, 0);
+ }
+
+ v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector)));
+
+ if (v == 0)
+ {
+ GSL_ERROR_VAL ("failed to allocate space for vector struct",
+ GSL_ENOMEM, 0);
+ }
+
+ v->data = m->data + MULTIPLICITY * i * m->tda ;
+ v->size = m->size2;
+ v->stride = 1;
+ v->block = 0;
+
+ return v;
+}
+
+TYPE (gsl_vector) *
+FUNCTION (gsl_vector, alloc_col_from_matrix) (TYPE(gsl_matrix) * m,
+ const size_t j)
+{
+ TYPE (gsl_vector) * v;
+
+ const size_t N = m->size2;
+
+ if (j >= N)
+ {
+ GSL_ERROR_VAL ("column index is out of range", GSL_EINVAL, 0);
+ }
+
+ v = (TYPE (gsl_vector) *) malloc (sizeof (TYPE (gsl_vector)));
+
+ if (v == 0)
+ {
+ GSL_ERROR_VAL ("failed to allocate space for vector struct",
+ GSL_ENOMEM, 0);
+ }
+
+ v->data = m->data + MULTIPLICITY * j ;
+ v->size = m->size1;
+ v->stride = m->tda;
+ v->block = 0;
+
+ return v;
+}
+