PICurv 0.1.0
A Parallel Particle-In-Cell Solver for Curvilinear LES
Loading...
Searching...
No Matches
Macros | Functions | Variables
particle_field_catalog.c File Reference

Persistent solver-particle-field catalog implementation. More...

#include "particle_field_catalog.h"
Include dependency graph for particle_field_catalog.c:

Go to the source code of this file.

Macros

#define PARTICLE_FIELD_ENTRY(field_id_, name_, alias1_, alias2_, components_, type_, registration_, capabilities_, default_, scatter_target_)
 

Functions

PetscErrorCode ParticleFieldGetDescriptor (ParticleFieldId field_id, const ParticleFieldDescriptor **descriptor)
 Validates and returns one immutable particle-field descriptor.
 
PetscErrorCode ParticleFieldIdFromName (const char *field_name, ParticleFieldId *field_id)
 Resolves particle field text once by searching canonical names and aliases.
 
const char * ParticleFieldName (ParticleFieldId field_id)
 Returns the canonical PETSc name without performing name lookup.
 

Variables

static const ParticleFieldDescriptor gParticleFieldCatalog [PARTICLE_FIELD_ID_COUNT]
 

Detailed Description

Persistent solver-particle-field catalog implementation.

Definition in file particle_field_catalog.c.

Macro Definition Documentation

◆ PARTICLE_FIELD_ENTRY

#define PARTICLE_FIELD_ENTRY (   field_id_,
  name_,
  alias1_,
  alias2_,
  components_,
  type_,
  registration_,
  capabilities_,
  default_,
  scatter_target_ 
)
Value:
[field_id_] = { \
field_id_, name_, alias1_, alias2_, components_, type_, registration_, capabilities_, default_, scatter_target_ \
}

Definition at line 8 of file particle_field_catalog.c.

9 { \
10 field_id_, name_, alias1_, alias2_, components_, type_, registration_, capabilities_, default_, scatter_target_ \
11 }

Function Documentation

◆ ParticleFieldGetDescriptor()

PetscErrorCode ParticleFieldGetDescriptor ( ParticleFieldId  field_id,
const ParticleFieldDescriptor **  descriptor 
)

Validates and returns one immutable particle-field descriptor.

Return immutable metadata for a valid particle field ID.

See also
ParticleFieldGetDescriptor()

Definition at line 56 of file particle_field_catalog.c.

58{
59 PetscFunctionBeginUser;
60 PetscCheck(descriptor != NULL, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL,
61 "Particle field descriptor output cannot be NULL.");
62 PetscCheck(field_id >= 0 && field_id < PARTICLE_FIELD_ID_COUNT,
63 PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE,
64 "Invalid ParticleFieldId value %d.", (int)field_id);
65 PetscCheck(gParticleFieldCatalog[field_id].id == field_id,
66 PETSC_COMM_SELF, PETSC_ERR_PLIB,
67 "Particle field catalog entry %d is not initialized consistently.", (int)field_id);
68
69 *descriptor = &gParticleFieldCatalog[field_id];
70 PetscFunctionReturn(0);
71}
static const ParticleFieldDescriptor gParticleFieldCatalog[PARTICLE_FIELD_ID_COUNT]
@ PARTICLE_FIELD_ID_COUNT
Here is the caller graph for this function:

◆ ParticleFieldIdFromName()

PetscErrorCode ParticleFieldIdFromName ( const char *  field_name,
ParticleFieldId field_id 
)

Resolves particle field text once by searching canonical names and aliases.

Resolve a canonical name or registered alias at a text-ingress boundary.

See also
ParticleFieldIdFromName()

Definition at line 77 of file particle_field_catalog.c.

