- field_componentsA list of 3 variables which represent the 3 components of the force field acting on particles
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:A list of 3 variables which represent the 3 components of the force field acting on particles
LeapFrogStepper
Particle Stepper which implements a simple leap frog update where the velocity and position are updated with a 1/2 dt offset.
When charged particles are only subjected to an electric field, a standard particle stepping scheme called the leapfrog scheme can be used to accurately calculate the motion of these particles through the field. This scheme can reproduce particle paths exactly, to machine precision, in the case of a constant uniform electric field. More information about this particle stepping scheme can be found in Birdsall and Langdon (1991).
On the first step that a particle takes the particle velocity is updated with a 1/2 time step as
where is the initial particle velocity, , and are the particles charge and mass, is the initial force field the particle is subject to, and is the particle velocity 1/2 of a time step after the simulation start time.
The particle position is then updated with a full time step as
where is the particles' position after the first time step has been taken and is the initial position of the particle. On the step after the initial step both the particles' velocity and postition are updated with a full time step
where is the particles' velocity at a time which is 1/2 of a time step after the time at time step , and is the particles' velocity at a time which is 1/2 of a time step before the time at time step . Then the new particle position is updated using the velocity from 1/2 step in the future.
where is the particles position at the time corresponding to the time step and is the particles position on the previous time step.
The implementation of the leap frog scheme was verified using single particle motion tests: parallel acceleration in an electric field ((test/tests/userobjects/particle_stepper/leapfrog_stepper/parallel_acceleration.i)), and projectile motion ((test/tests/userobjects/particle_stepper/leapfrog_stepper/projectile_motion.i)).
Example Input Syntax
[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
[stepper]
type = LeapFrogStepper<<<{"description": "Particle Stepper which implements a simple leap frog update where the velocity and position are updated with a 1/2 dt offset.", "href": "LeapFrogStepper.html"}>>>
field_components<<<{"description": "A list of 3 variables which represent the 3 components of the force field acting on particles"}>>> = 'Ex Ey Ez'
[]
[initializer]
type = TestPlacedParticleInitializer
start_points = '0 0 0'
start_velocities = '10 10 0'
charge = 1
weight = 1
[]
[study]
type = TestInitializedPICStudy
stepper = stepper
initializer = initializer
use_custom_rayids = false
always_cache_traces = true
data_on_cache_traces = true
execute_on = 'TIMESTEP_BEGIN'
[]
[]
(test/tests/userobjects/particle_stepper/leapfrog_stepper/projectile_motion.i)Input Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
Execution Scheduling Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
References
- Charles K. Birdsall and A. Bruce Langdon.
Plasma physics via computer simulation.
Adam Hilger, 1991.[BibTeX]