Skip to content

adam_prism_pic_object ​

ADAM, PRISM Particle-in-Cell class definition, CPU backend.

Source: src/app/prism/common/adam_prism_pic_object.F90

Dependencies

Contents ​

Variables ​

NameTypeAttributesDescription
INI_SECTION_NAMEcharacter(len=3)parameterINI file section name for PIC configuration.
PLASMA_TYPE_PROBLEMcharacter(len=6)parameterAnalyzing physical problem involving the presence of
COHERENT_INITIALIZATIONcharacter(len=8)parameterField initialization through elliptic solver with
SINGLE_PARTICLE_TYPE_PROBLEMcharacter(len=15)parameterAnalyzing physical problem involving the
NGP_WEIGHTING_MODELcharacter(len=3)parameterNGP weighting model.
CIC_WEIGHTING_MODELcharacter(len=3)parameterCIC weighting model.
TSC_WEIGHTING_MODELcharacter(len=3)parameterTSC weighting model.
CUBIC_WEIGHTING_MODELcharacter(len=5)parametercubic order weighting model.
QUARTIC_WEIGHTING_MODELcharacter(len=7)parameterquartic order weighting model.
QUINTIC_WEIGHTING_MODELcharacter(len=7)parameterquintic order weighting model.
SEXTIC_WEIGHTING_MODELcharacter(len=6)parameterSextic B-spline weighting.
GAUSSIAN_WEIGHTING_MODELcharacter(len=8)parameterGaussian weighting model.
ZEROD_FIELDS_WEIGHTING_MODELcharacter(len=2)parameter0D field weighting.
ONED_FIELDS_WEIGHTING_MODELcharacter(len=2)parameter1D field weighting.
TWOD_FIELDS_WEIGHTING_MODELcharacter(len=2)parameter2D field weighting.
THREED_FIELDS_WEIGHTING_MODELcharacter(len=2)parameter3D field weighting.
FOURD_FIELDS_WEIGHTING_MODELcharacter(len=2)parameter4D field weighting.
FIVED_FIELDS_WEIGHTING_MODELcharacter(len=2)parameter5D field weighting.
SIXD_FIELDS_WEIGHTING_MODELcharacter(len=2)parameterSextic field weighting.
NUM_SCHEME_TIME_PIC_LEAPFROGcharacter(len=8)parameterLeapfrog numerical scheme for time operator.
NUM_SCHEME_TIME_PIC_RUNGE_KUTTAcharacter(len=11)parameterRunge-Kutta numerical scheme for time operator.
UNIFORM_DOMAINcharacter(len=14)parameter
UNIFORM_CILINDERcharacter(len=16)parameter
UNIFORM_CELLcharacter(len=12)parameter
CONSERVING_CURRENT_WEIGHTING_MODELcharacter(len=10)parameterCharge-conserving current model.
DIRECT_CURRENT_CONSERVING_SOLVERcharacter(len=6)parameterDirect line-solve conserving current.
ESIRKEPOV_CURRENT_CONSERVING_SOLVERcharacter(len=9)parameterEsirkepov particle current.
ESIRKEPOV_MODIFIED_CURRENT_CONSERVING_SOLVERcharacter(len=11)parameterMatched local current family

Derived Types ​

prism_pic_object ​

Components ​

