Skip to content

Incorrect use of short-circuit 'or'? #1285

@maxaehle

Description

@maxaehle

In CDiscAdjMultizoneDriver::HandleDataTransfer we have the following code structure:

bool DeformMesh = false;
for (unsigned short jZone = 0; jZone < nZone; jZone++){
  if (jZone != iZone && interface_container[jZone][iZone] != nullptr) {
    DeformMesh = DeformMesh || Transfer_Data(jZone, iZone);
  }
}
if (DeformMesh) DynamicMeshUpdate(iZone, ExtIter);

Transfer_Data returns true if and only if the interface type is BOUNDARY_DISPLACEMENTS. If this happens once, no further call to Transfer_Data will occur for this particular iZone because of short-circuit evaluation of the ||.

Though I'm new to the adjoint driver, I can hardly imagine that this is intended. Maybe the order of the arguments of || should be swapped, or it should be coded as in CMultizoneDriver::Update?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions