{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2606-27895","title":"Mosaic: A Benchmark Suite for Differentiable Physics Solvers","arxiv_id":"2606.27895","date":"2026-06-26","proceeding":null,"authors":["Andrin Rehmann","Heiko Zimmermann","Dion Häfner"],"abstract":"Differentiable partial differential equation (PDE) solvers underpin solver-in-the-loop ML training, gradient-based optimal control, and inverse problems, yet the practical cost of obtaining correct, usable gradients from a given solver on a given problem is largely undocumented. Integration effort, computational cost, gradient accuracy, and numerical conditioning vary widely across solvers and are discoverable only by trial and error. We introduce Mosaic, an extensible benchmarking framework for differentiable PDE solvers that standardizes access to solver gradients. Each solver is packaged as a containerized component (Tesseract) exposing a uniform gradient API regardless of language or automatic differentiation (AD) strategy, enabling researchers to evaluate, compare, and build on non-trivial physical solvers. Our evaluation of 14 solvers across fluid dynamics, structural mechanics, and heat transfer demonstrates that the benchmark surfaces practically relevant differences: order-of-magnitude variation in computational cost and Jacobian conditioning, alongside structural incompatibilities that eliminate solvers from realistic tasks entirely. Despite this variation, all solvers that produce gradients converge to similar optima, indicating that the practical barriers are memory limits, numerical stability, and setup compatibility rather than gradient accuracy alone. Mosaic is open-source and available at https://github.com/pasteurlabs/mosaic.","url_abs":"https://arxiv.org/abs/2606.27895","url_pdf":"https://arxiv.org/pdf/2606.27895","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2606.27895","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2606.27895"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/pasteurlabs/mosaic","reach":null}],"summary":{"ran":14,"unverified":5},"by_repo_kind":{"found_in_text":{"samples":19,"ran":14,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"f04da5ba71071604","entry":"classify_failure","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/harness.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/harness.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f04da5ba71071604"}},{"code_sha256_prefix":"87245749026bba85","entry":"container_id_from_tesseract","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/memory.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/memory.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"87245749026bba85"}},{"code_sha256_prefix":"6b4521667afd06db","entry":"discover_solvers","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/config.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/config.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"6b4521667afd06db"}},{"code_sha256_prefix":"e60d6a6e67b7a0f7","entry":"done_solvers_in_partial","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/partial.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/partial.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e60d6a6e67b7a0f7"}},{"code_sha256_prefix":"a12a50ab0d1f3099","entry":"experiment_dir","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/io.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a12a50ab0d1f3099"}},{"code_sha256_prefix":"be7614ac0638e125","entry":"filter_resumable_solvers","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/partial.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/partial.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"be7614ac0638e125"}},{"code_sha256_prefix":"1d66d88869d8f70d","entry":"filter_solvers","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/cell_filter.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/cell_filter.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1d66d88869d8f70d"}},{"code_sha256_prefix":"f894a5539e111ed6","entry":"harness_fn_hash","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/io.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f894a5539e111ed6"}},{"code_sha256_prefix":"668c823c08f62e44","entry":"has_vjp","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/config.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/config.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"668c823c08f62e44"}},{"code_sha256_prefix":"a019b547c41d0c47","entry":"is_kernel","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/experiment.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/experiment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a019b547c41d0c47"}},{"code_sha256_prefix":"c7644ef70d6de87f","entry":"make_sweep_progress","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/console.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/console.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c7644ef70d6de87f"}},{"code_sha256_prefix":"4b4906aa09d23427","entry":"merge_results","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/experiment.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/experiment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4b4906aa09d23427"}},{"code_sha256_prefix":"117f2ed3f7ff3866","entry":"random_direction","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/experiment.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/experiment.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"117f2ed3f7ff3866"}},{"code_sha256_prefix":"1ad0901d352e652a","entry":"tesseract_content_hash","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/io.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/io.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1ad0901d352e652a"}},{"code_sha256_prefix":"f5f3ef2a4014ece6","entry":"load_reference","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/reference.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/reference.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f5f3ef2a4014ece6"}},{"code_sha256_prefix":"1f8353d16228db21","entry":"reference_exists","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/reference.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/reference.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1f8353d16228db21"}},{"code_sha256_prefix":"886299a8b800d150","entry":"sample_container_ram_mib","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/memory.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/memory.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"886299a8b800d150"}},{"code_sha256_prefix":"9f731d1a94e35016","entry":"sample_vram_mib","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/memory.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/memory.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9f731d1a94e35016"}},{"code_sha256_prefix":"029026f0621fcf35","entry":"save_reference","repo":"pasteurlabs/mosaic","repo_kind":"found_in_text","path":"mosaic/benchmarks/core/reference.py","file_url":"https://github.com/pasteurlabs/mosaic/blob/HEAD/mosaic/benchmarks/core/reference.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"029026f0621fcf35"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}