Description
Hello everyone!
I'm trying to repeat setup with preionized foil (tilted at 45 degrees) and femtosecond pulse. Fs-pulse goes along x-axis and reflects from foil, causing some extra light radiation to generate via redistribution of electrons. Everything goes OK at the calculations phase, however there are issues with openPMD output and its formation into .h5-files.
All works fine with fields, but in the case of particles everything goes weird;
Find this issue with almost standard Probe Particles setup: everything repeats your workflow documentation except for its distribution. I formed an x-line with thickness about 1-2 x-steps. So it all goes like this:
MacroParticlesCounter reports that everything is OK with probes initialization, their number is about the size of simulation area linear size.
However, when I try to read probes dataset from this file with matlab function h5read
, there goes an error:
Error using h5readc
The HDF5 library encountered an error and produced the following stack trace information:
H5HL__hdr_deserialize bad local heap signature
Error in h5read (line 93)
[data,var_class] = h5readc(Filename,Dataset,start,count,stride);
Function h5disp()
gives me such warning:
>> h5disp("./picongpu_files/run-16nov24-try.new.1/simOutput/openPMD/simData_000005.h5","/data")
Warning: Unable to read '/e' from the file. A portion of the file may be corrupt.
> In h5info (line 125)
In matlab.io.internal.imagesci.HDF5DisplayUtils.displayHDF5 (line 34)
In h5disp (line 123)
HDF5 simData_000005.h5
Group '/data'
That's kinda weird, because when i try to write .h5 files earlier everything was ok and electrons+ions particle distributions was taken without any errors.
Could you help me with this issue? Or at least could you give me some ways to debug such issue?
I've recompiled a lot of times this probe setup even with standard EveryNthCell
density profile, but this issue's recreating over and over. Thank you!
I've installed the actual PIConGPU version for November 15th at dev
-branch, my OS version is:
Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.1.0-27-amd64
Architecture: x86-64
density.param
snippet:
struct ProbeXLineParam {
HDINLINE float_64 operator()(const floatD_64& position_SI, const float3_64& cellSize_SI) {
const float_64 x(position_SI.x() * 1e6);
const float_64 y(position_SI.y() * 1e6);
constexpr float_64 wlen(3.9);
constexpr float_64 y0(0.5*wlen);
constexpr float_64 lthk(0.003907*wlen);
constexpr float_64 yb(y0-lthk/2);
constexpr float_64 ye(y0+lthk/2);
float_64 s(0.);
if(x > 0.125*wlen && x < 6.875*wlen){
if(y > yb && y < ye) {
s = 1;
}
}
s *= float_X(s >= 0.0);
return s;
}
};
using ProbeXLine = FreeFormulaImpl<ProbeXLineParam>;
particle.param
snippet:
/** Configuration of initial in-cell particle position
*
* Here, macro-particles sit directly in lower corner of the cell.
*/
struct OnePositionParameter
{
/** Maximum number of macro-particles per cell during density profile evaluation.
*
* Determines the weighting of a macro particle as well as the number of
* macro-particles which sample the evolution of the particle distribution
* function in phase space.
*
* unit: none
*/
static constexpr uint32_t numParticlesPerCell = 1u;
/** each x, y, z in-cell position component in range [0.0, 1.0)
*
* @details in 2D the last component is ignored
*/
static constexpr auto inCellOffset = float3_X(0.5, 0.5, 0.);
};
/** Definition of OnePosition start position functor that
* places macro-particles at the initial in-cell position defined above.
*/
using OnePosition = OnePositionImpl<OnePositionParameter>;
}
speciesDefinition.param
snippet:
/*---------------------------- probes -----------------------------------------------*/
using ParticleFlagsProbes = MakeSeq_t<
particlePusher< particles::pusher::Probe >,
shape< UsedParticleShape >,
interpolation< UsedField2Particle >
>;
using ProbeX = Particles<
PMACC_CSTRING( "probe" ),
ParticleFlagsProbes,
MakeSeq_t<
position< position_pic >,
probeB,
probeE
>
>;
speciesInitialization.param
snippet:
using InitPipeline = pmacc::mp_list<
CreateDensity<densityProfiles::Tilt45FoilWithARamp, startPosition::Random, PIC_Ions>,
Manipulate<manipulators::SetOnceIonized, PIC_Ions>,
Derive<PIC_Ions, PIC_Electrons>,
CreateDensity<densityProfiles::ProbeXLine, startPosition::OnePosition, ProbeX>
>;
fileOutput.param
snippet:
using FileOutputParticles = MakeSeq_t<ProbeX,PIC_Electrons,PIC_Ions>;