Skip to content

Commit

Permalink
Merge pull request #2 from NREL/openstudio_3.8
Browse files Browse the repository at this point in the history
Upgrade to OpenStudio 3.8, Energyplus 24.1, and PyFMI 2.11.0
  • Loading branch information
TShapinsky authored May 21, 2024
2 parents 0f23bab + 80ee105 commit 28ef41c
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 178 deletions.
118 changes: 21 additions & 97 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,10 @@ RUN apt-get update \
ca-certificates \
curl \
gdebi-core \
vim \
wget \
git \
openjdk-8-jdk \
liblapack-dev \
gfortran \
libgfortran4 \
cmake \
python3-venv \
python3-pip \
libblas-dev \
ruby-full \
&& rm -rf /var/lib/apt/lists/*


Expand All @@ -42,130 +34,62 @@ RUN update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/jav

WORKDIR $BUILD_DIR

ENV OPENSTUDIO_DOWNLOAD_FILENAME OpenStudio-3.6.1+bb9481519e-Ubuntu-20.04-x86_64.deb
ENV OPENSTUDIO_DOWNLOAD_URL https://github.com/NREL/OpenStudio/releases/download/v3.6.1/OpenStudio-3.6.1+bb9481519e-Ubuntu-20.04-x86_64.deb

ENV ENERGYPLUS_VERSION 23.1.0
ENV ENERGYPLUS_TAG v23.1.0
ENV ENERGYPLUS_SHA 87ed9199d4
ENV ENERGYPLUS_DIR /usr/local/EnergyPlus
ENV OPENSTUDIO_DOWNLOAD_URL https://github.com/NREL/OpenStudio/releases/download/v3.8.0/OpenStudio-3.8.0+f953b6fcaf-Ubuntu-20.04-x86_64.deb

# mlep / external interface needs parts of EnergyPlus that are not included with OpenStudio
# expandobjects, runenergyplus might be two examples, but the need to install EnergyPlus separately from OpenStudio
# might be revaluated
ENV ENERGYPLUS_DOWNLOAD_BASE_URL https://github.com/NREL/EnergyPlus/releases/download/$ENERGYPLUS_TAG
ENV ENERGYPLUS_DOWNLOAD_FILENAME EnergyPlus-$ENERGYPLUS_VERSION-$ENERGYPLUS_SHA-Linux-Ubuntu20.04-x86_64.tar.gz
ENV ENERGYPLUS_DOWNLOAD_URL $ENERGYPLUS_DOWNLOAD_BASE_URL/$ENERGYPLUS_DOWNLOAD_FILENAME
ENV ENERGYPLUS_DIR /usr/local/EnergyPlus
ENV ENERGYPLUS_DOWNLOAD_URL https://github.com/NREL/EnergyPlus/releases/download/v24.1.0/EnergyPlus-24.1.0-9d7789a3ac-Linux-Ubuntu20.04-x86_64.tar.gz

# We would rather use the self extracting tarball distribution of EnergyPlus, but there appears to
# be a bug in the installation script so using the tar.gz manually here and making our own links
RUN curl -SLO $ENERGYPLUS_DOWNLOAD_URL \
RUN curl -SL $ENERGYPLUS_DOWNLOAD_URL -o energyplus.tar.gz\
&& mkdir $ENERGYPLUS_DIR \
&& tar -C $ENERGYPLUS_DIR/ --strip-components=1 -xzf $ENERGYPLUS_DOWNLOAD_FILENAME \
&& tar -C $ENERGYPLUS_DIR/ --strip-components=1 -xzf energyplus.tar.gz \
&& ln -s $ENERGYPLUS_DIR/energyplus /usr/local/bin/ \
&& ln -s $ENERGYPLUS_DIR/ExpandObjects /usr/local/bin/ \
&& ln -s $ENERGYPLUS_DIR/runenergyplus /usr/local/bin/ \
&& rm $ENERGYPLUS_DOWNLOAD_FILENAME
&& rm energyplus.tar.gz

RUN curl -SLO $OPENSTUDIO_DOWNLOAD_URL \
&& gdebi -n $OPENSTUDIO_DOWNLOAD_FILENAME \
&& rm -f $OPENSTUDIO_DOWNLOAD_FILENAME \
RUN curl -SL $OPENSTUDIO_DOWNLOAD_URL -o openstudio.deb\
&& gdebi -n openstudio.deb \
&& rm -f openstudio.deb \
&& cd /usr/local/openstudio* \
&& rm -rf EnergyPlus \
&& ln -s $ENERGYPLUS_DIR EnergyPlus

# Install commands for Spawn
ENV SPAWN_VERSION=0.3.0-69040695f9
RUN wget https://spawn.s3.amazonaws.com/custom/Spawn-$SPAWN_VERSION-Linux.tar.gz \
&& tar -C /usr/local/ -xzf Spawn-$SPAWN_VERSION-Linux.tar.gz \
RUN curl -SL https://spawn.s3.amazonaws.com/custom/Spawn-$SPAWN_VERSION-Linux.tar.gz -o spawn.tar.gz \
&& tar -C /usr/local/ -xzf spawn.tar.gz \
&& ln -s /usr/local/Spawn-$SPAWN_VERSION-Linux/bin/spawn-$SPAWN_VERSION /usr/local/bin/ \
&& rm Spawn-$SPAWN_VERSION-Linux.tar.gz
&& rm spawn.tar.gz

## MODELICA
ENV FMIL_TAG 2.4
ENV FMIL_HOME $ROOT_DIR/fmil

ENV SUNDIALS_HOME $ROOT_DIR
ENV SUNDIALS_TAG v4.1.0

ENV ASSIMULO_TAG Assimulo-3.2.9

ENV PYFMI_TAG PyFMI-2.9.5

ENV SUPERLU_HOME $ROOT_DIR/SuperLU_MT_3.1

# Modelica requires libgfortran3 which is not in apt for 20.04
RUN wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-6/gcc-6-base_6.4.0-17ubuntu1_amd64.deb \
&& wget http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-6/libgfortran3_6.4.0-17ubuntu1_amd64.deb \
RUN curl -SLO http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-6/gcc-6-base_6.4.0-17ubuntu1_amd64.deb \
&& curl -SLO http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-6/libgfortran3_6.4.0-17ubuntu1_amd64.deb \
&& dpkg -i gcc-6-base_6.4.0-17ubuntu1_amd64.deb \
&& dpkg -i libgfortran3_6.4.0-17ubuntu1_amd64.deb \
&& ln -s /usr/lib/x86_64-linux-gnu/libffi.so.7 /usr/lib/x86_64-linux-gnu/libffi.so.6 \
&& rm *.deb

# Build FMI Library (for PyFMI)
RUN git clone --branch $FMIL_TAG --depth 1 https://github.com/modelon-community/fmi-library.git \
&& mkdir $FMIL_HOME \
&& mkdir fmil_build \
&& cd fmil_build \
&& cmake -DFMILIB_INSTALL_PREFIX=$FMIL_HOME ../fmi-library \
&& make install \
&& cd .. && rm -rf fmi-library fmil_build

# Build SuperLU (groan)
COPY build/make.inc $BUILD_DIR

RUN cd $ROOT_DIR \
&& curl -SLO http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_mt_3.1.tar.gz \
&& tar -xzf superlu_mt_3.1.tar.gz \
&& cd SuperLU_MT_3.1 \
&& rm make.inc \
&& cp $BUILD_DIR/make.inc make.inc \
&& make lib

ENV LD_LIBRARY_PATH $ROOT_DIR/lib:$SUPERLU_HOME/lib:$LD_LIBRARY_PATH

# Build Sundials with SuperLU(for Assimulo)
RUN git clone --branch $SUNDIALS_TAG --depth 1 https://github.com/LLNL/sundials.git \
&& mkdir sundials_build \
&& cd sundials_build \
&& cmake ../sundials \
-DPTHREAD_ENABLE=1 \
-DBLAS_ENABLE=1 \
-DLAPACK_LIBRARIES='-llapack -lblas' \
-DLAPACK_ENABLE=1 \
-DSUPERLUMT_ENABLE=1 \
-DSUNDIALS_INDEX_SIZE=32 \
-DSUPERLUMT_INCLUDE_DIR=$SUPERLU_HOME/SRC \
-DSUPERLUMT_LIBRARY_DIR=$SUPERLU_HOME/lib \
-DSUPERLUMT_LIBRARIES='-lblas' \
&& make \
&& make install \
&& cd .. && rm -rf sundials sundials_build

# This is required for Assimulo to build correctly with setuptools 60+
ENV SETUPTOOLS_USE_DISTUTILS stdlib

COPY requirements.txt $BUILD_DIR
RUN pip install -r requirements.txt && \
rm requirements.txt

# Install Assimulo for PyFMI
RUN git clone --branch $ASSIMULO_TAG --depth 1 https://github.com/modelon-community/Assimulo.git \
&& cd Assimulo \
&& python3 setup.py install \
--sundials-home=$SUNDIALS_HOME \
--blas-home=/usr/lib/x86_64-linux-gnu \
--lapack-home=/usr/lib/x86_64-linux-gnu/lapack/ \
--superlu-home=$SUPERLU_HOME \
&& cd .. && rm -rf Assimulo
RUN curl -SLO https://github.com/modelon-community/Assimulo/releases/download/Assimulo-3.4.3/Assimulo-3.4.3-cp38-cp38-linux_x86_64.whl \
&& pip install Assimulo-3.4.3-cp38-cp38-linux_x86_64.whl \
&& rm Assimulo-3.4.3-cp38-cp38-linux_x86_64.whl

# Install PyFMI
RUN git clone --branch $PYFMI_TAG --depth 1 https://github.com/modelon-community/PyFMI.git \
&& cd PyFMI \
&& python3 setup.py install \
&& cd .. && rm -rf PyFMI
RUN curl -SLO https://github.com/modelon-community/PyFMI/releases/download/PyFMI-2.11.0/PyFMI-2.11.0-cp38-cp38-linux_x86_64.whl \
&& pip install PyFMI-2.11.0-cp38-cp38-linux_x86_64.whl \
&& rm PyFMI-2.11.0-cp38-cp38-linux_x86_64.whl

ENV PYTHONPATH=/usr/local/lib/python3.8/dist-packages/Assimulo-3.2.9-py3.8-linux-x86_64.egg:/usr/local/lib/python3.8/dist-packages/PyFMI-2.9.5-py3.8-linux-x86_64.egg
ENV PYTHONPATH=${PYTHONPATH}:${ENERGYPLUS_DIR}

ENV SEPARATE_PROCESS_JVM /usr/lib/jvm/java-8-openjdk-amd64/
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
80 changes: 0 additions & 80 deletions build/make.inc

This file was deleted.

1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
numpy
Cython

0 comments on commit 28ef41c

Please sign in to comment.