About the Benchmark
Running the Benchmark
Clone and set up the environment as you would for any other run of LT-PIC (see the Readme for example). Make sure you are on the dev branch.
Open the Makefile and be sure to append the -DBENCH_LANDMARK compiler flag to the end of the COPTS line which you use. This will tell LT-PIC to use functions which enable some of the features specific to the benchmark simulation.
Next, replace the input file with the Landmark input file,
cp input_landmark.dat input.dat
Note: The functions specific to the Landmark benchmark can not handle multiple regions in the y-direction. The number of regions must always equal 1. I.e. num_regions_y 1 must be used.
Be sure to double check that you have the correct hypre_gpu flag set in the input file, as well as the correct HYPRE environment variable.
You can then run the benchmark just as you would any other simulation.
Post-Processing the Benchmark
Benchmark Runs To Do
Current Scaling
Let's explore scaling the current to 0.5, 0.75, 1.25, 1.5, 1.75 and 2.0 times the value in the unmodified benchmark case.
To do this you only need to modify input.dat (which should be copied from input_landmark.dat). The only lines that needs to be modified are the injection_average_current values under injection 1 and injection 2. Specifically lines 89 and 102 (leave the value under injection 3 unchanged). You simply scale these values by the values above, but you need to write out the actual numbers, you can't just write out the multiplication in input.dat.
Note that particularly for larger currents the simulation time may increase noticeably since we will be handling a lot more particles. However since the GPU code is limited by the Poisson solve this may not be an issue. Either way, be prepared to have to run restarts if you time out, or use a run time of 3 days perhaps for the largest scalings.
Magnetic Field Scaling
Let's also explore scaling the magnetic field with 0.5, 0.75, 1.25, 1.5, 1.75, 2.0 times the value of the unmodified benchmark case.
The magnetic field is not set in input.dat instead it is set in input.c, this is because it requires an analytic expression rather than a fixed value and I haven't put that kind of functionality in to the input file yet!
So to do this, open up input.c and you can see the magnetic field functions BX, BY, BZ. Since the field is only in the Z-direction we only need to deal with BZ. You will see the analytical expression between the #ifdef BENCH_LANDMARK and #else compiler flags. To modify it, you need to multiply each expression for bz by the scaling above. So let's say you want to scale the field by X, you would modify these as,
bz = cond * X * (0.00918218*exp(-12800.0*(y - ybmax)*(y - ybmax)) + 0.000817815);
bz += ncond * X * (0.00779351*exp(-12800.0*(y - ybmax)*(y - ybmax)) + 0.00220649);
You might also see some changes in performance here! A stronger magnetic field will better trap particles and therefore lead to higher densities and slower run times.
Note that this isn't the only way we could scale the field... but it will retain the same geometry, so perhaps this is best for now.
Of course if you feel like playing around with any other ideas, go ahead!