Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 22 22:38

    phlptp on documentation_update

    update the doxygen generation t… (compare)

  • Jun 22 17:52

    phlptp on federate_tags

    update header files (compare)

  • Jun 22 17:03

    phlptp on federate_tags

    add support for federate and co… change the JsonErrorResponse to… add the operations to C and C++… (compare)

  • Jun 22 00:36

    phlptp on minBrokerChildren

    (compare)

  • Jun 22 00:36

    phlptp on helics3

    Min broker children (#1969) * … (compare)

  • Jun 22 00:36
    phlptp closed #1969
  • Jun 21 23:55
    phlptp synchronize #1969
  • Jun 21 23:55

    phlptp on minBrokerChildren

    Automated formatting of repo fi… (compare)

  • Jun 21 23:55

    phlptp on update-minBrokerChildren

    (compare)

  • Jun 21 23:55
    phlptp closed #1971
  • Jun 21 23:24
    github-actions[bot] opened #1971
  • Jun 21 23:24

    github-actions[bot] on update-minBrokerChildren

    Merge 9f8dee7374d66dc6be8202e0a… Automated formatting of repo fi… (compare)

  • Jun 21 23:23
    phlptp synchronize #1969
  • Jun 21 23:23

    phlptp on minBrokerChildren

    update broker reference (compare)

  • Jun 21 19:36
    nightlark commented #1968
  • Jun 21 15:18
    phlptp synchronize #1969
  • Jun 21 15:18

    phlptp on minBrokerChildren

    Apply suggestions from code rev… (compare)

  • Jun 21 14:56
    phlptp commented #1968
  • Jun 21 14:19
    nightlark commented #1968
  • Jun 19 18:11
    phlptp synchronize #1969
Philip Top
@phlptp
in HELICS 3 there is an "interfaces" query which can be run on individual federates which would get all the available information about each interface
So if you wanted everything you could run a query to get the names of all the federates. then run an "interfaces" query on using each of the federate names as a target
the "info" field is private though and not available outside of federate
Brandon Thayer
@blthayer

@phlptp - thank you, very good to know!

Is "info" private by design/philosophy? It seems like the "info" field could be a good way for federates to share information about what is going to be communicated over an endpoint (e.g., that regulator has a device_id of "xyz")

At this point, the only thing holding me back from using HELICS 3 is GridLAB-D. They used to have a helics3 branch, but I'm not finding it anymore... I'll check to see what the status of that is.

oops, hit enter too soon. edit inbound :)
Philip Top
@phlptp
I know @afisher1 has had gridlab-d working with HELICS3
Brandon Thayer
@blthayer
Thank you. Question above edited w.r.t. "info" field
Philip Top
@phlptp
HELICS 3 has a notion of interface tags which are key value pairs that can be associated with interfaces. Those are available through the interface query and someday for searching and other mechnanics. The info field was rolled into that structure but is meant for private information specific to a single federate. Information that should be shared should be put in the interface tags.
Brandon Thayer
@blthayer
Thank you, @phlptp !
Brandon Thayer
@blthayer

Good morning, HELICS team! I'm working on assisting some of my Java developer co-workers in getting a working HELICS installation with Java bindings.

The docs seem to indicate that Java bindings are included with the release, but when I extract the Helics-2.7.1-Linux-x86_64.tar.gz archive, I don't see anything Java related:

