- May 23, 2024
-
-
Mark OLESEN authored
- delay construction of message buffer - OStringStream count() method to test if anything has been streamed STYLE: explicit use of std::ios_base in IOstreams - document the return information of set flag methods
-
Mark OLESEN authored
- can be used with this type of code: ITstream* streamPtr = dict.findStream(name); if (streamPtr) { auto& is = *streamPtr; ... } versus: const entry* eptr = dict.findEntry(name); if (eptr && eptr->isStream()) { auto& is = eptr->stream(); ... } ENH: add findStream(), streamPtr(), isStream() to dictionary search - symmetric with findDict(), dictPtr(), isDict() methods STYLE: use findDict() instead of found() + subDict() pairing COMP: define is_globalIOobject trait at top of IOobject header - more visibility, permits reuse for specializations etc.
-
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 max...
-
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 !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 Development/openfoam!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 Development/openfoam!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
-