Issues with rbfMeshMotionSolver

Hello
Hope you are all well
I have a 3D case and am trying to use the RBF solver with this setup in parallel.
I ran the case with displacementLaplacian and it runs for about 0.09secs out of 1 sec (900 timesteps) before diverging.
I have run a 2D case using RBF (Displacement reading: Allow mesh motion solvers without a pointDisplacement field by solids4foam · Pull Request #241 · precice/openfoam-adapter · GitHub) and it worked great but once I switch to a 3D case, the sim diverges immediately.
I tried using different things like removing FaceNodes ( OpenFOAM adapter with RBFMeshMotionSolver - Official adapters and tutorials - preCICE Forum on Discourse) and changing coarsening and interpolation but nothing works.

precice-config.xml (2.7 KB)
preciceDict.txt (927 Bytes)

I have attached my preciceDict and precice-config files for reference

I can even send the whole case just so that the setup can be confirmed.

Would really appreciate any help

This is how it terminates:

---[preciceAdapter] Loaded the OpenFOAM-preCICE adapter - v1.1.0 + unreleased changes.
---[preciceAdapter] Reading preciceDict...
---[precice] ^[[0m This is preCICE version 2.3.0
---[precice] ^[[0m Revision info: no-info [Git failed/Not a repository]
---[precice] ^[[0m Configuration: Release (Debug and Trace log unavailable)
---[precice] ^[[0m Configuring preCICE with configuration "../precice-config.xml"
---[precice] ^[[0m I am participant "Fluid"
---[precice] ^[[0m Connecting Master to 95 Slaves
---[precice] ^[[0m Setting up master communication to coupling partner/s
---[precice] ^[[0m Masters are connected
---[precice] ^[[0m Setting up preliminary slaves communication to coupling partner/s
---[precice] ^[[0m Prepare partition for mesh Fluid-Mesh-Faces
---[precice] ^[[0m Gather mesh Fluid-Mesh-Faces
---[precice] ^[[0m Send global mesh Fluid-Mesh-Faces
---[precice] ^[[0m Prepare partition for mesh Fluid-Mesh-Nodes
---[precice] ^[[0m Receive global mesh Solid-Mesh
---[precice] ^[[0m Broadcast mesh Solid-Mesh
---[precice] ^[[0m Filter mesh Solid-Mesh by bounding box on slaves
---[precice] ^[[0m Mapping distance not available due to empty partition.
---[precice] ^[[0m Mapping distance min:2.58385e-05 max:0.00104288 avg: 0.000558285 var: 3.79615e-08 cnt: 256
---[precice] ^[[0m Filter mesh Solid-Mesh by mappings
---[precice] ^[[0m Feedback distribution for mesh Solid-Mesh
---[precice] ^[[0m Setting up slaves communication to coupling partner/s
---[precice] ^[[0m Slaves are connected
---[precice] ^[[0m iteration: 1 of 50, time-window: 1 of 10000, time: 0, time-window-size: 0.0001, max-timestep-length: 0.0001, ongoi$
---[precice] ^[[0m Compute "write" mapping from mesh "Fluid-Mesh-Faces" to mesh "Solid-Mesh".
---[precice] ^[[0m Mapping distance min:2.58385e-05 max:0.00104288 avg: 0.000558285 var: 3.79615e-08 cnt: 256
---[precice] ^[[0m Compute "read" mapping from mesh "Solid-Mesh" to mesh "Fluid-Mesh-Nodes".
---[precice] ^[[0m Mapping distance not available due to empty partition.
---[preciceAdapter] preCICE was configured and initialized
---[preciceAdapter] Setting the solver's endTime to infinity to prevent early exits. Only preCICE will control the simulation's endTi$
wallShearStress wallShearStress:
    processing wall patches:
        interface

Courant Number mean: 0 max: 0
Time = 0.0001

PIMPLE: iteration 1
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

on the solid side:

Adapter writing coupling data...
Writing DISPLACEMENTS coupling data with ID '2'.
Adapter calling advance()...
---[precice]  relative convergence measure: relative two-norm diff of data "Displacement" = inf, limit = 1.00e-03, normalization = 0.0
0e+00, conv = true
---[precice]  relative convergence measure: relative two-norm diff of data "Force" = inf, limit = 1.00e-03, normalization = 0.00e+00,
conv = true
---[precice]  All converged
---[precice] WARNING:  The coupling residual equals almost zero. There is maybe something wrong in your adapter. Maybe you always writ
e the same data or you call advance without providing new data first or you do not use available read data. Or you just converge much
further than actually necessary.
---[precice] ERROR:  Send using sockets failed with system error: write: Broken pipe

When I use displacementDelta:

---[preciceAdapter] Loaded the OpenFOAM-preCICE adapter - v1.1.0 + unreleased changes.
---[preciceAdapter] Reading preciceDict...
---[precice]  This is preCICE version 2.3.0
---[precice]  Revision info: no-info [Git failed/Not a repository]
---[precice]  Configuration: Release (Debug and Trace log unavailable)
---[precice]  Configuring preCICE with configuration "../precice-config.xml"
---[precice]  I am participant "Fluid"


--> FOAM FATAL ERROR: (openfoam-2106)

    request for pointVectorField unused from objectRegistry region0 failed
    available objects of type pointVectorField are
0()

    From const Type &Foam::objectRegistry::lookupObject(const Foam::word &, bool) const [with Type = Foam::GeometricField<Foam::Vector
<double>, Foam::pointPatchField, Foam::pointMesh>]
    in file /scratch/projects/UNT/apps/OpenFoam/OpenFOAM-v2106/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 463.

FOAM aborting

#0  Foam::error::printStack(Foam::Ostream&) at ??:?
#1  Foam::error::exitOrAbort(int, bool) at ??:?
#2  Foam::GeometricField<Foam::Vector<double>, Foam::pointPatchField, Foam::pointMesh> const& Foam::objectRegistry::lookupObject<Foam:
:GeometricField<Foam::Vector<double>, Foam::pointPatchField, Foam::pointMesh> >(Foam::word const&, bool) const at ??:?
#3  preciceAdapter::FSI::DisplacementDelta::DisplacementDelta(Foam::fvMesh const&, std::__cxx11::basic_string<char, std::char_traits<c
har>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) at ??:?
#4  preciceAdapter::FSI::FluidStructureInteraction::addReaders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator
<char> >, preciceAdapter::Interface*) at ??:?
#5  preciceAdapter::Adapter::configure() at ??:?
#6  Foam::functionObjects::preciceAdapterFunctionObject::read(Foam::dictionary const&) at ??:?
#7  Foam::functionObjects::preciceAdapterFunctionObject::preciceAdapterFunctionObject(Foam::word const&, Foam::Time const&, Foam::dict
ionary const&) at ??:?
#8  Foam::functionObject::adddictionaryConstructorToTable<Foam::functionObjects::preciceAdapterFunctionObject>::New(Foam::word const&,
 Foam::Time const&, Foam::dictionary const&) at ??:?
#9  Foam::functionObject::New(Foam::word const&, Foam::Time const&, Foam::dictionary const&) at ??:?
#10  Foam::functionObjectList::read() at ??:?
#11  Foam::Time::run() const at ??:?
#12  ? at ??:?
#13  __libc_start_main in /usr/lib64/libc.so.6
#14  ? at ??:?
../../../tools/run-openfoam.sh: line 15: 3316715 Aborted                 (core dumped) ${solver}

Anyone with some insight on this matter?

Would appreciate any help

@Makis and @DavidSCN probably have the best insight here.

Hello
Anyone with some suggestions on this?
RBF solver has not worked for any of my 3D cases be it a simple tube or a complex valve.

Would appreciate any help.

Hi @mishal49

I am neither an expert on OpenFOAM, nor mapping methods in preCICE, but I noticed that you are using preCICE v2.3.0. Would it be possible for you to update to preCICE v3? We have a host of new things, which perhaps solve your problems, or at least give you more insights.

Looking at your preciceDict:

FSI
{
  rho rho [1 -3 0 0 0 0 0] 1060;

    // The point displacement field is unused for the RBF mesh motion solver
    namePointDisplacement unused;

    // Specify the RBF cell motion field
    nameCellDisplacement rbfMotionCentersField;
}

The adapter uses these names to look up these fields. In this case, it tries to get an object called unused, which does not exist.

Regarding the original issue, I am not experienced with rbfMeshMotionSolver, but I understand that this must be related to wrong configuration.

1 Like

Hi @Makis
From my understanding, the unused is defining no use of point displacement since RBF uses only cell centers.
I got this configuration from an issue on the precice repository (cannot seem to find the link)

I have run a 2D case with this exact configuration using the RBF solver and it has worked successfully. Is this something that does not work for 3D cases maybe? What should the configuration be if not unused?

Thank you

Hi @IshaanDesai
I tried Precice V3 as well but the issue persists

Any other suggestions?