Commit graph

235 commits

Author SHA1 Message Date
Henry Weller
1ae1b9f1d8 geometricOneField: Enhanced to provide better correspondence to GeometricField 2016-04-06 14:21:04 +01:00
Henry Weller
ac71f86574 UList: Rationalize assignment (shallow-copy vs deep-copy)
//- Disallow default shallow-copy assignment
    //
    //  Assignment of UList<T> may need to be either shallow (copy pointer)
    //  or deep (copy elements) depending on context or the particular type
    //  of list derived from UList and it is confusing and prone to error
    //  for the default assignment to be either.  The solution is to
    //  disallow default assignment and provide separate 'shallowCopy' and
    //  'deepCopy' member functions.
    void operator=(const UList<T>&) = delete;

    //- Copy the pointer held by the given UList.
    inline void shallowCopy(const UList<T>&);

    //- Copy elements of the given UList.
    void deepCopy(const UList<T>&);
2016-04-03 10:26:05 +01:00
Henry Weller
56668b2406 Pstream: optimisation of data exchange
Contributed by Mattijs Janssens.

1. Any non-blocking data exchange needs to know in advance the sizes to
   receive so it can size the buffer.  For "halo" exchanges this is not
   a problem since the sizes are known in advance but or all other data
   exchanges these sizes need to be exchanged in advance.

   This was previously done by having all processors send the sizes of data to
   send to the master and send it back such that all processors
   - had the same information
   - all could work out who was sending what to where and hence what needed to
     be received.

   This is now changed such that we only send the size to the
   destination processor (instead of to all as previously). This means
   that
   - the list of sizes to send is now of size nProcs v.s. nProcs*nProcs before
   - we cut out the route to the master and back by using a native MPI
     call

   It causes a small change to the API of exchange and PstreamBuffers -
   they now return the sizes of the local buffers only (a labelList) and
   not the sizes of the buffers on all processors (labelListList)

2. Reversing the order of the way in which the sending is done when
   scattering information from the master processor to the other
   processors. This is done in a tree like fashion. Each processor has a
   set of processors to receive from/ send to. When receiving it will
   first receive from the processors with the least amount of
   sub-processors (i.e. the ones which return first). When sending it
   needs to do the opposite: start sending to the processor with the
   most amount of sub-tree since this is the critical path.