78{
79 PetscFunctionBeginUser;
80 PetscCheck(field_name != NULL, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL,
81 "Particle field name cannot be NULL.");
82 PetscCheck(field_id != NULL, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL,
83 "ParticleFieldId output cannot be NULL.");
84
85 for (PetscInt index = 0; index < PARTICLE_FIELD_ID_COUNT; ++index) {
86 const ParticleFieldDescriptor *descriptor = &gParticleFieldCatalog[index];
87 PetscBool match = PETSC_FALSE;
88
89 PetscCall(PetscStrcasecmp(field_name, descriptor->canonical_name, &match));
90 if (!match && descriptor->alias_1) PetscCall(PetscStrcasecmp(field_name, descriptor->alias_1, &match));
91 if (!match && descriptor->alias_2) PetscCall(PetscStrcasecmp(field_name, descriptor->alias_2, &match));
92 if (match) {
93 *field_id = descriptor->id;
94 PetscFunctionReturn(0);
95 }
96 }
97
98 *field_id = PARTICLE_FIELD_ID_INVALID;
99 SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_UNKNOWN_TYPE,
100 "Particle field name '%s' is not registered in the persistent particle field catalog.",
101 field_name);
102}
@ PARTICLE_FIELD_ID_INVALID
Immutable metadata for one persistent particle field.
Here is the caller graph for this function:

◆ ParticleFieldName()

const char * ParticleFieldName ( ParticleFieldId  field_id)

Returns the canonical PETSc name without performing name lookup.

Return the canonical PETSc DMSwarm name for an ID.

See also
ParticleFieldName()

Definition at line 108 of file particle_field_catalog.c.

109{
110 if (field_id < 0 || field_id >= PARTICLE_FIELD_ID_COUNT) return "InvalidParticleField";
111 if (gParticleFieldCatalog[field_id].id != field_id) return "InvalidParticleField";
112 return gParticleFieldCatalog[field_id].canonical_name;
113}
Here is the caller graph for this function:

Variable Documentation

◆ gParticleFieldCatalog

const ParticleFieldDescriptor gParticleFieldCatalog[PARTICLE_FIELD_ID_COUNT]
static

Definition at line 13 of file particle_field_catalog.c.

13 {
14 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_POSITION, "position", "ParticlePosition", NULL,
17 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_VELOCITY, "velocity", "ParticleVelocity", NULL,
20 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_CELL_ID, "DMSwarm_CellID", "CellID", NULL,
23 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_WEIGHT, "weight", "ParticleWeight", NULL,
26 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_DIFFUSIVITY, "Diffusivity", NULL, NULL,
29 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_DIFFUSIVITY_GRADIENT, "DiffusivityGradient", NULL, NULL,
37 0.0, FIELD_ID_PSI),
38 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_LOCATION_STATUS, "DMSwarm_location_status", "Migration Status", NULL,
41 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_PID, "DMSwarm_pid", "pid", "Particle ID",
44 PARTICLE_FIELD_ENTRY(PARTICLE_FIELD_ID_RANK, "DMSwarm_rank", "rank", NULL,
47};
@ FIELD_ID_PSI
@ FIELD_ID_INVALID
#define PARTICLE_FIELD_ENTRY(field_id_, name_, alias1_, alias2_, components_, type_, registration_, capabilities_, default_, scatter_target_)
@ PARTICLE_FIELD_ID_LOCATION_STATUS
@ PARTICLE_FIELD_ID_WEIGHT
@ PARTICLE_FIELD_ID_POSITION
@ PARTICLE_FIELD_ID_PID
@ PARTICLE_FIELD_ID_CELL_ID
@ PARTICLE_FIELD_ID_PSI
@ PARTICLE_FIELD_ID_RANK
@ PARTICLE_FIELD_ID_DIFFUSIVITY_GRADIENT
@ PARTICLE_FIELD_ID_DIFFUSIVITY
@ PARTICLE_FIELD_ID_VELOCITY
@ PARTICLE_FIELD_CAPABILITY_MODEL_UPDATE
@ PARTICLE_FIELD_CAPABILITY_DEFAULT_INITIALIZE
@ PARTICLE_FIELD_CAPABILITY_EULERIAN_SCATTER
@ PARTICLE_FIELD_CAPABILITY_NONE
@ PARTICLE_FIELD_REGISTRATION_PETSC
@ PARTICLE_FIELD_REGISTRATION_PICURV