{"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/gaussian-processes-at-the-helm-holtz-a-more","title":"Gaussian processes at the Helm(holtz): A more fluid model for ocean currents","arxiv_id":"2302.10364","date":"2023-02-20","proceeding":null,"authors":["Renato Berlinghieri","Brian L. Trippe","David R. Burt","Ryan Giordano","Kaushik Srinivasan","Tamay Özgökmen","Junfei Xia","Tamara Broderick"],"abstract":"Given sparse observations of buoy velocities, oceanographers are interested in reconstructing ocean currents away from the buoys and identifying divergences in a current vector field. As a first and modular step, we focus on the time-stationary case - for instance, by restricting to short time periods. Since we expect current velocity to be a continuous but highly non-linear function of spatial location, Gaussian processes (GPs) offer an attractive model. But we show that applying a GP with a standard stationary kernel directly to buoy data can struggle at both current reconstruction and divergence identification, due to some physically unrealistic prior assumptions. To better reflect known physical properties of currents, we propose to instead put a standard stationary kernel on the divergence and curl-free components of a vector field obtained through a Helmholtz decomposition. We show that, because this decomposition relates to the original vector field just via mixed partial derivatives, we can still perform inference given the original data with only a small constant multiple of additional computational expense. We illustrate the benefits of our method with theory and experiments on synthetic and real ocean data.","url_abs":"https://arxiv.org/abs/2302.10364v3","url_pdf":"https://arxiv.org/pdf/2302.10364v3.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":"gaussian-processes-at-the-helm-holtz-a-more","repo_url":"https://github.com/renatoberlinghieri/helmholtz-gp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"gaussian-processes","task_name":"Gaussian Processes"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2302.10364","atlas_url":"https://app.syntology.ai/?focus=2302.10364","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2302.10364"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/renatoberlinghieri/helmholtz-gp","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":5,"unverified":1},"by_repo_kind":{"official":{"samples":6,"ran":5,"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":"614b2b6a7a1c6bd2","entry":"downsample","repo":"renatoberlinghieri/helmholtz-gp","repo_kind":"official","path":"helmholtz_gp/utils.py","file_url":"https://github.com/renatoberlinghieri/helmholtz-gp/blob/HEAD/helmholtz_gp/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"614b2b6a7a1c6bd2"}},{"code_sha256_prefix":"0778367ca13c34c7","entry":"k_mixed_partials","repo":"renatoberlinghieri/helmholtz-gp","repo_kind":"official","path":"helmholtz_gp/helmholtz_regression_pytorch.py","file_url":"https://github.com/renatoberlinghieri/helmholtz-gp/blob/HEAD/helmholtz_gp/helmholtz_regression_pytorch.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0778367ca13c34c7"}},{"code_sha256_prefix":"cf2d67f316d7438f","entry":"make_xy_grid","repo":"renatoberlinghieri/helmholtz-gp","repo_kind":"official","path":"helmholtz_gp/utils.py","file_url":"https://github.com/renatoberlinghieri/helmholtz-gp/blob/HEAD/helmholtz_gp/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cf2d67f316d7438f"}},{"code_sha256_prefix":"bb4a0a557ed5af17","entry":"solve_ode","repo":"renatoberlinghieri/helmholtz-gp","repo_kind":"official","path":"helmholtz_gp/utils.py","file_url":"https://github.com/renatoberlinghieri/helmholtz-gp/blob/HEAD/helmholtz_gp/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bb4a0a557ed5af17"}},{"code_sha256_prefix":"6562bd6f23eb3678","entry":"sqr_exp_2D","repo":"renatoberlinghieri/helmholtz-gp","repo_kind":"official","path":"helmholtz_gp/helmholtz_regression_pytorch.py","file_url":"https://github.com/renatoberlinghieri/helmholtz-gp/blob/HEAD/helmholtz_gp/helmholtz_regression_pytorch.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6562bd6f23eb3678"}},{"code_sha256_prefix":"03dd217fb3e754c4","entry":"sqr_exp_derivative_2D_twodata","repo":"renatoberlinghieri/helmholtz-gp","repo_kind":"official","path":"helmholtz_gp/helmholtz_regression_pytorch.py","file_url":"https://github.com/renatoberlinghieri/helmholtz-gp/blob/HEAD/helmholtz_gp/helmholtz_regression_pytorch.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"03dd217fb3e754c4"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}