{"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/neural-stochastic-partial-differential","title":"Neural Stochastic PDEs: Resolution-Invariant Learning of Continuous Spatiotemporal Dynamics","arxiv_id":"2110.10249","date":"2021-10-19","proceeding":null,"authors":["Cristopher Salvi","Maud Lemercier","Andris Gerasimovics"],"abstract":"Stochastic partial differential equations (SPDEs) are the mathematical tool of choice for modelling spatiotemporal PDE-dynamics under the influence of randomness. Based on the notion of mild solution of an SPDE, we introduce a novel neural architecture to learn solution operators of PDEs with (possibly stochastic) forcing from partially observed data. The proposed Neural SPDE model provides an extension to two popular classes of physics-inspired architectures. On the one hand, it extends Neural CDEs and variants -- continuous-time analogues of RNNs -- in that it is capable of processing incoming sequential information arriving at arbitrary spatial resolutions. On the other hand, it extends Neural Operators -- generalizations of neural networks to model mappings between spaces of functions -- in that it can parameterize solution operators of SPDEs depending simultaneously on the initial condition and a realization of the driving noise. By performing operations in the spectral domain, we show how a Neural SPDE can be evaluated in two ways, either by calling an ODE solver (emulating a spectral Galerkin scheme), or by solving a fixed point problem. Experiments on various semilinear SPDEs, including the stochastic Navier-Stokes equations, demonstrate how the Neural SPDE model is capable of learning complex spatiotemporal dynamics in a resolution-invariant way, with better accuracy and lighter training data requirements compared to alternative models, and up to 3 orders of magnitude faster than traditional solvers.","url_abs":"https://arxiv.org/abs/2110.10249v8","url_pdf":"https://arxiv.org/pdf/2110.10249v8.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":"neural-stochastic-partial-differential","repo_url":"https://github.com/crispitagorico/neural-spdes","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"neural-stochastic-partial-differential","repo_url":"https://github.com/crispitagorico/torchspde","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2110.10249","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2110.10249"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/crispitagorico/neural-spdes","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/crispitagorico/torchspde","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_honours":1,"unverified":28},"by_repo_kind":{"listed":{"samples":29,"ran":1,"repositories":2}},"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":"b2b5022f654ee4d3","entry":"scalar_search_armijo","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"torchspde/root_finding_algorithms.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/torchspde/root_finding_algorithms.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b2b5022f654ee4d3"}},{"code_sha256_prefix":"94effb2bae1b9106","entry":"compl_mat_vec_mul_1d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"torchspde/diffeq_solver.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/torchspde/diffeq_solver.py","link_basis":"harvester_set","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":"94effb2bae1b9106"}},{"code_sha256_prefix":"c608b1fc1a12ef8c","entry":"compl_mat_vec_mul_2d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"torchspde/diffeq_solver.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/torchspde/diffeq_solver.py","link_basis":"harvester_set","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":"c608b1fc1a12ef8c"}},{"code_sha256_prefix":"0bf977a8ba73d4a0","entry":"compl_mul1d_spatial","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/NCDEFNO_1D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/NCDEFNO_1D.py","link_basis":"harvester_set","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":"0bf977a8ba73d4a0"}},{"code_sha256_prefix":"78f8021598bf8e54","entry":"compl_mul1d_time","repo":"crispitagorico/torchspde","repo_kind":"listed","path":"torchspde/fixed_point_solver.py","file_url":"https://github.com/crispitagorico/torchspde/blob/HEAD/torchspde/fixed_point_solver.py","link_basis":"harvester_set","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":"78f8021598bf8e54"}},{"code_sha256_prefix":"43acc1a91197c15d","entry":"compl_mul2d","repo":"crispitagorico/torchspde","repo_kind":"listed","path":"torchspde/fixed_point_solver.py","file_url":"https://github.com/crispitagorico/torchspde/blob/HEAD/torchspde/fixed_point_solver.py","link_basis":"harvester_set","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":"43acc1a91197c15d"}},{"code_sha256_prefix":"d25f0fa34864d956","entry":"compl_mul2d_spatial","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/NCDEFNO_2D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/NCDEFNO_2D.py","link_basis":"harvester_set","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":"d25f0fa34864d956"}},{"code_sha256_prefix":"6ed35ce88ea0e5a4","entry":"compl_mul3d","repo":"crispitagorico/torchspde","repo_kind":"listed","path":"torchspde/fixed_point_solver.py","file_url":"https://github.com/crispitagorico/torchspde/blob/HEAD/torchspde/fixed_point_solver.py","link_basis":"harvester_set","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":"6ed35ce88ea0e5a4"}},{"code_sha256_prefix":"d2a5e667ead26109","entry":"dataloader_deeponet_1d_u0","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/deepOnet.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/deepOnet.py","link_basis":"harvester_set","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":"d2a5e667ead26109"}},{"code_sha256_prefix":"ed6e3890adf18ecf","entry":"dataloader_deeponet_1d_xi","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/deepOnet.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/deepOnet.py","link_basis":"harvester_set","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":"ed6e3890adf18ecf"}},{"code_sha256_prefix":"4bd6cbbe9a02195d","entry":"dataloader_deeponet_2d_xi","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/deepOnet.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/deepOnet.py","link_basis":"harvester_set","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":"4bd6cbbe9a02195d"}},{"code_sha256_prefix":"085a0d28f9a3a9f3","entry":"dataloader_fno_1d_u0","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/FNO1D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/FNO1D.py","link_basis":"harvester_set","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":"085a0d28f9a3a9f3"}},{"code_sha256_prefix":"187a227e60c70db7","entry":"dataloader_fno_1d_xi","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/FNO1D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/FNO1D.py","link_basis":"harvester_set","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":"187a227e60c70db7"}},{"code_sha256_prefix":"08cf6f83101d2749","entry":"dataloader_fno_2d_u0","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/FNO2D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/FNO2D.py","link_basis":"harvester_set","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":"08cf6f83101d2749"}},{"code_sha256_prefix":"0a4f8df0cdd397a5","entry":"dataloader_fno_2d_xi","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/FNO2D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/FNO2D.py","link_basis":"harvester_set","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":"0a4f8df0cdd397a5"}},{"code_sha256_prefix":"e04f786b5b09a1a4","entry":"dataloader_nspde_1d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"utilities.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/utilities.py","link_basis":"harvester_set","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":"e04f786b5b09a1a4"}},{"code_sha256_prefix":"db77f51860f997f3","entry":"dataloader_nspde_2d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"utilities.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/utilities.py","link_basis":"harvester_set","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":"db77f51860f997f3"}},{"code_sha256_prefix":"1c6595e56a3b5ae9","entry":"eval_fno_1d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/FNO1D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/FNO1D.py","link_basis":"harvester_set","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":"1c6595e56a3b5ae9"}},{"code_sha256_prefix":"39f9eef0e43e9a68","entry":"eval_ncde","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/NCDE.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/NCDE.py","link_basis":"harvester_set","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":"39f9eef0e43e9a68"}},{"code_sha256_prefix":"e3e8efa5e8efb67c","entry":"eval_ncdeinf_1d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/NCDEFNO_1D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/NCDEFNO_1D.py","link_basis":"harvester_set","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":"e3e8efa5e8efb67c"}},{"code_sha256_prefix":"669c9bae6c4e3862","entry":"eval_nrde_1d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/NRDE.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/NRDE.py","link_basis":"harvester_set","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":"669c9bae6c4e3862"}},{"code_sha256_prefix":"0eaa5e38d1dc5ea8","entry":"eval_nspde","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"utilities.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/utilities.py","link_basis":"harvester_set","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":"0eaa5e38d1dc5ea8"}},{"code_sha256_prefix":"f786d04157be4dec","entry":"forward_iteration","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"torchspde/root_finding_algorithms.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/torchspde/root_finding_algorithms.py","link_basis":"harvester_set","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":"f786d04157be4dec"}},{"code_sha256_prefix":"d9a8a84a3606f245","entry":"grad_space","repo":"crispitagorico/torchspde","repo_kind":"listed","path":"torchspde/gradients.py","file_url":"https://github.com/crispitagorico/torchspde/blob/HEAD/torchspde/gradients.py","link_basis":"harvester_set","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":"d9a8a84a3606f245"}},{"code_sha256_prefix":"0389361f6c547465","entry":"grad_space_perp","repo":"crispitagorico/torchspde","repo_kind":"listed","path":"torchspde/gradients.py","file_url":"https://github.com/crispitagorico/torchspde/blob/HEAD/torchspde/gradients.py","link_basis":"harvester_set","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":"0389361f6c547465"}},{"code_sha256_prefix":"3bfc2050cef8f89f","entry":"grad_var","repo":"crispitagorico/torchspde","repo_kind":"listed","path":"torchspde/gradients.py","file_url":"https://github.com/crispitagorico/torchspde/blob/HEAD/torchspde/gradients.py","link_basis":"harvester_set","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":"3bfc2050cef8f89f"}},{"code_sha256_prefix":"2e551f7f67056cb3","entry":"line_search","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"torchspde/root_finding_algorithms.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/torchspde/root_finding_algorithms.py","link_basis":"harvester_set","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":"2e551f7f67056cb3"}},{"code_sha256_prefix":"edc4e5ae89c52d98","entry":"train_fno_2d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/FNO2D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/FNO2D.py","link_basis":"harvester_set","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":"edc4e5ae89c52d98"}},{"code_sha256_prefix":"b4119fee460e85ef","entry":"train_ncdeinf_2d","repo":"crispitagorico/neural-spdes","repo_kind":"listed","path":"baselines/NCDEFNO_2D.py","file_url":"https://github.com/crispitagorico/neural-spdes/blob/HEAD/baselines/NCDEFNO_2D.py","link_basis":"harvester_set","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":"b4119fee460e85ef"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}