Mentions légales du service
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
spm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
solverstack
spm
Commits
ce4b1162
Commit
ce4b1162
authored
8 years ago
by
Alban Bellot
Browse files
Options
Downloads
Patches
Plain Diff
test convert (some bugs with symmetric)
parent
14f25dd4
No related branches found
No related tags found
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
spm.c
+3
-2
3 additions, 2 deletions
spm.c
spm.h
+2
-0
2 additions, 0 deletions
spm.h
z_spm_convert_to_csc.c
+106
-11
106 additions, 11 deletions
z_spm_convert_to_csc.c
z_spm_convert_to_csr.c
+86
-5
86 additions, 5 deletions
z_spm_convert_to_csr.c
z_spm_convert_to_ijv.c
+54
-0
54 additions, 0 deletions
z_spm_convert_to_ijv.c
with
251 additions
and
18 deletions
spm.c
+
3
−
2
View file @
ce4b1162
...
@@ -98,8 +98,9 @@ spmInit( pastix_spm_t *spm )
...
@@ -98,8 +98,9 @@ spmInit( pastix_spm_t *spm )
spm
->
gnnzexp
=
0
;
spm
->
gnnzexp
=
0
;
spm
->
nnzexp
=
0
;
spm
->
nnzexp
=
0
;
spm
->
dof
=
1
;
spm
->
dof
=
1
;
spm
->
dofs
=
NULL
;
spm
->
dofs
=
NULL
;
spm
->
colmajor
=
1
;
spm
->
colptr
=
NULL
;
spm
->
colptr
=
NULL
;
spm
->
rowptr
=
NULL
;
spm
->
rowptr
=
NULL
;
...
...
This diff is collapsed.
Click to expand it.
spm.h
+
2
−
0
View file @
ce4b1162
...
@@ -41,6 +41,8 @@ struct pastix_spm_s {
...
@@ -41,6 +41,8 @@ struct pastix_spm_s {
if > 0, constant degree of freedom
if > 0, constant degree of freedom
otherwise, irregular degree of freedom (refer to dofs) */
otherwise, irregular degree of freedom (refer to dofs) */
pastix_int_t
*
dofs
;
/*< Number of degrees of freedom per unknown (NULL, if dof > 0) */
pastix_int_t
*
dofs
;
/*< Number of degrees of freedom per unknown (NULL, if dof > 0) */
int
colmajor
;
/*< If > 0, column major when PastixIJV with dofs
otherwise, row major */
pastix_int_t
*
colptr
;
/*< List of indirections to rows for each vertex */
pastix_int_t
*
colptr
;
/*< List of indirections to rows for each vertex */
pastix_int_t
*
rowptr
;
/*< List of edges for each vertex */
pastix_int_t
*
rowptr
;
/*< List of edges for each vertex */
...
...
This diff is collapsed.
Click to expand it.
z_spm_convert_to_csc.c
+
106
−
11
View file @
ce4b1162
...
@@ -80,11 +80,46 @@ z_spmConvertIJV2CSC( pastix_spm_t *spm )
...
@@ -80,11 +80,46 @@ z_spmConvertIJV2CSC( pastix_spm_t *spm )
/* Sort the rows and avals arrays by column */
/* Sort the rows and avals arrays by column */
spm
->
rowptr
=
malloc
(
spm
->
nnz
*
sizeof
(
pastix_int_t
));
spm
->
rowptr
=
malloc
(
spm
->
nnz
*
sizeof
(
pastix_int_t
));
pastix_int_t
*
node
=
calloc
(
spm
->
nnz
+
1
,
sizeof
(
pastix_int_t
));
pastix_int_t
*
old_node
=
calloc
(
spm
->
nnz
+
1
,
sizeof
(
pastix_int_t
));
pastix_int_t
row
,
col
,
dofi
,
dofj
;
pastix_int_t
*
dofs
=
spm
->
dofs
;
for
(
i
=
0
;
i
<
spm
->
nnz
;
i
++
)
{
row
=
oldspm
.
rowptr
[
i
]
-
baseval
;
col
=
oldspm
.
colptr
[
i
]
-
baseval
;
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
col
+
1
]
-
dofs
[
col
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
row
+
1
]
-
dofs
[
row
];
old_node
[
i
+
1
]
=
dofi
*
dofj
;
node
[
spm
->
colptr
[
col
]
+
1
]
+=
dofi
*
dofj
;
spm
->
colptr
[
col
]
++
;
}
for
(
i
=
0
;
i
<
spm
->
nnz
;
i
++
)
{
node
[
i
+
1
]
+=
node
[
i
];
old_node
[
i
+
1
]
+=
old_node
[
i
];
}
/* Restore the colptr indexes */
{
pastix_int_t
tmp
,
tmp2
;
tmp
=
spm
->
colptr
[
0
];
spm
->
colptr
[
0
]
=
0
;
for
(
j
=
0
;
j
<
spm
->
n
;
j
++
)
{
tmp2
=
spm
->
colptr
[
j
+
1
];
spm
->
colptr
[
j
+
1
]
=
tmp
;
tmp
=
tmp2
;
}
}
#if defined(PRECISION_p)
#if defined(PRECISION_p)
spm
->
values
=
NULL
;
spm
->
values
=
NULL
;
#else
#else
spm
->
values
=
malloc
(
spm
->
nnz
*
sizeof
(
pastix_complex64_t
));
pastix_int_t
ii
,
jj
;
spm
->
values
=
malloc
(
spm
->
nnzexp
*
sizeof
(
pastix_complex64_t
));
navals
=
(
pastix_complex64_t
*
)(
spm
->
values
);
navals
=
(
pastix_complex64_t
*
)(
spm
->
values
);
oavals
=
(
pastix_complex64_t
*
)(
oldspm
.
values
);
oavals
=
(
pastix_complex64_t
*
)(
oldspm
.
values
);
#endif
#endif
...
@@ -96,7 +131,18 @@ z_spmConvertIJV2CSC( pastix_spm_t *spm )
...
@@ -96,7 +131,18 @@ z_spmConvertIJV2CSC( pastix_spm_t *spm )
spm
->
rowptr
[
spm
->
colptr
[
i
]
]
=
oldspm
.
rowptr
[
j
];
spm
->
rowptr
[
spm
->
colptr
[
i
]
]
=
oldspm
.
rowptr
[
j
];
#if !defined(PRECISION_p)
#if !defined(PRECISION_p)
navals
[
spm
->
colptr
[
i
]
]
=
oavals
[
j
];
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
i
+
1
]
-
dofs
[
i
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
oldspm
.
rowptr
[
j
]
-
baseval
+
1
]
-
dofs
[
oldspm
.
rowptr
[
j
]
-
baseval
];
for
(
ii
=
0
;
ii
<
dofi
;
ii
++
)
{
for
(
jj
=
0
;
jj
<
dofj
;
jj
++
)
{
navals
[
node
[
spm
->
colptr
[
i
]]]
=
oavals
[
old_node
[
j
]];
old_node
[
j
]
++
;
node
[
spm
->
colptr
[
i
]]
++
;
}
}
#endif
#endif
(
spm
->
colptr
[
i
])
++
;
(
spm
->
colptr
[
i
])
++
;
...
@@ -184,27 +230,39 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm )
...
@@ -184,27 +230,39 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm )
{
{
pastix_int_t
*
row_csc
;
pastix_int_t
*
row_csc
;
pastix_int_t
*
col_csc
;
pastix_int_t
*
col_csc
;
pastix_int_t
*
node
;
pastix_int_t
*
dofs
;
#if !defined(PRECISION_p)
#if !defined(PRECISION_p)
pastix_complex64_t
*
val_csc
;
pastix_complex64_t
*
val_csc
;
pastix_complex64_t
*
valptr
=
(
pastix_complex64_t
*
)(
spm
->
values
);
pastix_complex64_t
*
valptr
=
(
pastix_complex64_t
*
)(
spm
->
values
);
pastix_int_t
ii
,
jj
;
int
cpt
=
0
;
#endif
#endif
pastix_int_t
j
,
k
,
col
,
row
,
nnz
,
baseval
;
pastix_int_t
i
,
j
,
k
,
col
,
row
,
nnz
,
baseval
;
pastix_int_t
dofi
,
dofj
;
baseval
=
spmFindBase
(
spm
);
baseval
=
spmFindBase
(
spm
);
nnz
=
spm
->
nnz
;
nnz
=
spm
->
nnz
;
row_csc
=
malloc
(
nnz
*
sizeof
(
pastix_int_t
));
row_csc
=
malloc
(
nnz
*
sizeof
(
pastix_int_t
));
col_csc
=
calloc
(
spm
->
n
+
1
,
sizeof
(
pastix_int_t
));
col_csc
=
calloc
(
spm
->
n
+
1
,
sizeof
(
pastix_int_t
));
node
=
calloc
(
spm
->
nnz
+
1
,
sizeof
(
pastix_int_t
));
dofs
=
spm
->
dofs
;
assert
(
row_csc
);
assert
(
row_csc
);
assert
(
col_csc
);
assert
(
col_csc
);
assert
(
node
);
assert
(
(
(
dofs
)
&&
!
(
spm
->
dof
>
0
)
)
||
(
!
(
dofs
)
&&
(
spm
->
dof
>
0
)
)
);
// (dofs) xor (spm->dof > 0)
#if !defined(PRECISION_p)
#if !defined(PRECISION_p)
val_csc
=
malloc
(
nnz
*
sizeof
(
pastix_complex64_t
));
val_csc
=
malloc
(
spm
->
nnzexp
*
sizeof
(
pastix_complex64_t
));
assert
(
val_csc
);
assert
(
val_csc
);
#endif
#endif
/* Count the number of elements per column */
/* Count the number of elements per column */
for
(
j
=
0
;
j
<
nnz
;
j
++
)
{
for
(
j
=
0
;
j
<
nnz
;
j
++
)
{
col
=
spm
->
colptr
[
j
]
-
baseval
;
col
=
spm
->
colptr
[
j
]
-
baseval
;
...
@@ -218,6 +276,35 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm )
...
@@ -218,6 +276,35 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm )
col_csc
[
j
+
1
]
+=
col_csc
[
j
];
col_csc
[
j
+
1
]
+=
col_csc
[
j
];
}
}
for
(
i
=
0
;
i
<
spm
->
n
;
i
++
)
{
for
(
k
=
spm
->
rowptr
[
i
];
k
<
spm
->
rowptr
[
i
+
1
];
k
++
)
{
j
=
spm
->
colptr
[
k
-
baseval
]
-
baseval
;
row
=
(
spm
->
dof
>
0
)
?
j
:
dofs
[
j
];
col
=
(
spm
->
dof
>
0
)
?
i
:
dofs
[
i
];
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
i
+
1
]
-
dofs
[
i
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
j
+
1
]
-
dofs
[
j
];
node
[
col_csc
[
j
]
+
1
]
+=
dofi
*
dofj
;
col_csc
[
j
]
++
;
}
}
for
(
i
=
0
;
i
<
spm
->
nnz
;
i
++
)
node
[
i
+
1
]
+=
node
[
i
];
/* Restore the colptr indexes */
{
pastix_int_t
tmp
,
tmp2
;
tmp
=
col_csc
[
0
];
col_csc
[
0
]
=
0
;
for
(
j
=
0
;
j
<
spm
->
n
;
j
++
)
{
tmp2
=
col_csc
[
j
+
1
];
col_csc
[
j
+
1
]
=
tmp
;
tmp
=
tmp2
;
}
}
assert
(
(
col_csc
[
spm
->
gN
])
==
nnz
);
assert
(
(
col_csc
[
spm
->
gN
])
==
nnz
);
for
(
row
=
0
;
row
<
spm
->
n
;
row
++
)
{
for
(
row
=
0
;
row
<
spm
->
n
;
row
++
)
{
...
@@ -228,27 +315,35 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm )
...
@@ -228,27 +315,35 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm )
col
=
spm
->
colptr
[
k
]
-
baseval
;
col
=
spm
->
colptr
[
k
]
-
baseval
;
j
=
col_csc
[
col
];
j
=
col_csc
[
col
];
row_csc
[
j
]
=
row
+
baseval
;
row_csc
[
j
]
=
row
+
baseval
;
#if !defined(PRECISION_p)
#if !defined(PRECISION_p)
val_csc
[
j
]
=
valptr
[
k
];
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
col
+
1
]
-
dofs
[
col
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
row
+
1
]
-
dofs
[
row
];
//printf("dof dof %d %d\n",dofi,dofj);
for
(
jj
=
0
;
jj
<
dofj
;
jj
++
)
{
for
(
ii
=
0
;
ii
<
dofi
;
ii
++
)
{
val_csc
[
node
[
j
]
+
ii
*
dofj
+
jj
]
=
valptr
[
cpt
];
cpt
++
;
}
}
#endif
#endif
col_csc
[
col
]
++
;
col_csc
[
col
]
++
;
}
}
}
}
/* Restore the colptr indexes */
/* Restore the colptr indexes */
{
{
pastix_int_t
tmp
,
tmp2
;
pastix_int_t
tmp
,
tmp2
;
tmp
=
col_csc
[
0
];
tmp
=
col_csc
[
0
];
col_csc
[
0
]
=
baseval
;
col_csc
[
0
]
=
baseval
;
for
(
j
=
0
;
j
<
spm
->
n
;
j
++
)
{
for
(
j
=
0
;
j
<
spm
->
n
;
j
++
)
{
tmp2
=
col_csc
[
j
+
1
];
tmp2
=
col_csc
[
j
+
1
];
col_csc
[
j
+
1
]
=
tmp
+
baseval
;
col_csc
[
j
+
1
]
=
tmp
+
baseval
;
tmp
=
tmp2
;
tmp
=
tmp2
;
}
}
}
}
spmExit
(
spm
);
spmExit
(
spm
);
spm
->
colptr
=
col_csc
;
spm
->
colptr
=
col_csc
;
spm
->
rowptr
=
row_csc
;
spm
->
rowptr
=
row_csc
;
...
...
This diff is collapsed.
Click to expand it.
z_spm_convert_to_csr.c
+
86
−
5
View file @
ce4b1162
...
@@ -123,16 +123,57 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
...
@@ -123,16 +123,57 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
#endif
#endif
pastix_int_t
*
spmptx
,
*
otmp
;
pastix_int_t
*
spmptx
,
*
otmp
;
pastix_int_t
i
,
j
,
tmp
,
baseval
,
total
;
pastix_int_t
i
,
j
,
tmp
,
baseval
,
total
;
pastix_
spm_t
oldspm
;
pastix_
int_t
row
,
col
,
dofi
,
dofj
;
/* Backup the input */
pastix_int_t
*
node
=
calloc
(
spm
->
nnz
+
1
,
sizeof
(
pastix_int_t
));
memcpy
(
&
oldspm
,
spm
,
sizeof
(
pastix_spm_t
)
);
pastix_int_t
*
old_node
=
calloc
(
spm
->
nnz
+
1
,
sizeof
(
pastix_int_t
));
pastix_int_t
*
dofs
=
spm
->
dofs
;
pastix_spm_t
oldspm
;
/*
/*
* Check the baseval, we consider that arrays are sorted by columns or rows
* Check the baseval, we consider that arrays are sorted by columns or rows
*/
*/
baseval
=
spmFindBase
(
spm
);
baseval
=
spmFindBase
(
spm
);
#if !defined(PRECISION_p)
pastix_int_t
ii
,
jj
;
/* Transpose values in row major format */
if
(
spm
->
colmajor
)
//A test
{
int
k
;
int
cpt
=
0
;
oavals
=
(
pastix_complex64_t
*
)
spm
->
values
;
navals
=
malloc
(
sizeof
(
pastix_complex64_t
)
*
spm
->
nnzexp
);
pastix_int_t
*
dofs
=
spm
->
dofs
;
for
(
k
=
0
;
k
<
spm
->
nnz
;
k
++
)
{
j
=
spm
->
rowptr
[
k
]
-
baseval
;
i
=
spm
->
colptr
[
k
]
-
baseval
;
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
i
+
1
]
-
dofs
[
i
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
j
+
1
]
-
dofs
[
j
];
for
(
ii
=
0
;
ii
<
dofi
;
ii
++
)
{
for
(
jj
=
0
;
jj
<
dofj
;
jj
++
)
{
navals
[
cpt
+
jj
*
dofi
+
ii
]
=*
oavals
;
oavals
++
;
}
}
cpt
+=
dofi
*
dofj
;
}
spm
->
values
=
navals
;
}
#endif
/* Backup the input */
memcpy
(
&
oldspm
,
spm
,
sizeof
(
pastix_spm_t
)
);
/* Compute the new rowptr */
/* Compute the new rowptr */
spm
->
rowptr
=
(
pastix_int_t
*
)
calloc
(
spm
->
n
+
1
,
sizeof
(
pastix_int_t
));
spm
->
rowptr
=
(
pastix_int_t
*
)
calloc
(
spm
->
n
+
1
,
sizeof
(
pastix_int_t
));
...
@@ -158,10 +199,39 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
...
@@ -158,10 +199,39 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
/* Sort the colptr and avals arrays by rows */
/* Sort the colptr and avals arrays by rows */
spm
->
colptr
=
malloc
(
spm
->
nnz
*
sizeof
(
pastix_int_t
));
spm
->
colptr
=
malloc
(
spm
->
nnz
*
sizeof
(
pastix_int_t
));
for
(
i
=
0
;
i
<
spm
->
nnz
;
i
++
)
{
row
=
oldspm
.
rowptr
[
i
]
-
baseval
;
col
=
oldspm
.
colptr
[
i
]
-
baseval
;
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
col
+
1
]
-
dofs
[
col
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
row
+
1
]
-
dofs
[
row
];
old_node
[
i
+
1
]
=
dofi
*
dofj
;
node
[
spm
->
rowptr
[
row
]
+
1
]
+=
dofi
*
dofj
;
spm
->
rowptr
[
row
]
++
;
}
for
(
i
=
0
;
i
<
spm
->
nnz
;
i
++
)
{
node
[
i
+
1
]
+=
node
[
i
];
old_node
[
i
+
1
]
+=
old_node
[
i
];
}
/* Restore the rowptr indexes */
{
pastix_int_t
tmp
,
tmp2
;
tmp
=
spm
->
rowptr
[
0
];
spm
->
rowptr
[
0
]
=
0
;
for
(
j
=
0
;
j
<
spm
->
n
;
j
++
)
{
tmp2
=
spm
->
rowptr
[
j
+
1
];
spm
->
rowptr
[
j
+
1
]
=
tmp
;
tmp
=
tmp2
;
}
}
#if defined(PRECISION_p)
#if defined(PRECISION_p)
spm
->
values
=
NULL
;
spm
->
values
=
NULL
;
#else
#else
spm
->
values
=
malloc
(
spm
->
nnz
*
sizeof
(
pastix_complex64_t
));
spm
->
values
=
malloc
(
spm
->
nnz
exp
*
sizeof
(
pastix_complex64_t
));
navals
=
(
pastix_complex64_t
*
)(
spm
->
values
);
navals
=
(
pastix_complex64_t
*
)(
spm
->
values
);
oavals
=
(
pastix_complex64_t
*
)(
oldspm
.
values
);
oavals
=
(
pastix_complex64_t
*
)(
oldspm
.
values
);
#endif
#endif
...
@@ -173,7 +243,17 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
...
@@ -173,7 +243,17 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
spm
->
colptr
[
spm
->
rowptr
[
i
]
]
=
oldspm
.
colptr
[
j
];
spm
->
colptr
[
spm
->
rowptr
[
i
]
]
=
oldspm
.
colptr
[
j
];
#if !defined(PRECISION_p)
#if !defined(PRECISION_p)
navals
[
spm
->
rowptr
[
i
]
]
=
oavals
[
j
];
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
i
+
1
]
-
dofs
[
i
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
oldspm
.
colptr
[
j
]
-
baseval
+
1
]
-
dofs
[
oldspm
.
colptr
[
j
]
-
baseval
];
for
(
ii
=
0
;
ii
<
dofi
;
ii
++
)
{
for
(
jj
=
0
;
jj
<
dofj
;
jj
++
)
{
navals
[
node
[
spm
->
rowptr
[
i
]]]
=
oavals
[
old_node
[
j
]];
old_node
[
j
]
++
;
node
[
spm
->
rowptr
[
i
]]
++
;
}
}
#endif
#endif
(
spm
->
rowptr
[
i
])
++
;
(
spm
->
rowptr
[
i
])
++
;
...
@@ -197,5 +277,6 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
...
@@ -197,5 +277,6 @@ z_spmConvertIJV2CSR( pastix_spm_t *spm )
spm
->
fmttype
=
PastixCSR
;
spm
->
fmttype
=
PastixCSR
;
return
PASTIX_SUCCESS
;
return
PASTIX_SUCCESS
;
}
}
This diff is collapsed.
Click to expand it.
z_spm_convert_to_ijv.c
+
54
−
0
View file @
ce4b1162
...
@@ -62,6 +62,33 @@ z_spmConvertCSC2IJV( pastix_spm_t *spm )
...
@@ -62,6 +62,33 @@ z_spmConvertCSC2IJV( pastix_spm_t *spm )
}
}
}
}
/* Transpose values in row major format */
if
(
!
spm
->
colmajor
)
//A test
{
int
k
,
ii
,
jj
,
dofi
,
dofj
;
int
cpt
=
0
;
pastix_complex64_t
*
oavals
=
(
pastix_complex64_t
*
)
spm
->
values
;
pastix_complex64_t
*
navals
=
malloc
(
sizeof
(
pastix_complex64_t
)
*
spm
->
nnzexp
);
pastix_int_t
*
dofs
=
spm
->
dofs
;
for
(
k
=
0
;
k
<
spm
->
nnz
;
k
++
)
{
j
=
spm
->
rowptr
[
k
]
-
baseval
;
i
=
col_ijv
[
k
]
-
baseval
;
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
i
+
1
]
-
dofs
[
i
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
j
+
1
]
-
dofs
[
j
];
for
(
ii
=
0
;
ii
<
dofi
;
ii
++
)
{
for
(
jj
=
0
;
jj
<
dofj
;
jj
++
)
{
navals
[
cpt
+
jj
*
dofi
+
ii
]
=*
oavals
;
oavals
++
;
}
}
cpt
+=
dofi
*
dofj
;
}
spm
->
values
=
navals
;
}
memFree_null
(
spm
->
colptr
);
memFree_null
(
spm
->
colptr
);
spm
->
colptr
=
col_ijv
;
spm
->
colptr
=
col_ijv
;
...
@@ -113,6 +140,33 @@ z_spmConvertCSR2IJV( pastix_spm_t *spm )
...
@@ -113,6 +140,33 @@ z_spmConvertCSR2IJV( pastix_spm_t *spm )
}
}
}
}
/* Transpose values in column major format */
if
(
spm
->
colmajor
)
{
int
k
,
ii
,
jj
,
dofi
,
dofj
;
int
cpt
=
0
;
pastix_complex64_t
*
oavals
=
(
pastix_complex64_t
*
)
spm
->
values
;
pastix_complex64_t
*
navals
=
malloc
(
sizeof
(
pastix_complex64_t
)
*
spm
->
nnzexp
);
pastix_int_t
*
dofs
=
spm
->
dofs
;
for
(
k
=
0
;
k
<
spm
->
nnz
;
k
++
)
{
i
=
spm
->
colptr
[
k
]
-
baseval
;
j
=
row_ijv
[
k
]
-
baseval
;
dofi
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
i
+
1
]
-
dofs
[
i
];
dofj
=
(
spm
->
dof
>
0
)
?
spm
->
dof
:
dofs
[
j
+
1
]
-
dofs
[
j
];
for
(
jj
=
0
;
jj
<
dofj
;
jj
++
)
{
for
(
ii
=
0
;
ii
<
dofi
;
ii
++
)
{
navals
[
cpt
+
ii
*
dofj
+
jj
]
=*
oavals
;
oavals
++
;
}
}
cpt
+=
dofi
*
dofj
;
}
spm
->
values
=
navals
;
}
memFree_null
(
spm
->
rowptr
);
memFree_null
(
spm
->
rowptr
);
spm
->
rowptr
=
row_ijv
;
spm
->
rowptr
=
row_ijv
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment