Now per each Coulomb collision process there is the possibility to do
sub-steps. This helps in improving accuracy without reducing the time
step of the problem.
There was an issue with the calculation of theta and phi for the
rotation from W to C. This was causing some velocities not being
correct.
Now the angles are properly computed. Still unsure about the e-i
collisions as they seem to be quite small. Probably a numerical issue
with the mass ratios still exists.
The code is still not fully conservative in intra-species collisions
(small error) but at least now is working.
I have to test species with different weight.
I have to implement a fully conservation for intra-species.
I had to go back to sherlock2008montecarlo to properly understand the
change in frame of reference and how to translate that into the code.
The language there is clear and understandable for a dumb person like
me.
Now I have a Coulomb linear operator that at least works.
However, still not fully 100% conservative, need to fix this with a
correction for intra-species collisions.
I skip gym today because I was unable to focus on other things than
this.
I was having tones of issues with the previous implementation. I think
the problem was the velocity vector and how it was returning to the
normal reference frame.
I hope this new implementation works better.
I found no way to ensure conservation in the linear Coulomb operator.
Thus, now two collisions have to be declared if sp_i /= sp_j: collision
ij and collision ji.
This does not conserve energy so please use under your own risk, like
everything else.
Still, I think something is wrong with this implementation and I'm
really tired.
After fixing all possible divisions by zero I was able to find in the
Coulomb collision I think that this is a first working implementation of
a Coulomb operator based on moments.
Still to test a few things, modify the manual but I would say that I'm
satisfiyed right now. This operator won't be used that often but maybe
improving efficiency is still needed.
In the future a binary operator is required to be able to study cases
out of Maxwellian equilibrium.
When the relative velocity between a charged particle and the background
for Coulomb collisions (W in the code) was low, there was a
segmentation fault. This is fixed now as if the norm of the relative
velocity (normW) in the code is too low, no collision is applied.
I am doing a trick in which I ensure that energy is conserved for
Coulomb collisions. This was not happening and what an issue for
different mass ratios. Still, this can cause an issue on getting the
right relaxation rates, still necessary to check it.
First attemp for Coulomb collisions based on the moments distribtuions.
Still the method is not done and far from being complete but input
options and basic math are implemented.
Probes are now written at the 0 iteration.
Additionally, and this shouldn't be done, some small changes to the quad
elements. This should be done in a separate commit, but I'm lazy.
Due to a high convergence value (1.0e-2) in phy2logQuad (variable conv),
particles were being stuck in some elements, reaching a segmentation
fault. The new limit (1.0e-4) should avoid this.
Finalysing first step of performance improvement focusing on reducing
iteration CPU time by improving calculation of basic element functions,
which took a lot of the CPU time
I noticed that phy2logquad had a lot of overhead. Trying to reducing it
by simplifying calls to fPsi, dPsi and such.
The function for fPsi has been made so no memory is allocated and works
under the assumption that the input array has the right size (1:numNodes)
Merging branches and fixing a number of important issues:
- Initial particles were not being assigned to the list of particles.
- List of particles was being erased every iteration, even if species
was not pushed.
These caused issues with the calculation of collisions when a species
was frozen.
Now, things should work properly. All particles are properly added to
the volume list and the list is erased ONLY if the species has been
updated.
I hope that collisions are now properly accounted for per species pair.
Now the number of collisions is calculated per species pair. This allows
that the randomly particles selected for collisions do not have
collisions assigned.
First implementation of Electromagnetic pusher.
Some testing is still required.
Documentation needs to be upgraded to match the changes in this branch.
The geometry and push structure has been reworked to allow eassy adding
new pushers.
Documentation not updated yet.
Baseline for merging Cartesian pushers into one.
A new option has been added in which MCC are computed with its own time
step.
If no time is provided, then the minimum time step of the simulation is
employed.
Fixed an issue in which the position in triangular an thetrahedron
elements were not correctly being computed.
Other minor issues fixed:
- Units in input file now do not use '/'.
- Collisions accuratly conserve momentum.
- Minor improvements in mass calculation in collisions.
Implementation of the 0D grid to test collisional processes.
An OMP_LOCK was added to the nodes to properly write perform the
scattering (it is weird that multiple threads work in the same node at
the same time, but in 0D happens everytime).
Added a new case to test the 0D geometry.
User Manual updated with the new options.
easy to use a file from a previous run without processing it into a
plain text file.
Although the previous method presented some updates for 1D small cases,
this is quite easy to do with any type of simulations and, in the
future, with different mesh formats.
Documentation updated properly.
3D Cartesian geometry also tested.
Documentation updated properly.
Added weighting probability in the injection of particles.
Unification of boundary conditions into one file.
Some changes to input file for reference cases. This should have been
done in another branch but I wanto to commit to save progress and I
don't want to deal with tswitching branches right now, I'm very busy
watching Futurama.