Commit graph

43 commits

Author SHA1 Message Date
dff9a87f0d Implemenint injecting particles without direction
I was almost sure this was implemented in the past, but it was not working.

Now, if n = 0 or if n is not provided, particles are injected with the normal to the surface.
2025-08-08 19:27:27 +02:00
d86c8480f3 Fixed issue with some velocities. Still, at some point I need to rething all the injection thing. 2025-08-02 16:51:00 +02:00
4b040c35c3 Fixes to random variables
After reading some works and reviewing what I had, I've done some
corrections to how the randomb velicities in Maxwellian distributions
are calculated. These should be correct now.
2025-08-02 13:25:48 +02:00
78cb9a2453 No reflection of particles at injection, that should be a boundary condition 2025-08-02 10:31:06 +02:00
d1e73297eb Adjust flux when no particlesPerEdge is used
This does not affects the cases of the IEPC, but I am also doing other
stuff.
2025-07-27 18:17:01 +02:00
7f73b69dc2 Fix injection
Half-Maxwellian distribution should inject particles correctly
2025-07-27 17:14:38 +02:00
3d8d912722 Merge branch 'development' of gitlab.com:JorgeGonz/fpakc into development 2024-10-13 13:35:34 +02:00
2af10acd70 Issue with injecting current
Values were not right in 1D geometry. Fixed.
2024-10-13 13:32:57 +02:00
ac27725940 Big one...
I should've commited before, but I wanted to make things compile.

The big change is that I've added a global time step so the parameter
does not need to be passed in each function. This is useful as we are
moving towards using time profiles for boundary conditions and injection
of particles (not in this branch, but in the future and the procedure
will be quite similar)
2024-07-12 23:08:19 +02:00
bc8f205287 Clean-up!
Trying to reduce warnings and unused variables in the code. This should
not be in this branch.
2024-07-11 15:55:02 +02:00
6d62807fb4 Remove testing 'print' statements
2DCyl still seems to have some problems but waiting for simulation.
2024-07-11 14:50:14 +02:00
96c563c146 Finally, some progress
I rewrote how particles are injected. Now the particles per edge and its
weight are calculated in the initialization. There is the possibility
for the user to select the particles per edge.

TODO: Write documentation for new feature.
TODO: Test in 2DCyl
2024-07-11 14:39:56 +02:00
9d961bb85f Removing weight from edges
This parameter is no longer needed.

Also removing the cumulative sum of weights from the injection.
2024-07-10 21:57:22 +02:00
b36f9c2615 Shifting towards constant number of particles per edge
So now each edge has the same number of particles and the weight of each
particle is calculated based on the surface of each edge compared to the
total one.

Only in 2DCyl, still to extend to other geometries.

Not perfect constant density, but the issue might be the node volume.
2024-07-09 17:49:42 +02:00
626e970d82 Some progress
Fixed an issue with random integer numbers.
Cylindrical coordinates are not perfect yet:
  - Box (cylinder) with initial constant density loses particles at r =
    0
  - Injection density still low in r = 0
2024-07-06 19:14:44 +02:00
6b5ac16e4b Still working on it
No uniform density yet...
2024-07-06 10:12:03 +02:00
b972120ed5 Switching to variable particle weight
I have to change the injection of particles. Each edge will receive a
similar number of particles and their weight will change to have a
constant density based on the geometry.

Still testing.
2024-07-04 10:56:13 +02:00
4cadfe5367 Seems are a bit better
There is still less density in the axis. I don't find a reason why.
There must be a modification to the weight...
2024-06-29 22:22:10 +02:00
d86b3a3417 Implementing injection with current density
WARNING: This current denstiy will be multiplied by the reference
length, no the surface area that is being used for injection!

New units in the injection of particles 'Am2' to inject a density
current. Manual has been modified accordingly.

Reference parameters are now also printed in the case folder.
2024-03-28 09:45:46 +01:00
8d35123508 First Coulomb implementation that works
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.
2023-07-04 17:01:02 +02:00
94a4864e6a Issue with injection of particles
I was having a lot of issues trying to get quasi-neutrality with the
injection of electrons and ions. Main issue was a definition of the
direction of injection. This should be fixed now (tested in 1D).

Added a definition for Half-Maxwellian velocity distribution.

WARNING: I'm still not happy at all about the definition of the
direction of injection and the velocity definition to be in that
direction so I might change it at some point (for example take into
account the sign of each direction in the thermal part of the velocity)
2023-05-22 15:14:33 +02:00
6c34dd8a05 Forgot to remove some print statements
It is okay now. Sorry.
2023-02-03 15:11:36 +01:00
bc2c29092a Injection of particles from surfaces direction
Now, if no normal is provided to an injection in the input file, the
velocity direction of the particles is chosen to be the surface normal.

