cisst-saw
Loading...
Searching...
No Matches
nmrHFTISolver.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3
4/*
5 Author(s): Ankur Kapoor
6 Created on: 2004-10-30
7
8 (C) Copyright 2004-2018 Johns Hopkins University (JHU), All Rights Reserved.
9
10--- begin cisst license - do not edit ---
11
12This software is provided "as is" under an open source license, with
13no warranty. The complete license can be found in license.txt and
14http://www.cisst.org/cisst/license.txt.
15
16--- end cisst license ---
17*/
18
19
24
25#ifndef _nmrHFTISolver_h
26#define _nmrHFTISolver_h
27
30
31// forward declaration of fortran routine for very old cisstNetlib
32#ifndef CISSTNETLIB_VERSION
33# define NEEDS_HFTI_FORWARD_DECLARATION
34#else
35# if (CISSTNETLIB_VERSION_MAJOR == 3)
36# define NEEDS_HFTI_FORWARD_DECLARATION
37# endif
38#endif
39
40
41#ifdef NEEDS_HFTI_FORWARD_DECLARATION
42CISSTNETLIB_INTEGER hfti_(CISSTNETLIB_DOUBLE * a, CISSTNETLIB_INTEGER * mda, CISSTNETLIB_INTEGER * m, CISSTNETLIB_INTEGER * n,
43 CISSTNETLIB_DOUBLE * b, CISSTNETLIB_INTEGER * mdb, CISSTNETLIB_INTEGER * nb, CISSTNETLIB_DOUBLE * tau,
44 CISSTNETLIB_INTEGER * krank, CISSTNETLIB_DOUBLE * rnorm, CISSTNETLIB_DOUBLE * h__, CISSTNETLIB_DOUBLE * g,
45 CISSTNETLIB_INTEGER * ip);
46# undef NEEDS_HFTI_FORWARD_DECLARATION
47#endif
48
90
91protected:
92 CISSTNETLIB_INTEGER M;
93 CISSTNETLIB_INTEGER N;
94 CISSTNETLIB_INTEGER NB;
97 CISSTNETLIB_DOUBLE tau;
98 CISSTNETLIB_INTEGER krank;
104
105public:
111 M(0),
112 N(0),
113 NB(0)
114 {
115 Allocate(M, N, NB);
116 }
117
118
128 nmrHFTISolver(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nb) {
129 Allocate(m, n, nb);
130 }
131
132
141
142
151 inline void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nb) {
152 M = m;
153 N = n;
154 NB = nb;
159 A.SetSize(M, N, VCT_COL_MAJOR);
160 B.SetSize(M, NB, VCT_COL_MAJOR);
161 RNORM.SetSize(NB, 1, VCT_COL_MAJOR);
162 G.SetSize(N, 1, VCT_COL_MAJOR);
163 H.SetSize(N, 1, VCT_COL_MAJOR);
164 IP.SetSize(N, 1, VCT_COL_MAJOR);
165 X.SetSize(M, NB, VCT_COL_MAJOR);
166 }
167
168
176
177
185 /* check that the size matches with Allocate() */
186 if ((M != static_cast<CISSTNETLIB_INTEGER>(A.rows()))
187 || (N != static_cast<CISSTNETLIB_INTEGER>(A.cols()))
188 || (NB != static_cast<CISSTNETLIB_INTEGER>(B.cols()))) {
189 cmnThrow(std::runtime_error("nmrHFTISolver Solve: Sizes used for Allocate were different"));
190 }
191
192 /* check that the matrices are Fortran like */
193 if (! (A.IsFortran()
194 && B.IsFortran())) {
195 cmnThrow(std::runtime_error("nmrHFTISolver Solve: All parameters must be Fortran compatible"));
196 }
197
198 hfti_(A.Pointer(), &M, &M, &N, B.Pointer(), &M, &NB, &tau,
199 &krank, RNORM.Pointer(),
200 H.Pointer(), G.Pointer(), IP.Pointer());
201 //error handling??
202 }
203};
204
205
206#endif // _nmrHFTISolver_h
nmrHFTISolver(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nb)
Definition nmrHFTISolver.h:128
vctDynamicMatrix< CISSTNETLIB_DOUBLE > B
Definition nmrHFTISolver.h:96
void Allocate(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &B)
Definition nmrHFTISolver.h:173
vctDynamicMatrix< CISSTNETLIB_DOUBLE > A
Definition nmrHFTISolver.h:95
CISSTNETLIB_INTEGER M
Definition nmrHFTISolver.h:92
vctDynamicMatrix< CISSTNETLIB_INTEGER > IP
Definition nmrHFTISolver.h:102
vctDynamicMatrix< CISSTNETLIB_DOUBLE > RNORM
Definition nmrHFTISolver.h:99
vctDynamicMatrix< CISSTNETLIB_DOUBLE > X
Definition nmrHFTISolver.h:103
vctDynamicMatrix< CISSTNETLIB_DOUBLE > H
Definition nmrHFTISolver.h:101
vctDynamicMatrix< CISSTNETLIB_DOUBLE > G
Definition nmrHFTISolver.h:100
void Solve(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &B) CISST_THROW(std
Definition nmrHFTISolver.h:184
CISSTNETLIB_INTEGER NB
Definition nmrHFTISolver.h:94
CISSTNETLIB_INTEGER krank
Definition nmrHFTISolver.h:98
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nb)
Definition nmrHFTISolver.h:151
nmrHFTISolver(void)
Definition nmrHFTISolver.h:110
CISSTNETLIB_DOUBLE tau
Definition nmrHFTISolver.h:97
nmrHFTISolver(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &B)
Definition nmrHFTISolver.h:138
CISSTNETLIB_INTEGER N
Definition nmrHFTISolver.h:93
Definition vctForwardDeclarations.h:157
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
CISSTNETLIB_INTEGER hfti_(CISSTNETLIB_DOUBLE *a, CISSTNETLIB_INTEGER *mda, CISSTNETLIB_INTEGER *m, CISSTNETLIB_INTEGER *n, CISSTNETLIB_DOUBLE *b, CISSTNETLIB_INTEGER *mdb, CISSTNETLIB_INTEGER *nb, CISSTNETLIB_DOUBLE *tau, CISSTNETLIB_INTEGER *krank, CISSTNETLIB_DOUBLE *rnorm, CISSTNETLIB_DOUBLE *h__, CISSTNETLIB_DOUBLE *g, CISSTNETLIB_INTEGER *ip)
Declaration of vctDynamicMatrix.
const bool VCT_COL_MAJOR
Definition vctForwardDeclarations.h:44