matrix_helper_source.c - gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
path: root/matrix_helper_source.c
blob: 286b2d708f32e7668fbf1d40978a0a7c55bf9739 (plain)
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);
}
generated by cgit v1.2.3 (git 2.25.1) at 2025年10月03日 10:17:09 +0000

AltStyle によって変換されたページ (->オリジナル) /