Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • wslda wslda
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • wtools
  • wsldawslda
  • Wiki
  • Helmholtz decomposition code

Last edited by Andrea Barresi Sep 22, 2021
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Helmholtz decomposition code

VERSION>=2021.09.01

Introduction

Analysis of turbulence and vortices requires knowledge of the kinetic energy, its conservation and its modes. This tool performs the Helmholtz Decomposition, in order to extract the compressive and rotational components of kinetic energy density of the flow as shown in Tsubota, Fujimoto, Yui (2017) Numerical Studies of Quantum Turbulence.

We define the effective velocity field as \omega(\textbf{r},t)=\sqrt{\rho(\textbf{r},t)}v(\textbf{r},t). From this, we can calculate the kinetic energy as:

\mathcal{E}_k=\frac{m}{2V}\int\omega(\textbf{r},t)^2d\textbf{r}=\frac{m}{2}\sum_{\textbf{k}}|\widetilde{\omega}(\textbf{k},t)|^2,

where \widetilde{\omega}(\textbf{k},t)=\mathfrak{F}[\omega(\textbf{r},t)]=\int\omega(\textbf{r},t)\frac{e^{-i\textbf{k}\cdot\textbf{r}}}{V}d\textbf{r} is the Fourier Transform of the effective velocity.

From this, we can apply the Helmholtz Decomposition theorem to obtain the compressive and rotational components of the effective velocity field:

\omega(\textbf{r},t)=\omega_0(t)+\omega_c(\textbf{r},t)+\omega_i(\textbf{r},t)
\omega_c(\textbf{r},t)=\sum_{\textbf{k}\neq0}^{}\frac{\textbf{k}\cdot\widetilde{\omega}(\textbf{k},t)}{k^2}\textbf{k}e^{i\textbf{k}\cdot\textbf{r}}
\omega_i(\textbf{r},t)=\sum_{\textbf{k}\neq0}^{}\{\widetilde{\omega}(\textbf{k},t)-\frac{\textbf{k}\cdot\widetilde{\omega}(\textbf{k},t)}{k^2}\textbf{k}\}e^{i\textbf{k}\cdot\textbf{r}}

Note that in our specific case, we assume the component \omega_0(t) to be zero across the whole lattice.

Usage

The cast line consists of few specific entries. After the executable name, call the .wtxt file that needs to be analyzed, together with a number indicating the spin component you wish to inspect:

  • 0 is for spin "a" (up)
  • 1 is for spin "b" (down)
  • 2 is for spin "a"+"b"

Here is an example of how it should look like:

[gabrielw@node2066 tmp]$ mpirun -np 5 wslda-hdc-3d test2.wtxt 0          

         Adding new variables [wc_a, wi_a] to w-data set.
         Number of measurements = 10
         Starting time          = -1 
         Lattice size   = 80 x 80 x 16 
         Ending time            = 9.000 
         Component = a 
         Variables being produced = wi_a & wc_a 
         Creating file: test2_hh_a.txt
         Creating file: test2_hhspec_a.txt

         Reading frame [1], currently at 1%
         ....
        Completed in    4s ( 0m 4s)! 

For large lattices, the code might take longer than it shows due to MPI memory cleaning routines.

The code outputs four files:

  • Two of them are .wdat, and they contain data about \omega_c(\textbf{r},t) and \omega_i(\textbf{r},t) in binary form. These can be read via VisIt by selecting the corresponding quantity from the VisIt HUD (wc*/wi*);
  • One .txt file, containing columns:
    1. time,
    2. compressive energy,
    3. rotational energy,
    4. compressive energy calculated via spectral decomposition
    5. rotational energy calculated via spectral decomposition
  • One hhspec*.txt file, containing data blocks for every timestep and showing the compressive and rotational spectra as a function of k. In current version, only rotational spectra is reliable. [TODO: Fix compressive.]

Units for every quantity are expressed in terms of density $\rho$, since we take $m=\hbar=k_B=1$. As a result, energies have measure units of $\rho^{5/6}$.

Limitations

Presently the code supports only 3D data. However, you can apply it to 2D as well. In order to do that, you need to increase data dimensionality of the datasets you wish to analyze. You can do it using wdata tool wdata-datadim-up. For example:

[gabrielw@node2066 tmp]$ wdata-datadim-up test1.wtxt test2 3
# WDATA TOOL: DATADIM MODIFIER
# READING INPUT DATA: `test1.wtxt`
# ************************ LATTICE ***************************
# LATTICE: 80 x 80 x 16
# SPACING: 1.000000 x 1.000000 x 1.000000
# VOLUME : 80.000000 x 80.000000 x 16.000000
# DIM-IN : 2
# DIM-OUT: 3
# RESIZING `rho_a`...
# RESIZING `rho_b`...
# RESIZING `delta`...
# RESIZING `j_a`...
# RESIZING `j_b`...
# RESIZING `nu`...
# RESIZING `tau_a`...
# RESIZING `tau_b`...
# RESIZING `V_a`...
# RESIZING `V_b`...
# RESIZING `V_ext_a`...
# RESIZING `V_ext_b`...
# RESIZING `delta_ext`...
# RESIZING `velocity_ext_a`...
# RESIZING `velocity_ext_b`...
# RESIZING `alpha_a`...
# RESIZING `alpha_b`...
# RESIZING `A_a`...
# RESIZING `A_b`...
# WRITING `test2.wtxt`
# DONE.

The resizing tool operates on all the variables listed in the .wtxt file, but the Helmholtz decomposition tool only needs density and current for each spin component. If your dataset is spin-symmetric, using only the "a" component will be enough. The new .wtxt file will link to the resized files for each quantity.

The result of the resizing will be a dataset with cylindrical symmetry: some effects of a fully-3D simulation will not show up (as, in the case of vortices, Kelvin waves or vortex rings).

Developers

  • Andrea Barresi, Warsaw University of Technology
Clone repository
  • API version
  • Automatic interpolations
  • Auxiliary tools
  • Browsing the code
  • Broyden algorithm
  • C and CUDA
  • Campaign of calculations
  • Checking correctness of settings
  • Chemical potentials control
  • Code & Results quality
  • Common failures of static codes
  • Common failures of time dependent codes
  • Computation domain
  • Configuring GPU machine
  • Constraining densities and potentials
View All Pages