diff options
author | Shashank | 2017-05-29 12:40:26 +0530 |
---|---|---|
committer | Shashank | 2017-05-29 12:40:26 +0530 |
commit | 0345245e860375a32c9a437c4a9d9cae807134e9 (patch) | |
tree | ad51ecbfa7bcd3cc5f09834f1bb8c08feaa526a4 /modules/arnoldi/src | |
download | scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.gz scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.bz2 scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.zip |
CMSCOPE changed
Diffstat (limited to 'modules/arnoldi/src')
-rwxr-xr-x | modules/arnoldi/src/c/.deps/.dirstamp | 0 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs.Plo | 230 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs_dependencies.Plo | 228 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/.dirstamp | 0 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs.o | bin | 0 -> 66592 bytes | |||
-rwxr-xr-x | modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs_dependencies.o | bin | 0 -> 12048 bytes | |||
-rwxr-xr-x | modules/arnoldi/src/c/DllmainArnoldi.c | 36 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/arnoldi.rc | 101 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/eigs.c | 835 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/eigs_dependencies.c | 109 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/libsciarnoldi_la-eigs.lo | 12 | ||||
-rwxr-xr-x | modules/arnoldi/src/c/libsciarnoldi_la-eigs_dependencies.lo | 12 |
12 files changed, 1563 insertions, 0 deletions
diff --git a/modules/arnoldi/src/c/.deps/.dirstamp b/modules/arnoldi/src/c/.deps/.dirstamp new file mode 100755 index 000000000..e69de29bb --- /dev/null +++ b/modules/arnoldi/src/c/.deps/.dirstamp diff --git a/modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs.Plo b/modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs.Plo new file mode 100755 index 000000000..ae63f88b4 --- /dev/null +++ b/modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs.Plo @@ -0,0 +1,230 @@ +src/c/libsciarnoldi_la-eigs.lo: src/c/eigs.c /usr/include/stdc-predef.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h includes/eigs.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/core/includes/stack-c.h \ + ../../modules/core/includes/core_math.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + ../../modules/core/includes/stack-def.h \ + ../../modules/core/includes/machine.h \ + ../../modules/core/includes/stackTypeVariable.h \ + ../../modules/core/includes/BOOL.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/core/includes/stack1.h \ + ../../modules/core/includes/scisparse.h \ + ../../modules/core/includes/stack2.h \ + ../../modules/core/includes/stack3.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/core/includes/sci_types.h \ + ../../modules/core/includes/MALLOC.h \ + ../../modules/core/includes/sci_mem_alloc.h \ + ../../modules/output_stream/includes/sciprint.h \ + ../../modules/core/includes/BOOL.h includes/eigs_dependencies.h + +/usr/include/stdc-predef.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +includes/eigs.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/core/includes/stack-c.h: + +../../modules/core/includes/core_math.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +../../modules/core/includes/stack-def.h: + +../../modules/core/includes/machine.h: + +../../modules/core/includes/stackTypeVariable.h: + +../../modules/core/includes/BOOL.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/core/includes/stack1.h: + +../../modules/core/includes/scisparse.h: + +../../modules/core/includes/stack2.h: + +../../modules/core/includes/stack3.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/core/includes/sci_types.h: + +../../modules/core/includes/MALLOC.h: + +../../modules/core/includes/sci_mem_alloc.h: + +../../modules/output_stream/includes/sciprint.h: + +../../modules/core/includes/BOOL.h: + +includes/eigs_dependencies.h: diff --git a/modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs_dependencies.Plo b/modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs_dependencies.Plo new file mode 100755 index 000000000..e6e9ef63a --- /dev/null +++ b/modules/arnoldi/src/c/.deps/libsciarnoldi_la-eigs_dependencies.Plo @@ -0,0 +1,228 @@ +src/c/libsciarnoldi_la-eigs_dependencies.lo: src/c/eigs_dependencies.c \ + /usr/include/stdc-predef.h includes/eigs_dependencies.h \ + ../../modules/core/includes/doublecomplex.h /usr/include/string.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + ../../modules/core/includes/stack-c.h \ + ../../modules/core/includes/core_math.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + ../../modules/core/includes/stack-def.h \ + ../../modules/core/includes/machine.h \ + ../../modules/core/includes/stackTypeVariable.h \ + ../../modules/core/includes/BOOL.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/core/includes/stack1.h \ + ../../modules/core/includes/scisparse.h \ + ../../modules/core/includes/stack2.h \ + ../../modules/core/includes/stack3.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/core/includes/sci_types.h \ + ../../modules/core/includes/MALLOC.h \ + ../../modules/core/includes/sci_mem_alloc.h \ + ../../modules/output_stream/includes/sciprint.h \ + ../../modules/core/includes/BOOL.h + +/usr/include/stdc-predef.h: + +includes/eigs_dependencies.h: + +../../modules/core/includes/doublecomplex.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +../../modules/core/includes/stack-c.h: + +../../modules/core/includes/core_math.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +../../modules/core/includes/stack-def.h: + +../../modules/core/includes/machine.h: + +../../modules/core/includes/stackTypeVariable.h: + +../../modules/core/includes/BOOL.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/core/includes/stack1.h: + +../../modules/core/includes/scisparse.h: + +../../modules/core/includes/stack2.h: + +../../modules/core/includes/stack3.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/core/includes/sci_types.h: + +../../modules/core/includes/MALLOC.h: + +../../modules/core/includes/sci_mem_alloc.h: + +../../modules/output_stream/includes/sciprint.h: + +../../modules/core/includes/BOOL.h: diff --git a/modules/arnoldi/src/c/.dirstamp b/modules/arnoldi/src/c/.dirstamp new file mode 100755 index 000000000..e69de29bb --- /dev/null +++ b/modules/arnoldi/src/c/.dirstamp diff --git a/modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs.o b/modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs.o Binary files differnew file mode 100755 index 000000000..902ed70bb --- /dev/null +++ b/modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs.o diff --git a/modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs_dependencies.o b/modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs_dependencies.o Binary files differnew file mode 100755 index 000000000..8ea106354 --- /dev/null +++ b/modules/arnoldi/src/c/.libs/libsciarnoldi_la-eigs_dependencies.o diff --git a/modules/arnoldi/src/c/DllmainArnoldi.c b/modules/arnoldi/src/c/DllmainArnoldi.c new file mode 100755 index 000000000..1c6dceda6 --- /dev/null +++ b/modules/arnoldi/src/c/DllmainArnoldi.c @@ -0,0 +1,36 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2007-2008 - INRIA - Allan CORNET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt + * + */ + +/*--------------------------------------------------------------------------*/ +#include <windows.h> +/*--------------------------------------------------------------------------*/ +#pragma comment(lib,"../../bin/libintl.lib") +#pragma comment(lib,"../../bin/arpack.lib") +#pragma comment(lib,"../../bin/blasplus.lib") +#pragma comment(lib,"../../bin/lapack.lib") +/*--------------------------------------------------------------------------*/ +int WINAPI DllMain (HINSTANCE hInstance , DWORD reason, PVOID pvReserved) +{ + switch (reason) + { + case DLL_PROCESS_ATTACH: + break; + case DLL_PROCESS_DETACH: + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + break; + } + return 1; +} +/*--------------------------------------------------------------------------*/ diff --git a/modules/arnoldi/src/c/arnoldi.rc b/modules/arnoldi/src/c/arnoldi.rc new file mode 100755 index 000000000..098503597 --- /dev/null +++ b/modules/arnoldi/src/c/arnoldi.rc @@ -0,0 +1,101 @@ +// Microsoft Visual C++ generated resource script. +// + + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include <windows.h> + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// French (France) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""windows.h""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +1 VERSIONINFO + FILEVERSION 5,5,2,0 + PRODUCTVERSION 5,5,2,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040c04b0" + BEGIN + VALUE "FileDescription", "arnoldi module" + VALUE "FileVersion", "5, 5, 2, 0" + VALUE "InternalName", "arnoldi" + VALUE "LegalCopyright", "Copyright (C) 2017" + VALUE "OriginalFilename", "arnoldi.dll" + VALUE "ProductName", "arnoldi module" + VALUE "ProductVersion", "5, 5, 2, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x40c, 1200 + END +END + +#endif // French (France) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/modules/arnoldi/src/c/eigs.c b/modules/arnoldi/src/c/eigs.c new file mode 100755 index 000000000..7e08699ee --- /dev/null +++ b/modules/arnoldi/src/c/eigs.c @@ -0,0 +1,835 @@ +/* +* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +* Copyright (C) 2012 -Scilab Enterprises - Adeline CARNIS +* +* This file must be used under the terms of the CeCILL. +* This source file is licensed as described in the file COPYING, which +* you should have received as part of this distribution. The terms +* are also available at +* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +* +*/ +/*--------------------------------------------------------------------------*/ +#include <string.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include "eigs.h" +#include "stack-c.h" +#include "MALLOC.h" +#include "sciprint.h" +#include "eigs_dependencies.h" +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +// dgemv performs matrix-vector operations +extern int C2F(dgemv) (char* trans, int* m, int* n, double* alpha, double* A, int* lda, + double* x, int* incx, double* beta, double* y, int* incy); +extern int C2F(zgemv) (char* trans, int* m, int* n, doublecomplex* alpha, doublecomplex* A, + int* lda, doublecomplex* x, int* incx, doublecomplex* beta, doublecomplex* y, int* incy); + +// dgetrf computes an LU factorization of a general M by N matrix A (double) using partial pivoting with row interchanges +extern int C2F(dgetrf)(int* m, int* n, double* A, int* lda, int* ipiv, int* info); + +// zgetrf computes an LU factorization of a general M by N matrix A (complex*16) using partial pivoting with row interchanges +extern int C2F(zgetrf)(int* m, int* n, doublecomplex* A, int* lda, int* ipiv, int* info); +// dgetrs solves a linear system using the factors computed by dgetrf +extern int C2F(dgetrs) (char* trans, int* n, int* nrhs, double* A, int *lda, int* ipiv, double* B, int* ldb, int* info); +// zgetrs solves a linear system using the factors computed by zgetrf +extern int C2F(zgetrs) (char* trans, int* n, int* nrhs, doublecomplex* AC, int* lda, int* ipiv, doublecomplex* B, int* ldb, int* info); + +// dpotrf computes the cholesky factorization of a real symmetric positive definite matrix A +extern int C2F(dpotrf)(char* uplo, int* n, double* A, int* lda, int* info); + +// zpotrf computes the cholesky factorization of a real hermitian positive definite matrix A +extern int C2F(zpotrf)(char* uplo, int* n, doublecomplex* A, int* lda, int* info); + +// dtrsm solves a triangular linear system +extern int C2F(dtrsm) (char* side, char* uplo, char* trans, char* diag, int* m, int* n, double* alpha, double* A, int* lda, double* B, int* ldb); +// ztrsm solve a triangular linear system +extern int C2F(ztrsm) (char* side, char* uplo, char* trans, char* diag, int* m, int* n, doublecomplex* alpha, doublecomplex* A, int* lda, doublecomplex* B, int* ldb); +// dsyrk does a rank k symmetric update +extern int C2F(dsyrk) (char* uplo, char* trans, int* n, int* k, double* alpha, + double* A, int* lda, double* beta, double* B, int* ldb); +// ztrmm multiply by a triangular matrix +extern int C2F(ztrmm) (char* side, char* uplo, char* trans, char* diag, int* m, int* n, doublecomplex* alphac, + doublecomplex* A, int* lda, doublecomplex* B, int* ldb); +// ztrmv multiply a vector by a triangular matrix +extern int C2F(ztrmv) (char* uplo, char* trans, char* diag, int* n, doublecomplex* A, int* lda, doublecomplex* x, int* incx); +// dtrmv multiply a vector by a triangular matrix +extern int C2F(dtrmv) (char* uplo, char* trans, char* diag, int* n, double* A, int* lda, double* x, int* incx); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(dsaupd)(int *ido, char *bmat, int *n, char *which, int *nev, + double *tol, double *resid, int *ncv, double *v, + int *ldv, int *iparam, int *ipntr, double *workd, + double *workl, int *lworkl, int *info); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(dseupd)(int *rvec, char *howmny, int *select, double *d, + double *z, int *ldz, double *sigma, char *bmat, + int *n, char *which, int *nev , double *tol, + double *resid, int *ncv, double *v , int *ldv, + int *iparam, int *ipntr, double *workd, double *workl, + int *lworkl, int *info); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(dnaupd)(int *ido, char *bmat, int *n, char *which, int *nev, + double *tol, double *resid, int *ncv, double *v, + int *ldv, int *iparam, int *ipntr, double *workd, + double *workl, int *lworkl, int *info); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(dneupd)(int *rvec, char *howmny, int *select, double *dr, + double *di, double *z, int *ldz, double *sigmar, + double *sigmai, double *workev, char *bmat, int *n, + char *which, int *nev, double *tol, double *resid, + int *ncv, double *v, int *ldv, int *iparam, int *ipntr, + double *workd, double *workl, int *lworkl, int *info); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(znaupd)(int * ido, char * bmat, int * n, char * which, + int * nev, double * tol, doublecomplex * resid, + int * ncv, doublecomplex * v, int * ldv, int * iparam, + int * ipntr, doublecomplex * workd, + doublecomplex * workl, int * lworkl, double * rwork, + int * info); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(zneupd)(int * rvec, char * howmny, int * select, + doublecomplex * d, doublecomplex * z, int * ldz, + doublecomplex * sigma, doublecomplex * workev, + char * bmat, int * n, char * which, int * nev, + double * tol, doublecomplex * resid, int * ncv, + doublecomplex * v, int * ldv, int * iparam, int * ipntr, + doublecomplex * workd, doublecomplex * workl, + int * lworkl, double * rwork, int * info); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(dsymv)(char* UPLO, int* N, double* ALPHA, double* A, int* LDA, double* X, int* INCX, double* BETA, double* Y, int* INCY); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(daxpy)(int* N, double* DA, double* DX, int* INCX, double* DY, int* INCY); +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ +extern int C2F(zaxpy)(int* N, doublecomplex* ZA, doublecomplex* ZX, int* INCX, doublecomplex* ZY, int* INCY); +/*--------------------------------------------------------------------------*/ + +static double alpha = 1.; +static double beta = 0.; + +static doublecomplex alphac = {1., 0.}; +static doublecomplex betac = {0., 0.}; + +int eigs(double *AR, doublecomplex *AC, int N, int Acomplex, int Asym, + double* B, doublecomplex* BC, int Bcomplex, int matB, int nev, + doublecomplex SIGMA, char* which, double* maxiter, double* tol, + double* NCV, double* RESID, doublecomplex* RESIDC, int* INFO, + double* cholB, int INFO_EUPD, double* eigenvalue, + double* eigenvector, doublecomplex* eigenvalueC, + doublecomplex* eigenvectorC, int RVEC) + +{ + + // GENERAL VARIABLES + int i = 0; + int j = 0; + int k = 0; + int l = 0; + int INFO_CHOL = 0; + int INFO_LU = 0; + int INFO_INV = 0; + int iOne = 1; + + // VARIABLES DSAUPD, DNAUPD, ZNAUPD + int LWORKL = 0; + int IDO = 0; + int LDV = Max(1, N); + int ncv = 0; + + int IPARAM[11]; + int IPNTR[14]; + + double* V = NULL; + doublecomplex* VC = NULL; + + double* WORKD = NULL; + doublecomplex* WORKDC = NULL; + + double* WORKL = NULL; + doublecomplex* WORKLC = NULL; + + double* RWORK = NULL; + + char* bmat = "I"; + + // VARIABLES DSEUPD, DNEUPD, ZNEUPD + char* HOWMNY = "A"; + + int* SELECT = NULL; + + double* DI = NULL; + double* DR = NULL; + double* Z = NULL; + + double* WORKEV = NULL; + doublecomplex* WORKEVC = NULL; + + doublecomplex mSIGMA = { -SIGMA.r, -SIGMA.i }; + + double* R = NULL; + doublecomplex* RC = NULL; + + double* AMSB = NULL; + doublecomplex* AMSBC = NULL; + + int* IPVT = NULL; + + double* temp = NULL; + doublecomplex* tempC = NULL; + + int oldnev = nev; + int N2 = N * N; + + IPARAM[0] = 1; + IPARAM[2] = (int) maxiter[0]; + IPARAM[6] = 1; // by default mode = 1 + + // END VARIABLES + + // MODE + if (!strcmp(which, "SM") || (SIGMA.r != 0 || SIGMA.i != 0)) + { + IPARAM[6] = 3; + which = "LM"; + } + + // BMAT + if ((matB == 0) || (IPARAM[6] == 1)) // if B = [] or mode = 1 -> bmat = 'I' : standard eigenvalue problem + { + bmat = "I"; + } + else // generalized eigenvalue problem + { + bmat = "G"; + } + + // NCV + if (NCV == NULL) + { + if (Asym == 0 && !Acomplex && !Bcomplex) // if dnaupd ncv = 2*nev+1 + { + ncv = Max(2 * nev + 1, 20); + } + else // if dsaupd or znaupd ncv = 2*nev + { + ncv = Max(2 * nev, 20); + } + if (ncv > N) + { + ncv = N; + } + } + else + { + ncv = (int) NCV[0]; + if (ncv <= nev || ncv > N) // Error + { + return -1; + } + } + + // NEV + if ((!Acomplex && !Bcomplex && Asym == 1 && nev >= N) || ((Acomplex || Bcomplex || !Asym) && nev >= N - 1)) + { + return -2; + } + + if (matB != 0) + { + if (cholB[0]) // we already have the cholesky decomposition + { + R = B; + RC = BC; + } + else + { + if (IPARAM[6] == 1) + { + if (!Bcomplex) // B is real + { + R = (double *)malloc(N * N * sizeof(double)); + memcpy(R, B, N * N * sizeof(double)); + C2F(dpotrf) ("u", &N, R, &N, &INFO_CHOL); // Compute the upper triangular matrix R + if (INFO_CHOL != 0) // Errors + { + free(R); + return -3; + } + } + else // B is complex + { + RC = (doublecomplex *) malloc(N * N * sizeof(doublecomplex)); + memcpy(RC, BC, N * N * sizeof(doublecomplex)); + C2F(zpotrf) ("u", &N, RC, &N, &INFO_CHOL); // Computes the upper triangular matrix + if (INFO_CHOL != 0) + { + free(RC); + return -3; + } + } + } + } + } + + // MAIN + if (!Acomplex && !Bcomplex) // A and B are not complex + { + if (IPARAM[6] == 3) // if mode = 3 + { + AMSB = (double*)malloc(N * N * sizeof(double)); + memcpy(AMSB, AR, N * N * sizeof(double)); + if (SIGMA.r != 0) + { + // Compute LU decomposition AMSB = A - sigma*B + if (matB == 0) // if B = [] -> standard eigenvalue problem : A - sigma *I + { + for (i = 0 ; i < N ; i++) + { + AMSB[i + i * N] -= SIGMA.r; + } + } + else // generalized eigenvalue problem + { + if (cholB[0]) + { + C2F(dsyrk) ("u", "t", &N, &N, &mSIGMA.r, R, &N, &alpha, AMSB, &N); + if (!Asym) //dsyrk does a symmetric update so we need to correct for the antisymmetric part + { + for (i = 0; i < N; i++) + { + for (j = 0; j < i; j++) + { + AMSB[i + j * N] = AMSB[j + i * N] + AR[i + j * N] - AR[j + i * N]; + } + } + } + } + else + { + C2F(daxpy)(&N2, &mSIGMA.r, B, &iOne, AMSB, &iOne); + } + } + } + + // LU decomposition + IPVT = (int*) calloc(N, sizeof(int)); + C2F(dgetrf)(&N, &N, AMSB, &N, IPVT, &INFO_LU); + if (INFO_LU > 0) + { + free(IPVT); + free(AMSB); + return -7; + } + } + + if (Asym) // DSAUPD + { + LWORKL = ncv * ncv + 8 * ncv; + WORKL = (double*) calloc(LWORKL, sizeof(double)); + + } + else // DNAUPD + { + LWORKL = 3 * ncv * (ncv + 2); + WORKL = (double*) calloc(LWORKL, sizeof(double)); + + } + + WORKD = (double*) calloc(3 * N, sizeof(double)); + V = (double*) calloc(N * ncv, sizeof(double)); + + if (IPARAM[6] == 1 && matB) + { + temp = (double*) malloc(N * sizeof(double)); + } + + while (IDO != 99) + { + if (Asym) // DSAUPD + { + C2F(dsaupd)(&IDO, bmat, &N, which, &nev, tol, RESID, &ncv, V, &LDV, IPARAM, IPNTR, WORKD, WORKL, &LWORKL, &INFO[0]); + } + else // DNAUPD + { + C2F(dnaupd)(&IDO, bmat, &N, which, &nev, tol, RESID, &ncv, V, &LDV, IPARAM, IPNTR, WORKD, WORKL, &LWORKL, &INFO[0]); + } + + if (INFO[0] == -1) //non critical error + { + sciprint("%s: WARNING: Maximum number of iterations reached. Only %d eigenvalues converged.\n", "eigs", IPARAM[4]); + break; + } + else + { + if (INFO[0] < 0) + { + if (R != B) + { + free(R); + } + free(IPVT); + free(AMSB); + free(WORKD); + free(WORKL); + free(V); + free(temp); + + return -4; + } + } + + if (IDO == -1 || IDO == 1 || IDO == 2) + { + if (IPARAM[6] == 1) // mode = 1 + { + if (IDO == 2) + { + memcpy(WORKD + IPNTR[1] - 1, WORKD + IPNTR[0] - 1, N * sizeof(double)); + } + else //IDO=1 or IDO=-1 + { + if (matB == 0) // B = [] -> standard eigenvalue problem + { + // OP = A*x + if (Asym) + { + C2F(dsymv) ("u", &N, &alpha, AR, &N, WORKD + IPNTR[0] - 1, &iOne, &beta, WORKD + IPNTR[1] - 1, &iOne); + } + else + { + C2F(dgemv) ("n", &N, &N, &alpha, AR, &N, WORKD + IPNTR[0] - 1, &iOne, &beta, WORKD + IPNTR[1] - 1, &iOne); + } + } + else // generalized eigenvalue problem + { + // OP = inv(Rprime)*A*inv(R)*x + memcpy(WORKD + IPNTR[1] - 1, WORKD + IPNTR[0] - 1, N * sizeof(double)); + C2F(dtrsm) ("l", "u", "n", "n", &N, &iOne, &alpha, R, &N, WORKD + IPNTR[1] - 1, &N); + memcpy(temp, WORKD + IPNTR[1] - 1, N * sizeof(double)); + if (Asym) + { + C2F(dsymv) ("u", &N, &alpha, AR, &N, temp, &iOne, &beta, WORKD + IPNTR[1] - 1, &iOne); + } + else + { + C2F(dgemv) ("n", &N, &N, &alpha, AR, &N, temp, &iOne, &beta, WORKD + IPNTR[1] - 1, &iOne); + } + C2F(dtrsm) ("l", "u", "t", "n", &N, &iOne, &alpha, R, &N, WORKD + IPNTR[1] - 1, &N); + } + } + } + else + { + if (IPARAM[6] == 3) // mode = 3 + { + if (matB == 0) // B = [] -> standard eigenvalue problem + { + if (IDO == 2) + { + // y = B*x where B = I so workd[ipntr[1]-1:ipntr[1]+N-1] = workd[ipntr[0]-1:ipntr[0]+N-1] + memcpy(WORKD + IPNTR[1] - 1, WORKD + IPNTR[0] - 1, N * sizeof(double)); + } + else + { + // workd[ipntr[1]-1:ipntr[1]+N-1] = inv(U)*inv(L)*inv(P)*workd[ipntr[0]-1:ipntr[0]+N-1] + memcpy(WORKD + IPNTR[1] - 1, WORKD + IPNTR[0] - 1, N * sizeof(double)); + C2F(dgetrs) ("n", &N, &iOne, AMSB, &N, IPVT, WORKD + IPNTR[1] - 1, &N, &INFO_INV); + } + } + else // matB == 1 so B is not empty and bmat = 'G'-> generalized eigenvalue problem + { + if (IDO == 2 || IDO == -1) + { + if (cholB[0]) // workd[ipntr[1]-1:ipntr[1]+N-1] = Rprime * R * workd[ipntr[0]-1:ipntr[0]+N-1] + { + memcpy(WORKD + IPNTR[1] - 1, WORKD + IPNTR[0] - 1, N * sizeof(double)); + C2F(dtrmv) ("u", "n", "n", &N, B, &N, WORKD + IPNTR[1] - 1, &iOne); + C2F(dtrmv) ("u", "t", "n", &N, B, &N, WORKD + IPNTR[1] - 1, &iOne); + } + else // workd[ipntr[1]-1:ipntr[1]+N-1] = B * workd[ipntr[0]-1:ipntr[0]+N-1] + { + C2F(dgemv) ("n", &N, &N, &alpha, B, &N, WORKD + IPNTR[0] - 1, &iOne, &beta, WORKD + IPNTR[1] - 1, &iOne); + } + } + + if (IDO == -1) + { + // compute workd[ipntr[1]-1:ipntr[1]+N-1] = inv(U)*inv(L)*inv(P)*workd[ipntr[1]-1:ipntr[1]+N-1] + C2F(dgetrs) ("n", &N, &iOne, AMSB, &N, IPVT, WORKD + IPNTR[1] - 1, &N, &INFO_INV); + } + else + { + if (IDO == 1) + { + // computes workd[ipntr[1]-1:ipntr[1]+N-1] = inv(U)*inv(L)*inv(P)*workd[ipntr[2]-1:ipntr[2]+N-1] + memcpy(WORKD + IPNTR[1] - 1, WORKD + IPNTR[2] - 1, N * sizeof(double)); + C2F(dgetrs) ("n", &N, &iOne, AMSB, &N, IPVT, WORKD + IPNTR[1] - 1, &N, &INFO_INV); + } + } + } + } + else + { + if (R != B) + { + free(R); + } + free(AMSB); + free(IPVT); + free(WORKD); + free(WORKL); + free(V); + free(temp); + + return -5; + } + } + } + } // END WHILE + free(AMSB); + free(IPVT); + free(temp); + SELECT = (int *)calloc(ncv, sizeof(int)); + + if (Asym) // DSEUPD + { + C2F(dseupd) (&RVEC, HOWMNY, SELECT, eigenvalue, eigenvector, &LDV, + &SIGMA.r, bmat, &N, which, &nev, tol, RESID, &ncv, V, + &LDV, IPARAM, IPNTR, WORKD, WORKL, &LWORKL, &INFO_EUPD); + + if (INFO_EUPD != 0) + { + if (R != B) + { + free(R); + } + free(WORKD); + free(WORKL); + free(V); + free(SELECT); + return -6; + } + else + { + if (RVEC) + { + if (matB && IPARAM[6] == 1) + { + // we need to revert back to the original problem + // since we really solved for (y,\lambda) in R^{-T}Ay=\lambda y + //with y = Rx, so that x = R^{-1}y + C2F(dtrsm) ("l", "u", "n", "n", &N, &nev, &alpha, R, &N, eigenvector, &N); + } + } + } + } + else // DNEUPD + { + DR = (double *)calloc((nev + 1), sizeof(double)); + DI = (double *)calloc((nev + 1), sizeof(double)); + WORKEV = (double *)calloc(3 * ncv, sizeof(double)); + + RVEC = RVEC || (IPARAM[6] == 3 && SIGMA.i != 0); + + if (RVEC) + { + Z = (double *)calloc(N * (nev + 1), sizeof(double)); + } + + C2F(dneupd) (&RVEC, HOWMNY, SELECT, DR, DI, Z, &LDV, &SIGMA.r, + &SIGMA.i, WORKEV, bmat, &N, which, &nev, tol, RESID, + &ncv, V, &LDV, IPARAM, IPNTR, WORKD, WORKL, &LWORKL, &INFO_EUPD); + + if (INFO_EUPD != 0) + { + if (R != B) + { + free(R); + } + free(WORKD); + free(WORKL); + free(V); + free(DR); + free(DI); + free(Z); + free(WORKEV); + free(SELECT); + return -6; + } + else + { + if (Z && matB && IPARAM[6] == 1) + { + // we need to revert back to the original problem + // since we really solved for (y,\lambda) in R^{-T}Ay=\lambda y + //with y = Rx, so that x = R^{-1}y + C2F(dtrsm) ("l", "u", "n", "n", &N, &nev, &alpha, R, &N, Z, &N); + } + //we use oldnev, because dneupd increases nev by one sometimes. + process_dneupd_data(DR, DI, Z, N, oldnev, AR, eigenvalueC, + eigenvectorC, (IPARAM[6] == 3) && (SIGMA.i != 0)); + + free(DR); + free(DI); + free(Z); + free(WORKEV); + } + } + + free(V); + free(WORKD); + free(WORKL); + free(SELECT); + if (R != B) + { + free(R); + } + } + else // A or/and B complex + { + if (IPARAM[6] == 3) // mode = 3 + { + AMSBC = (doublecomplex*)malloc(N * N * sizeof(doublecomplex)); + + if (SIGMA.r != 0 || SIGMA.i != 0) + { + if (matB == 0) // standard eigenvalue problem + { + memcpy(AMSBC, AC, N * N * sizeof(doublecomplex)); + for (i = 0 ; i < N ; i++) + { + AMSBC[i + i * N].r -= SIGMA.r; + AMSBC[i + i * N].i -= SIGMA.i; + } + } + else // generalized eigenvalue problem + { + if (cholB[0]) + { + memcpy(AMSBC, BC, N * N * sizeof(doublecomplex)); + C2F(ztrmm)("l", "u", "c", "n", &N, &N, &mSIGMA, BC, &N, AMSBC, &N); + C2F(zaxpy)(&N2, &alphac, AC, &iOne, AMSBC, &iOne); + } + else + { + memcpy(AMSBC, AC, N * N * sizeof(doublecomplex)); + C2F(zaxpy) (&N2, &mSIGMA, BC, &iOne, AMSBC, &iOne); + } + } + } + else + { + memcpy(AMSBC, AC, N * N * sizeof(doublecomplex)); + } + + // LU decomposition + IPVT = (int*) calloc(N, sizeof(int)); + C2F(zgetrf) (&N, &N, AMSBC, &N, IPVT, &INFO_LU); + if (INFO_LU > 0) + { + free(IPVT); + free(AMSBC); + return(-7); + } + } + LWORKL = 3 * ncv * ncv + 5 * ncv; + + VC = (doublecomplex*) calloc(N * ncv, sizeof(doublecomplex)); + WORKLC = (doublecomplex*) calloc(LWORKL, sizeof(doublecomplex)); + WORKDC = (doublecomplex*) calloc(3 * N, sizeof(doublecomplex)); + RWORK = (double*) calloc(ncv, sizeof(double)); + if (IPARAM[6] == 1 && matB) + { + tempC = (doublecomplex*) malloc(N * sizeof(doublecomplex)); + } + + while (IDO != 99) + { + C2F(znaupd)(&IDO, bmat, &N, which, &nev, tol, RESIDC, &ncv, VC, &LDV, IPARAM, IPNTR, WORKDC, WORKLC, &LWORKL, RWORK, &INFO[0]); + + if (INFO[0] == -1) //non critical error + { + sciprint("%s: WARNING: Maximum number of iterations reached. Only %d eigenvalues converged.\n", "eigs", IPARAM[4]); + break; + } + else + { + if (INFO[0] < 0) + { + if (RC != BC) + { + free(RC); + } + free(WORKDC); + free(WORKLC); + free(VC); + free(RWORK); + return -4; + } + } + + if (IDO == -1 || IDO == 1 || IDO == 2) + { + if (IPARAM[6] == 1) // mode = 1 + { + if (IDO == 2) + { + memcpy(WORKDC + IPNTR[1] - 1, WORKDC + IPNTR[0] - 1, N * sizeof(doublecomplex)); + } + else + { + if (matB == 0) // B = I + { + // OP = A*x + C2F(zgemv) ("n", &N, &N, &alphac, AC, &N, WORKDC + IPNTR[0] - 1, &iOne, &betac, WORKDC + IPNTR[1] - 1, &iOne); + } + else + { + // OP = inv(RC')*A*inv(RC)*x + memcpy(WORKDC + IPNTR[1] - 1, WORKDC + IPNTR[0] - 1, N * sizeof(doublecomplex)); + C2F(ztrsm) ("l", "u", "n", "n", &N, &iOne, &alphac, RC, &N, WORKDC + IPNTR[1] - 1, &N); + memcpy(tempC, WORKDC + IPNTR[1] - 1, N * sizeof(doublecomplex)); + C2F(zgemv) ("n", &N, &N, &alphac, AC, &N, tempC, &iOne, &betac, WORKDC + IPNTR[1] - 1, &iOne); + C2F(ztrsm) ("l", "u", "c", "n", &N, &iOne, &alphac, RC, &N, WORKDC + IPNTR[1] - 1, &N); + } + } + } + else + { + if (IPARAM[6] == 3) // if mode = 3 + { + if (matB == 0) // B = [] -> matB is empty -> standard eigenvalue problem + { + if (IDO == 2) + { + // y = B*x where B = I so workd[ipntr[1]-1:ipntr[1]+N-1] = workd[ipntr[0]-1:ipntr[0]+N-1] + memcpy(WORKDC + IPNTR[1] - 1, WORKDC + IPNTR[0] - 1, N * sizeof(doublecomplex)); + } + else + { + // workd[ipntr[1]-1:ipntr[1]+N-1] = inv(U)*inv(L)*inv(P)*workd[ipntr[0]-1:ipntr[0]+N-1] + memcpy(WORKDC + IPNTR[1] - 1, WORKDC + IPNTR[0] - 1, N * sizeof(doublecomplex)); + C2F(zgetrs) ("n", &N, &iOne, AMSBC, &N, IPVT, WORKDC + IPNTR[1] - 1, &N, &INFO_INV); + } + + } + else // matB == 1 so B is not empty and bmat = 'G'-> generalized eigenvalue problem + { + if (IDO == 2 || IDO == -1) + { + if (cholB[0]) // workd[ipntr[1]-1:ipntr[1]+N-1] = RCprime * RC * workd[ipntr[0]-1:ipntr[0]+N-1] + { + memcpy(WORKDC + IPNTR[1] - 1, WORKDC + IPNTR[0] - 1, N * sizeof(doublecomplex)); + C2F(ztrmv) ("u", "n", "n", &N, BC, &N, WORKDC + IPNTR[1] - 1, &iOne); + C2F(ztrmv) ("u", "c", "n", &N, BC, &N, WORKDC + IPNTR[1] - 1, &iOne); + } + else // workd[ipntr[1]-1:ipntr[1]+N-1] = B *workd[ipntr[0]-1:ipntr[0]+N-1] + { + C2F(zgemv) ("n", &N, &N, &alphac, BC, &N, WORKDC + IPNTR[0] - 1, &iOne, &betac, WORKDC + IPNTR[1] - 1, &iOne); + } + } + if (IDO == -1) + { + // compute workd[ipntr[1]-1:ipntr[1]+N-1] = inv(U)*inv(L)*inv(P)*workd[ipntr[1]-1:ipntr[1]+N-1] + C2F(zgetrs) ("n", &N, &iOne, AMSBC, &N, IPVT, WORKDC + IPNTR[1] - 1, &N, &INFO_INV); + } + else + { + if (IDO == 1) + { + /* compute workd[ipntr[1]-1:ipntr[1]+N-1] = inv(U)*inv(L)*inv(P)*workd[ipntr[2]-1:ipntr[2]+N-1] */ + memcpy(WORKDC + IPNTR[1] - 1, WORKDC + IPNTR[2] - 1, N * sizeof(doublecomplex)); + C2F(zgetrs) ("n", &N, &iOne, AMSBC, &N, IPVT, WORKDC + IPNTR[1] - 1, &N, &INFO_INV); + } + } + } //END mode3 + } + else + { + if (RC != BC) + { + free(RC); + } + free(WORKDC); + free(WORKLC); + free(VC); + free(RWORK); + free(tempC); + + return -5; + } + } + } + } // END WHILE + free(tempC); + free(IPVT); + free(AMSBC); + + SELECT = (int *)calloc(ncv, sizeof(int)); + WORKEVC = (doublecomplex *) calloc(2 * ncv, sizeof(doublecomplex)); + + C2F(zneupd) (&RVEC, HOWMNY, SELECT, eigenvalueC, eigenvectorC, &LDV, &SIGMA, WORKEVC, bmat, &N, + which, &nev, tol, RESIDC, &ncv, VC, &LDV, IPARAM, IPNTR, WORKDC, + WORKLC, &LWORKL, RWORK, &INFO_EUPD); + + if (INFO_EUPD != 0) + { + if (RC != BC) + { + free(RC); + } + free(WORKDC); + free(WORKLC); + free(VC); + free(SELECT); + free(WORKEVC); + free(RWORK); + + return -6; + } + else + { + if (RVEC) + { + if (matB && IPARAM[6] == 1) + { + C2F(ztrsm) ("l", "u", "n", "n", &N, &nev, &alphac, RC, &N, eigenvectorC, &N); + } + } + } + + free(SELECT); + free(WORKEVC); + + free(VC); + free(WORKDC); + free(WORKLC); + free(RWORK); + if (RC != BC) + { + free(RC); + } + } + + return 0; +} diff --git a/modules/arnoldi/src/c/eigs_dependencies.c b/modules/arnoldi/src/c/eigs_dependencies.c new file mode 100755 index 000000000..a725b8f5f --- /dev/null +++ b/modules/arnoldi/src/c/eigs_dependencies.c @@ -0,0 +1,109 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) 2011 - Scilab Enterprises - Adeline CARNIS + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt + * + */ + +#include "eigs_dependencies.h" + +extern int C2F(dgemv) (char* trans, int* m, int* n, double* alpha, double* A, + int* lda, double* x, int* incx, double* beta, double* y, int* incy); +extern double C2F(ddot) (int *n, double* x, int* incx, double* y, int* incy); + +void process_dneupd_data(double* DR, double* DI, double* Z, int N, int nev, double* AR, + doublecomplex* eigenvalue, doublecomplex* eigenvector, + int sigma_imaginary) +{ + /* if sigma_imaginary there is an extra step to compute the eigenvalues + as explained in the dneupd user guide */ + + double* temp1 = NULL; + double* temp2 = NULL; + + int i = 0; + int j = 0; + + double alpha = 1; + double beta = 0; + int iOne = 1; + double real_part; + double imag_part; + + if ( sigma_imaginary ) + { + temp1 = (double*) malloc(N * sizeof(double)); + temp2 = (double*) malloc(N * sizeof(double)); + + while (i < nev) + { + if (DI[i] == 0) + { + C2F(dgemv) ("n", &N, &N, &alpha, AR, &N, Z + N * i, &iOne, &beta, temp1, &iOne); + eigenvalue[i].r = C2F(ddot) (&N, Z + N * i, &iOne, temp1, &iOne); + eigenvalue[i].i = 0; + i = i + 1; + } + else + { + C2F(dgemv) ("n", &N, &N, &alpha, AR, &N, Z + N * i, &iOne, &beta, temp1, &iOne); + C2F(dgemv) ("n", &N, &N, &alpha, AR, &N, Z + N * (i + 1), &iOne, &beta, temp2, &iOne); + real_part = C2F(ddot) (&N, Z + N * i, &iOne, temp1, &iOne) + \ + C2F(ddot) (&N, Z + N * (i + 1), &iOne, temp2, &iOne); + imag_part = C2F(ddot) (&N, Z + N * i, &iOne, temp2, &iOne) - \ + C2F(ddot) (&N, Z + N * (i + 1), &iOne, temp1, &iOne); + eigenvalue[i].r = real_part; + eigenvalue[i].i = imag_part; + eigenvalue[i + 1].r = real_part; + eigenvalue[i + 1].i = -imag_part; + i = i + 2; + } + } + free(temp1); + free(temp2); + } + else + { + for (i = 0; i < nev + 1; i++) + { + eigenvalue[i].r = DR[i]; + eigenvalue[i].i = DI[i]; + } + } + + if (eigenvector) + { + i = 0; + + while (i < nev) + { + if (DI[i] != 0) + { + for (j = 0; j < N; j++) + { + eigenvector[i * N + j].r = Z[i * N + j]; + eigenvector[i * N + j].i = Z[(i + 1) * N + j]; + eigenvector[(i + 1) * N + j].r = Z[i * N + j]; + eigenvector[(i + 1) * N + j].i = -Z[(i + 1) * N + j]; + } + + i = i + 2; + } + else + { + for (j = 0; j < N; j++) + { + eigenvector[i * N + j].r = Z[i * N + j]; + eigenvector[i * N + j].i = 0; + } + + i = i + 1; + } + } + } +} diff --git a/modules/arnoldi/src/c/libsciarnoldi_la-eigs.lo b/modules/arnoldi/src/c/libsciarnoldi_la-eigs.lo new file mode 100755 index 000000000..ef269c5ba --- /dev/null +++ b/modules/arnoldi/src/c/libsciarnoldi_la-eigs.lo @@ -0,0 +1,12 @@ +# src/c/libsciarnoldi_la-eigs.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libsciarnoldi_la-eigs.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/modules/arnoldi/src/c/libsciarnoldi_la-eigs_dependencies.lo b/modules/arnoldi/src/c/libsciarnoldi_la-eigs_dependencies.lo new file mode 100755 index 000000000..27a44baa5 --- /dev/null +++ b/modules/arnoldi/src/c/libsciarnoldi_la-eigs_dependencies.lo @@ -0,0 +1,12 @@ +# src/c/libsciarnoldi_la-eigs_dependencies.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libsciarnoldi_la-eigs_dependencies.o' + +# Name of the non-PIC object +non_pic_object=none + |