Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Install Request: EnergyPlus 9.4.0 #577

Open
heatherkellyucl opened this issue Jun 24, 2024 · 12 comments
Open

Install Request: EnergyPlus 9.4.0 #577

heatherkellyucl opened this issue Jun 24, 2024 · 12 comments

Comments

@heatherkellyucl
Copy link
Contributor

IN:06685497

We have 9.1. And now also 24.1.0.

9.4 can't be installed from bindist because it requires a newer glibc, needs building from source.

https://github.com/NREL/EnergyPlus/releases/tag/v9.4.0

(Note: the newer versions have bindists for CentOS 7 so I installed 24.1.0 from that too).

@heatherkellyucl
Copy link
Contributor Author

This what I have for the install line at present (will pick up system python if not told different).

cmake -D_BUILD_FORTRAN=ON -DBUILD_SHARED_LIBS=ON \
            -DPYTHON_EXECUTABLE=$(which python) -DCMAKE_INSTALL_PREFIX="$install_prefix" ..

With gcc 10.2.0 this ends up with quite a few strncpy warnings

[  6%] Building C object third_party/FMI/CMakeFiles/epfmiimport.dir/main.c.o
In file included from /usr/include/string.h:633,
                 from /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMI/main.c:31:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMI/main.c: In function ‘getfmiEPlusVersion’:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMI/main.c:473:3: warning: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
  473 |   strncpy(fmiVersionNumber, verID, strlen (verID)+ 1);
      |   ^~~~~~~
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMI/main.c:473:36: note: length computed here
  473 |   strncpy(fmiVersionNumber, verID, strlen (verID)+ 1);
      |                                    ^~~~~~~~~~~~~~

and a related malloc warning.

[ 15%] Building C object third_party/FMUParser/CMakeFiles/parser.dir/parser.c.o
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c: In function ‘callparser’:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c:63:3: warning: ‘strcpy’ writing one too many bytes into a region of a size that depends on ‘strlen’ [-Wstringop-overflow=]
   63 |   strcpy(tmp, fmuFilNam);
      |   ^~~~~~~~~~~~~~~~~~~~~~
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c:62:9: note: at offset 0 to an object allocated by ‘malloc’ here
   62 |   tmp = malloc(length*sizeof(char));
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/string.h:633,
                 from /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.h:25,
                 from /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c:22:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c: In function ‘main’:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c:260:12: warning: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
  260 |         if(strncpy(objNam, fmuFilNam, length)==NULL) {
      |            ^~~~~~~
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/third_party/FMUParser/parser.c:252:16: note: length computed here
  252 |       length = strlen(fmuFilNam)-4;
      |                ^~~~~~~~~~~~~~~~~

It then fails while linking with many "multiple definition of" errors:

[ 78%] Linking CXX shared library ../../Products/libenergyplusapi.so
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x18): multiple definition of `strLen'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4b8): first defined here
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x20): multiple definition of `source'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4c0): first defined here
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x24): multiple definition of `numInputKeys'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4c4): first defined here
...
../../Products/libbcvtb.a(utilXml.c.o):(.bss+0x58): multiple definition of `vals'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x510): first defined here
../../Products/libbcvtb.a(utilXml.c.o):(.bss+0x80): multiple definition of `Buff'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x540): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [Products/libenergyplusapi.so.9.4.0] Error 1
make[1]: *** [src/EnergyPlus/CMakeFiles/energyplusapi.dir/all] Error 2
make: *** [all] Error 2  

(Could see what happens if not building the shared library too).

@heatherkellyucl
Copy link
Contributor Author

Tried with gcc 4.9.2 to see what happens, fails earlier:

[ 46%] Building CXX object src/EnergyPlus/CMakeFiles/energypluslib.dir/AirLoopHVACDOAS.cc.o
In file included from /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/src/EnergyPlus/AirLoopHVACDOAS.cc:82:0:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/src/EnergyPlus/WeatherManager.hh: In constructor ‘EnergyPlus::WeatherManager::SpecialDayData::SpecialDayData()’:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/src/EnergyPlus/WeatherManager.hh:384:24: error: ‘DateType’ is not a class, namespace, or enumeration
             : DateType(DateType::InvalidDate), Month(0), Day(0), WeekDay(0), CompDate(0), WthrFile(false), Duration(0), DayType(0), ActStMon(0),
                        ^
make[2]: *** [src/EnergyPlus/CMakeFiles/energypluslib.dir/AirLoopHVACDOAS.cc.o] Error 1
make[1]: *** [src/EnergyPlus/CMakeFiles/energypluslib.dir/all] Error 2
make: *** [all] Error 2

@heatherkellyucl
Copy link
Contributor Author

WIth gcc 10 again, and not telling to build shared libraries:

cmake -D_BUILD_FORTRAN=ON -DPYTHON_EXECUTABLE=$(which python) -DCMAKE_INSTALL_PREFIX=/home/cceahke/Scratch/energyplus/energyplus-9.4.0_install ..

None of the earlier warnings but still tries to link libenergyplusapi.so and fails.

[ 98%] Linking CXX shared library ../../Products/libenergyplusapi.so
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x18): multiple definition of `strLen'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4b8): first defined here
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x20): multiple definition of `source'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4c0): first defined here
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x24): multiple definition of `numInputKeys'
...
../../Products/libbcvtb.a(utilXml.c.o):(.bss+0x58): multiple definition of `vals'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x510): first defined here
../../Products/libbcvtb.a(utilXml.c.o):(.bss+0x80): multiple definition of `Buff'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x540): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [Products/libenergyplusapi.so.9.4.0] Error 1
make[1]: *** [src/EnergyPlus/CMakeFiles/energyplusapi.dir/all] Error 2
make: *** [all] Error 2 

