43 RegisterCreatorFunction(
"MovingBody",
45 "Moving Body Forcing");
55 const unsigned int& pNumForcingFields,
56 const TiXmlElement* pForce)
60 "Moving body implemented just for 3D Homogenous 1D expansions.");
90 int phystot = pFields[0]->GetTotPoints();
91 for(
int i = 0; i <
m_zta.num_elements(); i++)
102 for(
int i = 0; i < 3; i++)
121 for (
int i = 0; i < 3; i++)
123 Vmath::Vadd(outarray[i].num_elements(), outarray[i], 1,
147 std::string vibtype =
m_session->GetSolverInfo(
"VibrationType");
148 if(boost::iequals(vibtype,
"Free") || boost::iequals(vibtype,
"Constrained"))
154 else if(boost::iequals(vibtype,
"Forced"))
158 for(
int j = 0; j <
m_funcName.num_elements(); j++)
162 ASSERTL0(
false,
"Motion loading from file needs specific "
163 "implementation: Work in Progress!");
175 for(
int var = 0; var < 3; var++)
177 for(
int plane = 0; plane <
m_np; plane++)
179 int n = pFields[0]->GetPlane(plane)->GetTotPoints();
180 int offset = plane * n;
181 int xoffset = var * m_np+plane;
182 int yoffset = 3*m_np+xoffset;
192 "Unrecogized vibration type for cable's dynamic model");
199 bool OriginalWaveSpace = pFields[0]->GetWaveSpace();
200 pFields[0]->SetWaveSpace(
false);
226 int NumPoints = pFields[0]->GetTotPoints();
238 pFields[0]->SetWaveSpace(OriginalWaveSpace);
249 int nPointsTot = fields[0]->GetNpoints();
251 Array<OneD, NekDouble> Wt,Wx,Wy,Wz,Wxx,Wxy,Wxz,Wyy,Wyz,Wzz;
278 fields[0]->HomogeneousBwdTrans(fields[0]->GetPhys(),U);
279 fields[0]->HomogeneousBwdTrans(fields[1]->GetPhys(),V);
280 fields[0]->HomogeneousBwdTrans(fields[2]->GetPhys(),W);
281 fields[0]->HomogeneousBwdTrans(fields[3]->GetPhys(),tmp1);
296 fields[2]->GetPhys(),tmp1);
297 fields[0]->HomogeneousBwdTrans(tmp1, Wz);
304 fields[0]->HomogeneousBwdTrans(tmp2, Wzz);
367 fields[0]->GetPhys(), tmp1);
368 fields[0]->HomogeneousBwdTrans(tmp1, tmp3);
456 fields[1]->GetPhys(), tmp1);
457 fields[0]->HomogeneousBwdTrans(tmp1, tmp3);
571 fields[0]->HomogeneousFwdTrans(Fx,
m_forcing[0]);
572 fields[0]->HomogeneousFwdTrans(Fy,
m_forcing[1]);
573 fields[0]->HomogeneousFwdTrans(Fz,
m_forcing[2]);
585 std::string supptype =
m_session->GetSolverInfo(
"SupportType");
588 m_session->MatchSolverInfo(
"HomoStrip",
"True",homostrip,
false);
600 npts =
m_session->GetParameter(
"HomModesZ");
604 m_session->LoadParameter(
"Strip_Z", npts);
610 for(
int i = 0; i < 4; i++)
617 int colrank = vcomm->GetColumnComm()->GetRank();
618 int nproc = vcomm->GetColumnComm()->GetSize();
624 for(
int n = 0; n <
m_np; n++)
626 tmp[n] = AeroForces[n];
627 for(
int j = 0; j < 3; ++j)
629 tmp[(j+1)*m_np + n] =
630 CableMotions[j*m_np + n];
638 for (
int var = 0; var < 3; var++)
640 Vmath::Vcopy(m_np, CableMotions+var*m_np, 1, fft_i[var+1], 1);
643 for (
int i = 1; i < nproc; ++i)
645 vcomm->GetColumnComm()->Recv(i, tmp);
646 for(
int n = 0; n <
m_np; n++)
648 for(
int var = 0; var < 4; ++var)
650 fft_i[var][i*m_np + n] = tmp[var*m_np + n];
657 vcomm->GetColumnComm()->Send(0, tmp);
664 tmp[0] = AeroForces[0];
665 for(
int j = 0; j < 3; ++j)
667 tmp[j+1] = CableMotions[j*
m_np];
673 for(
int j = 0 ; j < 4; ++j)
675 fft_i[j][0] = tmp[j];
678 for(
int i = 1; i <
npts; ++i)
680 vcomm->GetColumnComm()->Recv(i, tmp);
682 for(
int j = 0 ; j < 4; ++j)
684 fft_i[j][i] = tmp[j];
690 for(
int i = 1; i <
npts; ++i)
694 vcomm->GetColumnComm()->Send(0, tmp);
703 if(boost::iequals(supptype,
"Free-Free"))
705 for(
int j = 0 ; j < 4; ++j)
707 m_FFT->FFTFwdTrans(fft_i[j], fft_o[j]);
710 else if(boost::iequals(supptype,
"Pinned-Pinned"))
713 int N = fft_i[0].num_elements();
715 for(
int var = 0; var < 4; var++)
717 for(
int i = 0; i < N; i++)
721 for(
int k = 0; k < N; k++)
725 sin(M_PI/(N)*(k+1/2)*(i+1));
733 "Unrecognized support type for cable's motion");
737 for(
int i = 0; i <
npts; ++i)
746 for(
int var = 0; var < 3; var++)
748 tmp0[var] = fft_o[var+1][i];
751 tmp2[0] = fft_o[0][i];
753 Blas::Dgemv(
'N', nrows, nrows, 1.0,
762 for(
int var = 0; var < 3; var++)
764 fft_i[var][i] = tmp1[var];
770 if(boost::iequals(supptype,
"Free-Free"))
772 for(
int var = 0; var < 3; var++)
774 m_FFT->FFTBwdTrans(fft_i[var], fft_o[var]);
777 else if(boost::iequals(supptype,
"Pinned-Pinned"))
780 int N = fft_i[0].num_elements();
782 for(
int var = 0; var < 3; var++)
784 for(
int i = 0; i < N; i++)
788 for(
int k = 0; k < N; k++)
792 sin(M_PI/(N)*(k+1)*(i+1/2))*2/N;
800 "Unrecognized support type for cable's motion");
811 vcomm->GetColumnComm()->Recv(0, tmp);
817 for (
int i = 1; i < nproc; ++i)
819 for(
int j = 0; j < 3; j++)
821 for(
int n = 0; n <
m_np; n++)
823 tmp[j*m_np+n] = fft_o[j][i*m_np+n];
826 vcomm->GetColumnComm()->Send(i, tmp);
829 for(
int j = 0; j < 3; j++)
831 for(
int n = 0; n <
m_np; n++)
833 tmp[j*m_np+n] = fft_o[j][n];
846 for (
int j = 1; j < nproc/
npts; j++)
848 if(colrank == j*npts)
850 vcomm->GetColumnComm()->Recv(0, tmp);
852 for(
int plane = 0; plane <
m_np; plane++)
854 for(
int var = 0; var < 3; var++)
856 CableMotions[var*m_np+plane]= tmp[var];
862 for(
int i = 1; i <
npts; i++)
864 for (
int j = 0; j < nproc/
npts; j++)
866 if(colrank == i+j*npts)
868 vcomm->GetColumnComm()->Recv(0, tmp);
870 for(
int plane = 0; plane <
m_np; plane++)
872 for(
int var = 0; var < 3; var++)
874 CableMotions[var*m_np+plane] = tmp[var];
883 for(
int j = 0; j < 3; ++j)
885 tmp[j] = fft_o[j][0];
888 for (
int j = 1; j < nproc/
npts; j++)
890 vcomm->GetColumnComm()->Send(j*npts, tmp);
893 for(
int plane = 0; plane <
m_np; plane++)
895 for(
int var = 0; var < 3; var++)
897 CableMotions[var*m_np+plane] = tmp[var];
901 for(
int i = 1; i <
npts; ++i)
903 for(
int j = 0; j < 3; ++j)
905 tmp[j] = fft_o[j][i];
908 for (
int j = 0; j < nproc/
npts; j++)
910 vcomm->GetColumnComm()->Send(i+j*npts, tmp);
931 for(
int plane = 0; plane <
m_np; plane++)
940 m_session->MatchSolverInfo(
"FictitiousMassMethod",
"True",
945 m_session->LoadParameter(
"FictMass", fictrho);
946 m_session->LoadParameter(
"FictDamp", fictdamp);
949 {{1.0, 0.0},{2.0, -1.0}};
954 int nlevels =
m_fV[0].num_elements();
956 for(
int i = 0; i <
m_motion.num_elements(); ++i)
961 int Voffset = i*3*m_np+
m_np;
962 int Aoffset = i*3*m_np+2*
m_np;
969 Betaq_Coeffs[nint-1][nint-1],
971 m_fV[i][nlevels-1], 1);
973 Betaq_Coeffs[nint-1][nint-1],
975 m_fA[i][nlevels-1], 1);
977 for(
int n = 0; n < nint-1; ++n)
980 Betaq_Coeffs[nint-1][n],
982 m_fV[i][nlevels-1],1);
984 Betaq_Coeffs[nint-1][n],
986 m_fA[i][nlevels-1],1);
991 fces[i],1,fces[i],1);
993 fces[i],1,fces[i],1);
998 for(
int n = 0, cn = 1; n <
m_vdim; n++, cn--)
1000 int offset = cn*3*
m_np;
1007 for(
int var = 0; var < 3; var++)
1009 for(
int plane = 0; plane <
m_np; plane++)
1011 int n = pFields[0]->GetPlane(plane)->GetTotPoints();
1015 int offset = plane * n;
1016 int xoffset = var * m_np+plane;
1017 int yoffset = 3*m_np + xoffset;
1035 for (
int i = 0; i <
m_motion.num_elements(); ++i)
1040 for(
int i = 0; i <
m_motion.num_elements(); ++i)
1050 = pFields[0]->GetHomogeneousBasis()->GetZ();
1051 int nbnd = pFields[0]->GetBndCondExpansions().num_elements();
1053 for (
int i = 0; i < nbnd; ++i)
1055 for (
int plane = 0; plane <
m_np; plane++)
1057 for (
int dim = 0; dim <
m_motion.num_elements(); dim++)
1059 bndCondExps = pFields[dim]->GetPlane(plane)
1060 ->GetBndCondExpansions();
1061 bndConds = pFields[dim]->GetPlane(plane)->GetBndConditions();
1062 if (boost::iequals(bndConds[i]->GetUserDefined(),
"MovingBody"))
1064 int npoints = bndCondExps[i]->GetNpoints();
1070 NekDouble local_z = z[pFields[0]->GetTransposition()
1071 ->GetPlaneID(plane)];
1076 bndCondExps[i]->GetCoords(x0,x1,x2);
1080 bndCondExps[i]->GetCoords(x0, x1, x2);
1085 boost::static_pointer_cast<
1088 m_dirichletCondition;
1090 condition.
Evaluate(x0, x1, x2, time,
1091 bndCondExps[i]->UpdatePhys());
1093 Vmath::Vsub(npoints, bndCondExps[i]->UpdatePhys(), 1,
1095 bndCondExps[i]->UpdatePhys(), 1);
1112 int nPointsTot = pFields[0]->GetNpoints();
1114 for(
int n = 0; n < 2; ++n)
1125 ZIDs = pFields[0]->GetZIDs();
1126 m_np = ZIDs.num_elements();
1131 std::string vibtype =
m_session->GetSolverInfo(
"VibrationType");
1133 if(boost::iequals(vibtype,
"Constrained"))
1137 else if (boost::iequals(vibtype,
"Free"))
1141 else if (boost::iequals(vibtype,
"Forced"))
1149 m_session->MatchSolverInfo(
"HomoStrip",
"True",homostrip,
false);
1154 int nplanes =
m_session->GetParameter(
"HomModesZ");
1157 "NekFFTW", nplanes);
1165 m_session->LoadParameter(
"DistStrip", DistStrip);
1166 m_session->LoadParameter(
"Strip_Z", nstrips);
1167 m_lhom = nstrips * DistStrip;
1170 "NekFFTW", nstrips);
1180 m_session->MatchSolverInfo(
"FictitiousMassMethod",
"True",
1185 m_session->LoadParameter(
"FictMass", fictrho);
1186 m_session->LoadParameter(
"FictDamp", fictdamp);
1196 for (
int i = 0; i <
m_motion.num_elements(); ++i)
1201 for(
int n = 0; n < 2; ++n)
1215 for(
int j = 0; j <
m_funcName.num_elements(); j++)
1222 std::ifstream inputStream;
1229 m_session->LoadParameter(
"Strip_Z", nstrips);
1234 nzpoints = pFields[0]->GetHomogeneousBasis()->GetNumModes();
1238 if (vcomm->GetRank() == 0)
1246 std::string filename =
m_session->GetFunctionFilename(
1250 inputStream.open(filename.c_str());
1253 for(
int n = 0; n < tmp.num_elements(); n++)
1255 inputStream >> tmp[n];
1260 for (
int n = 0; n < nzpoints; n++)
1262 inputStream >> setprecision(6) >> time;
1263 inputStream >> setprecision(6) >> z_cds;
1264 inputStream >> setprecision(8) >> motion_x[n];
1265 inputStream >> setprecision(8) >> motion_x[n+nzpoints];
1266 inputStream >> setprecision(8) >> motion_x[n+2*nzpoints];
1267 inputStream >> setprecision(8) >> motion_y[n];
1268 inputStream >> setprecision(8) >> motion_y[n+nzpoints];
1269 inputStream >> setprecision(8) >> motion_y[n+2*nzpoints];
1273 inputStream.close();
1277 int nproc = vcomm->GetColumnComm()->GetSize();
1278 for (
int i = 1; i < nproc; ++i)
1280 for(
int plane = 0; plane <
m_np; plane++)
1282 for (
int var = 0; var < 3; var++)
1284 int xoffset = var*m_np+plane;
1285 int yoffset = 3*m_np+xoffset;
1287 motion_x[plane+i*m_np+var*nzpoints];
1289 motion_y[plane+i*m_np+var*nzpoints];
1296 for(
int plane = 0; plane <
m_np; plane++)
1298 for (
int var = 0; var < 3; var++)
1300 int xoffset = var*m_np+plane;
1301 int yoffset = 3*m_np+xoffset;
1310 m_session->LoadParameter(
"Strip_Z", nstrips);
1312 int nproc = vcomm->GetColumnComm()->GetSize();
1314 for (
int i = 1; i < nstrips; ++i)
1316 for(
int plane = 0; plane <
m_np; plane++)
1318 for (
int var = 0; var < 3; var++)
1320 int xoffset = var*m_np+plane;
1321 int yoffset = 3*m_np+xoffset;
1327 for (
int j = 0; j < nproc/nstrips; j++)
1329 vcomm->GetColumnComm()->Send(i+j*nstrips,
m_MotionVars);
1333 for(
int plane = 0; plane <
m_np; plane++)
1335 for (
int var = 0; var < 3; var++)
1337 int xoffset = var*m_np+plane;
1338 int yoffset = 3*m_np+xoffset;
1344 for (
int j = 1; j < nproc/nstrips; j++)
1354 int colrank = vcomm->GetColumnComm()->GetRank();
1355 int nproc = vcomm->GetColumnComm()->GetSize();
1357 for (
int j = 1; j < nproc; j++)
1368 m_session->LoadParameter(
"Strip_Z", nstrips);
1370 int colrank = vcomm->GetColumnComm()->GetRank();
1371 int nproc = vcomm->GetColumnComm()->GetSize();
1373 for(
int i = 1; i < nstrips; i++)
1375 for (
int j = 0; j < nproc/nstrips; j++)
1377 if(colrank == i+j*nstrips)
1384 for (
int j = 1; j < nproc/nstrips; j++)
1386 if(colrank == j*nstrips)
1404 int nzpoints = pFields[0]->GetHomogeneousBasis()->GetNumModes();
1407 = pFields[0]->GetHomogeneousBasis()->GetZ();
1412 for (
int plane = 0; plane <
m_np; plane++)
1414 x2[plane] = z_coords[ZIDs[plane]];
1420 m_session->LoadParameter(
"Strip_Z", nstrips);
1423 "Fourier transformation of cable motion is currently "
1424 "implemented only for FFTW module.");
1427 m_session->LoadParameter(
"DistStrip", DistStrip);
1429 int colrank = vcomm->GetColumnComm()->GetRank();
1430 int nproc = vcomm->GetColumnComm()->GetSize();
1432 for(
int i = 0; i < nstrips; ++i)
1434 for(
int j = 0; j < nproc/nstrips; j++)
1436 if (colrank == i+j*nstrips)
1438 for (
int plane = 0; plane <
m_np; plane++)
1440 x2[plane] = i*DistStrip;
1447 int xoffset = j*
m_np;
1448 int yoffset = 3*m_np+xoffset;
1456 ffunc0->Evaluate(x0, x1, x2, 0.0, tmp =
m_MotionVars+xoffset);
1457 ffunc1->Evaluate(x0, x1, x2, 0.0, tmp =
m_MotionVars+yoffset);
1473 m_session->MatchSolverInfo(
"HomoStrip",
"True",homostrip,
false);
1477 nplanes =
m_session->GetParameter(
"HomModesZ");
1481 m_session->LoadParameter(
"Strip_Z", nplanes);
1494 m_session->LoadParameter(
"StructStiff", structstiff, 0.0);
1495 m_session->LoadParameter(
"CableTension", cabletension, 0.0);
1496 m_session->LoadParameter(
"BendingStiff", bendingstiff, 0.0);
1507 std::string supptype =
m_session->GetSolverInfo(
"SupportType");
1509 for(
int plane = 0; plane < nplanes; plane++)
1521 if (boost::iequals(supptype,
"Free-Free"))
1524 beta = 2.0 * M_PI/
m_lhom;
1526 else if(boost::iequals(supptype,
"Pinned-Pinned"))
1534 "Unrecognized support type for cable's motion");
1540 tmp7 = tmp2 + tmp4 * tmp6 + tmp5 * tmp7;
1551 (*m_CoeffMat_B[plane])(0,0) = 0.0;
1552 (*m_CoeffMat_B[plane])(0,1) = 0.0;
1553 (*m_CoeffMat_B[plane])(0,2) = 0.0;
1554 (*m_CoeffMat_B[plane])(1,0) = 0.0;
1555 (*m_CoeffMat_B[plane])(1,1) = 1.0;
1556 (*m_CoeffMat_B[plane])(1,2) = m_timestep/2.0;
1557 (*m_CoeffMat_B[plane])(2,0) = 1.0;
1559 (*m_CoeffMat_B[plane])(2,2) = tmp1/4.0;
1562 (*m_CoeffMat_B[plane]) =
1576 int nlevels = input.num_elements();
1579 tmp = input[nlevels-1];
1581 for(
int n = nlevels-1; n > 0; --n)
1583 input[n] = input[n-1];
1644 const TiXmlElement* funcNameElmt_D
1645 = pForce->FirstChildElement(
"DISPLACEMENTS");
1647 "MOVINGBODYFORCE tag has to specify a function name which "
1648 "prescribes the body displacement as d(z,t).");
1652 "Function '" +
m_funcName[0] +
"' not defined.");
1655 const TiXmlElement* funcNameElmt_V
1656 = pForce->FirstChildElement(
"VELOCITIES");
1658 "MOVINGBODYFORCE tag has to specify a function name which "
1659 "prescribes the body velocity of movement as v(z,t).");
1663 "Function '" +
m_funcName[1] +
"' not defined.");
1667 const TiXmlElement* funcNameElmt_A
1668 = pForce->FirstChildElement(
"ACCELERATIONS");
1670 "MOVINGBODYFORCE tag has to specify a function name which "
1671 "prescribes the body acceleration as a(z,t).");
1675 "Function '" +
m_funcName[2] +
"' not defined.");
1691 ASSERTL0(
false,
"The displacements in x must be specified via an "
1692 "equation <E> or a file <F>");
1707 ASSERTL0(
false,
"The displacements in y must be specified via an "
1708 "equation <E> or a file <F>");
1723 ASSERTL0(
false,
"The velocities in x must be specified via an equation "
1724 "<E> or a file <F>");
1739 ASSERTL0(
false,
"The velocities in y must be specified via an equation "
1740 "<E> or a file <F>");
1755 ASSERTL0(
false,
"The accelerations in x must be specified via an "
1756 "equation <E> or a file <F>");
1771 ASSERTL0(
false,
"The accelerations in y must be specified via an "
1772 "equation <E> or a file <F>");
1782 const TiXmlElement* pForce)
1786 std::string typeStr = pForce->Attribute(
"TYPE");
1787 std::map<std::string, std::string> vParams;
1789 const TiXmlElement *param = pForce->FirstChildElement(
"PARAM");
1793 "Missing attribute 'NAME' for parameter in filter "
1795 std::string nameStr = param->Attribute(
"NAME");
1797 ASSERTL0(param->GetText(),
"Empty value string for param.");
1798 std::string valueStr = param->GetText();
1800 vParams[nameStr] = valueStr;
1802 param = param->NextSiblingElement(
"PARAM");
Array< OneD, DNekMatSharedPtr > m_CoeffMat_B
matrices in Newmart-beta method
NekDouble m_structrho
mass of the cable per unit length
#define ASSERTL0(condition, msg)
void CheckIsFromFile(const TiXmlElement *pForce)
NekDouble m_structdamp
damping ratio of the cable
tBaseSharedPtr CreateInstance(tKey idKey BOOST_PP_COMMA_IF(MAX_PARAM) BOOST_PP_ENUM_BINARY_PARAMS(MAX_PARAM, tParam, x))
Create an instance of the class referred to by idKey.
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
void EvaluateStructDynModel(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, NekDouble time)
void SetDynEqCoeffMatrix(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
Array< OneD, Array< OneD, NekDouble > > m_W
srorage for the velocity in z-direction
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Array< OneD, DNekMatSharedPtr > m_CoeffMat_A
matrices in Newmart-beta method
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
ForcingFactory & GetForcingFactory()
Declaration of the forcing factory singleton.
Array< OneD, NekDouble > m_Aeroforces
storage for the cable's force(x,y) variables
virtual void v_InitObject(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields, const TiXmlElement *pForce)
SOLVER_UTILS_EXPORT void EvaluateFunction(Array< OneD, MultiRegions::ExpListSharedPtr > pFields, LibUtilities::SessionReaderSharedPtr pSession, std::string pFieldName, Array< OneD, NekDouble > &pArray, const std::string &pFunctionName, NekDouble pTime=NekDouble(0))
void CalculateForcing(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
NektarFFTFactory & GetNektarFFTFactory()
void InitialiseFilter(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const TiXmlElement *pForce)
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
ForcingMovingBody(const LibUtilities::SessionReaderSharedPtr &pSession)
int m_movingBodyCalls
number of times the movbody have been called
NekDouble m_kinvis
fluid viscous
Array< OneD, std::string > m_motion
motion direction: [0] is 'x' and [1] is 'y'
void EvaluateAccelaration(const Array< OneD, NekDouble > &input, Array< OneD, NekDouble > &output, int npoints)
boost::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Array< OneD, NekDouble > m_MotionVars
storage for the cable's motion(x,y) variables
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
int m_vdim
vibration dimension
LibUtilities::NektarFFTSharedPtr m_FFT
virtual void v_Apply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time)
NekDouble Evaluate() const
void TensionedCableModel(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, Array< OneD, NekDouble > &FcePhysinArray, Array< OneD, NekDouble > &MotPhysinArray)
LibUtilities::SessionReaderSharedPtr m_session
Session reader.
static const NekDouble kNekUnsetDouble
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
NekDouble m_timestep
time step
boost::shared_ptr< Equation > EquationSharedPtr
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.
MultiRegions::Direction const DirCartesianMap[]
void InitialiseCableModel(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
Array< OneD, bool > m_IsFromFile
do determine if the the body motion come from an extern file
Array< OneD, Array< OneD, NekDouble > > m_eta
Store the derivatives of motion variables in y-direction.
FilterMovingBodySharedPtr m_MovBodyfilter
NekDouble m_lhom
length ratio of the cable
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_fV
fictitious velocity storage
static std::string className
Name of the class.
int m_np
number of planes per processors
Array< OneD, Array< OneD, NekDouble > > m_forcing
void MappingBndConditions(const Array< OneD, MultiRegions::ExpListSharedPtr > &pfields, const Array< OneD, Array< OneD, NekDouble > > &fields, NekDouble time)
void UpdateMotion(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const Array< OneD, Array< OneD, NekDouble > > &fields, NekDouble time)
Array< OneD, std::string > m_funcName
[0] is displacements, [1] is velocities, [2] is accelerations
void Zero(int n, T *x, const int incx)
Zero vector.
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_fA
fictitious acceleration storage
void RollOver(Array< OneD, Array< OneD, NekDouble > > &input)
static SolverUtils::ForcingSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields, const TiXmlElement *pForce)
Creates an instance of this class.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Array< OneD, Array< OneD, NekDouble > > m_zta
Store the derivatives of motion variables in x-direction.
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.