Skip to content

Instantly share code, notes, and snippets.

@berceanu
Created October 27, 2022 15:13
Show Gist options
  • Save berceanu/80b4644e96f25ac2119d7ff089238719 to your computer and use it in GitHub Desktop.
Save berceanu/80b4644e96f25ac2119d7ff089238719 to your computer and use it in GitHub Desktop.
PIConGPU ionization param files
#pragma once
#include "picongpu/simulation_defines.hpp"
#include "picongpu/particles/Particles.hpp"
#include <pmacc/particles/Identifier.hpp>
#include <pmacc/meta/conversion/MakeSeq.hpp>
#include <pmacc/identifier/value_identifier.hpp>
#include <pmacc/particles/traits/FilterByFlag.hpp>
#include <pmacc/meta/String.hpp>
namespace picongpu
{
/*########################### define particle attributes #####################*/
/** describe attributes of a particle*/
using DefaultParticleAttributes = MakeSeq_t<
position<position_pic>,
momentum,
weighting
>;
/* attribute sequence for species: ions */
using IonParticleAttributes = MakeSeq_t<
DefaultParticleAttributes,
boundElectrons
>;
/*########################### end particle attributes ########################*/
/*########################### define species #################################*/
/*--------------------------- electrons --------------------------------------*/
/* ratio relative to BASE_CHARGE and BASE_MASS */
value_identifier( float_X, MassRatioElectrons, 1.0 );
value_identifier( float_X, ChargeRatioElectrons, 1.0 );
using ParticleFlagsElectrons = MakeSeq_t<
particlePusher< UsedParticlePusher >,
shape< UsedParticleShape >,
interpolation< UsedField2Particle >,
current< UsedParticleCurrentSolver >,
massRatio< MassRatioElectrons >,
chargeRatio< ChargeRatioElectrons >
>;
/* define species: electrons */
using Electrons = Particles<
PMACC_CSTRING( "e" ),
ParticleFlagsElectrons,
DefaultParticleAttributes
>;
/*--------------------------- He -------------------------------------------*/
/* ratio relative to BASE_CHARGE and BASE_MASS */
value_identifier( float_X, MassRatioHelium, 1836.152672*4 );
value_identifier( float_X, ChargeRatioHelium, -2.0 );
value_identifier( float_X, DensityRatioHelium, 98.0 / 208.0 );
using ParticleFlagsHelium = MakeSeq_t<
shape< UsedParticleShape >,
interpolation< UsedField2Particle >,
current< UsedParticleCurrentSolver >,
massRatio< MassRatioHelium >,
chargeRatio< ChargeRatioHelium >,
densityRatio< DensityRatioHelium >,
atomicNumbers< ionization::atomicNumbers::Helium_t >
>;
/* define species: ions */
using Helium = Particles<
PMACC_CSTRING( "He" ),
ParticleFlagsHelium,
IonParticleAttributes
>;
/*--------------------------- N -------------------------------------------*/
/* ratio relative to BASE_CHARGE and BASE_MASS */
value_identifier( float_X, MassRatioNitrogen, 1836.152672*14 );
value_identifier( float_X, ChargeRatioNitrogen, -7.0 );
value_identifier( float_X, DensityRatioNitrogen, 4.0 / 208.0 );
/* ratio relative to BASE_DENSITY (n_e) */
using ParticleFlagsNitrogen = MakeSeq_t<
shape< UsedParticleShape >,
interpolation< UsedField2Particle >,
current< UsedParticleCurrentSolver >,
massRatio< MassRatioNitrogen >,
chargeRatio< ChargeRatioNitrogen >,
densityRatio< DensityRatioNitrogen >,
ionizationEnergies< ionization::energies::AU::Nitrogen_t >,
effectiveNuclearCharge< ionization::effectiveNuclearCharge::Nitrogen_t >,
atomicNumbers< ionization::atomicNumbers::Nitrogen_t >,
ionizers<
MakeSeq_t<
particles::ionization::BSI< Electrons >,
particles::ionization::ADKLinPol< Electrons >
>
>
>;
/* define species: ions */
using Nitrogen = Particles<
PMACC_CSTRING( "N" ),
ParticleFlagsNitrogen,
IonParticleAttributes
>;
/*########################### end species ####################################*/
using VectorAllSpecies = MakeSeq_t<
Electrons,
Helium,
Nitrogen
>;
} //namespace picongpu
#pragma once
#include "picongpu/particles/InitFunctors.hpp"
namespace picongpu
{
namespace particles
{
/** InitPipeline define in which order species are initialized
*
* the functors are called in order (from first to last functor)
*/
using InitPipeline = bmpl::vector<
CreateDensity<
densityProfiles::Homogenous,
startPosition::Random2ppc,
Helium
>,
ManipulateDerive<
manipulators::binary::DensityWeighting,
Helium,
Nitrogen
>,
Manipulate<
manipulators::ThirdIonized,
Nitrogen
>,
Derive<
Helium,
Electrons
>,
ManipulateDerive<
manipulators::binary::UnboundElectronsTimesWeighting,
Nitrogen,
Electrons
>
>;
} // namespace particles
} // namespace picongpu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment