{"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/spectral-refiner-fine-tuning-of-accurate","title":"Spectral-Refiner: Accurate Fine-Tuning of Spatiotemporal Fourier Neural Operator for Turbulent Flows","arxiv_id":"2405.17211","date":"2024-05-27","proceeding":null,"authors":["Shuhao Cao","Francesco Brarda","Ruipeng Li","Yuanzhe Xi"],"abstract":"Recent advancements in operator-type neural networks have shown promising results in approximating the solutions of spatiotemporal Partial Differential Equations (PDEs). However, these neural networks often entail considerable training expenses, and may not always achieve the desired accuracy required in many scientific and engineering disciplines. In this paper, we propose a new learning framework to address these issues. A new spatiotemporal adaptation is proposed to generalize any Fourier Neural Operator (FNO) variant to learn maps between Bochner spaces, which can perform an arbitrary-length temporal super-resolution for the first time. To better exploit this capacity, a new paradigm is proposed to refine the commonly adopted end-to-end neural operator training and evaluations with the help from the wisdom from traditional numerical PDE theory and techniques. Specifically, in the learning problems for the turbulent flow modeled by the Navier-Stokes Equations (NSE), the proposed paradigm trains an FNO only for a few epochs. Then, only the newly proposed spatiotemporal spectral convolution layer is fine-tuned without the frequency truncation. The spectral fine-tuning loss function uses a negative Sobolev norm for the first time in operator learning, defined through a reliable functional-type a posteriori error estimator whose evaluation is exact thanks to the Parseval identity. Moreover, unlike the difficult nonconvex optimization problems in the end-to-end training, this fine-tuning loss is convex. Numerical experiments on commonly used NSE benchmarks demonstrate significant improvements in both computational efficiency and accuracy, compared to end-to-end evaluation and traditional numerical PDE solvers under certain conditions. The source code is publicly available at https://github.com/scaomath/torch-cfd.","url_abs":"https://arxiv.org/abs/2405.17211v3","url_pdf":"https://arxiv.org/pdf/2405.17211v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"spectral-refiner-fine-tuning-of-accurate","repo_url":"https://github.com/scaomath/torch-cfd","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"computational-efficiency","task_name":"Computational Efficiency"},{"task_slug":"de-aliasing","task_name":"De-aliasing"},{"task_slug":"operator-learning","task_name":"Operator learning"},{"task_slug":"super-resolution","task_name":"Super-Resolution"}],"methods":[{"method_slug":"convolution","method_name":"Convolution"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2405.17211","atlas_url":"https://app.syntology.ai/?focus=2405.17211","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2405.17211"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/scaomath/torch-cfd","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":12,"ran_draft_wrong":2,"unverified":1},"by_repo_kind":{"official":{"samples":13,"ran":12,"repositories":1},"community":{"samples":1,"ran":1,"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":1,"samples":[{"code_sha256_prefix":"c17bf7dfdb45871b","entry":"central_diff","repo":"scaomath/torch-cfd","repo_kind":"official","path":"fno/losses.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/fno/losses.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":"c17bf7dfdb45871b"}},{"code_sha256_prefix":"5a5ec93138deef29","entry":"default","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/advection.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/advection.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":"5a5ec93138deef29"}},{"code_sha256_prefix":"f82b9bc3c0e5b177","entry":"fft_expand_dims","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/spectral.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/spectral.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":"f82b9bc3c0e5b177"}},{"code_sha256_prefix":"81d554543fe95eda","entry":"fft_mesh_2d","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/spectral.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/spectral.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":"81d554543fe95eda"}},{"code_sha256_prefix":"30dc8b877f782e80","entry":"log_normal_density","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/initial_conditions.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/initial_conditions.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":"30dc8b877f782e80"}},{"code_sha256_prefix":"f744cc7a9cfb3405","entry":"outer_sum","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/solvers.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/solvers.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":"f744cc7a9cfb3405"}},{"code_sha256_prefix":"fc02f5f0a7b4896e","entry":"partialclass","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"fc02f5f0a7b4896e"}},{"code_sha256_prefix":"2041982f0cf2a6be","entry":"partialclass","repo":"neuraloperator/neuraloperator","repo_kind":"community","path":"neuralop/models/fno.py","file_url":"https://github.com/neuraloperator/neuraloperator/blob/HEAD/neuralop/models/fno.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2041982f0cf2a6be"}},{"code_sha256_prefix":"f23abec4f65ce479","entry":"safe_div","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/advection.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/advection.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":"f23abec4f65ce479"}},{"code_sha256_prefix":"c0504fbcda5ca095","entry":"slice_along_axis","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/tensor_utils.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/tensor_utils.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":"c0504fbcda5ca095"}},{"code_sha256_prefix":"0fb57bced213c0a9","entry":"spectral_laplacian_2d","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/spectral.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/spectral.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":"0fb57bced213c0a9"}},{"code_sha256_prefix":"cc8238497f7c4a27","entry":"split_along_axis","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/tensor_utils.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/tensor_utils.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":"cc8238497f7c4a27"}},{"code_sha256_prefix":"3976415f0a6bab34","entry":"split_axis","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/tensor_utils.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/tensor_utils.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":"3976415f0a6bab34"}},{"code_sha256_prefix":"f9dfe180c45e72ca","entry":"van_leer_limiter","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/advection.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/advection.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":"f9dfe180c45e72ca"}},{"code_sha256_prefix":"57a6d2f9473ef5e3","entry":"scalar_potential","repo":"scaomath/torch-cfd","repo_kind":"official","path":"torch_cfd/forcings.py","file_url":"https://github.com/scaomath/torch-cfd/blob/HEAD/torch_cfd/forcings.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":"57a6d2f9473ef5e3"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}