NameTypeAttributesDescription
plasma_densityreal(kind=R8P)Plasma density
neutral_fractionreal(kind=R8P)Neutral fraction
cilinder_lengthreal(kind=R8P)
cilinder_radiusreal(kind=R8P)
cilinder_centerreal(kind=R8P)
cilinder_axischaracter(len=1)
sigmareal(kind=R8P)Standard deviation for a gaussian weighting
cutoff_sigmareal(kind=R8P)Gaussian cutoff.
gaussian_support_cellsinteger(kind=I4P)Gaussian support radius; negative selects automatic.
particle_numberinteger(kind=I4P)Number of particles owned by this rank.
particle_number_globalinteger(kind=I4P)Total number of particles (all ranks).
n_ionsinteger(kind=I4P)Total ions number
n_electronsinteger(kind=I4P)Total electrons number
n_neutralsinteger(kind=I4P)Total neutrals number
neighbour_listinteger(kind=I4P)allocatableParticle grid positions array.
problem_typecharacter(len=99)Type of problem analyzed
plasma_domaincharacter(len=99)Domain of plasma at t0
initializationcharacter(len=99)Field initialization solver.
elliptic_correctionlogicalelliptic correction for the initial fields
filter_depositionlogicalBinomial filter for deposition and gather weights.
particle_weighting_modelcharacter(len=99)Particle weighting model.
current_weighting_modelcharacter(len=99)Current weighting model.
field_weighting_modelcharacter(len=99)Field weighting model.
esirkepov_tail_cleanuplogicalRemove small current leakage outside each particle's support.
current_conserving_solvercharacter(len=99)Conserving current solver.
esirkepov_qinteger(kind=I4P)Q filter coefficients of esirkepov_Q (2,5,6,8,10), 0 otherwise.
scheme_timecharacter(len=99)Numerical scheme for time operator [runge_kutta, leapfrog,...].
particle_weightingprocedure(particle_weighting_interface)pass(self), pointerParticle weighting.
current_weightingprocedure(current_weighting_interface)pass(self), pointerCurrent weighting.
field_weightingprocedure(field_weighting_interface)pass(self), pointerfield weighting.

Type-Bound Procedures ​

NameAttributesDescription
descriptionpass(self)Return pretty-printed object description.
conserving_solver_namepass(self)Input name of the conserving current solver.
check_esirkepov_q_orderpass(self)Check the esirkepov_Q filter against the FD order.
initializepass(self)Initialize IC.
load_from_filepass(self)Load config from file.
particle_cartesian_grid_indexpass(self)Compute the grid index corresponding to a particle position.
halo_margin_cellspass(self)Cells a particle may lie outside its block interior.
distribute_particlespass(self)Keep the injected particles owned by this rank.
exchange_particlespass(self)Hand departing particles to their owner ranks.
migrate_particlespass(self)Migrate particles between ranks (host arrays).
set_gaussian_support_cellspass(self)Automatic Gaussian support radius on the final grid.
stencil_radius_cellspass(self)Max cells reached by deposit/gather stencils beyond the particle cell.
CIC_charge_weightingpass(self)Cloud-in-Cell weighting of particle quantities to the grid.
NGP_charge_weightingpass(self)Nearest Grid Point weighting of particle quantities to the grid.
TSC_charge_weightingpass(self)Triangular Shaped Cloud weighting of particle quantities to the grid.
cubic_charge_weightingpass(self)3rd order weighting of particle quantities to the grid.
quartic_charge_weightingpass(self)4th order weighting of particle quantities to the grid.
sextic_charge_weightingpass(self)
sextic_current_weightingpass(self)
quintic_charge_weightingpass(self)5th order weighting of particle quantities to the grid.
Gaussian_charge_weightingpass(self)Gaussian Shaped Cloud weighting of particle quantities to the grid.
CIC_current_weightingpass(self)Cloud-in-Cell weighting of particle quantities to the grid.
NGP_current_weightingpass(self)Nearest Grid Point weighting of particle quantities to the grid.
TSC_current_weightingpass(self)Triangular Shaped Cloud weighting of particle quantities to the grid.
Gaussian_current_weightingpass(self)Gaussian Shaped Cloud weighting of particle quantities to the grid.
zeroD_field_weightingpass(self)
oneD_field_weightingpass(self)
twoD_field_weightingpass(self)
threeD_field_weightingpass(self)
fourD_field_weightingpass(self)
sixD_field_weightingpass(self)
fiveD_field_weightingpass(self)
Gaussian_field_weightingpass(self)
bspline_field_weightingpass(self)

Interfaces ​

particle_weighting_interface ​

current_weighting_interface ​

field_weighting_interface ​

Subroutines ​

check_esirkepov_q_order ​

The matched current needs D = delta A with P = A Q: esirkepov_Q2 pairs with FD2 (A2 = [1,1]/2), esirkepov_Q5, Q6, Q8 and Q10 with FD6 (A6 = [1,-8,37,37,-8,1]/60). No-op for the other solvers.

fortran
subroutine check_esirkepov_q_order(self, fdv_order)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inPIC object.
fdv_orderinteger(kind=I4P)inFD order.

Call graph

initialize ​

Initialize PIC.