2016-04-02 18:32:11 +01:00
Henry Weller
64c08b084e spatialTransformI.H: Corrected doc 2016-04-01 14:53:23 +01:00
Henry Weller
4ac67d6ade Field: Add block member function to return sub-sets of the field as VectorSpaces 2016-03-30 18:17:51 +01:00
Henry Weller
84dad12014 spatialTransform: Include spatialTensor.H 2016-03-30 18:17:27 +01:00
Henry Weller
c0a1646401 MatrixSpace: Add support for block conversion into VectorSpace 2016-03-30 18:16:47 +01:00
Henry Weller
9e5013bcb5 MatrixSpace: Corrected typo 2016-03-30 18:16:20 +01:00
Henry Weller
6a7d9a9d64 SubField: Removed temporary Info statement 2016-03-25 22:43:40 +00:00
Henry Weller
f2ad503680 RectangularMatrix: Removed the identity function (now in SquareMatrix) 2016-03-25 22:35:03 +00:00
Henry Weller
709526bc3a Identity: Make cast-to-primitive operators explicit
to avoid operator resolution ambiguities when compiling single-precision
2016-03-24 23:04:53 +00:00
Henry Weller
b9522c8032 LLTMatrix: Updated docs 2016-03-24 23:04:40 +00:00
Henry Weller
84bad0b2f1 Update header 2016-03-24 19:13:36 +00:00
Henry Weller
ff8e666099 LLTMatrix, LUscalarMatrix, QRMatrix: Provided consistent 'solve' interface 2016-03-24 19:13:04 +00:00
Henry Weller
95dda0efc0 LLTMatrix, LUscalarMatrix, QRMatrix: Provided consistent construction, decomposition and solution interface 2016-03-24 18:05:18 +00:00
Henry Weller
523b01c1b2 QRMatrix: New class to provide QR-decomposition by Householder reflection
This development is sponsored by Carnegie Wave Energy Ltd.
2016-03-24 14:49:25 +00:00
Henry Weller
21b5ffb6ee SquareMatrix: Add setSize and assignment to identity 2016-03-24 14:48:59 +00:00
Henry Weller
121c4e3a28 Matrix: correct docs 2016-03-24 14:48:28 +00:00
Henry Weller
495e09714a LLTMatrix: Add support for updating the decomposition from a new matrix 2016-03-24 14:47:41 +00:00
Henry Weller
60c430b0ae src/OpenFOAM/matrices: Reformatted for-loops consistently 2016-03-23 18:27:04 +00:00
Henry Weller
12e59d3553 LUscalarMatrix: Updated code layout 2016-03-23 15:34:19 +00:00
Henry Weller
ddbd5f3d11 LLTMatrix: New matrix form to support Cholesky decomposition
of symmetric positive-definite matrices and the solution of associated
linear systems.
2016-03-23 15:33:03 +00:00
Henry Weller
536402d4f5 SquareMatrix, RectangularMatrix: Updated block handling
Added 'typeOfInnerProduct' support to ensure the correct type is
returned from the matrix product operator.
2016-03-23 12:52:35 +00:00
Henry Weller
d70c62bba2 MatrixBlock: Separate Matrix::Block into the separate class MatrixBlock
This avoids serious problems with template parameter deduction when
manipulating blocks of different matrix types e.g. Square and
Rectangular.
2016-03-23 12:50:34 +00:00
Henry Weller
019bf94006 Matrices: Rename private member 'nRows_' -> 'mRows_' for consistency with access member function 'm()' 2016-03-23 12:49:03 +00:00
Henry Weller
44c73bfbe1 Made all template declarations consistent using 'class' rather than 'typename' 2016-03-22 15:02:55 +00:00
Henry Weller
055a113f10 SquareMatrix, SymmetricSquareMatrix: Changed the constructor from size to require only n
This avoids the need to check that the m and n dimensions are the same.
2016-03-22 14:13:48 +00:00
Henry Weller
feada18b40 Identity: Added conversion to label 2016-03-22 14:12:53 +00:00
Henry Weller
22b2e397b2 RectangularMatrix: Added construction from and assignment to zero
Also added the Field outer-product operator returning a RectangularMatrix
2016-03-22 14:11:41 +00:00
Henry Weller
c33961f3ad Matrix: Added support for extracting and assigning blocks
The blocks may be specified directly in terms of the size and location in the
parent matrix or with the size obtained from a template specified
VectorSpace or MatrixSpace type.
2016-03-22 14:09:24 +00:00
Henry Weller
5f9b1d1681 Updated header 2016-03-22 14:09:04 +00:00
Henry Weller
a16fff88f7 GAMGAgglomerationTemplates: Assign to Zero rather than pTraits<Type>::zero 2016-03-22 14:08:35 +00:00
Henry Weller
da347abc51 Updated header 2016-03-22 14:08:01 +00:00
Henry Weller
050ee51ad8 zero: Return Zero rather than zero() 2016-03-22 14:07:38 +00:00
Henry Weller
89fa292968 VectorSpaces, MatrixSpaces: Allow automatic conversion from zero 2016-03-22 10:38:59 +00:00
Henry Weller
ffe2c2ac46 src/OpenFOAM: Use Zero rather than pTraits<Type> 2016-03-22 10:38:30 +00:00
Henry Weller
983b3e2ca4 VectorSpaces, MatrixSpaces: Allow automatic conversion from zero 2016-03-22 10:35:57 +00:00
Henry Weller
b49a71a402 zero: Added support for initializing bool 2016-03-22 10:35:13 +00:00
Henry Weller
6f70b18bd2 Field: Added construction from and assignment to zero 2016-03-22 08:27:31 +00:00
Henry Weller
042a9d96fd Updated header 2016-03-22 08:27:11 +00:00
Henry Weller
d880a76409 List: Added construction from and assignment to zero 2016-03-22 08:26:50 +00:00
Henry Weller
c55d554050 VectorSpaces and MatrixSpaces: Added construction from and assignment to zero 2016-03-22 08:25:50 +00:00
Henry Weller
bf6f2b3ed1 zero: Added cast to float and double for consistent scalar and floatScalar initialization and assignment to 0
Zero: New global instance of zero for simple and efficient initialization and assigment of primitives to 0
2016-03-22 08:23:09 +00:00
Henry Weller
ec045baafe Identity: Added cast to scalar 2016-03-22 08:22:21 +00:00
Henry Weller
c13421b10a Matrix: Added (i, j) addressing to allow support for addressing blocks of the matrix
This change brings OpenFOAM into line with the standard matrix
addressing in other C++ libraries for better interoperability.
2016-03-20 19:44:29 +00:00
Henry Weller
767ffc3c7b Matrix: Replace the row-start pointer array with computed offsets
The row-start pointer array provided performance benefits on old
computers but now that computation is often cache-miss limited the
benefit of avoiding a integer multiply is more than offset by the
addition memory access into a separately allocated array.

With the new addressing scheme LUsolve is 15% faster.
2016-03-20 15:00:36 +00:00
Henry Weller
59c9f3594e Updated header 2016-03-20 10:35:35 +00:00
Henry Weller
9209192b65 objectRegistry: Set the path of the Time objectRegistry
Patch contributed by Bruno Santos
Resolves bug-report http://www.openfoam.org/mantisbt/view.php?id=2030
2016-03-20 10:31:48 +00:00
Henry Weller
712b07d478 Field: Added zero() constructor 2016-03-19 21:20:33 +00:00
Henry Weller
248d6065eb Updated header 2016-03-19 21:20:18 +00:00