@heatherkellyucl
Copy link
Contributor Author

heatherkellyucl commented Jun 28, 2024

Oh, I did have an extra underscore in -DBUILD_FORTRAN=ON so that option wasn't recognised, adding in properly (not that it changes the problem).

@heatherkellyucl
Copy link
Contributor Author

heatherkellyucl commented Jun 28, 2024

Tried what happens if everything is static: -DBUILD_STATIC_ENERGYPLUS_API=ON

Then it builds the static library ok but fails on the executable.

[ 78%] Linking CXX static library ../../Products/libenergyplusapi.a
Full executable path is: /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/build/Products/libenergyplusapi.a
Setting up Python API, creating pyenergyplus package at /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/buil
d/Products/pyenergyplus  
[ 78%] Built target energyplusapi
[ 78%] Building CXX object src/EnergyPlus/CMakeFiles/energyplus.dir/main.cc.o
[ 78%] Linking CXX executable ../../Products/energyplus
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x18): multiple definition of `strLen'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4b8): first defined here
../../Products/libbcvtb.a(utilSocket.c.o):(.bss+0x20): multiple definition of `source'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x4c0): first defined here
...
../../Products/libbcvtb.a(utilXml.c.o):(.bss+0x80): multiple definition of `Buff'
../../Products/libenergypluslib.a(ExternalInterface.cc.o):(.bss+0x540): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [Products/energyplus-9.4.0] Error 1
make[1]: *** [src/EnergyPlus/CMakeFiles/energyplus.dir/all] Error 2
make: *** [all] Error 2 

@heatherkellyucl
Copy link
Contributor Author

heatherkellyucl commented Jun 28, 2024

compilers/gnu/7.3.0 looks like it is getting further, but is complaining about a lot of nonexistent /include directories right now.

@heatherkellyucl
Copy link
Contributor Author

Ok, that completed, was installable and I can see the help.

[cceahke@build01 build]$ ../../energyplus-9.4.0_install/energyplus -h
EnergyPlus, Version 9.4.0-Unknown
PythonLinkage: This version of EnergyPlus not linked to Python library.
Usage: energyplus [options] [input-file]
Options:
  -a, --annual                 Force annual simulation
  -c, --convert                Output IDF->epJSON or epJSON->IDF, dependent on
                               input file type
  -D, --design-day             Force design-day-only simulation
  -d, --output-directory ARG   Output directory path (default: current
                               directory)
  -h, --help                   Display help information
  -i, --idd ARG                Input data dictionary path (default: Energy+.idd
                               in executable directory)
  -m, --epmacro                Run EPMacro prior to simulation
  -p, --output-prefix ARG      Prefix for output file names (default: eplus)
  -r, --readvars               Run ReadVarsESO after simulation
  -s, --output-suffix ARG      Suffix style for output file names (default: L)
                                  L: Legacy (e.g., eplustbl.csv)
                                  C: Capital (e.g., eplusTable.csv)
                                  D: Dash (e.g., eplus-table.csv)
  -v, --version                Display version information
  -w, --weather ARG            Weather file path (default: in.epw in current
                               directory)
  -x, --expandobjects          Run ExpandObjects prior to simulation
--convert-only                 Only convert IDF->epJSON or epJSON->IDF,
                               dependent on input file type. No simulation
Example: energyplus -w weather.epw -r input.idf

Need to check if anything goes wrong with an example as there were a load of bits of X11 it could link to.

As it says, isn't actually linked to python, that's another cmake option if we need that.

@heatherkellyucl
Copy link
Contributor Author

Am including -DLINK_WITH_PYTHON=ON because it makes no sense to me that we're telling it where python is and then not to use it.

@heatherkellyucl
Copy link
Contributor Author

Example to test: source comes with weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw (and others) used in this example https://energyplus.net/quick-start#runsim

@heatherkellyucl
Copy link
Contributor Author

Of course, it also needs an older python:

[ 67%] Building CXX object src/EnergyPlus/CMakeFiles/energypluslib.dir/PluginManager.cc.o
In file included from /shared/ucl/apps/python/3.9.10/gnu-4.9.2/include/python3.9/pytime.h:6:0,
                 from /shared/ucl/apps/python/3.9.10/gnu-4.9.2/include/python3.9/Python.h:81,
                 from /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/src/EnergyPlus/PluginManager.hh:68,
                 from /home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/src/EnergyPlus/PluginManager.cc:56:
/home/cceahke/Scratch/energyplus/EnergyPlus-9.4.0/src/EnergyPlus/PluginManager.cc: In static member function  
static void EnergyPlus::PluginManagement::PluginInstance::reportPythonError()’:
/shared/ucl/apps/python/3.9.10/gnu-4.9.2/include/python3.9/object.h:633:41: error: expected ‘(’ before ‘PyType
_HasFeature’
 #define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag)
                                         ^

@heatherkellyucl
Copy link
Contributor Author

That builds. Owain suggested we might be able to get it to work with later python if we rebuild any precreated cython parts it was pulling in - for now I'll leave that.

@heatherkellyucl
Copy link
Contributor Author

Test example, with the inputs from the source code repo.

mkdir examples
cd examples
cp ../EnergyPlus-9.4.0/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw .
cp ../EnergyPlus-9.4.0/testfiles/5ZoneAirCooled.idf .
cp ../EnergyPlus-9.4.0/idd/Energy+.idd.in .

energyplus -i Energy+.idd.in -w USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw 5ZoneAirCooled.idf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant