本文整理汇总了C++中ObjRef::variablesString方法的典型用法代码示例。如果您正苦于以下问题:C++ ObjRef::variablesString方法的具体用法?C++ ObjRef::variablesString怎么用?C++ ObjRef::variablesString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ObjRef
的用法示例。
在下文中一共展示了ObjRef::variablesString方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: update
//.........这里部分代码省略.........
// distinguish between 'proper' and 'computed' constants...
// (See https://tracker.physiomeproject.org/show_bug.cgi?id=3499)
static const QRegularExpression InitializationStatementRegEx = QRegularExpression("^(CONSTANTS|RATES|STATES)\\[\\d*\\] = [+-]?\\d*\\.?\\d+([eE][+-]?\\d+)?;$");
QStringList initConstsList = cleanCode(genericCodeInformation->initConstsString()).split("\n");
QString initConsts = QString();
QString compCompConsts = QString();
foreach (const QString &initConst, initConstsList) {
// Add the statement either to our list of 'proper' constants or
// 'computed' constants
if (InitializationStatementRegEx.match(initConst).hasMatch())
initConsts += (initConsts.isEmpty()?QString():"\n")+initConst;
else
compCompConsts += (compCompConsts.isEmpty()?QString():"\n")+initConst;
}
modelCode += functionCode("int initializeConstants(double *CONSTANTS, double *RATES, double *STATES)",
initConsts, true);
modelCode += "\n";
modelCode += functionCode("int computeComputedConstants(double *CONSTANTS, double *RATES, double *STATES)",
compCompConsts, true);
modelCode += "\n";
// Retrieve the body of the remaining functions
if (mModelType == CellmlFileRuntime::Ode) {
modelCode += functionCode("int computeOdeRates(double VOI, double *CONSTANTS, double *RATES, double *STATES, double *ALGEBRAIC)",
cleanCode(mOdeCodeInformation->ratesString()));
modelCode += "\n";
modelCode += functionCode("int computeOdeVariables(double VOI, double *CONSTANTS, double *RATES, double *STATES, double *ALGEBRAIC)",
cleanCode(genericCodeInformation->variablesString()));
} else {
modelCode += functionCode("int computeDaeEssentialVariables(double VOI, double *CONSTANTS, double *RATES, double *OLDRATES, double *STATES, double *OLDSTATES, double *ALGEBRAIC, double *CONDVAR)",
cleanCode(mDaeCodeInformation->essentialVariablesString()));
modelCode += "\n";
modelCode += functionCode("int computeDaeResiduals(double VOI, double *CONSTANTS, double *RATES, double *OLDRATES, double *STATES, double *OLDSTATES, double *ALGEBRAIC, double *CONDVAR, double *resid)",
cleanCode(mDaeCodeInformation->ratesString()));
modelCode += "\n";
modelCode += functionCode("int computeDaeRootInformation(double VOI, double *CONSTANTS, double *RATES, double *OLDRATES, double *STATES, double *OLDSTATES, double *ALGEBRAIC, double *CONDVAR)",
cleanCode(mDaeCodeInformation->rootInformationString()));
modelCode += functionCode("int computeDaeStateInformation(double *SI)",
cleanCode(mDaeCodeInformation->stateInformationString()));
modelCode += "\n";
modelCode += functionCode("int computeDaeVariables(double VOI, double *CONSTANTS, double *RATES, double *STATES, double *ALGEBRAIC, double *CONDVAR)",
cleanCode(genericCodeInformation->variablesString()));
}
// Check whether the model code contains a definite integral, otherwise
// compute it and check that everything went fine
if (modelCode.contains("defint(func")) {
mIssues << CellmlFileIssue(CellmlFileIssue::Error,
QObject::tr("definite integrals are not yet supported"));
} else if (!mCompilerEngine->compileCode(modelCode)) {
mIssues << CellmlFileIssue(CellmlFileIssue::Error,
mCompilerEngine->error());
}
// Keep track of the ODE/DAE functions, but only if no issues were reported
if (mIssues.count()) {
reset(true, false);
} else {
示例2: generateCodeForModel
//.........这里部分代码省略.........
<< "double floor(double x);\n"
<< "double pow(double x, double y);\n"
<< "double factorial(double x);\n"
<< "double log(double x);\n"
<< "double arbitrary_log(double x, double base);\n"
<< "double gcd_pair(double a, double b);\n"
<< "double lcm_pair(double a, double b);\n"
<< "double gcd_multi(unsigned int size, ...);\n"
<< "double lcm_multi(unsigned int size, ...);\n"
<< "double multi_min(unsigned int size, ...);\n"
<< "double multi_max(unsigned int size, ...);\n"
<< "void NR_MINIMISE(double(*func)"
"(double VOI, double *C, double *R, double *S, double *A),"
"double VOI, double *C, double *R, double *S, double *A, "
"double *V);\n";
std::wstring frag = cci->functionsString();
code << ws2s(frag);
int nAlgebraic = cci->algebraicIndexCount();
int nConstants = cci->constantIndexCount();
code << "\n\nvoid csim_rhs_routine(double VOI, double* CSIM_STATE, double* CSIM_RATE, double* CSIM_OUTPUT, "
<< "double* CSIM_INPUT)\n{\n\n"
<< "double DUMMY_ASSIGNMENT;\n"
<< "double CONSTANTS["
<< nConstants
<< "], ALGEBRAIC["
<< nAlgebraic
<< "];\n\n";
/* initConsts - all variables which aren't state variables but have
* an initial_value attribute, and any variables & rates
* which follow.
*/
code << ws2s(cci->initConstsString());
/* rates - All rates which are not static.
*/
code << ws2s(cci->ratesString());
/* variables - All variables not computed by initConsts or rates
* (i.e., these are not required for the integration of the model and
* thus only need to be called for output or presentation or similar
* purposes)
*/
code << ws2s(cci->variablesString());
// add in the setting of any outputs that are not already defined
for (unsigned int i=0; i < capi->cevas->length(); i++)
{
ObjRef<iface::cellml_services::ConnectedVariableSet> cvs = capi->cevas->getVariableSet(i);
ObjRef<iface::cellml_api::CellMLVariable> sv = cvs->sourceVariable();
std::string currentId = getVariableUniqueId(sv);
std::map<std::string, unsigned char>::iterator typeit(variableTypes.find(currentId));
if (typeit != variableTypes.end())
{
unsigned char vType = typeit->second;
if (vType & csim::OutputType)
{
if (vType & csim::StateType)
code << "CSIM_OUTPUT[" << variableIndices[currentId][csim::OutputType]
<< "] = CSIM_STATE[" << variableIndices[currentId][csim::StateType]
<< "];\n";
else if (vType & csim::InputType)
code << "CSIM_OUTPUT[" << variableIndices[currentId][csim::OutputType]
<< "] = CSIM_INPUT[" << variableIndices[currentId][csim::InputType]
<< "];\n";
else if (vType & csim::IndependentType)
code << "CSIM_OUTPUT[" << variableIndices[currentId][csim::OutputType]
<< "] = VOI;\n";
}
}
}
// close the subroutine
code << "\n\n}//csim_rhs_routine()\n\n";
// and now clear out initialisation of state variables and known variables from
// the RHS routine.
codeString = clearCodeAssignments(code.str(), "CSIM_STATE", numberOfStates);
codeString = clearCodeAssignments(codeString, "CSIM_INPUT", numberOfInputs);
// and finally create the initialisation routine
std::stringstream initRoutine;
initRoutine << "\nvoid csim_initialise_routine(double* CSIM_STATE, double* CSIM_OUTPUT, double* CSIM_INPUT)\n{\n";
// FIXME: this doesn't need to be in the interface?
initRoutine << "double CSIM_RATES[" << numberOfStates << "];\n";
initRoutine << "double CONSTANTS[" << nConstants << "];\n";
initRoutine << ws2s(cci->initConstsString());
initRoutine << "\n}\n";
codeString += initRoutine.str();
}
catch (...)
{
std::cerr << "CellML Model Definition::generateCodeForModel: something went wrong generating code?" << std::endl;
return "";
}
return codeString;
}