Basic Discipline#
The basic discipline service (DisciplineService) serves as the foundation for all types of disciplines within Philote:
service DisciplineService {
// Gets the fundamental properties of the discipline
rpc GetInfo(google.protobuf.Empty) returns (philote.DisciplineProperties) {}
// RPC to set remote streaming options
rpc SetStreamOptions(philote.StreamOptions) returns (google.protobuf.Empty) {}
// Sets the discipline options
rpc SetOptions(philote.DisciplineOptions) returns (google.protobuf.Empty) {}
// Sets up the discipline
rpc Setup(google.protobuf.Empty) returns (google.protobuf.Empty) {}
// Gets the variable definitions for the discipline
rpc GetVariableDefinitions(google.protobuf.Empty) returns (stream philote.VariableMetaData) {}
// Gets the discipline partials definitions
rpc GetPartialDefinitions(google.protobuf.Empty) returns (stream philote.PartialsMetaData) {}
}
In a typical object-oriented framework the DisciplineService would serve as a base class from which all disciplines would be inherited. However, gRPC and protobuf do not support inheritance, so a similar effect is achieved by composition. This must be considered when developing interfaces and language specific bindings that implement the Philote standard, but do not need to be exposed to users.
GetInfo#
The GetInfo function enables the client to retrieve the discipline properties in the form of a DisciplineProperties message. This message contains information about if the discipline is continuous, differentiable, and if it provides derivatives.
SetStreamOptions#
The SetStreamOptions function transmits the streaming options from the client to the server. This currently only consists of the chunk size for continuous arrays. However, future iterations may need to expand the number of stream options used by the standard.
SetOptions#
The SetOptions function is used by the client to set any discipline options required by the server. This typically needs to be done before running a function evaluation, but likely after calling Setup (though this likely depends on the discipline).
Setup#
The setup remote procedure call (RPC
) enables the MDO framework to query the
analysis server for information about inputs and outputs. Frameworks, such as
OpenMDAO, may use this to allocate the variable and define units. However, in
general, this RPC is optional (for the MDO framework). It should still be
implemented by the analysis server, to avoid compatibility issues when switching
between MDO frameworks.
GetVariableDefinitions#
The GetVariableDefinitions function retrieves variable (inputs and outputs) metadata from the server for the client. This is needed for preallocation, etc.
GetPartialDefinitions#
The GetPartialDefinitions function retrieves partials metadata from the server for the client. This is needed for preallocation, etc.