LandauCtx#
Application context for the DMPLEX Landau collision operator that records the species data, mesh configuration, AMR settings, batching parameters, and pre-computed static data needed to evaluate the operator
Synopsis#
#include "petscdmplex.h"
typedef struct {
PetscBool interpolate; /* Generate intermediate mesh elements */
PetscBool gpu_assembly;
MPI_Comm comm; /* global communicator to use for errors and diagnostics */
double times[LANDAU_NUM_TIMERS];
PetscBool use_matrix_mass;
/* FE */
PetscFE fe[LANDAU_MAX_SPECIES];
/* geometry */
PetscReal radius[LANDAU_MAX_GRIDS];
PetscReal radius_par[LANDAU_MAX_GRIDS];
PetscReal radius_perp[LANDAU_MAX_GRIDS];
PetscReal re_radius; /* RE: radius of refinement along v_perp=0, z>0 */
PetscReal vperp0_radius1; /* RE: radius of refinement along v_perp=0 */
PetscReal vperp0_radius2; /* RE: radius of refinement along v_perp=0 after origin AMR refinement */
PetscBool sphere;
PetscBool map_sphere;
PetscReal sphere_inner_radius_90degree[LANDAU_MAX_GRIDS];
PetscReal sphere_inner_radius_45degree[LANDAU_MAX_GRIDS];
PetscInt cells0[3];
/* AMR */
PetscBool use_p4est;
PetscInt numRERefine; /* RE: refinement along v_perp=0, z > 0 */
PetscInt nZRefine1; /* RE: origin refinement after v_perp=0 refinement */
PetscInt nZRefine2; /* RE: origin refinement after origin AMR refinement */
PetscInt numAMRRefine[LANDAU_MAX_GRIDS]; /* normal AMR - refine from origin */
PetscInt postAMRRefine[LANDAU_MAX_GRIDS]; /* uniform refinement of AMR */
PetscBool simplex;
char filename[PETSC_MAX_PATH_LEN];
PetscReal thermal_speed[LANDAU_MAX_GRIDS];
PetscBool sphere_uniform_normal;
/* relativistic */
PetscBool use_energy_tensor_trick;
PetscBool use_relativistic_corrections;
/* physics */
PetscReal thermal_temps[LANDAU_MAX_SPECIES];
PetscReal masses[LANDAU_MAX_SPECIES]; /* mass of each species */
PetscReal charges[LANDAU_MAX_SPECIES]; /* charge of each species */
PetscReal n[LANDAU_MAX_SPECIES]; /* number density of each species */
PetscReal m_0; /* reference mass */
PetscReal v_0; /* reference velocity */
PetscReal n_0; /* reference number density */
PetscReal t_0; /* reference time */
PetscReal Ez;
PetscReal epsilon0;
PetscReal k;
PetscReal lambdas[LANDAU_MAX_GRIDS][LANDAU_MAX_GRIDS];
PetscReal electronShift;
PetscInt num_species;
PetscInt num_grids;
PetscInt species_offset[LANDAU_MAX_GRIDS + 1]; // for each grid, but same for all batched vertices
PetscInt mat_offset[LANDAU_MAX_GRIDS + 1]; // for each grid, but same for all batched vertices
// batching
PetscBool jacobian_field_major_order; // this could be a type but lets not get pedantic
VecScatter plex_batch;
Vec work_vec;
IS batch_is;
PetscErrorCode (*seqaij_mult)(Mat, Vec, Vec);
PetscErrorCode (*seqaij_multtranspose)(Mat, Vec, Vec);
PetscErrorCode (*seqaij_solve)(Mat, Vec, Vec);
PetscErrorCode (*seqaij_getdiagonal)(Mat, Vec);
/* COO */
Mat J;
Mat M;
Vec X;
/* derived type */
void *data;
/* computing */
LandauDeviceType deviceType;
DM pack;
DM plex[LANDAU_MAX_GRIDS];
LandauStaticData SData_d; /* static geometric data on device */
/* diagnostics */
PetscInt verbose;
PetscLogEvent events[20];
PetscLogStage stage;
PetscObjectState norm_state;
PetscInt batch_sz;
PetscInt batch_view_idx;
} LandauCtx;
Note#
The context is created and managed by DMPlexLandauCreateVelocitySpace() and is attached to the returned DM as its application context. User code normally obtains it with DMGetApplicationContext() rather than constructing it directly.
See Also#
DMPlexLandauCreateVelocitySpace(), DMPlexLandauDestroyVelocitySpace(), DMPlexLandauIFunction(), DMPlexLandauIJacobian(),
LandauStaticData, LandauDeviceType, LandauOMPTimers
Level#
intermediate
Location#
Examples#
src/ts/utils/dmplexlandau/tutorials/ex2.c
src/ts/utils/dmplexlandau/tutorials/ex1.c
Index of all LANDAU routines
Table of Contents for all manual pages
Index of all manual pages