本文整理汇总了C++中ExportVariable::getFullName方法的典型用法代码示例。如果您正苦于以下问题:C++ ExportVariable::getFullName方法的具体用法?C++ ExportVariable::getFullName怎么用?C++ ExportVariable::getFullName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExportVariable
的用法示例。
在下文中一共展示了ExportVariable::getFullName方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setupSolveReuseComplete
returnValue ExportGaussElim::setupSolveReuseComplete( ExportFunction& _solveReuse, ExportVariable& _bPerm ) {
ExportIndex run1( "i" );
ExportIndex run2( "j" );
ExportIndex tmp_index1( "index1" );
ExportIndex tmp_index2( "index2" );
ExportVariable tmp( "tmp_var", 1, 1, _bPerm.getType(), ACADO_LOCAL, true );
_solveReuse.addIndex( run1 );
_solveReuse.addIndex( run2 );
_solveReuse.addIndex( tmp_index1 );
_solveReuse.addIndex( tmp_index2 );
_solveReuse.addDeclaration(tmp);
uint run3;
if (nRightHandSides <= 0)
return ACADOERROR(RET_INVALID_OPTION);
ExportForLoop loop1( run1, 0, dim );
loop1 << run2.getName() << " = " << rk_perm.getFullName() << "[" << run1.getName() << "]*" << toString(nRightHandSides) << ";\n";
for( run3 = 0; run3 < nRightHandSides; run3++ ) {
loop1 << _bPerm.get( run1,run3 ) << " = b[" << run2.getName() << "+" << toString(run3) << "];\n";
}
_solveReuse.addStatement( loop1 );
ExportForLoop loop2( run2, 1, dim ); // row run2
loop2.addStatement( tmp_index1 == run2*nRightHandSides );
ExportForLoop loop3( run1, 0, run2 ); // column run1
loop3.addStatement( tmp_index2 == run1*nRightHandSides );
loop3.addStatement( tmp == A.getElement(run2,run1) );
for( run3 = 0; run3 < nRightHandSides; run3++ ) {
// loop3.addStatement( _bPerm.getElement( run2,run3 ) += tmp * _bPerm.getElement( run1,run3 ) );
loop3 << _bPerm.getFullName() << "[" << tmp_index1.getName() << "+" << toString(run3) << "] += " << tmp.getName() << "*" << _bPerm.getFullName() << "[" << tmp_index2.getName() << "+" << toString(run3) << "];\n";
}
loop2.addStatement( loop3 );
_solveReuse.addStatement( loop2 );
// Solve the upper triangular system of equations:
ExportForLoop loop4( run1, dim-1, -1, -1 );
loop4.addStatement( tmp_index1 == run1*nRightHandSides );
ExportForLoop loop5( run2, dim-1, run1, -1 );
loop5.addStatement( tmp_index2 == run2*nRightHandSides );
loop5.addStatement( tmp == A.getElement( run1,run2 ) );
for( run3 = 0; run3 < nRightHandSides; run3++ ) {
// loop5.addStatement( _bPerm.getElement( run1,run3 ) -= tmp * _bPerm.getElement( run2,run3 ) );
loop5 << _bPerm.getFullName() << "[" << tmp_index1.getName() << "+" << toString(run3) << "] -= " << tmp.getName() << "*" << _bPerm.getFullName() << "[" << tmp_index2.getName() << "+" << toString(run3) << "];\n";
}
loop4.addStatement( loop5 );
loop4 << tmp.getName() << " = 1.0/A[" << run1.getName() << "*" << toString(dim+1) << "];\n";
for( run3 = 0; run3 < nRightHandSides; run3++ ) {
// loop4 << _bPerm.get( run1,run3 ) << " = " << _bPerm.get( run1,run3 ) << "*" << tmp.getName() << ";\n";
loop4 << _bPerm.getFullName() << "[" << tmp_index1.getName() << "+" << toString(run3) << "] = " << tmp.getName() << "*" << _bPerm.getFullName() << "[" << tmp_index1.getName() << "+" << toString(run3) << "];\n";
}
_solveReuse.addStatement( loop4 );
_solveReuse.addStatement( b == _bPerm );
return SUCCESSFUL_RETURN;
}
示例2: setupFactorization
returnValue ExportGaussElim::setupFactorization( ExportFunction& _solve, ExportVariable& _swap, ExportVariable& _determinant, const string& absF ) {
uint run1, run2, run3;
ExportIndex i( "i" );
_solve.addIndex( i );
ExportIndex j( "j" );
ExportIndex k( "k" );
ExportVariable indexMax( "indexMax", 1, 1, INT, ACADO_LOCAL, true );
ExportVariable intSwap( "intSwap", 1, 1, INT, ACADO_LOCAL, true );
ExportVariable valueMax( "valueMax", 1, 1, REAL, ACADO_LOCAL, true );
ExportVariable temp( "temp", 1, 1, REAL, ACADO_LOCAL, true );
if( !UNROLLING ) {
_solve.addIndex( j );
_solve.addIndex( k );
_solve.addDeclaration( indexMax );
if( REUSE ) _solve.addDeclaration( intSwap );
_solve.addDeclaration( valueMax );
_solve.addDeclaration( temp );
}
// initialise rk_perm (the permutation vector)
if( REUSE ) {
ExportForLoop loop1( i,0,dim );
loop1 << rk_perm.get( 0,i ) << " = " << i.getName() << ";\n";
_solve.addStatement( loop1 );
}
_solve.addStatement( _determinant == 1 );
if( UNROLLING || dim <= 5 ) {
// Start the factorization:
for( run1 = 0; run1 < (dim-1); run1++ ) {
// Search for pivot in column run1:
for( run2 = run1+1; run2 < dim; run2++ ) {
// add the test (if or else if):
stringstream test;
if( run2 == (run1+1) ) {
test << "if(";
} else {
test << "else if(";
}
test << absF << "(A[" << toString( run2*dim+run1 ) << "]) > " << absF << "(A[" << toString( run1*dim+run1 ) << "])";
for( run3 = run1+1; run3 < dim; run3++ ) {
if( run3 != run2) {
test << " && " << absF << "(A[" << toString( run2*dim+run1 ) << "]) > " << absF << "(A[" << toString( run3*dim+run1 ) << "])";
}
}
test << ") {\n";
_solve.addStatement( test.str() );
// do the row swaps:
// for A:
for( run3 = 0; run3 < dim; run3++ ) {
_solve.addStatement( _swap == A.getSubMatrix( run1,run1+1,run3,run3+1 ) );
_solve.addStatement( A.getSubMatrix( run1,run1+1,run3,run3+1 ) == A.getSubMatrix( run2,run2+1,run3,run3+1 ) );
_solve.addStatement( A.getSubMatrix( run2,run2+1,run3,run3+1 ) == _swap );
}
if( REUSE ) { // rk_perm also needs to be updated if it needs to be possible to reuse the factorization
_solve.addStatement( intSwap == rk_perm.getCol( run1 ) );
_solve.addStatement( rk_perm.getCol( run1 ) == rk_perm.getCol( run2 ) );
_solve.addStatement( rk_perm.getCol( run2 ) == intSwap );
}
_solve.addStatement( "}\n" );
}
// potentially needed row swaps are done
_solve.addLinebreak();
// update of the next rows:
for( run2 = run1+1; run2 < dim; run2++ ) {
_solve << "A[" << toString( run2*dim+run1 ) << "] = -A[" << toString( run2*dim+run1 ) << "]/A[" << toString( run1*dim+run1 ) << "];\n";
_solve.addStatement( A.getSubMatrix( run2,run2+1,run1+1,dim ) += A.getSubMatrix( run2,run2+1,run1,run1+1 ) * A.getSubMatrix( run1,run1+1,run1+1,dim ) );
_solve.addLinebreak();
}
_solve.addStatement( _determinant == _determinant*A.getSubMatrix(run1,run1+1,run1,run1+1) );
_solve.addLinebreak();
}
_solve.addStatement( _determinant == _determinant*A.getSubMatrix(dim-1,dim,dim-1,dim) );
_solve.addLinebreak();
}
else { // without UNROLLING:
_solve << "for( i=0; i < (" << toString( dim-1 ) << "); i++ ) {\n";
_solve << " indexMax = i;\n";
_solve << " valueMax = " << absF << "(A[i*" << toString( dim ) << "+i]);\n";
_solve << " for( j=(i+1); j < " << toString( dim ) << "; j++ ) {\n";
_solve << " temp = " << absF << "(A[j*" << toString( dim ) << "+i]);\n";
_solve << " if( temp > valueMax ) {\n";
_solve << " indexMax = j;\n";
_solve << " valueMax = temp;\n";
_solve << " }\n";
_solve << " }\n";
_solve << " if( indexMax > i ) {\n";
ExportForLoop loop2( k,0,dim );
loop2 << " " << _swap.getFullName() << " = A[i*" << toString( dim ) << "+" << k.getName() << "];\n";
loop2 << " A[i*" << toString( dim ) << "+" << k.getName() << "] = A[indexMax*" << toString( dim ) << "+" << k.getName() << "];\n";
loop2 << " A[indexMax*" << toString( dim ) << "+" << k.getName() << "] = " << _swap.getFullName() << ";\n";
_solve.addStatement( loop2 );
if( REUSE ) {
_solve << " " << intSwap.getFullName() << " = " << rk_perm.getFullName() << "[i];\n";
_solve << " " << rk_perm.getFullName() << "[i] = " << rk_perm.getFullName() << "[indexMax];\n";
_solve << " " << rk_perm.getFullName() << "[indexMax] = " << intSwap.getFullName() << ";\n";
//.........这里部分代码省略.........
示例3: setupSolveReuse
returnValue ExportGaussElim::setupSolveReuse( ExportFunction& _solveReuse, ExportFunction& _solveTriangular, ExportVariable& _bPerm ) {
uint run1, run2;
if (nRightHandSides > 0)
return ACADOERROR(RET_INVALID_OPTION);
for( run1 = 0; run1 < dim; run1++ ) {
_solveReuse << _bPerm.get( run1,0 ) << " = b[" << rk_perm.getFullName() << "[" << toString( run1 ) << "]];\n";
}
for( run2 = 1; run2 < dim; run2++ ) { // row run2
for( run1 = 0; run1 < run2; run1++ ) { // column run1
_solveReuse << _bPerm.get( run2,0 ) << " += A[" << toString( run2*dim+run1 ) << "]*" << _bPerm.getFullName() << "[" << toString( run1 ) << "];\n";
}
_solveReuse.addLinebreak();
}
_solveReuse.addLinebreak();
_solveReuse.addFunctionCall( _solveTriangular, A, _bPerm );
_solveReuse.addStatement( b == _bPerm );
return SUCCESSFUL_RETURN;
}
示例4: getCode
returnValue DiscreteTimeExport::getCode( ExportStatementBlock& code
)
{
int useOMP;
get(CG_USE_OPENMP, useOMP);
if ( useOMP ) {
ExportVariable max = getAuxVariable();
max.setName( "auxVar" );
max.setDataStruct( ACADO_LOCAL );
if( NX2 > 0 ) {
rhs.setGlobalExportVariable( max );
diffs_rhs.setGlobalExportVariable( max );
}
if( NX3 > 0 ) {
rhs3.setGlobalExportVariable( max );
diffs_rhs3.setGlobalExportVariable( max );
}
getDataDeclarations( code, ACADO_LOCAL );
stringstream s;
s << "#pragma omp threadprivate( "
<< max.getFullName() << ", "
<< rk_xxx.getFullName();
if( NX1 > 0 ) {
if( grid.getNumIntervals() > 1 || !equidistantControlGrid() ) s << ", " << rk_diffsPrev1.getFullName();
s << ", " << rk_diffsNew1.getFullName();
}
if( NX2 > 0 || NXA > 0 ) {
if( grid.getNumIntervals() > 1 || !equidistantControlGrid() ) s << ", " << rk_diffsPrev2.getFullName();
s << ", " << rk_diffsNew2.getFullName();
}
if( NX3 > 0 ) {
if( grid.getNumIntervals() > 1 || !equidistantControlGrid() ) s << ", " << rk_diffsPrev3.getFullName();
s << ", " << rk_diffsNew3.getFullName();
s << ", " << rk_diffsTemp3.getFullName();
}
s << " )" << endl << endl;
code.addStatement( s.str().c_str() );
}
if( NX1 > 0 ) {
code.addFunction( lin_input );
code.addStatement( "\n\n" );
}
if( NX2 > 0 ) {
code.addFunction( rhs );
code.addStatement( "\n\n" );
code.addFunction( diffs_rhs );
code.addStatement( "\n\n" );
}
if( NX3 > 0 ) {
code.addFunction( rhs3 );
code.addStatement( "\n\n" );
code.addFunction( diffs_rhs3 );
code.addStatement( "\n\n" );
}
if( !equidistantControlGrid() ) {
ExportVariable numStepsV( "numSteps", numSteps, STATIC_CONST_INT );
code.addDeclaration( numStepsV );
code.addLinebreak( 2 );
}
double h = (grid.getLastTime() - grid.getFirstTime())/grid.getNumIntervals();
code.addComment(std::string("Fixed step size:") + toString(h));
code.addFunction( integrate );
return SUCCESSFUL_RETURN;
}