44 std::vector<T> axisDirection_, T w_,
bool centrifugeForceOn_,
45 bool coriolisForceOn_)
47 converter(converter_), axisPoint(axisPoint_), axisDirection(axisDirection_),
48 w(w_), centrifugeForceOn(centrifugeForceOn_), coriolisForceOn(coriolisForceOn_),
49 velocity(sLattice_,converter_), rho(sLattice_)
51 this->
getName() =
"rotatingForce";
58 std::vector<T> F_centri(3,0);
59 std::vector<T> F_coriolis(3,0);
63 std::vector<T> physR(3,T());
64 this->sg.getCuboidGeometry().getPhysR(&(physR[0]),&(x[0]));
66 T scalar = (physR[0]-axisPoint[0])*axisDirection[0]
67 +(physR[1]-axisPoint[1])*axisDirection[1]
68 +(physR[2]-axisPoint[2])*axisDirection[2];
70 if (centrifugeForceOn) {
71 F_centri[0] = w*w*(physR[0]-axisPoint[0]-scalar*axisDirection[0]);
72 F_centri[1] = w*w*(physR[1]-axisPoint[1]-scalar*axisDirection[1]);
73 F_centri[2] = w*w*(physR[2]-axisPoint[2]-scalar*axisDirection[2]);
75 if (coriolisForceOn) {
78 F_coriolis[0] = -2*w*(axisDirection[1]*_vel[2]-axisDirection[2]*_vel[1]);
79 F_coriolis[1] = -2*w*(axisDirection[2]*_vel[0]-axisDirection[0]*_vel[2]);
80 F_coriolis[2] = -2*w*(axisDirection[0]*_vel[1]-axisDirection[1]*_vel[0]);
83 output[0] = (F_coriolis[0]+F_centri[0]) * converter.getConversionFactorTime() / converter.getConversionFactorVelocity();
84 output[1] = (F_coriolis[1]+F_centri[1]) * converter.getConversionFactorTime() / converter.getConversionFactorVelocity();
85 output[2] = (F_coriolis[2]+F_centri[2]) * converter.getConversionFactorTime() / converter.getConversionFactorVelocity();
95 std::vector<T> axisDirection_, T amplitude_, T frequency_)
97 converter(converter_), axisPoint(axisPoint_), axisDirection(axisDirection_),
98 amplitude(amplitude_), resonanceFrequency(2.*4.*util::atan(1.0)*frequency_), w(0.0), dwdt(0.0),
99 velocity(sLattice_,converter_)
101 this->
getName() =
"harmonicOscillatingrotatingForce";
117 std::vector<T> F_centri(3,0);
118 std::vector<T> F_coriolis(3,0);
119 std::vector<T> F_euler(3,0);
123 std::vector<T> physR(3,T());
124 this->sg.getCuboidGeometry().getPhysR(&(physR[0]),&(x[0]));
126 T scalar = (physR[0]-axisPoint[0])*axisDirection[0]
127 +(physR[1]-axisPoint[1])*axisDirection[1]
128 +(physR[2]-axisPoint[2])*axisDirection[2];
131 r[0] = physR[0]-axisPoint[0]-scalar*axisDirection[0];
132 r[1] = physR[1]-axisPoint[1]-scalar*axisDirection[1];
133 r[2] = physR[2]-axisPoint[2]-scalar*axisDirection[2];
135 F_centri[0] = w*w*(r[0]);
136 F_centri[1] = w*w*(r[1]);
137 F_centri[2] = w*w*(r[2]);
141 F_coriolis[0] = -2*w*(axisDirection[1]*_vel[2]-axisDirection[2]*_vel[1]);
142 F_coriolis[1] = -2*w*(axisDirection[2]*_vel[0]-axisDirection[0]*_vel[2]);
143 F_coriolis[2] = -2*w*(axisDirection[0]*_vel[1]-axisDirection[1]*_vel[0]);
145 F_euler[0] = -dwdt*(axisDirection[1]*r[2]-axisDirection[2]*r[1]);
146 F_euler[1] = -dwdt*(axisDirection[2]*r[0]-axisDirection[0]*r[2]);
147 F_euler[2] = -dwdt*(axisDirection[0]*r[1]-axisDirection[1]*r[0]);
151 output[0] = (F_coriolis[0]+F_centri[0]+F_euler[0]) * converter.getConversionFactorTime() / converter.getConversionFactorVelocity();
152 output[1] = (F_coriolis[1]+F_centri[1]+F_euler[1]) * converter.getConversionFactorTime() / converter.getConversionFactorVelocity();
153 output[2] = (F_coriolis[2]+F_centri[2]+F_euler[2]) * converter.getConversionFactorTime() / converter.getConversionFactorVelocity();
HarmonicOscillatingRotatingForceField3D(SuperLattice< T, DESCRIPTOR > &sLattice_, SuperGeometry< T, 3 > &superGeometry_, const UnitConverter< T, DESCRIPTOR > &converter_, std::vector< T > axisPoint_, std::vector< T > axisDirection_, T amplitude_, T frequency_)
RotatingForceField3D(SuperLattice< T, DESCRIPTOR > &sLattice_, SuperGeometry< T, 3 > &superGeometry_, const UnitConverter< T, DESCRIPTOR > &converter_, std::vector< T > axisPoint_, std::vector< T > axisDirection_, T w_, bool centrifugeForceOn_=true, bool coriolisForceOn_=true)