- May 23, 2024
-
-
Mark OLESEN authored
BUG: streamFunction used uninitialized values for symmetry patches - related to 8a8b5db9 changes (#3144) ENH: improve robustness of surface field flattening - vtk::surfaceFieldWriter
-
Mark OLESEN authored
- simplifies forward declarations
-
- May 22, 2024
-
-
Mark OLESEN authored
- the PATH on WSL will usually contain spaces, so it needs quoting
-
Mark OLESEN authored
-
mattijs authored
-
Mark OLESEN authored
-
-
-
mattijs authored
-
- May 20, 2024
-
-
mattijs authored
-
- May 18, 2024
-
-
mattijs authored
-
- May 08, 2024
-
-
Kutalmış Berçin authored
-
- May 07, 2024
-
-
Andrew Heather authored
ENH: improve handling of multi-pass send/recv See merge request Development/openfoam!680
-
Mark OLESEN authored
- the maxCommsSize variable is used to 'chunk' large data transfers (eg, with PstreamBuffers) into a multi-pass send/recv sequence. The send/recv windows for chunk-wise transfers: iter data window ---- ----------- 0 [0, 1*chunk] 1 [1*chunk, 2*chunk] 2 [2*chunk, 3*chunk] ... Since we mostly send/recv in bytes, the current internal limit for MPI counts (INT_MAX) can be hit rather quickly. The chunking limit should thus also be INT_MAX, but since it is rather tedious to specify such large numbers, can instead use maxCommsSize = -1 to specify (INT_MAX-1) as the limit. The default value of maxCommsSize = 0 (ie, no chunking). Note ~~~~ In previous versions, the number of chunks was determined by the sender sizes. This required an additional MPI_Allreduce to establish an overall consistent number of chunks to walk. This additional overhead each time meant that maxCommsSize was rarely actually enabled. We can, however, instead rely on the send/recv buffers having been consistently sized and simply walk through the local send/recvs until no further chunks need to be exchanged. As an additional enhancement, the message tags are connected to chunking iteration, which allows the setup of all send/recvs without an intermediate Allwait. ENH: extend UPstream::probeMessage to use int64 instead of int for sizes
-
Mark OLESEN authored
- avoids polluting standard output for utilities such as foamDictionary etc
-
- May 06, 2024
-
-
Mark OLESEN authored
- the timeSelector is often used to select single or multiple times (eg, for post-processing). However, there are a few applications where only a *single* time should be selected and set. These are now covered by this type of use: timeSelector::addOptions_singleTime(); // Single-time options ... // Allow override of time from specified time options, or no-op timeSelector::setTimeIfPresent(runTime, args); In some cases, if can be desirable to force starting from the initial Time=0 when no time options have been specified: // Set time from specified time options, or force start from Time=0 timeSelector::setTimeIfPresent(runTime, args, true); These changes make a number of includes redundant: * addTimeOptions.H * checkConstantOption.H * checkTimeOption.H * checkTimeOptions.H * checkTimeOptionsNoConstant.H ENH: add time handling to setFields, setAlphaField (#3143) Co-authored-...
-
- May 02, 2024
-
-
Mark OLESEN authored
- for example, string buffer = ...; SubStrings<string> split; { auto colon = buffer.find(':'); if (colon != std::string::npos) { split = stringOps::splitSpace(buffer, colon+1); } } Not really possible with a substr() since that would create a new temporary which then disappears. Similarly awkward to split and then scan for the ':' to decide how many to discard. ENH: add pop_front() and pop_back() methods to SubStrings - the content is trivial enough (a pair of iterators) and the total number of elements is usually reasonable short so that removal of elements is inexpensive For example, string buffer = ...; auto split = stringOps::splitSpace(buffer); if (!split.empty() && split[0].str() == "face") { split.pop_front(); }
-
Mark OLESEN authored
- not allowed in C++20 COMP: avoid hidden overloaded-virtual (edgeMesh, surfMesh)
-
Kutalmış Berçin authored
-
Mark OLESEN authored
- requires a field size check when copying into the flat boundary
-
- Apr 29, 2024
-
-
Mattijs Janssens authored
Use MPI Get_elements_x() for message sizes See merge request Development/openfoam!681
-
Mark OLESEN authored
- ensures more accurate values for message sizes than using MPI Get_count(), which trucates at INT_MAX - add more/better error messages when trying to receive messages that exceed INT_MAX or the char buffer lengths
-
Mark OLESEN authored
- PstreamBuffers are nonBlocking by default, so no need to re-specify
-
Mark OLESEN authored
- "buffered" corresponds to MPI_Bsend (buffered send), whereas the old name "blocking" is misleading since the regular MPI_Send also blocks until completion (ie, buffer can be reused). ENH: IPstream::read() returns std::streamsize instead of label (#3152) - previously returned a 'label' but std::streamsize is consistent with the input parameter and will help with later adjustments. - use <label> instead of <int> for internal accounting of the message size, for consistency with the underyling List<char> buffers used. - improve handling for corner case of IPstream receive with non-blocking, although this combination is not used anywhere
-
- Apr 25, 2024
-
-
mattijs authored
-
- Apr 24, 2024
-
-
mattijs authored
-
Mattijs Janssens authored
Fix fvsPatchFields reading/writing the "value" entry See merge request !679
-
Mark OLESEN authored
- robuster and more reliable determination of inserted objects (previous code could produce false positives). Now also determine the number of inserted objects within the constructor (instead of simply storing a bool). This allows reuse in the address calculations to reduce overheads there. BUG: dodgy short-circuit logic for insertedObjectLabels() - as a quick short-circuit it previously created as demand-driven pointer with a zero elements. However, this meant that if this code was called first (before any other addressing), subsequent calls to the addressing would fail. BUG: bad logic and lookup for faAreaMapper (#3147) - was using labelHashSet but returning a bool and set using the addressing using the unfiltered objects! This is a latent bug since interpolated/inserted faces not currently supported anyhow. ENH: use std::unique_ptr for demand-driven data
-
Mark OLESEN authored
- manual revert for 44d0fbd5. Unless required for post-processing the "value" entry should not written if it is not mandatory for reading. This is especially crucial with an 'empty' patch field where the field (size 0) has a different size from the patch. - the changes made align fvsPatchField behaviour with fvPatchField
-
- Apr 23, 2024
-
-
Mark OLESEN authored
-
Mark OLESEN authored
- return autoPtr<token::compound> instead of the derived type, otherwise cannot easily construct a token from it ENH: additional typed version of refCompoundToken() - symmetric with typed version of transferCompoundToken() and isCompound() - add ITstream::findCompound<Type>() method. Useful for searching within token streams
-
Mark OLESEN authored
-
Andrew Heather authored
reduce communication argList at startup See merge request !678
-
Mark OLESEN authored
- previously automatically skipped the first communicator (which was assumed to be MPI_COMM_WORLD), but now simply rely on the internal pendingMPIFree_ to track which communicators have actually been allocated.
-
Mark OLESEN authored
- UPstream::Communicator is similar to UPstream::Request to wrap/unwrap MPI_Comm. Provides a 'lookup' method to transcribe the internal OpenFOAM communicator tracking to the opaque wrapped version. - provide an 'openfoam_mpi.H' interfacing file, which includes the <mpi.h> as well as casting routines. Example (caution: ugly!) MPI_Comm myComm = PstreamUtils::Cast::to_mpi ( UPstream::Communicator::lookup(UPstream::worldComm) );
-
Mark OLESEN authored
- replace point-to-point transmission of the argList args/options with a broadcast. This is sufficient for most cases (without distributed roots). For "normal" cases (non-distributed roots) this will replace the nProcs-1 messages with a single broadcast. - for cases with distributed roots, distinguish between a single, identical root and different roots. An identical root can also be subsequently handled with a broadcast. Different roots will still require individual point-to-point communication. For cases with distributed roots, it will add the overhead of an additional broadcast.
-
- Apr 22, 2024
-
-
Mark OLESEN authored
- adds consistency with regular point-to-point parallel streams. ENH: add ITstream::tokens() methods - useful, for example, to disambiguate constructing tokenList from a ITstream. ITstream& is = otherDict.lookup("original"); tokenList deepCopy(is); // Error: from Istream or tokenList?? tokenList deepCopy(is.tokens()); // OK: from tokenList
-
Mark OLESEN authored
- same as append() did, but with more consistent names STYLE: replace special purpose append() with container method STYLE: update code style
-
- Apr 19, 2024
-
-
mattijs authored
-
Andrew Heather authored
update to internal accounting for finite-area See merge request !675
-