#6 6.286 Helics-2.7.1-Linux-x86_64/bin/
#6 6.286 Helics-2.7.1-Linux-x86_64/bin/helics-config
#6 6.296 Helics-2.7.1-Linux-x86_64/bin/helics_app
#6 6.337 Helics-2.7.1-Linux-x86_64/bin/helics_broker
#6 6.378 Helics-2.7.1-Linux-x86_64/bin/helics_broker_server
#6 6.417 Helics-2.7.1-Linux-x86_64/bin/helics_player
#6 6.453 Helics-2.7.1-Linux-x86_64/bin/helics_recorder
#6 6.489 Helics-2.7.1-Linux-x86_64/share/
#6 6.489 Helics-2.7.1-Linux-x86_64/share/helics/
#6 6.489 Helics-2.7.1-Linux-x86_64/share/helics/swig/
#6 6.489 Helics-2.7.1-Linux-x86_64/share/helics/swig/helics.i
#6 6.489 Helics-2.7.1-Linux-x86_64/share/doc/
#6 6.489 Helics-2.7.1-Linux-x86_64/share/doc/HELICS/
#6 6.489 Helics-2.7.1-Linux-x86_64/share/doc/HELICS/README.md
#6 6.489 Helics-2.7.1-Linux-x86_64/share/doc/HELICS/CHANGELOG.md
#6 6.490 Helics-2.7.1-Linux-x86_64/share/doc/HELICS/NOTICE
#6 6.490 Helics-2.7.1-Linux-x86_64/share/doc/HELICS/LICENSE
#6 6.490 Helics-2.7.1-Linux-x86_64/share/doc/HELICS/THIRDPARTY_LICENSES
#6 6.490 Helics-2.7.1-Linux-x86_64/share/man/
#6 6.490 Helics-2.7.1-Linux-x86_64/share/man/man1/
#6 6.490 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-source.1
#6 6.490 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-recorder.1
#6 6.490 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-echo.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-player.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_broker-term.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_player.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-clone.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-broker.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_app-tracer.1
#6 6.491 Helics-2.7.1-Linux-x86_64/share/man/man1/helics_broker.1
#6 6.491 Helics-2.7.1-Linux-x86_64/lib64/
#6 6.492 Helics-2.7.1-Linux-x86_64/lib64/pkgconfig/
#6 6.492 Helics-2.7.1-Linux-x86_64/lib64/pkgconfig/helicsSharedLib.pc
#6 6.492 Helics-2.7.1-Linux-x86_64/lib64/libzmq.so
#6 6.492 Helics-2.7.1-Linux-x86_64/lib64/libzmq.so.5.2.3
#6 6.508 Helics-2.7.1-Linux-x86_64/lib64/libhelicsSharedLib.so.2
#6 6.508 Helics-2.7.1-Linux-x86_64/lib64/cmake/
#6 6.508 Helics-2.7.1-Linux-x86_64/lib64/cmake/HELICS/
#6 6.508 Helics-2.7.1-Linux-x86_64/lib64/cmake/HELICS/HELICSConfig.cmake
#6 6.508 Helics-2.7.1-Linux-x86_64/lib64/cmake/HELICS/helics-targets-release.cmake
#6 6.509 Helics-2.7.1-Linux-x86_64/lib64/cmake/HELICS/HELICSConfigVersion.cmake
#6 6.509 Helics-2.7.1-Linux-x86_64/lib64/cmake/HELICS/helics-targets.cmake
#6 6.509 Helics-2.7.1-Linux-x86_64/lib64/libhelicsSharedLib.so
#6 6.509 Helics-2.7.1-Linux-x86_64/lib64/libhelicsSharedLib.so.2.7.1
#6 6.551 Helics-2.7.1-Linux-x86_64/lib64/libzmq.so.5
#6 6.551 Helics-2.7.1-Linux-x86_64/include/
#6 6.551 Helics-2.7.1-Linux-x86_64/include/helics/
#6 6.551 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/
#6 6.551 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Filter.hpp
#6 6.551 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Endpoint.hpp
#6 6.551 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/CombinationFederate.hpp
#6 6.551 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Publication.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Broker.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Input.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/helicsExceptions.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Core.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/config.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/MessageFederate.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/helics.hpp
#6 6.552 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Fe
Continued:
#6 6.622 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/Federate.hpp
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/cpp98/ValueFederate.hpp
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/chelics.h
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/helics98.hpp
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/helicsCallbacks.h
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/MessageFilters.h
#6 6.623 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/helics.h
#6 6.624 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/api-data.h
#6 6.624 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/ValueFederate.h
#6 6.624 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/helics_export.h
#6 6.624 Helics-2.7.1-Linux-x86_64/include/helics/shared_api_library/MessageFederate.h
#6 6.624 Helics-2.7.1-Linux-x86_64/include/helics/helics_enums.h

