Skip to content

Tupek/differentiable block solver#1518

Merged
tupek2 merged 37 commits intodevelopfrom
tupek/differentiable_block_solver
Mar 9, 2026
Merged

Tupek/differentiable block solver#1518
tupek2 merged 37 commits intodevelopfrom
tupek/differentiable_block_solver

Conversation

@tupek2
Copy link
Collaborator

@tupek2 tupek2 commented Jan 8, 2026

A few ongoing fixes and improvements

  • Add differentiable block solver. This block solver uses block linear solvers, but otherwise calls our existing nonlinear solver (e.g., Newton) over the entirely block system. This allows monolithic nonlinear solves.
  • Remove duplication in test_solid_mechanics_state_advancer
  • Initial version of test_thermo_mechanics.cpp a coupled test that uses the new FieldStore as a prototyp
  • Update to latest gretl, which fixes an asan issue and also improves performance in some cases
  • Change the default NewtonLinesearch to use 10 cutbacks. Small interface changes around this to ensure Newton still defaults back to 0 cutbacks.
  • Taylor series style for residual update in warm-start to better handle physics which start out of equilibrium

@tupek2 tupek2 added the WIP Work in progress label Jan 8, 2026
@tupek2 tupek2 requested a review from btalamini January 27, 2026 19:18
@tupek2 tupek2 force-pushed the tupek/differentiable_block_solver branch from 5b88e69 to 348ab9f Compare February 2, 2026 15:55
@tupek2 tupek2 requested a review from ebchin February 10, 2026 05:22
@tupek2 tupek2 requested review from lihanyu97 and white238 February 25, 2026 22:35
Copy link
Member

@btalamini btalamini left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I read through all of this, and it looks good to me! Sorry to make you wait for a no-feedback response.

Comment on lines +356 to +360
std::vector<DifferentiableBlockSolver::FieldPtr> u_duals(static_cast<size_t>(num_rows));
for (int row_i = 0; row_i < num_rows; ++row_i) {
u_duals[static_cast<size_t>(row_i)] = std::make_shared<DifferentiableBlockSolver::FieldT>(
u_bars[static_cast<size_t>(row_i)]->space(), "u_dual_" + std::to_string(row_i));
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the future, we could make utilities for (block vector -> subvector) and the inverse and stick them in common place.

@btalamini
Copy link
Member

Pinging @white238 , @ebchin, @lihanyu97 . Any outstanding concerns?

@tupek2 tupek2 merged commit c122d22 into develop Mar 9, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready for review Ready for active inspection by reviewers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants