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
  • Logger

Last edited by Gabriel Wlazłowski Feb 20, 2026
Page history

Logger

  • Customizing wlog file
    • Example
  • Customizing wdata files
    • Example

Customizing wlog file

For reporting basic quantities (such as particle number, energy, etc.), the W-SLDA code uses a wlog file. It is a text file produced by the function int logger( ) from logger.h file. The user can modify this file depending on the specifics of a given problem.

Example

Suppose that, in addition to being defined by default, the user needs to print out a new variable:

\Delta_{\textrm{avg}}(t) = \dfrac{\int |\Delta(\bm{r},t)|(n_a(\bm{r},t)+n_b(\bm{r},t))\,d\bm{r}}{\int (n_a(\bm{r},t)+n_b(\bm{r},t))\,d\bm{r}}

In the first step, we define the new variable

int add_custom_variable_to_wdata_metadata(wdata_metadata *wdmd,
           double *params, size_t extra_data_size, void *extra_data)
{
    // To add a variable, use this template
    //                       var_name       type    unit
    wdata_variable var1 = {"E_flow", "real", "none", "wdat"}; // scalar variable
    wdata_add_variable(wdmd, &var1);

    return 0;
}

which is the (weighted) average value of the delta. This can be done by adding to logger(..):

int ixyz;
int lNXYZ = h_potentials.blocklength;
double delta_avg=0.0, Ntot = 0.0; 
for(ixyz=0; ixyz<lNXYZ; ixyz++) delta_avg+=cabs(h_potentials.delta[ixyz])*(h_densities.rho_a[ixyz]+h_densities.rho_b[ixyz]);
for(ixyz=0; ixyz<lNXYZ; ixyz++) Ntot+=h_densities.rho_a[ixyz]+h_densities.rho_b[ixyz];
delta_avg /= Ntot;

and supplementing the printf statement with an appropriate entry, like:

    // add entry
    fprintf(log, "%6d %18.10g %18.10g 
                %18.10g %18.10g %18.10g 
                %18.10g %18.10g %18.10g 
                %18.10g %18.10g %18.10g 
                %18.10g %18.10g %18.10g 
                %18.10g %18.10g %18.10g %10.2f %20s\n",
                                 //  <-- HERE
        it, // 1
        npart[SPINA], // 2
        npart[SPINB], // 3
        npart[SPINA]+npart[SPINB], // 4
        E_tot/Effg, // 5
        energy[EKIN]/Effg, // 6
        energy[EPOT]/Effg, // 7
        energy[EPAIR]/Effg, // 8
        energy[ECURRENT]/Effg, // 9
        energy[EPOTEXT]/Effg, //10
        energy[EPAIREXT]/Effg, //11
        energy[EVELEXT]/Effg, //12
        mu[SPINA]/eF, //13
        mu[SPINB]/eF, //14
        kF, // 15
        eF, // 16
        Effg, // 17
        delta_avg, // 18 <-- HERE
        logger_get_time_from_last_entry(), //19
        buffer
    );

Customizing wdata files

Functionality introduced with API_VERSION>=20231218

The logger also allows the definition of new variables of results W-data set. It is done in two steps:

  1. Adding a definition of a new variable via the add_custom_variable_to_wdata_metadata function.
  2. Adding a body of function write_custom_variable_to_wdata_set that creates and writes the new variable to the wdata set.

Example

To demonstrate the functionality of extending the wdata set by new variables, let us add a new variable, which is the density of the flow energy

E_{flow}(\bm{r}) = \frac{\bm{j}_a^2(\bm{r})}{2n_a(\bm{r})} + \frac{\bm{j}_b^2(\bm{r})}{2n_b(\bm{r})}

In the first step, we define the new variable named E_flow

int add_custom_variable_to_wdata_metadata(wdata_metadata *wdmd,
           double *params, size_t extra_data_size, void *extra_data)
{
    wdata_variable var1 = {"E_flow", "real", "none", "wdat"}; // scalar variable
    wdata_add_variable(wdmd, &var1);

    return 0;
}

Next, we construct the variable and write it to the wdata set

int write_custom_variable_to_wdata_set(wdata_metadata *wdmd,
           int it,
           wslda_density h_densities, wslda_potential h_potentials,
           double kF, double *mu,
           double *params, size_t extra_data_size, void *extra_data)
{
    // DETERMINE LOCAL SIZES OF ARRAYS (CODE DIMENSIONALITY DEPENDENT)
    int lNX=h_densities.nx, lNY=h_densities.ny, lNZ=h_densities.nz; // local sizes
    int ix, iy, iz, ixyz;

    double *E_flow = (double *)malloc(lNX*lNY*lNZ*sizeof(double)); // allocate memory for the variable

    // ITERATE OVER ALL POINTS
    ixyz=0;
    for(ix=0; ix<lNX; ix++) for(iy=0; iy<lNY; iy++) for(iz=0; iz<lNZ; iz++)
    {
        double x = DX*(ix-lNX/2);
        double y = DY*(iy-lNY/2); // for 1d code y will be always 0
        double z = DZ*(iz-lNZ/2); // for 1d and 2d codes z will be always 0

        // construst the variable
        double ja2 = pow(h_densities.j_a_x[ixyz],2) + pow(h_densities.j_a_y[ixyz],2) + pow(h_densities.j_a_z[ixyz],2);
        double jb2 = pow(h_densities.j_b_x[ixyz],2) + pow(h_densities.j_b_y[ixyz],2) + pow(h_densities.j_b_z[ixyz],2);
        E_flow[ixyz] = ja2 / (2.*h_densities.rho_a[ixyz]) + jb2 / (2.*h_densities.rho_b[ixyz]);

        ixyz++; // go to the next point, it should be the last line of the triple loop
    }

    // to add a variable to a binary file, use this function
    wdata_write_cycle(wdmd, "E_flow", E_flow);

    free(E_flow); // clear memory

    return 0;
}
Clone repository

Content of Documentation
Official webpage
W-BSK Toolkit