Skip to content

Commit 0614626

Browse files
committed
ParticleToyX: New thorn
1 parent 5b312c5 commit 0614626

File tree

8 files changed

+141
-0
lines changed

8 files changed

+141
-0
lines changed

ParticleToyX/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Cactus Code Thorn ParticleToyX
2+
Author(s) : Erik Schnetter <[email protected]>
3+
Maintainer(s): Erik Schnetter <[email protected]>
4+
Licence : LGPL
5+
--------------------------------------------------------------------------
6+
7+
1. Purpose
8+
9+
Example thorn for ParticlesX infrastructure.

ParticleToyX/configuration.ccl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# ParticleToyX
2+
3+
REQUIRES Arith

ParticleToyX/interface.ccl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# ParticleToyX
2+
3+
IMPLEMENTS: ParticleToyX
4+
5+
USES INCLUDE HEADER: particles.hxx
6+
USES INCLUDE HEADER: vect.hxx

ParticleToyX/par/particlesx.par

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
ActiveThorns = "
2+
CarpetX
3+
IOUtil
4+
ParticleToyX
5+
ParticlesX
6+
"
7+
8+
Cactus::cctk_show_schedule = no
9+
Cactus::presync_mode = "mixed-error"
10+
11+
CarpetX::poison_undefined_values = yes
12+
CarpetX::verbose = yes
13+
14+
CarpetX::ncells_x = 32
15+
CarpetX::ncells_y = 32
16+
CarpetX::ncells_z = 32
17+
18+
ParticlesX::num_particles = 10
19+
20+
Cactus::cctk_itlast = 10
21+
22+
IO::out_dir = $parfile
23+
ParticlesX::out_every = 1

ParticleToyX/param.ccl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# ParticleToyX

ParticleToyX/schedule.ccl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# ParticleToyX
2+
3+
SCHEDULE ParticleToyX_init AT initial
4+
{
5+
LANG: C
6+
OPTIONS: global
7+
} "Initialize particles"
8+
9+
SCHEDULE ParticleToyX_accel AT poststep
10+
{
11+
LANG: C
12+
OPTIONS: global
13+
} "Calculate particle acceleration"
14+
15+
SCHEDULE ParticleToyX_evolve AT evol AFTER ODESolvers_Solve
16+
{
17+
LANG: C
18+
OPTIONS: global
19+
} "Evolve particles"

ParticleToyX/src/make.code.defn

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Main make.code.defn file for thorn ParticlesX
2+
3+
# Source files in this directory
4+
SRCS = particletoyx.cxx
5+
6+
# Subdirectories containing source files
7+
SUBDIRS =

ParticleToyX/src/particletoyx.cxx

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include "particles.hxx"
2+
3+
#include <vect.hxx>
4+
5+
#include <cctk.h>
6+
#include <cctk_Arguments.h>
7+
#include <cctk_Parameters.h>
8+
9+
#include <cstdlib>
10+
#include <vector>
11+
12+
namespace ParticleToyX {
13+
using namespace Arith;
14+
using namespace ParticlesX;
15+
16+
extern "C" void ParticleToyX_init(CCTK_ARGUMENTS) {
17+
DECLARE_CCTK_ARGUMENTS_ParticleToyX_init;
18+
DECLARE_CCTK_PARAMETERS;
19+
20+
const vect<CCTK_REAL, dim> xmin{-1, -1, -1};
21+
const vect<CCTK_REAL, dim> xmax{+1, +1, +1};
22+
23+
Particles &particles = get_particles();
24+
const int nparticles = particles.size();
25+
26+
// This is a random number
27+
srand(0xdfcd7e49);
28+
29+
for (int n = 0; n < nparticles; ++n) {
30+
const vect<CCTK_REAL, dim> r{
31+
rand() / CCTK_REAL(RAND_MAX),
32+
rand() / CCTK_REAL(RAND_MAX),
33+
rand() / CCTK_REAL(RAND_MAX),
34+
};
35+
const vect<CCTK_REAL, dim> pos = xmin + r * (xmax - xmin);
36+
const Particle p{CCTK_REAL(n), 0, pos, {0, 0, 0}, {0, 0, 0}};
37+
particles.set(p, n);
38+
}
39+
}
40+
41+
extern "C" void ParticleToyX_accel(CCTK_ARGUMENTS) {
42+
DECLARE_CCTK_ARGUMENTS_ParticleToyX_accel;
43+
DECLARE_CCTK_PARAMETERS;
44+
45+
Particles &particles = get_particles();
46+
const int nparticles = particles.size();
47+
48+
for (int n = 0; n < nparticles; ++n) {
49+
Particle p = particles.get(n);
50+
p.acc = -p.pos;
51+
particles.set(p, n);
52+
}
53+
}
54+
55+
extern "C" void ParticleToyX_evolve(CCTK_ARGUMENTS) {
56+
DECLARE_CCTK_ARGUMENTS_ParticleToyX_evolve;
57+
DECLARE_CCTK_PARAMETERS;
58+
59+
const CCTK_REAL dt = CCTK_DELTA_TIME;
60+
61+
Particles &particles = get_particles();
62+
const int nparticles = particles.size();
63+
64+
for (int n = 0; n < nparticles; ++n) {
65+
Particle p = particles.get(n);
66+
p.tau += dt;
67+
p.pos += dt * p.vel;
68+
p.vel += dt * p.acc;
69+
particles.set(p, n);
70+
}
71+
}
72+
73+
} // namespace ParticleToyX

0 commit comments

Comments
 (0)