本文整理汇总了C++中DVec::dm方法的典型用法代码示例。如果您正苦于以下问题:C++ DVec::dm方法的具体用法?C++ DVec::dm怎么用?C++ DVec::dm使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DVec
的用法示例。
在下文中一共展示了DVec::dm方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: JacobiP
//---------------------------------------------------------
void GradSimplex3DP
(
const DVec& a, // [in]
const DVec& b, // [in]
const DVec& c, // [in]
int id, // [in]
int jd, // [in]
int kd, // [in]
DVec& V3Dr, // [out]
DVec& V3Ds, // [out]
DVec& V3Dt // [out]
)
//---------------------------------------------------------
{
// function [V3Dr, V3Ds, V3Dt] = GradSimplex3DP(a,b,c,id,jd,kd)
// Purpose: Return the derivatives of the modal basis (id,jd,kd)
// on the 3D simplex at (a,b,c)
DVec fa, dfa, gb, dgb, hc, dhc, tmp;
fa = JacobiP(a,0,0,id); dfa = GradJacobiP(a,0,0,id);
gb = JacobiP(b,2*id+1,0,jd); dgb = GradJacobiP(b,2*id+1,0,jd);
hc = JacobiP(c,2*(id+jd)+2,0,kd); dhc = GradJacobiP(c,2*(id+jd)+2,0,kd);
// r-derivative
V3Dr = dfa.dm(gb.dm(hc));
if (id>0) { V3Dr *= pow(0.5*(1.0-b), double(id-1)); }
if (id+jd>0) { V3Dr *= pow(0.5*(1.0-c), double(id+jd-1)); }
// s-derivative
V3Ds = V3Dr.dm(0.5*(1.0+a));
tmp = dgb.dm(pow(0.5*(1.0-b), double(id)));
if (id>0) { tmp -= (0.5*id) * gb.dm(pow(0.5*(1.0-b), (id-1.0))); }
if (id+jd>0) { tmp *= pow(0.5*(1.0-c),(id+jd-1.0)); }
tmp = fa.dm(tmp.dm(hc));
V3Ds += tmp;
// t-derivative
V3Dt = V3Dr.dm(0.5*(1.0+a)) + tmp.dm(0.5*(1.0+b));
tmp = dhc.dm(pow(0.5*(1.0-c), double(id+jd)));
if (id+jd>0) { tmp -= (0.5*(id+jd)) * hc.dm(pow(0.5*(1.0-c), (id+jd-1.0))); }
tmp = fa.dm(gb.dm(tmp));
tmp *= pow(0.5*(1.0-b), double(id));
V3Dt += tmp;
// normalize
double fac = pow(2.0, (2.0*id + jd+1.5));
V3Dr *= fac; V3Ds *= fac; V3Dt *= fac;
}
示例2: apply
//---------------------------------------------------------
void Maxwell2D::SetIC()
//---------------------------------------------------------
{
// Set initial conditions for simulation
mmode = 1.0; nmode = 1.0;
//Ez = sin(mmode*pi*x) .* sin(nmode*pi*y);
DVec tsinx = apply(sin, (mmode*pi*x)),
tsiny = apply(sin, (nmode*pi*y));
Ezinit = tsinx.dm(tsiny);
Ez = Ezinit;
Hx = 0.0;
Hy = 0.0;
}
示例3: sqrt
//---------------------------------------------------------
void MaxwellCurved2D::SetIC()
//---------------------------------------------------------
{
#if (0)
// NBN: to compare with base version
// Maxwell2D::SetIC();
// return;
#endif
// Set initial conditions for simulation
// First 6 modes of eigenmodes with 6 azimuthal periods
m_alpha.resize(6);
m_alpha(1) = 9.936109524217684;
m_alpha(2) = 13.589290170541217;
m_alpha(3) = 17.003819667816014;
m_alpha(4) = 20.320789213566506;
m_alpha(5) = 23.586084435581391;
m_alpha(6) = 26.820151983411403;
// this configuration has an analytic solution
// Note: analytic sol. depends on m_Ezinit:
m_bHasAnalyticSol = true;
// choose radial mode
alpha0 = m_alpha(2);
m_theta = atan2(y,x);
m_rad = sqrt(sqr(x) + sqr(y));
//Ez = besselj(6, alpha0*rad).*cos(6*theta);
DVec tbsslj = besselj(6, alpha0 * m_rad);
DVec tcosth = apply(cos, (6.0 * m_theta));
Ezinit = tbsslj.dm(tcosth);
Ez = Ezinit;
Hx = 0.0;
Hy = 0.0;
}
示例4: xI
//---------------------------------------------------------
void CurvedINS2D::KovasznayBC2D
(
const DVec& xin, // [in]
const DVec& yin, // [in]
const DVec& nxi, // [in]
const DVec& nyi, // [in]
const IVec& MAPI, // [in]
const IVec& MAPO, // [in]
const IVec& MAPW, // [in]
const IVec& MAPC, // [in]
double ti, // [in]
double nu, // [in]
DVec& BCUX, // [out]
DVec& BCUY, // [out]
DVec& BCPR, // [out]
DVec& BCDUNDT // [out]
)
//---------------------------------------------------------
{
// function [bcUx, bcUy, bcPR, bcdUndt] = KovasznayBC2D(x, y, nx, ny, MAPI, MAPO, MAPW, MAPC, time, nu)
// Purpose: evaluate boundary conditions for Kovasznay flow
static DVec xI("xI"), yI("yI"), xO("xO"), yO("yO");
int len = xin.size();
BCUX.resize(len); BCUY.resize(len); // resize result arrays
BCPR.resize(len); BCDUNDT.resize(len); // and set to zero
double lam = (0.5/nu) - sqrt( (0.25/SQ(nu)) + 4.0*SQ(pi));
// inflow
#ifdef _MSC_VER
xI = xin(MAPI); yI = yin(MAPI);
#else
int Ni=MAPI.size(), n=0; xI.resize(Ni); yI.resize(Ni);
for (n=1;n<=Ni;++n) {xI(n)=xin(MAPI(n));}
for (n=1;n<=Ni;++n) {yI(n)=yin(MAPI(n));}
#endif
DVec elamXI = exp(lam*xI), twopiyI = 2.0*pi*yI;
BCUX(MAPI) = 1.0 - elamXI.dm(cos(twopiyI));
BCUY(MAPI) = (0.5*lam/pi) * elamXI.dm(sin(twopiyI));
// outflow
#ifdef _MSC_VER
xO = xin(MAPO); yO = yin(MAPO);
#else
int No=MAPO.size(); xO.resize(No); yO.resize(No);
for (n=1;n<=No;++n) {xO(n)=xin(MAPO(n));}
for (n=1;n<=No;++n) {yO(n)=yin(MAPO(n));}
#endif
DVec elamXO = exp(lam*xO), twopiyO = 2.0*pi*yO;
BCPR (MAPO) = 0.5*(1.0-exp(2.0*lam*xO));
//BCDUNDT(MAPO) = -lam*elamXO.dm(cos(twopiyO));
if (0) {
// THIS WORKED
BCUX(MAPO) = 1.0 - elamXO.dm(cos(twopiyO));
BCUY(MAPO) = (0.5*lam/pi) * elamXO.dm(sin(twopiyO));
} else {
// Neumann data for each velocity
BCUX(MAPO) = -lam* elamXO.dm(cos(twopiyO));
BCUY(MAPO) = lam*(0.5*lam/pi) * elamXO.dm(sin(twopiyO));
}
}