fortran
subroutine initialize(self, field, grid, file_parameters, physics)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPic object.
fieldtype(field_object)inField (sibling realm component, threaded in).
gridtype(grid_object)inGrid (sibling realm component, threaded in).
file_parameterstype(file_ini)inSimulation parameters ini file handler.
physicstype(prism_physics_object)in

Call graph

load_from_file ​

Load PIC configuration from file.

fortran
subroutine load_from_file(self, file_parameters, go_on_fail)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
file_parameterstype(file_ini)inFile handler.
go_on_faillogicalinoptionalGo on if load fails.

Call graph

particle_cartesian_grid_index ​

Compute the grid index corresponding to a particle position. Good for cartesian grids only.

A particle is first searched in the interior cells of the local blocks (ownership). With several ranks a particle may leave the blocks of its rank within a time step (RK stages, end-of-step deposit before the migration): it is then located in the ghost cells of a local block, at most halo_margin_cells() cells outside the interior, so that its stencil stays within the ghosts (deposits are folded back by reduce_ghost_local/mpi, gathers read exchanged ghosts). With owned_only the halo search is skipped and a non-owned particle gets a zero row, without errors (injection, migration). A particle outside the domain, or beyond the halo of every local block, stops the run.

fortran
subroutine particle_cartesian_grid_index(self, field, grid, q_pic, owned_only)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in)
q_picreal(kind=R8P)inPIC variables.
owned_onlylogicalinoptionalLocate owned particles only, no halo search.

Call graph

distribute_particles ​

Keep only the particles owned by the local blocks: the injection fills the whole set on every rank (same sequence), each rank keeps its own ones, in injection order, and the local count becomes particle_number. Every particle must be owned by exactly one rank (checked globally). With one rank nothing moves.

fortran
subroutine distribute_particles(self, field, grid, q_pic)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in)
q_picreal(kind=R8P)inoutPIC variables.

Call graph

exchange_particles ​

Hand the departing particles (no longer owned by this rank) to the ranks that own them: every rank receives all the departing particles (MPI_Allgatherv) and keeps the ones owned by its local blocks, in rank order. Every departing particle must be claimed by exactly one rank (checked globally; particles do not leave the domain yet).

fortran
subroutine exchange_particles(self, field, grid, departing, arrived, n_arrived)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in)
departingreal(kind=R8P)inDeparting particles [variable, particle].
arrivedreal(kind=R8P)inoutallocatableArrived particles owned by this rank [variable, particle].
n_arrivedinteger(kind=I4P)outNumber of arrived particles.

Call graph

migrate_particles ​

Hand the particles that left the local blocks to the owner ranks (end of a time step, host arrays). The departed slots are filled by the last particles (stable for the particles that stay before the first hole), the arrived ones are appended, then the particles are located again. Collective; with one rank it is a no-op.

fortran
subroutine migrate_particles(self, field, grid, q_pic)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in)
q_picreal(kind=R8P)inoutPIC variables.

Call graph

set_gaussian_support_cells ​

Automatic Gaussian support radius (gaussian_support_cells < 0 in input): ceiling(cutoff_sigma*sigma/dx_min) + 1 over all blocks of all ranks. To be called once the grid is final (after the uniform refinement): on the root blocks the support would be underestimated by 2**iu_ref_levels.

fortran
subroutine set_gaussian_support_cells(self, field)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inField (sibling realm component, threaded in).

Call graph

NGP_charge_weighting ​

fortran
subroutine NGP_charge_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

CIC_charge_weighting ​

Cloud-in-Cell weighting of particle quantities to the grid.

