complexMatrix complexArray::operator - () const { complex* newX = new complex [M*N]; complex* t = newX; complex* u = X; complex* v = X; do { while (u < v + N) *t++ = -(*u++); } while ((u = v += L) < &X[M*L]); return complexMatrix(M, N, newX); }
complexMatrix operator - (const complexArray& a, const complex& b) { complex* newx = new complex [a.m()*a.n()]; complex* t = newx; complex* u = a.x(); complex* v = a.x() + a.n(); do { while (u < v) *t++ = *u++ - b; u += a.l() - a.n(); } while ((v += a.l()) <= &a.x()[a.m()*a.l()]); return complexMatrix(a.m(), a.n(), newx); }
complexMatrix operator - (const complex& a, const complexArray& b) { complex* newx = new complex [b.m()*b.n()]; complex* t = newx; complex* u = b.x(); complex* v = b.x() + b.n(); do { while (u < v) *t++ = a - *u++; u += b.l() - b.n(); } while ((v += b.l()) <= &b.x()[b.m()*b.l()]); return complexMatrix(b.m(), b.n(), newx); }
NOX::Abstract::Group::ReturnType LOCA::LAPACK::Group::computeComplex(double frequency) { string callingFunction = "LOCA::LAPACK::computeComplex()"; #ifdef HAVE_TEUCHOS_COMPLEX NOX::Abstract::Group::ReturnType finalStatus; freq = frequency; // Compute Jacobian finalStatus = computeJacobian(); globalData->locaErrorCheck->checkReturnType(finalStatus, callingFunction); // Compute Mass matrix bool res = locaProblemInterface.computeShiftedMatrix(0.0, 1.0, xVector, shiftedSolver.getMatrix()); // Compute complex matrix NOX::LAPACK::Matrix<double>& jacobianMatrix = jacSolver.getMatrix(); NOX::LAPACK::Matrix<double>& massMatrix = shiftedSolver.getMatrix(); NOX::LAPACK::Matrix< std::complex<double> >& complexMatrix = complexSolver.getMatrix(); int n = jacobianMatrix.numRows(); for (int j=0; j<n; j++) { for (int i=0; i<n; i++) { complexMatrix(i,j) = std::complex<double>(jacobianMatrix(i,j), frequency*massMatrix(i,j)); } } if (finalStatus == NOX::Abstract::Group::Ok && res) isValidComplex = true; if (res) return finalStatus; else return NOX::Abstract::Group::Failed; #else globalData->locaErrorCheck->throwError( callingFunction, "TEUCHOS_COMPLEX must be enabled for complex support! Reconfigure with -D Teuchos_ENABLE_COMPLEX"); return NOX::Abstract::Group::BadDependency; #endif }
complexMatrix operator % (const complexArray& a, const complexArray& b) { // inner product if (a.n() != b.n()) a.error("nonconformant complexArray % operands."); complex* newx = new complex [a.m()*b.m()]; complex* s = newx; complex* t = a.x(); complex* u; complex* v; do { v = b.x(); while (v < &b.x()[b.m()*b.l()]) { u = t; *s = *u++ * *v++; while (u < t + a.n()) *s += *u++ * *v++; ++s; v += b.l() - b.n(); }; } while((t += a.l()) < &a.x()[a.m()*a.l()]); return complexMatrix(a.m(), b.m(), newx); }
complexMatrix operator - (const complexArray& a, const complexArray& b) { if (a.n() == b.n()) { if (a.m() == b.m()) { // a.n() == b.n() complex* newx = new complex [b.m()*b.n()]; complex* s = newx; complex* t = newx; complex* u = a.x(); complex* v = b.x(); while ((t += b.n()) <= &newx[b.m()*b.n()]) { while (s < t) *s++ = *u++ - *v++; u += a.l() - a.n(); v += b.l() - b.n(); }; return complexMatrix(b.m(), b.n(), newx); }; if (a.m() == 1) { // a.n() == b.n() && a.m() != b.m() complex* newx = new complex [b.m()*b.n()]; complex* s = newx; complex* t = newx; complex* v = b.x(); while ((t += b.n()) <= &newx[b.m()*b.n()]) { complex* u = a.x(); while (s < t) *s++ = *u++ - *v++; v += b.l() - b.n(); }; return complexMatrix(b.m(), b.n(), newx); }; if (b.m() == 1) { // a.n() == b.n() && a.m() != b.m() && a.m() != 1 complex* newx = new complex [a.m()*a.n()]; complex* s = newx; complex* t = newx; complex* u = a.x(); while ((t += a.n()) <= &newx[a.m()*a.n()]) { complex* v = b.x(); while (s < t) *s++ = *u++ - *v++; u += a.l() - a.n(); }; return complexMatrix(a.m(), a.n(), newx); }; }; if (a.n() == 1) { // b.n() != a.n() if (a.m() == b.m()) { // b.n() != a.n() == 1 complex* newx = new complex [b.m()*b.n()]; complex* s = newx; complex* t = newx; complex* u = a.x(); complex* v = b.x(); while ((t += b.n()) <= &newx[b.m()*b.n()]) { while (s < t) *s++ = *u - *v++; u++; v += b.l() - b.n(); }; return complexMatrix(b.m(), b.n(), newx); }; if (a.m() == 1) { // b.n() != a.n() == 1 && a.m() != b.m() complex* newx = new complex [b.m()*b.n()]; complex* s = newx; complex* t = newx; complex* u = a.x(); complex* v = b.x(); while ((t += b.n()) <= &newx[b.m()*b.n()]) { while (s < t) *s++ = *u - *v++; v += b.l() - b.n(); }; return complexMatrix(b.m(), b.n(), newx); }; }; if (b.n() == 1) { // a.n() != b.n() && a.n() != 1 if (a.m() == b.m()) { // a.n() != b.n() == 1 complex* newx = new complex [a.m()*a.n()]; complex* s = newx; complex* t = newx; complex* u = a.x(); complex* v = b.x(); while ((t += a.n()) <= &newx[a.m()*a.n()]) { while (s < t) *s++ = *u++ - *v; u += a.l() - a.n(); v++; }; return complexMatrix(a.m(), a.n(), newx); }; if (b.m() == 1) { // a.n() != b.n() == 1 && a.m() != b.m() complex* newx = new complex [a.m()*a.n()]; complex* s = newx; complex* t = newx; complex* u = a.x(); complex* v = b.x(); while ((t += a.n()) <= &newx[a.m()*a.n()]) { while (s < t) *s++ = *u++ - *v; u += a.l() - a.n(); }; return complexMatrix(a.m(), a.n(), newx); }; }; a.error("nonconformant complexArray - operands."); return complexMatrix(); }