comphy-lab/Viscoelastic3D

Full Tensor Implementation

Offen

#16 geöffnet am 23.11.2024

 (0 Kommentare) (0 Reaktionen) (1 zugewiesene Person)C (1 Fork)auto 404
help wanted

Repository-Metriken

Stars
 (5 Sterne)
PR-Merge-Metriken
 (PR-Metriken ausstehend)

Beschreibung

Issue: Full Tensor Implementation as a Pre-requisite to #6 and #12

Description: As a pre-requisite to issues #6 and #12, it would be beneficial to implement a full tensor framework. The current challenge lies in the incompatibility between 3D implementations and symmetric tensors.

Reference Code: Link to source code

tensor new_symmetric_tensor (const char * name)
{
  struct { char * x, * y, * z; } ext = {".x.x", ".y.y", ".z.z"};
  tensor t;
  foreach_dimension()
    t.x.x = alloc_block_scalar (name, ext.x, 1);
  #if dimension > 1
    t.x.y = alloc_block_scalar (name, ".x.y", 1);
    t.y.x = t.x.y;
  #endif
  #if dimension > 2
    t.x.z = alloc_block_scalar (name, ".x.z", 1);
    t.z.x = t.x.z;
    t.y.z = alloc_block_scalar (name, ".y.z", 1);
    t.z.y = t.y.z;
  #endif
  /* fixme: boundary conditions don't work!  This is because boundary
     attributes depend on the index and should (but cannot) be
     different for t.x.y and t.y.x */
  init_tensor (t, NULL);
  return t;
}

TODO:

  • Ideally, we would like to consistently use tensor formulation to leverage ease of readability and maintainability.
  • However, this is currently blocked by a limitation in Basilisk's core implementation (see basilisk/src/grid/cartesian-common.h line ~246: "fixme: boundary conditions don't work!").
  • Once this limitation is resolved in Basilisk's core, we can:
  • Convert scalar implementation to use tensors
  • Make the code generally compatible using foreach_dimensions
  • Improve code maintainability and readability
  • Potentially merge with the 2D tensor-based implementation

Related Issues:

Contributor Guide