Skip to content

Commit

Permalink
- add auxiliary function for printing sparse structure of jacobian A
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24851 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Mar 2, 2015
1 parent 2cdd472 commit ae60742
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 1 deletion.
49 changes: 49 additions & 0 deletions SimulationRuntime/c/simulation/solver/model_help.c
Expand Up @@ -340,6 +340,55 @@ void printParameters(DATA *data, int stream)
TRACE_POP
}

/*! \fn printSparseStructure
*
* prints sparse structure of jacobian A
*
* \param [in] [data]
* \param [in] [stream]
*
* \author lochel
*/
void printSparseStructure(DATA *data, int stream)
{
const int index = data->callback->INDEX_JAC_A;
unsigned int row, col, i;
char buffer[2048];

infoStreamPrint(stream, 1, "sparse structure of jacobian A [size: %ux%u]", data->simulationInfo.analyticJacobians[index].sizeRows, data->simulationInfo.analyticJacobians[index].sizeCols);
infoStreamPrint(stream, 0, "%u nonzero elements", data->simulationInfo.analyticJacobians[index].sparsePattern.numberOfNoneZeros);
/*
sprintf(buffer, "");
for(row=0; row < data->simulationInfo.analyticJacobians[index].sizeRows; row++)
sprintf(buffer, "%s%u ", buffer, data->simulationInfo.analyticJacobians[index].sparsePattern.leadindex[row]);
infoStreamPrint(stream, 0, "leadindex: %s", buffer);
sprintf(buffer, "");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sparsePattern.numberOfNoneZeros; i++)
sprintf(buffer, "%s%u ", buffer, data->simulationInfo.analyticJacobians[index].sparsePattern.index[i]);
infoStreamPrint(stream, 0, "index: %s", buffer);
*/
infoStreamPrint(stream, 1, "transposed sparse structure (rows: states)");
i=0;
for(row=0; row < data->simulationInfo.analyticJacobians[index].sizeRows; row++)
{
sprintf(buffer, "");
for(col=0; i < data->simulationInfo.analyticJacobians[index].sparsePattern.leadindex[row]; col++)
{
if(data->simulationInfo.analyticJacobians[index].sparsePattern.index[i] == col)
{
sprintf(buffer, "%s* ", buffer);
++i;
}
else
sprintf(buffer, "%s ", buffer);
}
infoStreamPrint(stream, 0, "%s", buffer);
}
messageClose(stream);
messageClose(stream);
}

#ifdef USE_DEBUG_OUTPUT
/*! \fn printRelationsDebug
*
Expand Down
1 change: 1 addition & 0 deletions SimulationRuntime/c/simulation/solver/model_help.h
Expand Up @@ -99,6 +99,7 @@ void printAllVars(DATA *data, int ringSegment, int stream);
void printRelations(DATA *data, int stream);
void printZeroCrossings(DATA *data, int stream);
void printParameters(DATA *data, int stream);
void printSparseStructure(DATA *data, int stream);

void overwriteOldSimulationData(DATA *data);
void copyRingBufferSimulationData(DATA *data, SIMULATION_DATA **destData, RINGBUFFER* destRing);
Expand Down
1 change: 1 addition & 0 deletions SimulationRuntime/c/simulation/solver/perform_simulation.c
Expand Up @@ -122,6 +122,7 @@ int prefixedName_performSimulation(DATA* data, SOLVER_INFO* solverInfo)
}

printAllVarsDebug(data, 0, LOG_DEBUG); /* ??? */
printSparseStructure(data, LOG_SOLVER);

/***** Start main simulation loop *****/
while(solverInfo->currentTime < simInfo->stopTime)
Expand Down
1 change: 0 additions & 1 deletion SimulationRuntime/c/simulation/solver/solver_main.c
Expand Up @@ -606,7 +606,6 @@ int solver_main(DATA* data, const char* init_initMethod, const char* init_file,
}
omc_alloc_interface.collect_a_little();


if(0 == retVal)
{
/* if the model has no time changing variables skip the main loop*/
Expand Down

0 comments on commit ae60742

Please sign in to comment.