ASCOT5
Loading...
Searching...
No Matches
diag.c File Reference

Interface for simulation diagnostics. More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ascot5.h"
#include "simulate.h"
#include "B_field.h"
#include "diag.h"
#include "diag/diag_orb.h"
#include "diag/dist_5D.h"
#include "diag/dist_6D.h"
#include "diag/dist_rho5D.h"
#include "diag/dist_rho6D.h"
#include "diag/dist_com.h"
#include "diag/diag_transcoef.h"
#include "particle.h"

Go to the source code of this file.

Functions

void diag_arraysum (size_t start, size_t stop, real *array1, real *array2)
 Simple helper function for summing elements of two arrays of same size.
 
int diag_init (diag_data *data, int Nmrk)
 Initializes diagnostics data.
 
void diag_free (diag_data *data)
 Free allocated resources.
 
void diag_offload (diag_data *data)
 Offload data to the accelerator.
 
void diag_update_fo (diag_data *data, B_field_data *Bdata, particle_simd_fo *p_f, particle_simd_fo *p_i)
 Collects diagnostics when marker represents a particle.
 
void diag_update_gc (diag_data *data, B_field_data *Bdata, particle_simd_gc *p_f, particle_simd_gc *p_i)
 Collects diagnostics when marker represents a guiding center.
 
void diag_update_ml (diag_data *data, particle_simd_ml *p_f, particle_simd_ml *p_i)
 Collects diagnostics when marker represents a magnetic field line.
 
void diag_sum (diag_data *data1, diag_data *data2)
 Sum offload data arrays as one.
 

Detailed Description

Interface for simulation diagnostics.

Ascot standard output consists of inistate and endstate. Any other output is generated by "diagnostics" that are updated during the simulation. All diagnostics are accessed via this interface. To implement a new diagnostics, it is enough that one add calls to that diagnostics routines here.

One limitation for diagnostic data is that the size of the data must be known before simulation begins so that offloading of that data is possible.

Definition in file diag.c.

Function Documentation

◆ diag_arraysum()

void diag_arraysum ( size_t start,
size_t stop,
real * array1,
real * array2 )

Simple helper function for summing elements of two arrays of same size.

This function is indented for summing distribution ordinates. Indexing starts from 1 and indices given as arguments are inclusive.

Parameters
startindex to array element where summation begins
stopindex to array element where summation ends
array1pointer to array where array2 is summed to
array2pointer to array which is to be summed

Definition at line 313 of file diag.c.

◆ diag_init()

int diag_init ( diag_data * data,
int Nmrk )

Initializes diagnostics data.

Parameters
datadiagnostics data
Nmrknumber of markers in the simulation

Definition at line 37 of file diag.c.

◆ diag_free()

void diag_free ( diag_data * data)

Free allocated resources.

Parameters
datadiagnostics data

Definition at line 102 of file diag.c.

◆ diag_offload()

void diag_offload ( diag_data * data)

Offload data to the accelerator.

Parameters
datapointer to the data struct

Definition at line 116 of file diag.c.

◆ diag_update_fo()

void diag_update_fo ( diag_data * data,
B_field_data * Bdata,
particle_simd_fo * p_f,
particle_simd_fo * p_i )

Collects diagnostics when marker represents a particle.

Parameters
datadiagnostics data struct
Bdatapointer to magnetic field data
p_fpointer to SIMD struct storing marker states at the end of current time-step
p_ipointer to SIMD struct storing marker states at the beginning of current time-step

Definition at line 144 of file diag.c.

◆ diag_update_gc()

void diag_update_gc ( diag_data * data,
B_field_data * Bdata,
particle_simd_gc * p_f,
particle_simd_gc * p_i )

Collects diagnostics when marker represents a guiding center.

Parameters
datapointer to diagnostics data struct
Bdatapointer to magnetic field data
p_fpointer to SIMD struct storing marker states at the end of current time-step
p_ipointer to SIMD struct storing marker states at the beginning of current time-step

Definition at line 179 of file diag.c.

◆ diag_update_ml()

void diag_update_ml ( diag_data * data,
particle_simd_ml * p_f,
particle_simd_ml * p_i )

Collects diagnostics when marker represents a magnetic field line.

Distributions are not updated for magnetic field lines.

Parameters
datapointer to diagnostics data struct
p_fpointer to SIMD struct storing marker states at the end of current time-step
p_ipointer to SIMD struct storing marker states at the beginning of current time-step

Definition at line 221 of file diag.c.

◆ diag_sum()

void diag_sum ( diag_data * data1,
diag_data * data2 )

Sum offload data arrays as one.

The data in both arrays have identical order so distributions can be summed trivially. For orbits and transport coefficients the first array already have space for appending the orbit data from the second array, so we only need to move those elements.

Parameters
datapointer to diagnostics data struct
array1the array to which array2 is summed
array2the array which is to be summed

Definition at line 244 of file diag.c.