Skip to content

Commit

Permalink
Rename fmiVersion to fmiMajorVersion (#518)
Browse files Browse the repository at this point in the history
and add FMI version string to Model Description
  • Loading branch information
t-sommer authored Jun 24, 2024
1 parent 2de8eea commit 816be18
Show file tree
Hide file tree
Showing 13 changed files with 86 additions and 78 deletions.
49 changes: 28 additions & 21 deletions fmusim/FMIModelDescription.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ static FMIModelDescription* readModelDescriptionFMI1(xmlNodePtr root) {

CALL(FMICalloc((void**)&modelDescription, 1, sizeof(FMIModelDescription)));

modelDescription->fmiVersion = FMIVersion1;
modelDescription->fmiMajorVersion = FMIMajorVersion1;
modelDescription->modelName = (char*)xmlGetProp(root, (xmlChar*)"modelName");
modelDescription->instantiationToken = (char*)xmlGetProp(root, (xmlChar*)"guid");
modelDescription->description = (char*)xmlGetProp(root, (xmlChar*)"description");
Expand Down Expand Up @@ -283,12 +283,12 @@ static FMIModelDescription* readModelDescriptionFMI2(xmlNodePtr root) {

CALL(FMICalloc((void**)&modelDescription, 1, sizeof(FMIModelDescription)));

modelDescription->fmiVersion = FMIVersion2;
modelDescription->modelName = (char*)xmlGetProp(root, (xmlChar*)"modelName");
modelDescription->instantiationToken = (char*)xmlGetProp(root, (xmlChar*)"guid");
modelDescription->description = (char*)xmlGetProp(root, (xmlChar*)"description");
modelDescription->generationTool = (char*)xmlGetProp(root, (xmlChar*)"generationTool");
modelDescription->generationDate = (char*)xmlGetProp(root, (xmlChar*)"generationDate");
modelDescription->fmiMajorVersion = FMIMajorVersion2;
modelDescription->modelName = (char*)xmlGetProp(root, (xmlChar*)"modelName");
modelDescription->instantiationToken = (char*)xmlGetProp(root, (xmlChar*)"guid");
modelDescription->description = (char*)xmlGetProp(root, (xmlChar*)"description");
modelDescription->generationTool = (char*)xmlGetProp(root, (xmlChar*)"generationTool");
modelDescription->generationDate = (char*)xmlGetProp(root, (xmlChar*)"generationDate");
modelDescription->variableNamingConvention = getVariableNamingConvention(root);

const char* numberOfEventIndicators = (char*)xmlGetProp(root, (xmlChar*)"numberOfEventIndicators");
Expand Down Expand Up @@ -456,7 +456,7 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {

CALL(FMICalloc((void**)&modelDescription, 1, sizeof(FMIModelDescription)));

modelDescription->fmiVersion = FMIVersion3;
modelDescription->fmiMajorVersion = FMIMajorVersion3;
modelDescription->modelName = (char*)xmlGetProp(root, (xmlChar*)"modelName");
modelDescription->instantiationToken = (char*)xmlGetProp(root, (xmlChar*)"instantiationToken");
modelDescription->description = (char*)xmlGetProp(root, (xmlChar*)"description");
Expand Down Expand Up @@ -749,8 +749,8 @@ FMIModelDescription* FMIReadModelDescription(const char* filename) {
xmlSchemaParserCtxtPtr pctxt = NULL;
xmlSchemaValidCtxtPtr vctxt = NULL;
FMIModelDescription* modelDescription = NULL;
const char* version = NULL;
FMIVersion fmiVersion;
const char* fmiVersion = NULL;
FMIMajorVersion fmiMajorVersion;

doc = xmlParseFile(filename);

Expand All @@ -769,22 +769,22 @@ FMIModelDescription* FMIReadModelDescription(const char* filename) {
goto TERMINATE;
}

version = (char*)xmlGetProp(root, (xmlChar*)"fmiVersion");
fmiVersion = (char*)xmlGetProp(root, (xmlChar*)"fmiVersion");

if (!version) {
if (!fmiVersion) {
FMILogError("Attribute fmiVersion is missing.\n");
goto TERMINATE;
} else if (!strcmp(version, "1.0")) {
fmiVersion = FMIVersion1;
} else if (!strcmp(fmiVersion, "1.0")) {
fmiMajorVersion = FMIMajorVersion1;
pctxt = xmlSchemaNewMemParserCtxt((char*)fmi1Merged_xsd, fmi1Merged_xsd_len);
} else if (!strcmp(version, "2.0")) {
fmiVersion = FMIVersion2;
} else if (!strcmp(fmiVersion, "2.0")) {
fmiMajorVersion = FMIMajorVersion2;
pctxt = xmlSchemaNewMemParserCtxt((char*)fmi2Merged_xsd, fmi2Merged_xsd_len);
} else if(!strncmp(version, "3.", 2)) {
} else if(!strncmp(fmiVersion, "3.", 2)) {
pctxt = xmlSchemaNewMemParserCtxt((char*)fmi3Merged_xsd, fmi3Merged_xsd_len);
fmiVersion = FMIVersion3;
fmiMajorVersion = FMIMajorVersion3;
} else {
FMILogError("Unsupported FMI version: %s.\n", version);
FMILogError("Unsupported FMI version: %s.\n", fmiVersion);
goto TERMINATE;
}

Expand All @@ -806,14 +806,20 @@ FMIModelDescription* FMIReadModelDescription(const char* filename) {
goto TERMINATE;
}

if (fmiVersion == FMIVersion1) {
if (fmiMajorVersion == FMIMajorVersion1) {
modelDescription = readModelDescriptionFMI1(root);
} else if (fmiVersion == FMIVersion2) {
} else if (fmiMajorVersion == FMIMajorVersion2) {
modelDescription = readModelDescriptionFMI2(root);
} else {
modelDescription = readModelDescriptionFMI3(root);
}

if (modelDescription) {
modelDescription->fmiVersion = fmiVersion;
} else {
xmlFree((void*)fmiVersion);
}

TERMINATE:

if (vctxt) {
Expand Down Expand Up @@ -841,6 +847,7 @@ void FMIFreeModelDescription(FMIModelDescription* modelDescription) {
return;
}

xmlFree((void*)modelDescription->fmiVersion);
free((void*)modelDescription->modelName);
free((void*)modelDescription->instantiationToken);
free((void*)modelDescription->description);
Expand Down
3 changes: 2 additions & 1 deletion fmusim/FMIModelDescription.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ typedef struct {

typedef struct {

FMIVersion fmiVersion;
FMIMajorVersion fmiMajorVersion;
const char* fmiVersion;
const char* modelName;
const char* instantiationToken;
const char* description;
Expand Down
6 changes: 3 additions & 3 deletions fmusim/FMIRecorder.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ FMIStatus FMISample(FMIInstance* instance, double time, FMIRecorder* result) {
const FMIValueReference* vr = &variable->valueReference;
const FMIVariableType type = variable->type;

if (instance->fmiVersion == FMIVersion1) {
if (instance->fmiMajorVersion == FMIMajorVersion1) {

if (type == FMIRealType || type == FMIDiscreteRealType) {
fmi1Real value;
Expand All @@ -109,7 +109,7 @@ FMIStatus FMISample(FMIInstance* instance, double time, FMIRecorder* result) {
fprintf(file, ",\"%s\"", value);
}

} else if (instance->fmiVersion == FMIVersion2) {
} else if (instance->fmiMajorVersion == FMIMajorVersion2) {

if (type == FMIRealType || type == FMIDiscreteRealType) {
fmi2Real value;
Expand All @@ -129,7 +129,7 @@ FMIStatus FMISample(FMIInstance* instance, double time, FMIRecorder* result) {
fprintf(file, ",\"%s\"", value);
}

} else if (instance->fmiVersion == FMIVersion3) {
} else if (instance->fmiMajorVersion == FMIMajorVersion3) {

size_t nValues;

Expand Down
26 changes: 13 additions & 13 deletions fmusim/FMIUtil.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ FMIStatus FMI3SetValues(
(*nValues)++; \
}

FMIStatus FMIParseValues(FMIVersion fmiVersion, FMIVariableType type, const char* literal, size_t* nValues, void** values) {
FMIStatus FMIParseValues(FMIMajorVersion fmiMajorVersion, FMIVariableType type, const char* literal, size_t* nValues, void** values) {

FMIStatus status = FMIOK;

Expand Down Expand Up @@ -235,14 +235,14 @@ FMIStatus FMIParseValues(FMIVersion fmiVersion, FMIVariableType type, const char

size_t size = 0;

switch (fmiVersion) {
case FMIVersion1:
switch (fmiMajorVersion) {
case FMIMajorVersion1:
size = sizeof(fmi1Boolean);
break;
case FMIVersion2:
case FMIMajorVersion2:
size = sizeof(fmi2Boolean);
break;
case FMIVersion3:
case FMIMajorVersion3:
size = sizeof(fmi2Boolean);
break;
}
Expand Down Expand Up @@ -487,13 +487,13 @@ FMIStatus FMIRestoreFMUStateFromFile(FMIInstance* S, const char* filename) {

void* FMUState = NULL;

switch (S->fmiVersion) {
case FMIVersion2:
switch (S->fmiMajorVersion) {
case FMIMajorVersion2:
CALL(FMI2DeSerializeFMUstate(S, serializedFMUState, serializedFMUStateSize, &FMUState));
CALL(FMI2SetFMUstate(S, FMUState));
CALL(FMI2FreeFMUstate(S, FMUState));
break;
case FMIVersion3:
case FMIMajorVersion3:
CALL(FMI3DeserializeFMUState(S, serializedFMUState, serializedFMUStateSize, &FMUState));
CALL(FMI3SetFMUState(S, FMUState));
CALL(FMI3FreeFMUState(S, FMUState));
Expand All @@ -513,23 +513,23 @@ FMIStatus FMIRestoreFMUStateFromFile(FMIInstance* S, const char* filename) {

FMIStatus FMISaveFMUStateToFile(FMIInstance* S, const char* filename) {

if (S->fmiVersion == FMIVersion1) {
if (S->fmiMajorVersion == FMIMajorVersion1) {
return FMIError;
}

FMIStatus status = FMIOK;

void* FMUState = NULL;

if (S->fmiVersion == FMIVersion2) {
if (S->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2GetFMUstate(S, &FMUState));
} else {
CALL(FMI3GetFMUState(S, &FMUState));
}

size_t serializedFMUStateSize = 0;

if (S->fmiVersion == FMIVersion2) {
if (S->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2SerializedFMUstateSize(S, FMUState, &serializedFMUStateSize));
} else {
CALL(FMI3SerializedFMUStateSize(S, FMUState, &serializedFMUStateSize));
Expand All @@ -539,7 +539,7 @@ FMIStatus FMISaveFMUStateToFile(FMIInstance* S, const char* filename) {

CALL(FMICalloc((void**)&serializedFMUState, serializedFMUStateSize, sizeof(char)));

if (S->fmiVersion == FMIVersion2) {
if (S->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2SerializeFMUstate(S, FMUState, serializedFMUState, serializedFMUStateSize));
} else {
CALL(FMI3SerializeFMUState(S, FMUState, serializedFMUState, serializedFMUStateSize));
Expand All @@ -563,7 +563,7 @@ FMIStatus FMISaveFMUStateToFile(FMIInstance* S, const char* filename) {

free(serializedFMUState);

if (S->fmiVersion == FMIVersion2) {
if (S->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2FreeFMUstate(S, FMUState));
} else {
CALL(FMI3FreeFMUState(S, FMUState));
Expand Down
2 changes: 1 addition & 1 deletion fmusim/FMIUtil.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ FMIStatus FMI3SetValues(
const void* values,
size_t nValues);

FMIStatus FMIParseValues(FMIVersion fmiVerion, FMIVariableType type, const char* literal, size_t* nValues, void** values);
FMIStatus FMIParseValues(FMIMajorVersion fmiVerion, FMIVariableType type, const char* literal, size_t* nValues, void** values);

FMIStatus FMIParseStartValues(FMIVariableType type, const char* literal, size_t nValues, void* values);

Expand Down
16 changes: 8 additions & 8 deletions fmusim/fmusim.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ FMIStatus applyStartValues(FMIInstance* S, const FMISimulationSettings* settings

if (causality == FMIStructuralParameter && type == FMIUInt64Type) {

CALL(FMIParseValues(FMIVersion3, type, literal, &nValues, &values));
CALL(FMIParseValues(FMIMajorVersion3, type, literal, &nValues, &values));

if (!configurationMode) {
CALL(FMI3EnterConfigurationMode(S));
Expand Down Expand Up @@ -180,7 +180,7 @@ FMIStatus applyStartValues(FMIInstance* S, const FMISimulationSettings* settings
continue;
}

CALL(FMIParseValues(S->fmiVersion, type, literal, &nValues, &values));
CALL(FMIParseValues(S->fmiMajorVersion, type, literal, &nValues, &values));


if (variable->type == FMIBinaryType) {
Expand All @@ -190,11 +190,11 @@ FMIStatus applyStartValues(FMIInstance* S, const FMISimulationSettings* settings

} else {

if (S->fmiVersion == FMIVersion1) {
if (S->fmiMajorVersion == FMIMajorVersion1) {
CALL(FMI1SetValues(S, type, &vr, 1, values));
} else if (S->fmiVersion == FMIVersion2) {
} else if (S->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2SetValues(S, type, &vr, 1, values));
} else if (S->fmiVersion == FMIVersion3) {
} else if (S->fmiMajorVersion == FMIMajorVersion3) {
CALL(FMI3SetValues(S, type, &vr, 1, values, nValues));
}
}
Expand Down Expand Up @@ -425,7 +425,7 @@ int main(int argc, const char* argv[]) {
}
}

FMIPlatformBinaryPath(unzipdir, modelIdentifier, modelDescription->fmiVersion, platformBinaryPath, FMI_PATH_MAX);
FMIPlatformBinaryPath(unzipdir, modelIdentifier, modelDescription->fmiMajorVersion, platformBinaryPath, FMI_PATH_MAX);

S = FMICreateInstance("instance1", logMessage, logFMICalls ? logFunctionCall : NULL);

Expand Down Expand Up @@ -552,7 +552,7 @@ int main(int argc, const char* argv[]) {
goto TERMINATE;
}

if (modelDescription->fmiVersion == FMIVersion1) {
if (modelDescription->fmiMajorVersion == FMIMajorVersion1) {

if (interfaceType == FMICoSimulation) {

Expand All @@ -564,7 +564,7 @@ int main(int argc, const char* argv[]) {
status = simulateFMI1ME(S, modelDescription, result, input, &settings);
}

} else if (modelDescription->fmiVersion == FMIVersion2) {
} else if (modelDescription->fmiMajorVersion == FMIMajorVersion2) {

char resourceURI[FMI_PATH_MAX] = "";
CALL(FMIPathToURI(resourcePath, resourceURI, FMI_PATH_MAX));
Expand Down
28 changes: 14 additions & 14 deletions fmusim/fmusim_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ FMUStaticInput* FMIReadInput(const FMIModelDescription* modelDescription, const

CALL(FMICalloc((void**)&input, 1, sizeof(FMUStaticInput)));

input->fmiVersion = modelDescription->fmiVersion;
input->fmiMajorVersion = modelDescription->fmiMajorVersion;

char* row = NULL;
int cols = 0;
Expand Down Expand Up @@ -82,7 +82,7 @@ FMUStaticInput* FMIReadInput(const FMIModelDescription* modelDescription, const

const size_t index = (input->nRows * input->nVariables) + i;

CALL(FMIParseValues(modelDescription->fmiVersion, variable->type, col, &input->nValues[index], &input->values[index]));
CALL(FMIParseValues(modelDescription->fmiMajorVersion, variable->type, col, &input->nValues[index], &input->values[index]));

i++;
}
Expand Down Expand Up @@ -114,7 +114,7 @@ void FMIFreeInput(FMUStaticInput* input) {
FMIFree((void**)&input);
}

static size_t FMISizeOf(FMIVariableType type, FMIVersion fmiVersion) {
static size_t FMISizeOf(FMIVariableType type, FMIMajorVersion fmiMajorVersion) {

switch (type) {

Expand Down Expand Up @@ -151,12 +151,12 @@ static size_t FMISizeOf(FMIVariableType type, FMIVersion fmiVersion) {
return sizeof(fmi3UInt64);

case FMIBooleanType:
switch (fmiVersion) {
case FMIVersion1:
switch (fmiMajorVersion) {
case FMIMajorVersion1:
return sizeof(fmi1Boolean);
case FMIVersion2:
case FMIMajorVersion2:
return sizeof(fmi2Boolean);
case FMIVersion3:
case FMIMajorVersion3:
return sizeof(fmi3Boolean);
default:
return 0;
Expand Down Expand Up @@ -208,7 +208,7 @@ double FMINextInputEvent(const FMUStaticInput* input, double time) {

const void* values0 = input->values[i * input->nVariables + j];
const void* values1 = input->values[(i + 1) * input->nVariables + j];
const size_t size = FMISizeOf(type, input->fmiVersion) * nValues;
const size_t size = FMISizeOf(type, input->fmiMajorVersion) * nValues;

if (memcmp(values0, values1, size)) {
return t1;
Expand Down Expand Up @@ -324,11 +324,11 @@ FMIStatus FMIApplyInput(FMIInstance* instance, const FMUStaticInput* input, doub

}

if (instance->fmiVersion == FMIVersion1) {
if (instance->fmiMajorVersion == FMIMajorVersion1) {
CALL(FMI1SetValues(instance, type, &vr, 1, input->buffer));
} else if (instance->fmiVersion == FMIVersion2) {
} else if (instance->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2SetValues(instance, type, &vr, 1, input->buffer));
} else if (instance->fmiVersion == FMIVersion3) {
} else if (instance->fmiMajorVersion == FMIMajorVersion3) {
CALL(FMI3SetValues(instance, type, &vr, 1, input->buffer, nValues));
}

Expand Down Expand Up @@ -366,11 +366,11 @@ FMIStatus FMIApplyInput(FMIInstance* instance, const FMUStaticInput* input, doub

if (nValues == 0) continue;

if (instance->fmiVersion == FMIVersion1) {
if (instance->fmiMajorVersion == FMIMajorVersion1) {
CALL(FMI1SetValues(instance, type, &vr, 1, values));
} else if (instance->fmiVersion == FMIVersion2) {
} else if (instance->fmiMajorVersion == FMIMajorVersion2) {
CALL(FMI2SetValues(instance, type, &vr, 1, values));
} else if (instance->fmiVersion == FMIVersion3) {
} else if (instance->fmiMajorVersion == FMIMajorVersion3) {
CALL(FMI3SetValues(instance, type, &vr, 1, values, nValues));
}

Expand Down
2 changes: 1 addition & 1 deletion fmusim/fmusim_input.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

typedef struct {

FMIVersion fmiVersion;
FMIMajorVersion fmiMajorVersion;
size_t nVariables;
const FMIModelVariable** variables;
size_t* nValues;
Expand Down
Loading

0 comments on commit 816be18

Please sign in to comment.