Program Listing for File LagSpinBreakCondition.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Evolve/LagSpinBreakCondition.h)
#ifndef __CRITICAL_SPIN_CONDITION_H
#define __CRITICAL_SPIN_CONDITION_H
#include "../Core/SharedLibraryExportMacros.h"
#include "StoppingCondition.h"
#include "DissipatingBody.h"
#include "../Core/Error.h"
#include <vector>
namespace Evolve {
class BrokenPowerlawPhaseLagZone;
class LIB_LOCAL LagSpinBreakCondition : public StoppingCondition {
private:
BrokenPowerlawPhaseLagZone &__zone;
const DissipatingBody
&__body,
&__other_body;
bool __primary;
unsigned __zone_index;
std::vector<double>::size_type __powerlaw_index;
unsigned __num_subconditions;
void set_num_subconditions();
double derivative(
double surf_angmom_deriv,
double wcritical
) const;
void fill_locked_derivs(
Core::EvolModeType evol_mode,
const std::valarray<double> &orbit,
const std::valarray<double> &derivatives,
std::valarray<double> &stop_deriv
) const;
void fill_unlocked_derivs(
Core::EvolModeType evol_mode,
const std::valarray<double> &orbit,
const std::valarray<double> &derivatives,
std::valarray<double> &stop_deriv
) const;
public:
LagSpinBreakCondition(
BrokenPowerlawPhaseLagZone &zone,
const DissipatingBody &body,
const DissipatingBody &other_body,
bool primary,
unsigned zone_index
);
std::valarray<double> operator()(
Core::EvolModeType evol_mode,
const std::valarray<double> &orbit,
const std::valarray<double> &derivatives,
std::valarray<double> &stop_deriv
) const;
virtual void reached(short deriv_sign, unsigned index = 0);
virtual size_t num_subconditions() const
{return __num_subconditions;}
virtual StoppingConditionType type(unsigned =0) const
{return Evolve::EXTERNAL;}
virtual short expected_crossing_deriv_sign(
unsigned index = 0
) const;
virtual std::string describe(int index = -1) const;
};//End LagSpinBreakCondition class.
}//End Evolve namespace.
#endif