This allows to inject particles from curves, corners... without having
to provide a direction or declaring multiple injections.
2023-02-03 14:03:22 +01:00
7ce1b7a4dd Reducing overhead when no collisions are present
Particles are added to lists only if there are MCC collisions. Hopefully
this will reduce overhead when OpenMP is used and no collisions are
active.
2023-01-07 12:12:37 +01:00
2486ef6316 Reduction in pushing
Reduction in 10-20% of time spend in pushing in 2DCyl thanks to
rewriting fPsi and dPsi.
2023-01-05 16:47:13 +01:00
c7d205e4dd fix possible issue in particle injection 2022-12-12 17:57:18 +01:00
924ba4e20e Alphie grid case and issues
Output for the example ALPHIE_Grid.

Found an issue when multiple injections were used with species with
different time steps.

Modification to the way to compute the ionization boundary:
  The maximum number of ionizations is computed by eRel/eThreshold
  (relative energy / threshold of ionization)
  For each possible ionization, the probability of ionization is
  computed based on the density of neutrals, cross section and effective
  time divided by the number of maximum ionizations.
  If an ionization takes place, the ionization energy is substracted
  from the relative energy.
2022-12-11 22:39:28 +01:00
23e2fe9bae I'm dying with hay fever but I have to commit
I'm feeling awful but I have work in my desktop that I need to commit so
I can work with my laptop while I'm at the IEPC 2022 in Boston.
2022-06-10 16:07:14 +02:00
35bd61fda9 Common scatter subroutine
All subroutines of scattering particle properties to the nodes of a
volume have been converged into one in moduleMesh.
2021-04-21 23:40:58 +02:00
7dccba5906 The normal vector in an injection is now normalized to 1 and it is no
longer responsability of the user to ensure that the norm is 1.

This is a very simple fix and I do not why I did not implemented early.
2021-04-14 20:56:53 +02:00
a2631f6b78 Impliementation of a collision mesh which is independent for the mesh
used to scatter particles and compute the EM field.
2021-04-03 09:20:46 +02:00
ec128902ad The integer part%sp that referenced the species index has been
substituted for a pointer to the species.
2021-03-28 15:55:26 +02:00
2a843547b8 Ionization boundary condition fully tested.
Documentation updated properly.

3D Cartesian geometry also tested.
Documentation updated properly.

Added weighting probability in the injection of particles.
2021-03-27 11:38:18 +01:00
db6b0a2c03 Fixed an issue with reflection of particles in all geometries and also
assigning the normal vector in 2D and 3D.

3D Cartesian geometry is working properly, although it needs testing.

Still issue with ionization boundary.
2021-03-22 12:39:34 +01:00
3b01099aba Merge branch 'development' into feature/3DCart 2021-03-20 13:08:55 +01:00
8cf50cda68 First implementation of ionization boundary. Still some work to do. 2021-03-20 13:08:01 +01:00
c236c5e0e2 Fixing some issues in 3D Cartesian coordinates. Included 3D pusher.
Still there are issues linking a volume to an edge.
2021-03-15 10:00:34 +01:00
20bc1abc29 Fixed an issue in which the logical coordinates of the particle (xi)
were not being initialized and was causing particles to get stuck in
  the iteration loop.
2021-01-27 09:59:37 +01:00
5516e46ec3 Particles are injected in each iteration and pushed with tauMin when
injected. Then, particles are pushed as normal in their own time step.
2021-01-02 16:31:31 +01:00
9e0d1a7cc7 Final implementation of ionization process by electron impact.
Possibility to input initial species distributions (density, velocity
    and temperature) via an input file for each species.

New moduleRandom includes function to generate random numbers in
different ways (still uses) the implicit RANDOM_NUMBER().
2020-12-26 22:45:55 +01:00
e50cc3325b Implementation of ionization process.
Now collisions can have a different time step.

Added species name to output names as it was starting to get confusing
in Gmsh for multiple species.

Output filenames adapted to match any number of iterations.
2020-12-25 23:08:59 +01:00
37b0139b1f Implementation of different distribution functions for velocities.
Maxwellian and Diract Delta distributions have been implemented.

The input for injection of particles should be rewritten to allow more
clear input file.
2020-12-13 13:56:48 +01:00
af74205932 Files renamed and makefile make compatible with ifort. 2020-12-10 19:25:17 +01:00