GSoC 2026 Introduction: Clean multi-step configuration (Dhanraj Rateria)

Hi preCICE team! :waving_hand:

My name is Dhanraj Rateria, and I am highly interested in contributing to the “Clean multi-step configuration” project for GSoC 2026. I have spent the last few days diving deep into the preCICE XML parsing architecture.

Because repository interactions are currently restricted to collaborators, I am posting my introduction and entry test results here, and I would be incredibly grateful for collaborator access so I can submit my Pull Request!

What motivates you to spend this summer in GSoC instead of doing anything else?
I want to spend my summer doing deep systems engineering that has a tangible impact. Contributing to a high-performance multi-physics library like preCICE allows me to work on challenging C++ architecture while supporting software used by scientists globally. GSoC provides the perfect structured environment to dedicate 100% of my time to this.

What interests you most about our project?
I am fascinated by compiler design and parser architecture. The challenge of refactoring the libxml2 wrapper into a decoupled, multi-step Abstract Syntax Tree (AST) perfectly aligns with my interests in software architecture and memory management.

Will you have any other commitments while working on the project?
No, I will have no other academic or work commitments during the GSoC coding period. I am fully committed to working on preCICE for the standard 30-40 hours per week.

What previous experience do you have with the respective technologies?
I have strong experience in C++ and object-oriented design. I am comfortable navigating large codebases, managing pointers/references, using CMake, and working with data structures like ASTs.

What previous experience with Git and GitHub do you have?
I am highly proficient with Git (branching, rebasing, resolving merge conflicts, and GitFlow) and GitHub (PRs, code reviews, and issue tracking).

My Entry Test Progress (Beyond the basics):
For the entry test, I didn’t just modify a hardcoded string. I explored the core parser architecture to propagate exact XML line numbers from libxml2 directly into the configuration error messages.

  • I modified ConfigParser.cpp to delay context cleanup, allowing me to extract xmlCtxt->input->line during the OnStartElementNs callback.
  • I stored this line number in the CTag AST and propagated it to the schema XMLTag during connectTags().
  • I updated XMLAttribute::readValue to accept line numbers, enabling deep attribute validation (e.g., catching constraint="magic-value") to report the exact line number.
  • I injected tag.getLineNumber() into MeshConfiguration, ParticipantConfiguration, and CouplingSchemeConfiguration.

(Note: During this, I noticed that post-parsing validation, like M2NConfiguration::getM2N(), loses this context because the AST is currently discarded. This perfectly highlighted to me why the multi-step configuration project is so necessary!)

My code is fully tested, committed, and pushed to my fork here:

Could I please request collaborator access to the precice/precice repository so I can officially open this PR against the develop branch for your review?

Thank you for your time, and I look forward to your feedback!