Пример #1
0
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);
  }
Пример #2
0
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);
  }
Пример #3
0
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);
  }
Пример #4
0
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
}
Пример #5
0
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);
  }
Пример #6
0
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();
  }