From aec00c38d04b4ff1823f841178cc0e2166ebf419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 29 Nov 2024 08:54:37 +0100 Subject: [PATCH 01/11] [CI] Adding Rocky image build to CI --- .github/workflows/build_docker_images_for_ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_docker_images_for_ci.yml b/.github/workflows/build_docker_images_for_ci.yml index 24872a1a4514..e2aa37a4473c 100644 --- a/.github/workflows/build_docker_images_for_ci.yml +++ b/.github/workflows/build_docker_images_for_ci.yml @@ -46,13 +46,13 @@ jobs: # only push the new image when the changes are merged to master run: docker push kratosmultiphysics/kratos-image-ci-ubuntu-22-04 - build-docker-centos: + build-docker-rocky: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build the Docker image - run: docker build . --file scripts/docker_files/docker_file_ci_centos_7/DockerFile --tag kratosmultiphysics/kratos-image-ci-centos7 + run: docker build . --file scripts/docker_files/docker_file_ci_rockylinux8/DockerFile --tag kratosmultiphysics/kratos-image-ci-rocky8 - name: Docker Login uses: azure/docker-login@v2 with: @@ -61,4 +61,4 @@ jobs: - name: Publish the Docker image if: ${{ github.event_name == 'push'}} # only push the new image when the changes are merged to master - run: docker push kratosmultiphysics/kratos-image-ci-centos7 + run: docker push kratosmultiphysics/kratos-image-ci-rocky8 From 4d1e729a68bf05d95eef8a45499db858f0ecf37e Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:24:12 +0100 Subject: [PATCH 02/11] adding capability --- kratos/includes/table_accessor.h | 2 ++ kratos/sources/table_accessor.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/kratos/includes/table_accessor.h b/kratos/includes/table_accessor.h index dd99a126d3d1..02c453dfc45b 100644 --- a/kratos/includes/table_accessor.h +++ b/kratos/includes/table_accessor.h @@ -77,6 +77,8 @@ class KRATOS_API(KRATOS_CORE) TableAccessor : public Accessor mInputVariableType = Globals::DataLocation::NodeNonHistorical; } else if (rInputVariableType == "element") { mInputVariableType = Globals::DataLocation::Element; + } else if (rInputVariableType == "process_info") { + mInputVariableType = Globals::DataLocation::ProcessInfo; } else { KRATOS_ERROR << "The table_input_variable_type is incorrect or not supported. Types available are : 'node_historical', 'node_non_historical' and 'element'" << std::endl; } diff --git a/kratos/sources/table_accessor.cpp b/kratos/sources/table_accessor.cpp index 19c3c863bc62..5e59303c2296 100644 --- a/kratos/sources/table_accessor.cpp +++ b/kratos/sources/table_accessor.cpp @@ -65,6 +65,9 @@ double TableAccessor::GetValueFromTable( } else if (mInputVariableType == Globals::DataLocation::Element) { KRATOS_DEBUG_ERROR_IF_NOT(rGeometry.Has(rIndependentVariable)) << "The Variable " << rIndependentVariable.Name() << " is not available at the Geometry to retrieve Table values." << std::endl; independent_at_gauss = rGeometry.GetValue(rIndependentVariable); + } else if (mInputVariableType == Globals::DataLocation::ProcessInfo) { + KRATOS_DEBUG_ERROR_IF_NOT(rProcessInfo.Has(rIndependentVariable)) << "The Variable " << rIndependentVariable.Name() << " is not available at the rProcessInfo to retrieve Table values." << std::endl; + independent_at_gauss = rProcessInfo.GetValue(rIndependentVariable); } else { KRATOS_ERROR << "The table_input_variable_type is incorrect or not supported. Types available are : nodal_historical, nodal_non_historical and elemental_non_historical" << std::endl; } @@ -80,7 +83,7 @@ double TableAccessor::GetValueFromTable( void TableAccessor::save(Serializer& rSerializer) const { rSerializer.save("InputVariable", mpInputVariable->Name()); - // // we must do the int cast to be able to compile + // we must do the int cast to be able to compile rSerializer.save("InputVariableType", static_cast(mInputVariableType)); } void TableAccessor::load(Serializer& rSerializer) @@ -89,7 +92,7 @@ void TableAccessor::load(Serializer& rSerializer) rSerializer.load("InputVariable", variable_name); mpInputVariable = static_cast *>(KratosComponents::pGet(variable_name)); - // // we must do the int cast to be able to compile + // we must do the int cast to be able to compile int enum_value; rSerializer.load("InputVariableType", enum_value); mInputVariableType = static_cast(enum_value); From ff2d2318ae6c9e14829e6f022e5da7ee2b673f43 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:42:48 +0100 Subject: [PATCH 03/11] adding test --- .../includes/test_property_accessor.cpp | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp index 1a4ccd3495e1..34776a47e3b8 100644 --- a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp +++ b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp @@ -169,6 +169,62 @@ KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimpleProperties, KratosCoreFastSuite) KRATOS_EXPECT_EQ(0.34, (*p_elem_prop).GetValue(POISSON_RATIO, *p_geom, N, r_model_part.GetProcessInfo())); } +/** +* Checks the correct work of the TableAccessor when using ProcessInfo variables (TIME) +*/ +KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimplePropertiesProcessInfo, KratosCoreFastSuite) +{ + Model current_model; + auto &r_model_part = current_model.CreateModelPart("ModelPart",1); + r_model_part.GetProcessInfo().SetValue(DOMAIN_SIZE, 2); + r_model_part.GetProcessInfo().SetValue(TIME, 0.0); + + // Set the element properties + auto p_elem_prop = r_model_part.CreateNewProperties(0); + p_elem_prop->SetValue(YOUNG_MODULUS, 2.0); + p_elem_prop->SetValue(POISSON_RATIO, 0.3); + + auto p_node_1 = r_model_part.CreateNewNode(1, 0.0 , 0.0 , 0.0); + auto p_node_2 = r_model_part.CreateNewNode(2, 1.0 , 0.0 , 0.0); + auto p_node_3 = r_model_part.CreateNewNode(3, 1.0 , 1.0 , 0.0); + auto p_node_4 = r_model_part.CreateNewNode(4, 0.0 , 1.0 , 0.0); + + std::vector geom(4); + geom[0] = p_node_1; + geom[1] = p_node_2; + geom[2] = p_node_3; + geom[3] = p_node_4; + + auto p_geom = Kratos::make_shared>(PointerVector{geom}); + Vector N = ZeroVector(4); + N[0] = 0.1; + N[0] = 0.2; + N[0] = 0.3; + N[0] = 0.4; + + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop)[YOUNG_MODULUS]); + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop).GetValue(YOUNG_MODULUS)); + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); + KRATOS_EXPECT_EQ(false, (*p_elem_prop).HasAccessor(YOUNG_MODULUS)); + + Table Time_E_table; + Time_E_table.PushBack(0.0, 2.0); + Time_E_table.PushBack(1.0, 1.0); + + p_elem_prop->SetTable(TIME, YOUNG_MODULUS, Time_E_table); + KRATOS_EXPECT_EQ(true, (*p_elem_prop).HasTable(TIME, YOUNG_MODULUS)); + + TableAccessor E_table_accessor = TableAccessor(TIME, "process_info"); + p_elem_prop->SetAccessor(YOUNG_MODULUS, E_table_accessor.Clone()); + KRATOS_EXPECT_EQ(true, (*p_elem_prop).HasAccessor(YOUNG_MODULUS)); + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); + + r_model_part.GetProcessInfo().SetValue(TIME, 0.5); + KRATOS_EXPECT_EQ(1.5, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); + + +} + KRATOS_TEST_CASE_IN_SUITE(TableTableAccessorSerialization, KratosCoreFastSuite) { StreamSerializer serializer; From 6c23cdbb77a4611feacc7d3a9aeb346911804670 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:44:28 +0100 Subject: [PATCH 04/11] trim spaces --- kratos/tests/cpp_tests/includes/test_property_accessor.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp index 34776a47e3b8..840856037f2f 100644 --- a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp +++ b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp @@ -221,8 +221,6 @@ KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimplePropertiesProcessInfo, KratosCoreFa r_model_part.GetProcessInfo().SetValue(TIME, 0.5); KRATOS_EXPECT_EQ(1.5, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); - - } KRATOS_TEST_CASE_IN_SUITE(TableTableAccessorSerialization, KratosCoreFastSuite) From f5d14f81c229b17b358c7f4c0bfb31855d80dd0a Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:46:25 +0100 Subject: [PATCH 05/11] unused var --- kratos/tests/cpp_tests/includes/test_property_accessor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp index 840856037f2f..78d783174187 100644 --- a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp +++ b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp @@ -182,7 +182,6 @@ KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimplePropertiesProcessInfo, KratosCoreFa // Set the element properties auto p_elem_prop = r_model_part.CreateNewProperties(0); p_elem_prop->SetValue(YOUNG_MODULUS, 2.0); - p_elem_prop->SetValue(POISSON_RATIO, 0.3); auto p_node_1 = r_model_part.CreateNewNode(1, 0.0 , 0.0 , 0.0); auto p_node_2 = r_model_part.CreateNewNode(2, 1.0 , 0.0 , 0.0); From ec3ecb227ffb1ed1fd9a3f7d78efcdf609740bf0 Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Fri, 29 Nov 2024 12:09:36 +0100 Subject: [PATCH 06/11] Fixing numpy copy=false --- .../python_scripts/hrom_training_utility.py | 2 +- .../petrov_galerkin_training_utility.py | 2 +- .../RomApplication/python_scripts/rom_analysis.py | 2 +- .../RomApplication/python_scripts/rom_manager.py | 2 +- kratos/python_scripts/petsc_conversion_tools.py | 12 ++++++------ kratos/tests/test_numpy_export_dense_matrix.py | 4 ++-- kratos/tests/test_vectorized_interpolation.py | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/applications/RomApplication/python_scripts/hrom_training_utility.py b/applications/RomApplication/python_scripts/hrom_training_utility.py index bd4870a6502a..e43961b65ddd 100644 --- a/applications/RomApplication/python_scripts/hrom_training_utility.py +++ b/applications/RomApplication/python_scripts/hrom_training_utility.py @@ -180,7 +180,7 @@ def AppendCurrentStepResiduals(self): err_msg = f"Projection strategy \'{self.projection_strategy}\' for HROM is not supported." raise Exception(err_msg) - np_res_mat = np.array(res_mat, copy=False) + np_res_mat = np.asarray(res_mat) self.time_step_residual_matrix_container.append(np_res_mat) def GetJacobianPhiMultiplication(self, computing_model_part): diff --git a/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py b/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py index 0cf528d1370c..6e0c907eb9d1 100644 --- a/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py +++ b/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py @@ -80,7 +80,7 @@ def AppendCurrentStepProjectedSystem(self): err_msg = "\'self.basis_strategy\' is not available. Select either 'jacobian' or 'residuals'." raise Exception(err_msg) - np_snapshots_matrix = np.array(snapshots_matrix, copy=False) + np_snapshots_matrix = np.asarray(snapshots_matrix) self.time_step_snapshots_matrix_container.append(np_snapshots_matrix) def GetJacobianPhiMultiplication(self, computing_model_part): diff --git a/applications/RomApplication/python_scripts/rom_analysis.py b/applications/RomApplication/python_scripts/rom_analysis.py index a78cc69d4a80..8afce059ab56 100644 --- a/applications/RomApplication/python_scripts/rom_analysis.py +++ b/applications/RomApplication/python_scripts/rom_analysis.py @@ -292,7 +292,7 @@ def ModifyInitialGeometry(self): print('Nodal variables: ', nodal_unknown_names) - s_default = np.array(s, copy=False) + s_default = np.asarray(s) print(s_default.shape) q, _ = nn_rom_interface.get_encode_function()(s_default) diff --git a/applications/RomApplication/python_scripts/rom_manager.py b/applications/RomApplication/python_scripts/rom_manager.py index d926a8191584..2ea4668e94d7 100644 --- a/applications/RomApplication/python_scripts/rom_manager.py +++ b/applications/RomApplication/python_scripts/rom_manager.py @@ -1008,7 +1008,7 @@ def Initialize(cls): def GetNonconvergedSolutions(cls): a,_ = cls._GetSolver()._GetSolutionStrategy().GetNonconvergedSolutions() - return np.array(a, copy=False) + return np.asarray(a) simulation.Initialize = types.MethodType(Initialize, simulation) simulation.GetNonconvergedSolutions = types.MethodType(GetNonconvergedSolutions, simulation) diff --git a/kratos/python_scripts/petsc_conversion_tools.py b/kratos/python_scripts/petsc_conversion_tools.py index 343de7d06012..03ebc36c7996 100644 --- a/kratos/python_scripts/petsc_conversion_tools.py +++ b/kratos/python_scripts/petsc_conversion_tools.py @@ -18,17 +18,17 @@ def __init__(self, A): #Kratos DistributedCsrMatrix N = A.GetColNumbering().Size() ##pointers to the kratos arrays of values - self.a = np.array(A.GetDiagonalBlock().value_data(), copy=False) - self.oa = np.array(A.GetOffDiagonalBlock().value_data(), copy=False) + self.a = np.asarray(A.GetDiagonalBlock().value_data()) + self.oa = np.asarray(A.GetOffDiagonalBlock().value_data()) if(type(m) == type(PETSc.IntType)): #we can avoid doing copies #indices of diagonal block - self.i = np.array(A.GetDiagonalBlock().index1_data(), copy=False) - self.j = np.array(A.GetDiagonalBlock().index2_data(), copy=False) + self.i = np.asarray(A.GetDiagonalBlock().index1_data()) + self.j = np.asarray(A.GetDiagonalBlock().index2_data()) #indices of offdiagonal block - self.oi = np.array(A.GetOffDiagonalBlock().index1_data(), copy=False) - self.oj = np.array(A.GetOffDiagonalIndex2DataInGlobalNumbering(), copy=False) + self.oi = np.asarray(A.GetOffDiagonalBlock().index1_data()) + self.oj = np.asarray(A.GetOffDiagonalIndex2DataInGlobalNumbering()) else: #WE NEED TO COPY INDICES! since the size of the IndexType is not compatible between Kratos and PETSc if(A.GetComm().Rank() == 0): diff --git a/kratos/tests/test_numpy_export_dense_matrix.py b/kratos/tests/test_numpy_export_dense_matrix.py index 8ff254f548ed..1e3012175f57 100644 --- a/kratos/tests/test_numpy_export_dense_matrix.py +++ b/kratos/tests/test_numpy_export_dense_matrix.py @@ -10,7 +10,7 @@ def test_numpy_export_dense_matrix_no_copying(self): KratosMatrix.fill(1.0) # Export it to numpy array (No copying is performed) - NumpyMatrix = np.array(KratosMatrix,copy=False) + NumpyMatrix = np.asarray(KratosMatrix) # Test correct creation for i in range(3): @@ -35,7 +35,7 @@ def test_numpy_export_complex_dense_matrix_no_copying(self): KratosMatrix.fill(1.0+1.0j) # Export it to numpy array (No copying is performed) - NumpyMatrix = np.array(KratosMatrix,copy=False) + NumpyMatrix = np.asarray(KratosMatrix) # Test correct creation for i in range(3): diff --git a/kratos/tests/test_vectorized_interpolation.py b/kratos/tests/test_vectorized_interpolation.py index c9f873987565..dec4a660201d 100644 --- a/kratos/tests/test_vectorized_interpolation.py +++ b/kratos/tests/test_vectorized_interpolation.py @@ -39,7 +39,7 @@ def testVectorizedInterpolation(self): #obtaining a copy of database onto numpy array, and reshaping it into matrices nnodes = len(self.mp.Nodes) - vdata = np.array(Kratos.VariableUtils().GetSolutionStepValuesVector(self.mp.Nodes, Kratos.VELOCITY, 0, 3),copy=False).reshape(nnodes,3) + vdata = np.asarray(Kratos.VariableUtils().GetSolutionStepValuesVector(self.mp.Nodes, Kratos.VELOCITY, 0, 3)).reshape(nnodes,3) coords = np.array(Kratos.VariableUtils().GetCurrentPositionsVector(self.mp.Nodes,3)).reshape(nnodes,3) ##coordinates to search for From 0c81da5433e9defd74e099f880d99730306b39ea Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Fri, 29 Nov 2024 16:05:06 +0100 Subject: [PATCH 07/11] Temporal fix until the rest of the libs upgrade to numpy==2 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21cd6dc63921..cacbb17ced32 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -271,7 +271,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy + pip install numpy=1.26.4 pip install sympy pip install scipy pip install h5py @@ -483,7 +483,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy + pip install numpy=1.26.4 pip install sympy pip install scipy From 9d083409a9fecc56dddd4fccc4c862f9f068b7c0 Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Fri, 29 Nov 2024 17:37:40 +0100 Subject: [PATCH 08/11] Changing *linux version, not win --- .github/workflows/ci.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cacbb17ced32..6e9f526db0a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,7 +60,9 @@ jobs: - name: CI configuration shell: bash - run: python3 kratos/python_scripts/testing/ci_utilities.py + run: | + python3 kratos/python_scripts/testing/ci_utilities.py + python3 -m pip install --upgrade numpy==1.26.4 - name: Build shell: bash @@ -271,7 +273,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy=1.26.4 + pip install numpy pip install sympy pip install scipy pip install h5py @@ -483,7 +485,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy=1.26.4 + pip install numpy pip install sympy pip install scipy From 2a568557fb3ea364c67ca56f618b7727677017a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Mon, 2 Dec 2024 13:59:45 +0100 Subject: [PATCH 09/11] Renaming --- .../docker_file_ci_rockylinux8/{Dockerfile => DockerFile} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/docker_files/docker_file_ci_rockylinux8/{Dockerfile => DockerFile} (100%) diff --git a/scripts/docker_files/docker_file_ci_rockylinux8/Dockerfile b/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile similarity index 100% rename from scripts/docker_files/docker_file_ci_rockylinux8/Dockerfile rename to scripts/docker_files/docker_file_ci_rockylinux8/DockerFile From 76d7973e78382c4c6c38fb3375d3a7ad1fa4b07f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 12:40:43 +0100 Subject: [PATCH 10/11] Trigger new CI --- scripts/docker_files/docker_file_ci_rockylinux8/DockerFile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile b/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile index e77ab6dce14c..3eac0e27cc8f 100644 --- a/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile +++ b/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile @@ -30,4 +30,4 @@ RUN dnf update -y && dnf install -y \ CMD [ "/bin/bash" ] -WORKDIR $HOME +WORKDIR $HOME \ No newline at end of file From 965cde7b9a5bda12ea1d1191607979a61e9dea81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:52:56 +0100 Subject: [PATCH 11/11] Adding Boost library (otherwise it fails in actual CI). Sorry in our side we copy manually boost. --- .../docker_files/docker_file_ci_rockylinux8/DockerFile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile b/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile index 3eac0e27cc8f..0b3d4a1c58db 100644 --- a/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile +++ b/scripts/docker_files/docker_file_ci_rockylinux8/DockerFile @@ -4,7 +4,7 @@ USER root ENV HOME /root -# install python3.8.10 +# Install python3.8.10 RUN dnf update -y && \ dnf groupinstall "Development Tools" -y && \ dnf install -y wget openssl-devel bzip2-devel libffi-devel && \ @@ -20,7 +20,7 @@ ENV PYTHON_EXECUTABLE /usr/local/bin/python3.8 RUN python3.8 -m pip install numpy sympy scipy parameterized -# install build utils +# Install build utils RUN dnf update -y && dnf install -y \ --enablerepo=devel ninja-build \ cmake \ @@ -28,6 +28,11 @@ RUN dnf update -y && dnf install -y \ --enablerepo=devel blas-devel \ --enablerepo=devel lapack-devel +# Install Boost libraries +RUN dnf update -y && dnf install -y \ + boost-devel \ + boost-static + CMD [ "/bin/bash" ] WORKDIR $HOME \ No newline at end of file