Skip to content

Commit

Permalink
- Added option to the simulation runtime: +logFormat=[text|xml]
Browse files Browse the repository at this point in the history
- The XML-based format will make it possible to read most messages into OMEdit in a structured way. Some messages may need to be collapsed into a single call in order to treat it as a single call
- The macros INDENT() and RELEASE() have been removed as they are specific to the text-based output. The message functions now take more arguments instead.


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18357 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Nov 30, 2013
1 parent 323f946 commit dcacc9a
Show file tree
Hide file tree
Showing 39 changed files with 1,119 additions and 1,166 deletions.
40 changes: 21 additions & 19 deletions Compiler/Template/CodegenC.tpl
Expand Up @@ -1104,10 +1104,10 @@ template functionCallExternalObjectConstructors(ExtObjInfo extObjInfo, String mo
{
<%varDecls%>
/* data->simulationInfo.extObjs = NULL; */
infoStreamPrint(LOG_DEBUG, "call external Object Constructors");
infoStreamPrint(LOG_DEBUG, 0, "call external Object Constructors");
<%ctorCalls%>
<%aliases |> (var1, var2) => '<%cref(var1)%> = <%cref(var2)%>;' ;separator="\n"%>
infoStreamPrint(LOG_DEBUG, "call external Object Constructors finished");
infoStreamPrint(LOG_DEBUG, 0, "call external Object Constructors finished");
}
>>
end match
Expand Down Expand Up @@ -1602,15 +1602,14 @@ template functionUpdateBoundStartValues(list<SimEqSystem> startValueEquations, S
<%eqPart%>
infoStreamPrint(LOG_INIT, "updating start-values");
INDENT(LOG_INIT);
infoStreamPrint(LOG_INIT, 1, "updating start-values");
<%startValueEquations |> SES_SIMPLE_ASSIGN(__) =>
<<
infoStreamPrint(LOG_INIT, "%s(start=<%crefToPrintfArg(cref)%>)", <%cref(cref)%>__varInfo.name, (<%crefType(cref)%>) <%cref(cref)%>);
infoStreamPrint(LOG_INIT, 0, "%s(start=<%crefToPrintfArg(cref)%>)", <%cref(cref)%>__varInfo.name, (<%crefType(cref)%>) <%cref(cref)%>);
$P$ATTRIBUTE<%cref(cref)%>.start = <%cref(cref)%>;
>>
;separator="\n"%>
RELEASE(LOG_INIT);
if (ACTIVE_STREAM(LOG_INIT)) messageClose(LOG_INIT);
return 0;
}
Expand Down Expand Up @@ -1657,7 +1656,7 @@ template functionInitialResidualBody(SimEqSystem eq, Text &varDecls /*BUFP*/, Te
let expPart = daeExp(exp, contextOther, &preExp /*BUFC*/, &varDecls /*BUFD*/)
<<
<%preExp%>initialResiduals[i++] = <%expPart%>;
infoStreamPrint(LOG_RES_INIT, "[%d]: %s = %g", i, <%symbolName(modelNamePrefix,"initialResidualDescription")%>(i-1), initialResiduals[i-1]);
infoStreamPrint(LOG_RES_INIT, 0, "[%d]: %s = %g", i, <%symbolName(modelNamePrefix,"initialResidualDescription")%>(i-1), initialResiduals[i-1]);
>>
end match
else
Expand Down Expand Up @@ -1706,10 +1705,9 @@ template functionInitialResidual(list<SimEqSystem> residualEquations, String mod
int i = 0;
<%varDecls%>
infoStreamPrint(LOG_RES_INIT, "updating initial residuals");
INDENT(LOG_RES_INIT);
infoStreamPrint(LOG_RES_INIT, 1, "updating initial residuals");
<%body%>
RELEASE(LOG_RES_INIT);
if (ACTIVE_STREAM(LOG_RES_INIT)) messageClose(LOG_RES_INIT);
return 0;
}
Expand All @@ -1728,7 +1726,7 @@ template functionInitialEquations(Boolean useSymbolicInitialization, list<SimEqS
>>
;separator="\n")

let errorMsg = if not useSymbolicInitialization then 'errorStreamPrint(LOG_INIT, "The symbolic initialization was not generated.");'
let errorMsg = if not useSymbolicInitialization then 'errorStreamPrint(LOG_INIT, 0, "The symbolic initialization was not generated.");'

<<
<%&tmp%>
Expand Down Expand Up @@ -1865,7 +1863,7 @@ template functionWhenReinitStatementThen(Boolean initialCall, list<WhenOperator>
if not initialCall then
"data->simulationInfo.needToIterate = 1;"
<<
infoStreamPrint(LOG_EVENTS, "reinit <%cref(stateVar)%> = %f", <%val%>);
infoStreamPrint(LOG_EVENTS, 0, "reinit <%cref(stateVar)%> = %f", <%val%>);
<%preExp%>
<%lhs%>
<%needToIterate%>
Expand Down Expand Up @@ -2589,16 +2587,21 @@ template functionZeroCrossing(list<ZeroCrossing> zeroCrossings, String modelName
let desc = match zeroCrossings
case {} then
<<
const char *<%symbolName(modelNamePrefix,"zeroCrossingDescription")%>(int i)
const char *<%symbolName(modelNamePrefix,"zeroCrossingDescription")%>(int i, int **out_EquationIndexes)
{
*out_EquationIndexes = NULL;
return "empty";
}
>>
else
<<
const char *<%symbolName(modelNamePrefix,"zeroCrossingDescription")%>(int i)
const char *<%symbolName(modelNamePrefix,"zeroCrossingDescription")%>(int i, int **out_EquationIndexes)
{
const char *res[] = {<%resDesc%>};
<%zeroCrossings |> ZERO_CROSSING(__) hasindex i0 =>
'const int occurEqs<%i0%>[] = {<%listLength(occurEquLst)%><%occurEquLst |> i => ',<%i%>'%>};' ; separator = "\n"%>
const int *occurEqs[] = {<%zeroCrossings |> ZERO_CROSSING(__) hasindex i0 => 'occurEqs<%i0%>' ; separator = ","%>};
*out_EquationIndexes = occurEqs[i];
return res[i];
}
>>
Expand Down Expand Up @@ -2776,7 +2779,7 @@ template functionCheckForDiscreteChanges(list<ComponentRef> discreteModelVars, S
<<
if(<%cref(var)%> != $P$PRE<%cref(var)%>)
{
infoStreamPrint(LOG_EVENTS_V, "discrete var changed: <%crefStr(var)%> from <%crefToPrintfArg(var)%> to <%crefToPrintfArg(var)%>", $P$PRE<%cref(var)%>, <%cref(var)%>);
infoStreamPrint(LOG_EVENTS_V, 0, "discrete var changed: <%crefStr(var)%> from <%crefToPrintfArg(var)%> to <%crefToPrintfArg(var)%>", $P$PRE<%cref(var)%>, <%cref(var)%>);
needToIterate = 1;
}
>>
Expand All @@ -2787,10 +2790,9 @@ template functionCheckForDiscreteChanges(list<ComponentRef> discreteModelVars, S
{
int needToIterate = 0;
infoStreamPrint(LOG_EVENTS_V, "check for discrete changes");
INDENT(LOG_EVENTS_V);
infoStreamPrint(LOG_EVENTS_V, 1, "check for discrete changes");
<%changediscreteVars%>
RELEASE(LOG_EVENTS_V);
if (ACTIVE_STREAM(LOG_EVENTS_V)) messageClose(LOG_EVENTS_V);
return needToIterate;
}
Expand Down Expand Up @@ -7336,7 +7338,7 @@ template algStmtReinit(DAE.Statement stmt, Context context, Text &varDecls /*BUF
<<
<%preExp%>
<%expPart1%> = <%expPart2%>;
infoStreamPrint(LOG_EVENTS, "reinit <%expPart1%> = %f", <%expPart1%>);
infoStreamPrint(LOG_EVENTS, 0, "reinit <%expPart1%> = %f", <%expPart1%>);
data->simulationInfo.needToIterate = 1;
>>
end algStmtReinit;
Expand Down
26 changes: 13 additions & 13 deletions SimulationRuntime/c/linearization/linearize.cpp
Expand Up @@ -75,7 +75,7 @@ int functionJacA(DATA* data, double* jac){
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
{
infoStreamPrint(LOG_JAC,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
}
}

Expand All @@ -84,14 +84,14 @@ int functionJacA(DATA* data, double* jac){
for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC,"Print jac:");
infoStreamPrint(LOG_JAC,0,"Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++) {
Expand All @@ -116,7 +116,7 @@ int functionJacB(DATA* data, double* jac){
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
{
infoStreamPrint(LOG_JAC,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
}
}

Expand All @@ -125,14 +125,14 @@ int functionJacB(DATA* data, double* jac){
for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC, "Print jac:");
infoStreamPrint(LOG_JAC, 0, "Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
Expand All @@ -155,22 +155,22 @@ int functionJacC(DATA* data, double* jac){
{
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
infoStreamPrint(LOG_JAC,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
}

data->callback->functionJacC_column(data);

for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC, "Print jac:");
infoStreamPrint(LOG_JAC, 0, "Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
Expand All @@ -193,7 +193,7 @@ int functionJacD(DATA* data, double* jac){
{
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++) {
infoStreamPrint(LOG_JAC,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
}
}

Expand All @@ -202,14 +202,14 @@ int functionJacD(DATA* data, double* jac){
for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
infoStreamPrint(LOG_JAC,0, "write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC, "Print jac:");
infoStreamPrint(LOG_JAC, 0, "Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
Expand Down Expand Up @@ -288,7 +288,7 @@ int linearize(DATA* data)
assertStreamPrint(0!=fout,"Cannot open File %s",filename.c_str());
fprintf(fout, data->callback->linear_model_frame(), strX.c_str(), strU.c_str(), strA.c_str(), strB.c_str(), strC.c_str(), strD.c_str());
if(ACTIVE_STREAM(LOG_STATS)) {
infoStreamPrint(LOG_STATS, data->callback->linear_model_frame(), strX.c_str(), strU.c_str(), strA.c_str(), strB.c_str(), strC.c_str(), strD.c_str());
infoStreamPrint(LOG_STATS, 0, data->callback->linear_model_frame(), strX.c_str(), strU.c_str(), strA.c_str(), strB.c_str(), strC.c_str(), strD.c_str());
}
fflush(fout);
fclose(fout);
Expand Down
108 changes: 51 additions & 57 deletions SimulationRuntime/c/math-support/ddassl.c
Expand Up @@ -3751,41 +3751,38 @@ doublereal ddanrm_(integer *neq, doublereal *v, doublereal *wt, doublereal *
/* WBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWB */
if(ipar[1])
{
char *buffer = NULL;
nrow = npdm1;
i__1 = *neq;
i__2 = *neq;
buffer = (char*)malloc(20*(*neq)*sizeof(char));

infoStreamPrint(LOG_JAC, "at point in time: %g", *x);
INDENT(LOG_JAC);

infoStreamPrint(LOG_JAC, "cj: %g", *cj);
infoStreamPrint(LOG_JAC, "states");
INDENT(LOG_JAC);
for(k=0;k<*neq;k++)
{
infoStreamPrint(LOG_JAC, "[%ld] %g", (long) k+1, y[k+1]);
}
RELEASE(LOG_JAC);

infoStreamPrint(LOG_JAC, "analytical Jacobian");
INDENT(LOG_JAC);
for(i__ = 1; i__ <= i__1; ++i__)
{
wm[nrow+i__] += *cj;
sprintf(buffer, "%c", '\0');
for(l = 1; l <= i__2; ++l)
if (ACTIVE_STREAM(LOG_JAC)) {
char *buffer = (char*)malloc(20*(*neq)*sizeof(char));
infoStreamPrint(LOG_JAC, 1, "at point in time: %g", *x);

infoStreamPrint(LOG_JAC, 0, "cj: %g", *cj);
infoStreamPrint(LOG_JAC, 1, "states");
for(k=0;k<*neq;k++)
{
infoStreamPrint(LOG_JAC, 0, "[%ld] %g", (long) k+1, y[k+1]);
}
messageClose(LOG_JAC);

infoStreamPrint(LOG_JAC, 1, "analytical Jacobian");
for(i__ = 1; i__ <= i__1; ++i__)
{
sprintf(buffer, "%s%g ", buffer, wm[nrow + l]);
wm[nrow+i__] += *cj;
sprintf(buffer, "%c", '\0');
for(l = 1; l <= i__2; ++l)
{
sprintf(buffer, "%s%g ", buffer, wm[nrow + l]);
}
infoStreamPrint(LOG_JAC, 0, "%s", buffer);
wm[nrow+i__] -= *cj;
nrow += *neq;
}
infoStreamPrint(LOG_JAC, "%s", buffer);
wm[nrow+i__] -= *cj;
nrow += *neq;
messageClose(LOG_JAC);
messageClose(LOG_JAC);
free(buffer);
}
RELEASE(LOG_JAC);
RELEASE(LOG_JAC);
free(buffer);
}
/* WBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWB */

Expand Down Expand Up @@ -3831,41 +3828,38 @@ doublereal ddanrm_(integer *neq, doublereal *v, doublereal *wt, doublereal *
/* WBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWB */
if(ipar[1])
{
char *buffer = NULL;
nrow = npdm1;
i__1 = *neq;
i__2 = *neq;
buffer = (char*)malloc(20*(*neq)*sizeof(char));

infoStreamPrint(LOG_JAC, "at point in time: %g", *x);
INDENT(LOG_JAC);

infoStreamPrint(LOG_JAC, "cj: %g", *cj);
infoStreamPrint(LOG_JAC, "states");
INDENT(LOG_JAC);
for(k=0;k<*neq;k++)
{
infoStreamPrint(LOG_JAC, "[%ld] %g", (long) k+1, y[k+1]);
}
RELEASE(LOG_JAC);

infoStreamPrint(LOG_JAC, "numerical Jacobian");
INDENT(LOG_JAC);
for(i__ = 1; i__ <= i__1; ++i__)
{
wm[nrow+i__] += *cj;
sprintf(buffer, "%c", '\0');
for(l = 1; l <= i__2; ++l)
if (ACTIVE_STREAM(LOG_JAC)) {
char *buffer = (char*)malloc(20*(*neq)*sizeof(char));
infoStreamPrint(LOG_JAC, 1, "at point in time: %g", *x);
infoStreamPrint(LOG_JAC, 0, "cj: %g", *cj);
infoStreamPrint(LOG_JAC, 1, "states");
for(k=0;k<*neq;k++)
{
infoStreamPrint(LOG_JAC, 0, "[%ld] %g", (long) k+1, y[k+1]);
}
messageClose(LOG_JAC);

infoStreamPrint(LOG_JAC, 1, "numerical Jacobian");
for(i__ = 1; i__ <= i__1; ++i__)
{
sprintf(buffer, "%s%g ", buffer, wm[nrow + l]);
wm[nrow+i__] += *cj;
sprintf(buffer, "%c", '\0');
for(l = 1; l <= i__2; ++l)
{
sprintf(buffer, "%s%g ", buffer, wm[nrow + l]);
}
infoStreamPrint(LOG_JAC, 0, "%s", buffer);
wm[nrow+i__] -= *cj;
nrow += *neq;
}
infoStreamPrint(LOG_JAC, "%s", buffer);
wm[nrow+i__] -= *cj;
nrow += *neq;
messageClose(LOG_JAC);
messageClose(LOG_JAC);
free(buffer);
}
RELEASE(LOG_JAC);
RELEASE(LOG_JAC);
free(buffer);
}
/* WBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWBWB */

Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/c/openmodelica_func.h
Expand Up @@ -208,7 +208,7 @@ int (*checkForDiscreteChanges)(DATA *data);
*
* This variable contains a description string for zero crossing condition.
*/
const char *(*zeroCrossingDescription)(int i);
const char *(*zeroCrossingDescription)(int i, const int **out_EquationIndexes);

/*! \var relationDescription
*
Expand Down
Expand Up @@ -64,7 +64,7 @@ int initial_guess_ipopt(IPOPT_DATA_ *iData,SOLVER_INFO* solverInfo)

tol = data->simulationInfo.tolerance;
data->simulationInfo.tolerance = fmin(fmax(tol,1e-8),1e-3);
infoStreamPrint(LOG_SOLVER, "Initializing DASSL");
infoStreamPrint(LOG_SOLVER, 0, "Initializing DASSL");
sInfo->solverMethod = "dasslColorSymJac";
solverInfo->solverMethod = S_DASSL;
dasrt_initial(iData->data, solverInfo, dasslData);
Expand Down

0 comments on commit dcacc9a

Please sign in to comment.