]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add to the documentation of FEFieldFunction. 17285/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Wed, 17 Jul 2024 17:01:54 +0000 (11:01 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Wed, 17 Jul 2024 17:01:54 +0000 (11:01 -0600)
include/deal.II/numerics/fe_field_function.h

index a53a0dcf686846e5616b2ad0777a3b0022dbd112..79c64f05c28ea19414f74e2fa1543a189e98438d 100644 (file)
@@ -123,12 +123,12 @@ namespace Functions
    * letting this class know.
    *
    *
-   * <h3>Using FEFieldFunction with parallel::distributed::Triangulation</h3>
+   * <h3>Using FEFieldFunction with parallel triangulations</h3>
    *
    * When using this class with a parallel distributed triangulation object
    * and evaluating the solution at a particular point, not every processor
-   * will own the cell at which the solution is evaluated. Rather, it may be
-   * that the cell in which this point is found is in fact a ghost or
+   * will own the cell at which the solution should be evaluated. Rather, it may
+   * be that the cell in which this point is found is in fact a ghost or
    * artificial cell (see
    * @ref GlossArtificialCell
    * and
@@ -160,6 +160,23 @@ namespace Functions
    *   if (point_found == true)
    *     ...do something...;
    * @endcode
+   * The last part (the `...do something...`) part needs to be application
+   * specific. If you really do need the information on this process, you need
+   * to communicate with the process that actually owns the cell in which the
+   * point at which you want the solution is located. Since you don't know
+   * which process that may be, this will necessarily require a global
+   * communication step. The FERemoteEvaluation class may be useful in this
+   * context.
+   *
+   * Finally, there is the case of the value_list(), gradient_list(),
+   * and similar functions of this class that take a list of points. For these
+   * functions, it may be that some of the points are on locally owned cells,
+   * and others are not -- in which case, again, you will receive an exception.
+   * Because these functions do not return information about which of the points
+   * can and which cannot be evaluated, the correct approach is to call the
+   * `*_list()` function within a `try` block, and if it fails fall back to
+   * calling value(), gradient(), or similar in a loop over the points you
+   * wanted evaluated to find out for which point the call fails.
    *
    * @ingroup functions
    */

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.