diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8f732acb9d2..d30a240c4e8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ stages: - preparation - build + - test - check - release - package @@ -69,6 +70,6 @@ include: - local: "/scripts/ci/pipelines/win.yml" rules: - if: $CI_MERGE_REQUEST_LABELS =~ /.*ci::win only.*/ - - local: "/scripts/ci/pipelines/wheels.yml" + - local: "/scripts/ci/jobs/build-wheels.yml" rules: - if: $CI_MERGE_REQUEST_LABELS =~ /.*ci::wheels only.*/ diff --git a/MaterialLib/SolidModels/MFront/CMakeLists.txt b/MaterialLib/SolidModels/MFront/CMakeLists.txt index f0d234f6927..8021c7ea307 100644 --- a/MaterialLib/SolidModels/MFront/CMakeLists.txt +++ b/MaterialLib/SolidModels/MFront/CMakeLists.txt @@ -46,7 +46,7 @@ set(_mfront_behaviours ThermoPoroElasticity ) -if(OGS_BUILD_WHEEL) +if(OGS_BUILD_WHEEL AND NOT APPLE_ARM) # Build behaviours lib with mfront executable foreach(behaviour ${_mfront_behaviours}) list(APPEND _mfront_behaviour_files diff --git a/Tests/Data/Mechanics/ModifiedCamClay/mtest/ModCamClay_TestIsotrop.ipynb b/Tests/Data/Mechanics/ModifiedCamClay/mtest/ModCamClay_TestIsotrop.ipynb new file mode 100644 index 00000000000..f9b69374fb5 --- /dev/null +++ b/Tests/Data/Mechanics/ModifiedCamClay/mtest/ModCamClay_TestIsotrop.ipynb @@ -0,0 +1,464 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "adf26a83-c60f-4382-ae8d-4d777fa0650d", + "metadata": {}, + "source": [ + "# Interactive comparison:\n", + "## Original Modified Cam Clay model versus a basic version with constant elastic parameters under isotropic compression\n", + "\n", + "Comments to:\n", + "\n", + "*Prof. Dr. Thomas Nagel, Dr. Christian Silbermann\n", + "Chair of Soil Mechanics and Foundation Engineering\n", + "Geotechnical Institute\n", + "Technische Universität Bergakademie Freiberg.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22b8ed57-1cc7-4778-a632-ac08c88fd6f1", + "metadata": {}, + "outputs": [], + "source": [ + "# HIDDEN\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import mtest as mtest\n", + "import site" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7b6054d-c7f4-41cf-8e3b-4b14cda6aa4e", + "metadata": {}, + "outputs": [], + "source": [ + "# Path to MFront library including the material models\n", + "lib_path = site.getsitepackages()[0] + \"/lib64/libOgsMFrontBehaviour.so\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8cf99b54-6da2-48b1-8e39-fa82463ab7de", + "metadata": {}, + "outputs": [], + "source": [ + "# Some plot settings\n", + "plt.rcParams[\"lines.linewidth\"] = 2.0\n", + "plt.rcParams[\"lines.color\"] = \"black\"\n", + "plt.rcParams[\"legend.frameon\"] = True\n", + "plt.rcParams[\"figure.figsize\"] = (14, 14)\n", + "plt.rcParams[\"font.family\"] = \"serif\"\n", + "plt.rcParams[\"legend.fontsize\"] = 16\n", + "plt.rcParams[\"font.size\"] = 16" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1fbc37de-60b5-4dc7-b760-fda853fc92ff", + "metadata": {}, + "outputs": [], + "source": [ + "# Set stress unit to Pa\n", + "kPa = 1e3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "48d3d170-448a-4d71-ace9-b003925e6715", + "metadata": {}, + "outputs": [], + "source": [ + "# Material parameters taken from Triax test\n", + "nu = 0.30 # Poisson ratio\n", + "la = 7.7e-2 # slope of the virgin consolidation line\n", + "ka = 6.6e-3 # slope of the swelling line\n", + "M = 1.2 # slope of the critical state line (CSL)\n", + "v0 = 1.785714286\n", + "phi0 = 1 - 1 / v0 # Initial porosity\n", + "pc0 = 200.0e3 # Initial pre-consolidation pressure in Pa" + ] + }, + { + "cell_type": "markdown", + "id": "ec78ce38-9a2c-4e5d-af94-a2baed5d2d8e", + "metadata": {}, + "source": [ + "## Analytical solution\n", + "\n", + "The essential MCC evolution equations for the pressure and the pre-consolidation pressure, i.e.\n", + "$$\n", + " \\frac{\\dot{p}}{p} = -\\left(\\frac{v_0}{\\kappa}\\right) \\dot{\\varepsilon}_\\text{e}^\\text{V}\n", + " \\quad,\\quad\n", + " \\frac{\\dot{p}_\\text{c}}{p_\\text{c}} = -\\left(\\frac{v_0}{\\lambda - \\kappa}\\right)\\dot{\\varepsilon}_\\text{p}^\\text{V}\n", + " \\ . \\\\\n", + "$$\n", + "can be integrated easily by separation of variables. Assuming zero initial volume strains and the initial values $p_0$ and $p_\\text{c0}$ we get the expressions\n", + "$$\n", + " {\\varepsilon}_\\text{e}^\\text{V} = -\\left(\\frac{\\kappa}{v_0}\\right)\\ln\\left(\\frac{p}{p_0}\\right)\n", + " \\quad,\\quad\n", + " {\\varepsilon}_\\text{p}^\\text{V} = -\\left(\\frac{\\lambda-\\kappa}{v_0}\\right) \\ln\\left(\\frac{p_\\text{c}}{p_\\text{c0}}\\right)\n", + " \\ . \\\\\n", + "$$\n", + "With the additive composition of the total volumetric strain, i.e. ${\\varepsilon}^\\text{V} = {\\varepsilon}_\\text{e}^\\text{V} + {\\varepsilon}_\\text{p}^\\text{V}$ and with the linear kinematic relation $v - v_0 = v_0 \\varepsilon^\\text{V}$ we finally get\n", + "$$\n", + " v = v_0 - \\kappa\\ln\\left(\\frac{p}{p_0}\\right) - (\\lambda-\\kappa) \\ln\\left(\\frac{p_\\text{c}}{p_\\text{c0}}\\right)\n", + " \\ . \\\\\n", + "$$\n", + "This is an analytical solution holding true for small changes of the volume ratio, i.e. $v\\approx v_0$.\n", + "Now, monotonic loading is considered for a stress-controlled isotropic compression test. Starting from the state $(p_0, v_0)$ with\n", + "$$\n", + "p=p_0, p_\\text{c}=p_\\text{c0} \\quad\\rightarrow\\quad v = v_0\n", + "$$\n", + "the pressure is increased monotonically and the behavior is elastic until reaching the pre-consolidation pressure (the yield stress under isotropic compression) when\n", + "$$\n", + "p=p_\\text{c0}, p_\\text{c}=p_\\text{c0} \\quad\\rightarrow\\quad v = v_0 - \\kappa\\ln\\left(\\frac{p_\\text{c0}}{p_0}\\right) \\ .\n", + "$$\n", + "Further increasing the pressure in the elastic-plastic region up to some end value $p=p_\\text{E}>p_\\text{c0}$, the final state is\n", + "$$\n", + "p=p_\\text{E}, p_\\text{c}=p_\\text{E} \\quad\\rightarrow\\quad v = v_0 - \\kappa\\ln\\left(\\frac{p_\\text{E}}{p_0}\\right) - (\\lambda-\\kappa) \\ln\\left(\\frac{p_\\text{E}}{p_\\text{c0}}\\right) \\ .\n", + "$$\n", + "Between these corner points, the solution is a straight line in the semi-log space. To be precise, we choose $p_0 = p_\\text{c0} / 4$, $p_\\text{E} = 2 p_\\text{c0}$. Thus, we obtain three states defining the analytical solution:\n", + "$$\n", + "\\text{State 0:} \\quad p=\\frac{p_\\text{c0}}{4} ,\\quad v = v_0 \\\\\n", + "\\text{State 1:} \\quad p=p_\\text{c0} ,\\quad v = v_0 - \\kappa\\ln(4) \\\\\n", + "\\text{State 2:} \\quad p=2p_\\text{c0} ,\\quad v = v_0 - \\kappa\\ln(8) - (\\lambda-\\kappa) \\ln(2) \\\\\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "67c6ffea-41eb-4b0b-a834-38d5a8813e18", + "metadata": {}, + "outputs": [], + "source": [ + "# Loading\n", + "p_0 = pc0 / 4 # initial pressure\n", + "p_E = 2 * pc0 # final pressure\n", + "OCR = pc0 / p_0 # highest experienced pressure over current/initial pressure\n", + "\n", + "t_discrete = np.linspace(0, 1, 500)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fcca70bc-d181-423c-a04b-ea90b4d7b2fb", + "metadata": { + "lines_to_next_cell": 2 + }, + "outputs": [], + "source": [ + "# Analytical Solution: two straight lines in semi-log-space\n", + "def MCC_isotropic_compression_analytical(la, ka, v0, pc0, p_0, p_E):\n", + " # swelling line (elastic)\n", + " Pp_swl = [p_0, pc0]\n", + " Pv_swl = [v0, v0 - ka * np.log(pc0 / p_0)]\n", + " # normal compression line (elastoplastic)\n", + " Pp_ncl = [pc0, p_E]\n", + " Pv_ncl = [\n", + " v0 - ka * np.log(pc0 / p_0),\n", + " v0 - ka * np.log(p_E / p_0) - (la - ka) * np.log(p_E / pc0),\n", + " ]\n", + "\n", + " return np.array(Pp_swl), np.array(Pv_swl), np.array(Pp_ncl), np.array(Pv_ncl)" + ] + }, + { + "cell_type": "markdown", + "id": "89396471-d2c0-4304-96ef-86ca6539ec1e", + "metadata": { + "lines_to_next_cell": 2 + }, + "source": [ + "## Numerical solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f26862fc-a51b-4f61-b571-6aa10bbe7bea", + "metadata": {}, + "outputs": [], + "source": [ + "# MFront test definition\n", + "def MCC_isotropic_compression_numerical(\n", + " mcc_model, lib_path, nu, la, ka, M, v0, phi0, pc0, p_0, p_E, t_discrete\n", + "):\n", + " m = mtest.MTest()\n", + " mtest.setVerboseMode(mtest.VerboseLevel.VERBOSE_QUIET)\n", + " m.setMaximumNumberOfSubSteps(10)\n", + " m.setBehaviour(\"generic\", lib_path, mcc_model)\n", + " m.setExternalStateVariable(\"Temperature\", 293.15)\n", + "\n", + " m.setStress([-p_0, -p_0, -p_0, 0.0, 0.0, 0.0])\n", + " m.setStrain([0.0, 0.0, 0.0, 0.0, 0.0, 0.0])\n", + " m.setImposedStress(\"SXX\", {0: -p_0, 1: -p_E})\n", + " m.setImposedStress(\"SYY\", {0: -p_0, 1: -p_E})\n", + " m.setImposedStress(\"SZZ\", {0: -p_0, 1: -p_E})\n", + "\n", + " if mcc_model == \"ModCamClay_semiExpl_constE\":\n", + " E = 3 * (1 - 2 * nu) / (1 - phi0) * p_0 / ka\n", + " m.setMaterialProperty(\"YoungModulus\", E)\n", + " m.setParameter(\"AmbientPressure\", 0.0)\n", + " print(\"Young Modulus set to E =\", E / 1e6, \" MPa\")\n", + " if mcc_model in (\"ModCamClay_semiExpl\", \"ModCamClay_semiExpl_absP\"):\n", + " m.setMaterialProperty(\"InitialVolumeRatio\", v0)\n", + "\n", + " m.setMaterialProperty(\"PoissonRatio\", nu)\n", + " m.setMaterialProperty(\"CriticalStateLineSlope\", M)\n", + " m.setMaterialProperty(\"SwellingLineSlope\", ka)\n", + " m.setMaterialProperty(\"VirginConsolidationLineSlope\", la)\n", + " m.setMaterialProperty(\"CharacteristicPreConsolidationPressure\", pc0)\n", + "\n", + " m.setInternalStateVariableInitialValue(\"PreConsolidationPressure\", pc0)\n", + " m.setInternalStateVariableInitialValue(\"VolumeRatio\", v0)\n", + "\n", + " s = mtest.MTestCurrentState()\n", + " wk = mtest.MTestWorkSpace()\n", + " m.completeInitialisation()\n", + " m.initializeCurrentState(s)\n", + " m.initializeWorkSpace(wk)\n", + "\n", + " tau_xy = np.array([s.s0[3] / np.sqrt(2.0)])\n", + " eps_xy = np.array([s.e0[3] / np.sqrt(2.0)])\n", + " tau_yz = np.array([s.s0[5] / np.sqrt(2.0)])\n", + " eps_yz = np.array([s.e0[5] / np.sqrt(2.0)])\n", + " tau_xz = np.array([s.s0[4] / np.sqrt(2.0)])\n", + " eps_xz = np.array([s.e0[4] / np.sqrt(2.0)])\n", + " eps_xx = np.array([s.e0[0]])\n", + " sig_xx = np.array([s.s0[0]])\n", + " eps_yy = np.array([s.e0[1]])\n", + " sig_yy = np.array([s.s0[1]])\n", + " eps_zz = np.array([s.e0[2]])\n", + " sig_zz = np.array([s.s0[2]])\n", + " pc = np.array([pc0])\n", + " vr = np.array([v0])\n", + " for i in range(len(t_discrete) - 1):\n", + " m.execute(s, wk, t_discrete[i], t_discrete[i + 1])\n", + " eps_xy = np.append(eps_xy, s.e1[3] / np.sqrt(2.0)) # Kelvin mapping backwards!\n", + " tau_xy = np.append(tau_xy, s.s1[3] / np.sqrt(2.0)) # Kelvin mapping backwards!\n", + " eps_xz = np.append(eps_xz, s.e1[4] / np.sqrt(2.0)) # Kelvin mapping backwards!\n", + " tau_xz = np.append(tau_xz, s.s1[4] / np.sqrt(2.0)) # Kelvin mapping backwards!\n", + " eps_yz = np.append(eps_yz, s.e1[5] / np.sqrt(2.0)) # Kelvin mapping backwards!\n", + " tau_yz = np.append(tau_yz, s.s1[5] / np.sqrt(2.0)) # Kelvin mapping backwards!\n", + " sig_xx = np.append(sig_xx, s.s1[0])\n", + " eps_xx = np.append(eps_xx, s.e1[0])\n", + " sig_yy = np.append(sig_yy, s.s1[1])\n", + " eps_yy = np.append(eps_yy, s.e1[1])\n", + " sig_zz = np.append(sig_zz, s.s1[2])\n", + " eps_zz = np.append(eps_zz, s.e1[2])\n", + " pc = np.append(pc, s.getInternalStateVariableValue(\"PreConsolidationPressure\"))\n", + " vr = np.append(vr, s.getInternalStateVariableValue(\"VolumeRatio\"))\n", + "\n", + " p = -(sig_xx + sig_yy + sig_zz) / 3\n", + " return p, pc, vr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "33677b89-6c70-4210-9934-3b432f54e800", + "metadata": {}, + "outputs": [], + "source": [ + "# Analytical solution:\n", + "[p_swl, v_swl, p_ncl, v_ncl] = MCC_isotropic_compression_analytical(\n", + " la, ka, v0, pc0, p_0, p_E\n", + ")\n", + "\n", + "# Numerical solution:\n", + "mcc_model = \"ModCamClay_semiExpl_constE\"\n", + "[p_data0, pc_data0, vr_data0] = MCC_isotropic_compression_numerical(\n", + " mcc_model, lib_path, nu, la, ka, M, v0, phi0, pc0, p_0, p_E, t_discrete\n", + ")\n", + "\n", + "mcc_model = \"ModCamClay_semiExpl\"\n", + "[p_data1, pc_data1, vr_data1] = MCC_isotropic_compression_numerical(\n", + " mcc_model, lib_path, nu, la, ka, M, v0, phi0, pc0, p_0, p_E, t_discrete\n", + ")\n", + "\n", + "mcc_model = \"ModCamClay_semiExpl_absP\"\n", + "[p_data2, pc_data2, vr_data2] = MCC_isotropic_compression_numerical(\n", + " mcc_model, lib_path, nu, la, ka, M, v0, phi0, pc0, p_0, p_E, t_discrete\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "ee7afc5f-70db-46a1-a1ea-c327d0897e9f", + "metadata": {}, + "source": [ + "### Consistency of initial elastic constants\n", + "\n", + "Given the swelling line slope $\\kappa$ and the initial hydrostatic pressure $p_0$, the compression modulus is determined according to\n", + "$$\n", + "K = v_0 \\frac{p_0}{\\kappa} \\ .\n", + "$$\n", + "\n", + "With the Poisson's ratio $\\nu$, Young's modulus can be obtained as\n", + "$$\n", + "E = 3(1-2\\nu) K = v_0\\cdot 3(1-2\\nu) \\frac{p_0}{\\kappa} = 3 \\frac{(1-2\\nu)}{(1-\\phi_0)} \\frac{p_0}{\\kappa} \\ .\n", + "$$\n", + "In order to make the MCC models with pressure-dependent elasticity (the original MCC) and with constant elastic parameters *initially* consistent, $E$ cannot be chosen arbitrarily, but according to the formula above. Nevertheless, the hardening behaviour will be different, which is seen in the next figure." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9be0c21-e010-477a-be4a-35e425cef90f", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(12, 10))\n", + "\n", + "ax.plot(\n", + " p_swl / kPa,\n", + " v_swl,\n", + " color=\"black\",\n", + " lw=4,\n", + " label=\"analytical solution: normal consolidation line\",\n", + ")\n", + "ax.plot(p_ncl / kPa, v_ncl, color=\"black\", lw=4)\n", + "\n", + "ax.plot(\n", + " p_data0 / kPa,\n", + " vr_data0,\n", + " label=\"numerical solution: MCC constant elastic parameters\",\n", + " color=\"red\",\n", + " ls=\"--\",\n", + ")\n", + "ax.plot(\n", + " p_data1 / kPa,\n", + " vr_data1,\n", + " label=\"numerical solution: MCC pressure-dependent elasticity incremental\",\n", + " color=\"orange\",\n", + " ls=\"-.\",\n", + ")\n", + "# ax.plot(p_data2 / kPa, vr_data2, label='numerical solution: MCC pressure-dependent elasticity absolute', color='green' ,ls=':')\n", + "ax.legend()\n", + "ax.grid()\n", + "ax.set_title(\"Isotropic compression test with OCR=%i\" % OCR)\n", + "ax.set_xlabel(\"$p$ / kPa\")\n", + "ax.set_ylabel(\"$v$\")\n", + "ax.set_xscale(\"log\") # ,base=np.e)\n", + "fig.tight_layout()\n", + "\n", + "fig.savefig(\"Comparison_NCL_MCC_new_OCR=%i.pdf\" % OCR)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4a9b4cf4-2b9d-4034-a3ec-1a2ead6f7fc3", + "metadata": {}, + "source": [ + "## Difference between the two implementation with pressure-dependent elasticity\n", + "\n", + "Note that for extrem high initial overconsolidation, the absolute formulation is superior to the fully incremental one. The latter one produces an offset right in the first time step, which persists throughout the simulation.\n", + "To demonstrate this we use `p_0 = pc0/400` and plot only `data1` and `data2`.\n", + "\n", + "However, in practical applications with normal consolidation this seems hardly relevant." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "261598ef-d9e7-44f6-a88a-ef48ada11e56", + "metadata": {}, + "outputs": [], + "source": [ + "# Loading\n", + "p_0 = pc0 / 400\n", + "p_E = 2 * pc0\n", + "OCR = pc0 / p_0\n", + "t_discrete = np.linspace(0, 1, 500)\n", + "\n", + "# Analytical solution:\n", + "[p_swl, v_swl, p_ncl, v_ncl] = MCC_isotropic_compression_analytical(\n", + " la, ka, v0, pc0, p_0, p_E\n", + ")\n", + "\n", + "mcc_model = \"ModCamClay_semiExpl\"\n", + "[p_data3, pc_data3, vr_data3] = MCC_isotropic_compression_numerical(\n", + " mcc_model, lib_path, nu, la, ka, M, v0, phi0, pc0, p_0, p_E, t_discrete\n", + ")\n", + "\n", + "mcc_model = \"ModCamClay_semiExpl_absP\"\n", + "[p_data4, pc_data4, vr_data4] = MCC_isotropic_compression_numerical(\n", + " mcc_model, lib_path, nu, la, ka, M, v0, phi0, pc0, p_0, p_E, t_discrete\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "94e8a1dd-bc3a-4a3d-9310-5c7def86a418", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(12, 10))\n", + "\n", + "ax.plot(\n", + " p_swl / kPa,\n", + " v_swl,\n", + " color=\"black\",\n", + " lw=4,\n", + " label=\"analytical solution: normal consolidation line\",\n", + ")\n", + "ax.plot(p_ncl / kPa, v_ncl, color=\"black\", lw=4)\n", + "\n", + "ax.plot(\n", + " p_data3 / kPa,\n", + " vr_data3,\n", + " label=\"numerical solution: MCC pressure-dependent elasticity incremental\",\n", + " color=\"orange\",\n", + " ls=\"-.\",\n", + ")\n", + "ax.plot(\n", + " p_data4 / kPa,\n", + " vr_data4,\n", + " label=\"numerical solution: MCC pressure-dependent elasticity absolute\",\n", + " color=\"green\",\n", + " ls=\":\",\n", + ")\n", + "ax.legend()\n", + "ax.grid()\n", + "ax.set_title(\"Isotropic compression test with OCR=%i\" % OCR)\n", + "ax.set_xlabel(\"$p$ / kPa\")\n", + "ax.set_ylabel(\"$v$\")\n", + "ax.set_xscale(\"log\")\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scripts/ci/jobs/build-wheels.yml b/scripts/ci/jobs/build-wheels.yml index cc26834f5ea..9cbb6b64a2c 100644 --- a/scripts/ci/jobs/build-wheels.yml +++ b/scripts/ci/jobs/build-wheels.yml @@ -30,6 +30,12 @@ include: stage: build script: - pipx run cibuildwheel + rules: + - if: $CI_MERGE_REQUEST_LABELS =~ /.*ci::wheels only.*/ + variables: + CIBW_BUILD: cp310* + GIT_DEPTH: 1000 + - when: on_success artifacts: paths: - wheelhouse/ @@ -81,6 +87,7 @@ test notebooks via wheel: stage: test needs: ["build wheels linux"] rules: + - if: $CI_MERGE_REQUEST_LABELS =~ /.*ci::wheels only.*/ - when: manual before_script: - cd Tests/Data diff --git a/scripts/ci/jobs/jupyter.yml b/scripts/ci/jobs/jupyter.yml index c99317df5e9..02acf47d851 100644 --- a/scripts/ci/jobs/jupyter.yml +++ b/scripts/ci/jobs/jupyter.yml @@ -1,6 +1,6 @@ test notebooks via wheel: stage: build - tags: [envinf23, shell] + tags: [envinf3, shell] before_script: - cd Tests/Data - python -m venv --upgrade-deps .venv @@ -10,6 +10,9 @@ test notebooks via wheel: - pip install -r requirements-dev.txt - pip install -r requirements-ogs.txt script: + # Append mtest install directory to PYTHONPATH + - export PYTHONPATH=/opt/tfel-rliv-4.0/lib/python3.11/site-packages:$PYTHONPATH + - export LD_LIBRARY_PATH=/opt/tfel-rliv-4.0/lib:$LD_LIBRARY_PATH # TODO: # - better timeout # - run in parallel diff --git a/scripts/ci/pipelines/linux.yml b/scripts/ci/pipelines/linux.yml index 90df2d7992e..345240eb045 100644 --- a/scripts/ci/pipelines/linux.yml +++ b/scripts/ci/pipelines/linux.yml @@ -9,3 +9,4 @@ include: - local: "/scripts/ci/jobs/build-linux-frontend.yml" - local: "/scripts/ci/jobs/build-gui-linux.yml" - local: "/scripts/ci/jobs/build-guix.yml" + - local: "/scripts/ci/jobs/jupyter.yml"