Skip to content

ParticleToyX: New thorn #57

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions ParticleToyX/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Cactus Code Thorn ParticleToyX
Author(s) : Erik Schnetter <[email protected]>
Maintainer(s): Erik Schnetter <[email protected]>
Licence : LGPL
--------------------------------------------------------------------------

1. Purpose

Example thorn for ParticlesX infrastructure.
3 changes: 3 additions & 0 deletions ParticleToyX/configuration.ccl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# ParticleToyX

REQUIRES Arith
6 changes: 6 additions & 0 deletions ParticleToyX/interface.ccl
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# ParticleToyX

IMPLEMENTS: ParticleToyX

USES INCLUDE HEADER: particles.hxx
USES INCLUDE HEADER: vect.hxx
23 changes: 23 additions & 0 deletions ParticleToyX/par/particlesx.par
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
ActiveThorns = "
CarpetX
IOUtil
ParticleToyX
ParticlesX
"

Cactus::cctk_show_schedule = no
Cactus::presync_mode = "mixed-error"

CarpetX::poison_undefined_values = yes
CarpetX::verbose = yes

CarpetX::ncells_x = 32
CarpetX::ncells_y = 32
CarpetX::ncells_z = 32

ParticlesX::num_particles = 10

Cactus::cctk_itlast = 10

IO::out_dir = $parfile
ParticlesX::out_every = 1
1 change: 1 addition & 0 deletions ParticleToyX/param.ccl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# ParticleToyX
19 changes: 19 additions & 0 deletions ParticleToyX/schedule.ccl
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# ParticleToyX

SCHEDULE ParticleToyX_init AT initial
{
LANG: C
OPTIONS: global
} "Initialize particles"

SCHEDULE ParticleToyX_accel AT poststep
{
LANG: C
OPTIONS: global
} "Calculate particle acceleration"

SCHEDULE ParticleToyX_evolve AT evol AFTER ODESolvers_Solve
{
LANG: C
OPTIONS: global
} "Evolve particles"
7 changes: 7 additions & 0 deletions ParticleToyX/src/make.code.defn
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Main make.code.defn file for thorn ParticlesX

# Source files in this directory
SRCS = particletoyx.cxx

# Subdirectories containing source files
SUBDIRS =
73 changes: 73 additions & 0 deletions ParticleToyX/src/particletoyx.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include "particles.hxx"

#include <vect.hxx>

#include <cctk.h>
#include <cctk_Arguments.h>
#include <cctk_Parameters.h>

#include <cstdlib>
#include <vector>

namespace ParticleToyX {
using namespace Arith;
using namespace ParticlesX;

extern "C" void ParticleToyX_init(CCTK_ARGUMENTS) {
DECLARE_CCTK_ARGUMENTS_ParticleToyX_init;
DECLARE_CCTK_PARAMETERS;

const vect<CCTK_REAL, dim> xmin{-1, -1, -1};
const vect<CCTK_REAL, dim> xmax{+1, +1, +1};

Particles &particles = get_particles();
const int nparticles = particles.size();

// This is a random number
srand(0xdfcd7e49);

for (int n = 0; n < nparticles; ++n) {
const vect<CCTK_REAL, dim> r{
rand() / CCTK_REAL(RAND_MAX),
rand() / CCTK_REAL(RAND_MAX),
rand() / CCTK_REAL(RAND_MAX),
};
const vect<CCTK_REAL, dim> pos = xmin + r * (xmax - xmin);
const Particle p{CCTK_REAL(n), 0, pos, {0, 0, 0}, {0, 0, 0}};
particles.set(p, n);
}
}

extern "C" void ParticleToyX_accel(CCTK_ARGUMENTS) {
DECLARE_CCTK_ARGUMENTS_ParticleToyX_accel;
DECLARE_CCTK_PARAMETERS;

Particles &particles = get_particles();
const int nparticles = particles.size();

for (int n = 0; n < nparticles; ++n) {
Particle p = particles.get(n);
p.acc = -p.pos;
particles.set(p, n);
}
}

extern "C" void ParticleToyX_evolve(CCTK_ARGUMENTS) {
DECLARE_CCTK_ARGUMENTS_ParticleToyX_evolve;
DECLARE_CCTK_PARAMETERS;

const CCTK_REAL dt = CCTK_DELTA_TIME;

Particles &particles = get_particles();
const int nparticles = particles.size();

for (int n = 0; n < nparticles; ++n) {
Particle p = particles.get(n);
p.tau += dt;
p.pos += dt * p.vel;
p.vel += dt * p.acc;
particles.set(p, n);
}
}

} // namespace ParticleToyX
Loading