fortran
subroutine CIC_charge_weighting(self, field, grid, q, q_PIC, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_PICreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

TSC_charge_weighting ​

fortran
subroutine TSC_charge_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

cubic_charge_weighting ​

fortran
subroutine cubic_charge_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inCharge variable index.

Call graph

quartic_charge_weighting ​

fortran
subroutine quartic_charge_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inCharge variable index.

Call graph

quintic_charge_weighting ​

fortran
subroutine quintic_charge_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inCharge variable index.

Call graph

sextic_charge_weighting ​

fortran
subroutine sextic_charge_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inCharge variable index.

Call graph

bspline_charge_weighting ​

Deposit particle charge density with the fixed (order+1)^3 B-spline support.

fortran
subroutine bspline_charge_weighting(self, field, grid, q, q_pic, nv, order)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
qreal(kind=R8P)inout
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in
orderinteger(kind=I4P)in

Call graph

bspline_closed_weights ​

Close the unfiltered B-spline weights of one stencil to sum to 1 by changing only the largest one. The raw sum misses 1 by the roundoff of the cell-center spacing (x_cell is not exactly equispaced in floating point). That residual depends on the stencil: for a C0 shape (CIC) it jumps when the stencil changes, so the Esirkepov line sums no longer vanish and a spurious current runs to the domain boundary. Closing every stencil removes it.

Attributes: pure

fortran
subroutine bspline_closed_weights(order, x_p, x_cell, dx, w, pu_error)

Arguments

NameTypeIntentAttributesDescription
orderinteger(kind=I4P)inB-spline order (0=NGP ... 6=sextic).
x_preal(kind=R8P)inParticle coordinate.
x_cellreal(kind=R8P)inCell centers of the stencil.
dxreal(kind=R8P)inCell size.
wreal(kind=R8P)outClosed weights of the stencil.
pu_errorreal(kind=R8P)outoptional|raw sum - 1| before the closure.

Call graph

Gaussian_charge_weighting ​

Gaussian weighting of particle charge density to the grid.

fortran
subroutine Gaussian_charge_weighting(self, field, grid, q, q_PIC, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid object.
qreal(kind=R8P)inoutField variables.
q_PICreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inCharge-density variable index.

Call graph

NGP_current_weighting ​

fortran
subroutine NGP_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

CIC_current_weighting ​

Cloud-in-Cell weighting of particle quantities to the grid.

fortran
subroutine CIC_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

TSC_current_weighting ​

Triangular-Shaped-Cloud weighting of particle current density to the grid.

fortran
subroutine TSC_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

cubic_current_weighting ​

Cubic B-spline weighting of particle current density to the grid.

fortran
subroutine cubic_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

quartic_current_weighting ​

Quartic B-spline weighting of particle current density to the grid.

fortran
subroutine quartic_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

quintic_current_weighting ​

Quintic B-spline weighting of particle current density to the grid.

fortran
subroutine quintic_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

sextic_current_weighting ​

Sextic B-spline weighting of particle current density to the grid.

fortran
subroutine sextic_current_weighting(self, field, grid, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutExternal fields.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid (sibling realm component, threaded in).
qreal(kind=R8P)inoutField variables.
q_picreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

bspline_current_weighting ​

Deposit particle current density with B-spline support and optional binomial filtering.

fortran
subroutine bspline_current_weighting(self, field, grid, q, q_pic, nv, order)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
qreal(kind=R8P)inout
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in
orderinteger(kind=I4P)in

Call graph

Gaussian_current_weighting ​

Gaussian weighting of particle current density to the grid.

fortran
subroutine Gaussian_current_weighting(self, field, grid, q, q_PIC, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid object.
qreal(kind=R8P)inoutField variables.
q_PICreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inIndex following Jx, Jy, Jz.

Call graph

zeroD_field_weighting ​

Zeroth-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine zeroD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

oneD_field_weighting ​

First-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine oneD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

twoD_field_weighting ​

Second-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine twoD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

threeD_field_weighting ​

Third-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine threeD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

fourD_field_weighting ​

Fourth-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine fourD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

fiveD_field_weighting ​

Fifth-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine fiveD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

sixD_field_weighting ​

Sixth-order spatial interpolation of cell-centered fields to particle locations.

fortran
subroutine sixD_field_weighting(self, field, grid, pic_fields, q, q_pic, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in

Call graph

Gaussian_field_weighting ​

Gaussian interpolation of cell-centered fields to particle locations.

fortran
subroutine Gaussian_field_weighting(self, field, grid, pic_fields, q, q_PIC, nv)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inoutPIC object.
fieldtype(field_object)inoutThe field.
gridtype(grid_object)inGrid object.
pic_fieldsreal(kind=R8P)inoutFields at particle locations.
qreal(kind=R8P)inField variables.
q_PICreal(kind=R8P)inPIC variables.
nvinteger(kind=I4P)inNumber of variables.

Call graph

bspline_field_weighting ​

B-spline interpolation of cell-centered fields to particle locations.

fortran
subroutine bspline_field_weighting(self, field, grid, pic_fields, q, q_pic, nv, order)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inout
fieldtype(field_object)inout
gridtype(grid_object)in
pic_fieldsreal(kind=R8P)inout
qreal(kind=R8P)in
q_picreal(kind=R8P)in
nvinteger(kind=I4P)in
orderinteger(kind=I4P)in

Call graph

set_bspline_stencil ​

Compute the one-dimensional B-spline stencil.

Attributes: pure

fortran
subroutine set_bspline_stencil(order, x_p, x_c, i_p, i_min, i_max)

Arguments

NameTypeIntentAttributesDescription
orderinteger(kind=I4P)in
x_preal(kind=R8P)in
x_creal(kind=R8P)in
i_pinteger(kind=I4P)in
i_mininteger(kind=I4P)out
i_maxinteger(kind=I4P)out

Call graph

compaction_moves ​

Moves that compact the particle arrays after the departure of the particles listed (ascending) in departed: the holes within the first particle_number-size(departed) slots are filled, in order, by the particles that stay among the last size(departed) slots. Deterministic, and the particles before the first hole do not move.

Attributes: pure

fortran
subroutine compaction_moves(particle_number, departed, moves, n_moves)

Arguments

NameTypeIntentAttributesDescription
particle_numberinteger(kind=I4P)inParticles before the departure.
departedinteger(kind=I4P)inDeparting particles, ascending.
movesinteger(kind=I4P)outallocatableMoves [from/to, move].
n_movesinteger(kind=I4P)outNumber of moves.

Call graph

Functions ​

conserving_solver_name ​

Input name of the conserving current solver: esirkepov_Q<N> for the matched-current family, the stored tag otherwise.

Returns: character(len=:)

fortran
function conserving_solver_name(self) result(name)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inPIC object.

Call graph

description ​

Return a pretty-formatted object description.

Returns: character(len=:)

fortran
function description(self) result(desc)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inExternal fields.

Call graph

halo_margin_cells ​

Cells a particle may lie outside the interior of a local block while its deposit/gather stencil stays within the ghosts.

Returns: integer(kind=I4P)

fortran
function halo_margin_cells(self, ngc) result(m)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inPIC object.
ngcinteger(kind=I4P)inGhost cells number.

Call graph

stencil_radius_cells ​

Max number of cells, beyond the particle cell, reached by the configured charge, current and field stencils. B-spline of order o (NGP=0 ... sextic=6, field nD = order n): (o+1)/2 cells; Gaussian: gaussian_support_cells; binomial filter: one more cell. A conserving current deposits with the particle shape.

Returns: integer(kind=I4P)

fortran
function stencil_radius_cells(self) result(radius)

Arguments

NameTypeIntentAttributesDescription
selfclass(prism_pic_object)inPIC object.

Call graph

effective_bspline_weight ​

Return the optionally binomial-filtered one-dimensional B-spline weight.

Attributes: pure

Returns: real(kind=R8P)

fortran
function effective_bspline_weight(order, r, filter) result(weight)

Arguments

NameTypeIntentAttributesDescription
orderinteger(kind=I4P)in
rreal(kind=R8P)in
filterlogicalin

Call graph

gaussian_weight ​

Return an unnormalized one-dimensional Gaussian weight with compact cutoff.

Attributes: pure

Returns: real(kind=R8P)

fortran
function gaussian_weight(r, cutoff_limit) result(weight)

Arguments

NameTypeIntentAttributesDescription
rreal(kind=R8P)in
cutoff_limitreal(kind=R8P)in

Call graph

effective_gaussian_weight ​

Return the optionally binomial-filtered one-dimensional Gaussian weight.

Attributes: pure

Returns: real(kind=R8P)

fortran
function effective_gaussian_weight(r, shift, cutoff_limit, filter) result(weight)

Arguments

NameTypeIntentAttributesDescription
rreal(kind=R8P)in
shiftreal(kind=R8P)in
cutoff_limitreal(kind=R8P)in
filterlogicalin

Call graph

bspline_weight ​

Return the centered cardinal B-spline weight.

Attributes: pure

Returns: real(kind=R8P)

fortran
function bspline_weight(order, r) result(weight)

Arguments

NameTypeIntentAttributesDescription
orderinteger(kind=I4P)in
rreal(kind=R8P)in

Call graph