1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
void
FUNCTION (matrix, set_view_and_push) (lua_State *L, int index, double *data,
size_t n1, size_t n2, const double *src)
{
TYPE (gsl_matrix) *view = FUNCTION (matrix, check) (L, index);
assert (view->owner == 0);
view->data = data;
view->size1 = n1;
view->size2 = n2;
view->tda = n2;
view->block = NULL;
if (src)
memcpy (data, src, n1 * n2 * sizeof(BASE));
lua_pushvalue (L, index);
}
void
FUNCTION (matrix, set_view) (lua_State *L, int index, double *data,
size_t n1, size_t n2, const double *src)
{
TYPE (gsl_matrix) *view = FUNCTION (matrix, check) (L, index);
assert (view->owner == 0);
view->data = data;
view->size1 = n1;
view->size2 = n2;
view->tda = n2;
view->block = NULL;
if (src)
memcpy (data, src, n1 * n2 * sizeof(BASE));
}
static void
TYPE (copy_jacobian_raw) (double *cmpl, double *real, size_t n, size_t p,
size_t mult, bool inverse)
{
gsl_vector_view dview, sview;
double *cp, *rp;
size_t k, nu;
for (nu = 0; nu < mult; nu++)
{
cp = cmpl + nu;
rp = real + p*nu;
for (k = 0; k < p; k++, rp += 1, cp += mult)
{
dview = gsl_vector_view_array_with_stride (cp, mult * p, n);
sview = gsl_vector_view_array_with_stride (rp, mult * p, n);
if (inverse)
gsl_vector_memcpy (& sview.vector, & dview.vector);
else
gsl_vector_memcpy (& dview.vector, & sview.vector);
}
}
}
void
FUNCTION (matrix, jacob_copy_real_to_cmpl) (double *dest_cmpl, double *src_real,
size_t n, size_t p, size_t mult)
{
TYPE (copy_jacobian_raw) (dest_cmpl, src_real, n, p, mult, false);
}
void
FUNCTION (matrix, jacob_copy_cmpl_to_real) (double *dest_real, double *src_cmpl,
size_t n, size_t p, size_t mult)
{
TYPE (copy_jacobian_raw) (src_cmpl, dest_real, n, p, mult, true);
}
|