The Java Minimal Example mentions "You will first have to create a com/java/helics folder relative to the source folder, and place all the swig generated java files in that folder."

However, it doesn't seem this "helics.java" file ships with the release. Do I need to build from source to get the java bindings?

Philip Top
@phlptp
@nightlark can address this a bit more but I am pretty sure you can build the java bindings with the helics package without building helics from source. I don't know the process right now though.
Brandon Thayer
@blthayer
Thanks @phlptp , looking forward to @nightlark 's response.
Ryan Mast
@nightlark

@blthayer you can run cmake using <path to interface subfolder>/java as the source folder, similar to the footnote on https://docs.helics.org/en/latest/installation/language.html#helics-with-python3 about doing a standalone build for the Python interface. CMake will probably ask you to point it to where you extracted the HELICS install (it uses the typical auto-generated CMake find_package variable name -- not sure what it is, but the error message CMake prints should give it)

Not sure why we aren't including a pre-built Java binding with the Linux installer, maybe there was some rpath issue; at the moment it looks like macOS/Windows include the Java bindings

Trevor Hardy
@trevorhardy
@phlptp: Working on standardizing options names in FederateInfo.cpp and I see that we currently have delta and timeDelta as different names for the same option. Do you remember if we decided to keep delta because it was commonly used?
Philip Top
@phlptp
I think so, that wouldn't have been one that got changed though
Trevor Hardy
@trevorhardy
If we were blindly following our rules, we would have either removed delta or all the variations of timeDelta. I’m OK with making an exception on this one.
Philip Top
@phlptp
the property is called TIME_DELTA so I think we need to keep that one
Trevor Hardy
@trevorhardy
Agreed.
Similarly, I’m seeing groups of properties that have variations with int_ prepended (e.g. intconsoleloglevel and consoleloglevel). I propose we get rid of the int versions.
Philip Top
@phlptp
Dheepak wanted those in so they match up with the C ENUMS
Trevor Hardy
@trevorhardy
Ah, I see.
I can live with that.
What about eitherwait_for_current_time or wait_for_current_time_update?
Philip Top
@phlptp
That is probably one that changed, we will have to pick one I suppose
Trevor Hardy
@trevorhardy
You
You’ll have to wait for my PR to see which one.
Philip Top
@phlptp
ok
Trevor Hardy
@trevorhardy
For the command line options, is there a reason not to support, say, corename, core_name, and coreName instead of just corename?
Right now a lot of the options don’t support all three.
I can update them pretty easily if that’s OK.
Philip Top
@phlptp
Most of the options ignore underscore and case so there is no need to list all variations
Trevor Hardy
@trevorhardy
That’s right; I forgot.
Brandon Thayer
@blthayer

@nightlark - thank you! We were able to get the java bindings working today for the hello world example after a bit of pain. I think the documentation/that example could use a bit of sprucing up.

Specifically:

  • In HelloWorld.java, the current library loading is System.loadLibrary("JNIhelics");. However, building HELICS from source today (2.7.1) with the Java bindings means this line needs updated to: System.loadLibrary("helicsJava");
  • The CLASSPATH environment variable should explicitly include the full path to helics.jar
  • The LD_LIBRARY_PATH needs to point at the directory containing libhelicsJava.so

Here's a working Dockerfile:

# Build HELICS from source with Java bindings.
# HELICS resource: https://docs.helics.org/en/latest/installation/docker.html
FROM openjdk:18-buster as builder

# Branches/tags for HELICS and GLD
# Latest release as of 2021-06-16
ARG HELICS_BRANCH=v2.7.1
ENV HELICS_BRANCH=${HELICS_BRANCH}

# Install building dependencies. Please keep alphabetized.
RUN apt-get update && apt-get install -y \
  build-essential \
  cmake \
  gcc \
  git \
  libboost-dev \
  libboost-filesystem-dev \
  libboost-program-options-dev \
  libboost-test-dev \
  libzmq5-dev \
  swig

