Line data Source code
1 : #include "crpropa/Candidate.h" 2 : #include "crpropa/Units.h" 3 : #include "crpropa/ParticleID.h" 4 : #include "crpropa/advectionField/AdvectionField.h" 5 : #include "crpropa/module/AdiabaticCooling.h" 6 : #include "gtest/gtest.h" 7 : 8 : //#include <fstream> 9 : 10 : namespace crpropa { 11 : 12 : // AdiabaticCooling --------------------------------------------------------------- 13 : 14 2 : TEST (AdiabaticCooling, UniformField) { 15 : // Test in a uniform advection Field 16 : 17 2 : AdiabaticCooling AC(new UniformAdvectionField(Vector3d(1,0,0))); 18 1 : Candidate c(nucleusId(1,1), 1e13*eV); 19 1 : c.setCurrentStep(10*kpc); 20 1 : c.setNextStep(10*kpc); 21 1 : double E = c.current.getEnergy(); 22 1 : AC.process(&c); 23 : 24 : // Energy is expected to be conserved 25 1 : EXPECT_DOUBLE_EQ(c.current.getEnergy(), E); 26 1 : EXPECT_DOUBLE_EQ(c.getNextStep(), 10*kpc); 27 : 28 : double limit = 0.2; 29 3 : AdiabaticCooling AC2(new UniformAdvectionField(Vector3d(1,0,0)), limit); 30 : 31 1 : EXPECT_DOUBLE_EQ(AC2.getLimit(), limit); 32 : 33 : // 34 : 35 1 : } 36 : 37 2 : TEST (AdiabaticCooling, ConstantSphericalField) { 38 : // Constant velocity vector 39 : 40 2 : AdiabaticCooling AC(new ConstantSphericalAdvectionField(Vector3d(0,0,0), 1)); 41 1 : Candidate c(nucleusId(1,1), 10); 42 1 : c.current.setPosition(Vector3d(1,0,0)); 43 1 : c.setCurrentStep(c_light); 44 1 : c.setNextStep(c_light); 45 1 : double E = c.current.getEnergy(); 46 1 : AC.process(&c); 47 : 48 : // Check energy loss and step limitation 49 1 : EXPECT_DOUBLE_EQ(c.current.getEnergy(), E/3.); 50 1 : EXPECT_DOUBLE_EQ(c.getNextStep(), 0.15*c_light); 51 : 52 1 : } 53 : 54 : 55 : } // namespace crpropa