PasoUtil.h
Go to the documentation of this file.
/*****************************************************************************
*
* Copyright (c) 2003-2020 by The University of Queensland
* http://www.uq.edu.au
*
* Primary Business: Queensland, Australia
* Licensed under the Apache License, version 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Development until 2012 by Earth Systems Science Computational Center (ESSCC)
* Development 2012-2013 by School of Earth Sciences
* Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
* Development from 2019 by School of Earth and Environmental Sciences
**
*****************************************************************************/
#ifndef __PASO_UTIL_H__
#define __PASO_UTIL_H__
/****************************************************************************/
/* Some utility routines: */
/****************************************************************************/
/* Copyrights by ACcESS Australia, 2003,2004,2005 */
/* author: l.gross@uq.edu.au */
/****************************************************************************/
#include "Paso.h"
namespace paso {
namespace util {
void applyGivensRotations(dim_t N, double* v, const double* c, const double* s);
index_t arg_max(dim_t N, dim_t* lambda);
int comparIndex(const void* index1, const void* index2);
index_t cumsum(dim_t N, index_t* array);
index_t cumsum_maskedTrue(dim_t N, index_t* array, int* mask);
index_t cumsum_maskedFalse(dim_t N, index_t* array, int* mask);
index_t iMax(dim_t N, const index_t* array);
double innerProduct(dim_t N, const double* x, const double* y,
escript::JMPI mpiInfo);
bool isAny(dim_t N, const index_t* array, index_t value);
double l2(dim_t N, const double* x, escript::JMPI mpiInfo);
void linearCombination(dim_t N, double* z, double a, const double* x, double b,
const double* y);
double lsup(dim_t N, const double* x, escript::JMPI mpiInfo);
dim_t numPositives(dim_t N, const double* x, escript::JMPI mpiInfo);
void update(dim_t N, double a, double* x, double b, const double* y);
void zeroes(dim_t N, double* x);
inline void copy(dim_t N, double* out, const double* in)
{
linearCombination(N, out, 1., in, 0., in);
}
inline void scale(dim_t N, double* x, double a)
{
update(N, a, x, 0, x);
}
inline void AXPY(dim_t N, double* x, double a, const double* y)
{
update(N, 1., x, a, y);
}
inline bool samesign(double a, double b)
{
return (a>=0 && b>=0) || (a<=0 && b<=0);
}
} // namespace util
} // namespace paso
#endif // __PASO_UTIL_H__
Paso.h
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:66
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
escript::JMPI
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
paso::util::zeroes
void zeroes(dim_t n, double *x)
fills array x with zeroes
Definition: PasoUtil.cpp:319
paso::util::scale
void scale(dim_t N, double *x, double a)
x = a*x
Definition: PasoUtil.h:94
paso::util::AXPY
void AXPY(dim_t N, double *x, double a, const double *y)
x = x+a*y
Definition: PasoUtil.h:100
paso::util::innerProduct
double innerProduct(dim_t n, const double *x, const double *y, escript::JMPI mpiinfo)
returns the inner product of global arrays x and y
Definition: PasoUtil.cpp:428
paso::util::comparIndex
int comparIndex(const void *index1, const void *index2)
this int-comparison function is used by qsort/bsearch in various places
Definition: PasoUtil.cpp:25
paso::util::cumsum
index_t cumsum(dim_t N, index_t *array)
calculates the cumulative sum in array and returns the total sum
Definition: PasoUtil.cpp:86
paso::util::cumsum_maskedFalse
index_t cumsum_maskedFalse(dim_t N, index_t *array, int *mask)
Definition: PasoUtil.cpp:204
paso::util::iMax
index_t iMax(dim_t N, const index_t *array)
returns the maximum value in integer array
Definition: PasoUtil.cpp:65
paso::util::linearCombination
void linearCombination(dim_t n, double *z, double a, const double *x, double b, const double *y)
Definition: PasoUtil.cpp:388
paso::util::samesign
bool samesign(double a, double b)
returns true if both arguments have the same sign, false otherwise
Definition: PasoUtil.h:106
paso::util::applyGivensRotations
void applyGivensRotations(dim_t n, double *v, const double *c, const double *s)
Definition: PasoUtil.cpp:536
paso::util::lsup
double lsup(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global Lsup of x
Definition: PasoUtil.cpp:466
paso::util::isAny
bool isAny(dim_t N, const index_t *array, index_t value)
returns true if array contains value
Definition: PasoUtil.cpp:30
paso::util::arg_max
index_t arg_max(dim_t n, dim_t *lambda)
returns the index to the largest entry in lambda
Definition: PasoUtil.cpp:269
paso::util::cumsum_maskedTrue
index_t cumsum_maskedTrue(dim_t N, index_t *array, int *mask)
Definition: PasoUtil.cpp:139
paso::util::l2
double l2(dim_t n, const double *x, escript::JMPI mpiinfo)
returns the global L2 norm of x
Definition: PasoUtil.cpp:501
paso::util::copy
void copy(dim_t N, double *out, const double *in)
out = in
Definition: PasoUtil.h:88
paso::util::numPositives
dim_t numPositives(dim_t N, const double *x, escript::JMPI mpiInfo)
returns the number of positive values in x
Definition: PasoUtil.cpp:39
paso::util::update
void update(dim_t n, double a, double *x, double b, const double *y)
Definition: PasoUtil.cpp:339
paso
Definition: BiCGStab.cpp:25
paso::N
static dim_t N
Definition: SparseMatrix_saveHB.cpp:37