# (Shallowly) clone HELICS.
RUN git clone https://github.com/GMLC-TDC/HELICS.git \
  --branch ${HELICS_BRANCH} --depth 1 --single-branch /tmp/helics

# Follow HELICS template and work in an empty building directory.
WORKDIR /tmp/helics/build

# Run cmake
RUN cmake \
  -DBUILD_JAVA_INTERFACE=ON \
  -DCMAKE_INSTALL_PREFIX=/helics \
  ..

# Make and install.
# WORKDIR /tmp/helics
RUN make -j8 && make -j8 install


FROM openjdk:18-buster as runner

# Copy over HELICS files.
COPY --from=builder /helics /usr/local

# If other libraries, e.g. GridLAB-D need to link against HELICS, we
# should be helpful and inform where that's installed.
ENV HELICS_INSTALL_PATH /usr/local

RUN apt-get update && apt-get install -y --no-install-recommends \
    # libboost versions do not match HELICS docs - Debian Buster has
    # 1.67.0, while whatever Ubuntu version they used has 1.65.1
    libboost-filesystem1.67.0 \
    libboost-program-options1.67.0 \
    libboost-test1.67.0 \
    libzmq5 \
    && \
    apt-get clean && \
    apt-get autoclean -y && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /work
COPY HelloWorld.java .
ENV CLASSPATH=/usr/local/java/helics.jar:/work
ENV LD_LIBRARY_PATH=/usr/local/java
RUN javac HelloWorld.java && \
    java HelloWorld
Philip Top
@phlptp
@trevorhardy I found a bug where if you try to disconnect a federation with multiple levels of brokers it would leave the intermediate brokers running. Have you encountered this in practice?
Trevor Hardy
@trevorhardy
I haven’t but I’ve only implemented a hierarchy of brokers for the User Guide example. Its easy to imagine it happening, though, especially with a multi-site co-sim.
Philip Top
@phlptp
The fix in HELICS 3 is pretty trivial. To fix it in HELICS 2 will require a bit of a hack to make it backwards compatible
Philip Top
@phlptp
@trevorhardy where in the users guide is the command line reference, so I can add the children and subbrokers option documentation? I can't seem to find it easily
I’ve realized, too, that we need to get tags into there. Not crucial for release but it would be nice.
Philip Top
@phlptp
maybe wait until I get the federate tags in as well, then we can add something
lzheng28
@lzheng28
I have a stupid question. There is an example on HELICS website (https://helics.org/) -try HELICS online named OpenDSSDirect_PyPower_CoSim, there are 2 parts in this system, pypower simulates the 9 bus system and opendssdirect simulates the IEEE13 system. The 9 bus system circuit diagram is given in the example, but where can I find the circuit diagram of IEEE13?
Brandon Thayer
@blthayer
@lzheng28 (FYI, I'm not a HELICS developer) - You can find the official IEEE page for the test feeders here, and here is the specific download link for the IEEE 13 bus system. You can find a circuit diagram in the "IEEE 13 Node Test Feeder" Word document. Note that the HELICS team may have made some additions/modifications to the 13 bus system, and what I've linked you to is for the original system.
Philip Top
@phlptp
@trevorhardy and others. I am adding a query "tags" which would allow you to retrieve tags and support for "tags[somecharacter]tag_name" to query a specific tag for a core or federate. One quesion is what should we use as a separator. I am going back and forth on the different options . , /, :, :: or something else. Any opinions
Trevor Hardy
@trevorhardy

/ has the historical use that seems attractive.

I like . for simplicity.

I don’t care for : or ::.

Philip Top
@phlptp
going with / for now to match up with the default delimiter for local interfaces
Trevor Hardy
@trevorhardy
I’m helping a HELICS user at PNNL here out and, at the risk of sounding stupid, what can cause an error message of “duplicate broker name”? We’re haivng trouble launching more than one instance of GridLAB-D.
Trevor Hardy
@trevorhardy
We’re only intending to use one broker but the error message makes me think a second one is trying to be created.
Trevor Hardy
@trevorhardy
Problem solved by another user here at PNNL: HELICS 2.7.0 needs the core_name parameter defined for the federates; completely slipped my mind.