Skip to content

[BUG] TSI output() writes output without calling new_step() #1682

@rjoussen

Description

@rjoussen

Bug Description: What's going wrong?

TSI::Algorithm::output() mainly writes output for the thermo field and the structure field:

thermo_field()->output(forced_writerestart);
structure_field()->output(forced_writerestart);

Besides that, TSI::Algorithm::output() also writes some cross-outputs, i.e., the displacement into the thermo field and the temperature into the structure field using the old output format, applying the mortar mapping if necessary. For that, it calls the disc_writers of the respective fields directly. The problem is that it does so regardless of whether or not the output methods of the individual fields actually wrote restart/old output and hence called new_step() already. If new_step() was not called before, this fails with a HDF5 error.

Expectations

It shouldn't fail.

Possible Solution

There are 3 possible solutions:

  • TSI::Algorithm::output() needs to determine if the individual fields called new_step already/have datawritten. Since the output methods don't and shouldn't return anything, this would require extensive checks based on the input parameters.
  • Since the faulty cross-outputs are not needed for restarts, we could move the output of temperature in the structure field and displacement in the thermo field to runtime vtk output. The problem with that is that the vtk writers of the individual fields are not available in this method and would need to be callable from the adapters, I assume
  • Remove this cross-output altogether. This would make TSI_Algorithm::output() much slimmer (just calling output of the fields). Displaying the temperature on the deformed geometry for matching grids is trivial in Paraview; for non-matching grids, it can probably be interpolated somehow.

The last two approaches would also mean that we can get rid of the TSI specific old post_monitor writers, which would be helpful to afterwards remove the TermoWriter (since the TSI writer inherits from the thermo writer)

Steps to Reproduce

This behaviour can be reproduced for instance by modifying the volmortar3D_tsi_error.4C.yaml test:

IO:
  STRUCT_DISP: false # false doesnt work
  THERM_TEMPGRAD: no # no doesnt work
TSI DYNAMIC:
  RESTARTEVERY: 0 # this leads to no restart output being written, hence no new_step

Your Environment

  • Relevant repo SHA1s:
  • Relevant configure flags or configure script:
  • Operating system and version:
  • Compiler and TPL versions:

Related Issues and Pull Requests

  • Blocks [TSI] Use WRITE_INITIAL_STATE #1678 (since no restart output is written at step=0 and volmortar3D_tsi_error.4C.yaml doesn't set IO/THERM_TEMPGRAD to not no.
  • Follows
  • Related to
  • Part of
  • Composed of

Interested Parties

fyi @c-p-schmidt

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions