diff --git a/.gitignore b/.gitignore index e7597ede..daf9c297 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ src/python/dist* src/python/chaste.egg-info* # No api docs doc/api/build* +# Build folder +build/ \ No newline at end of file diff --git a/ProjectIncludes.cmake b/ProjectIncludes.cmake index cbaea6c3..a919baef 100644 --- a/ProjectIncludes.cmake +++ b/ProjectIncludes.cmake @@ -34,7 +34,6 @@ set(PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/) list (APPEND PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/cell_based) list (APPEND PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/ode) -list (APPEND PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/mesh) list (APPEND PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/tutorial) list (APPEND PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/visualization) list (APPEND PYCHASTE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/dynamic) \ No newline at end of file diff --git a/WrapPython.cmake b/WrapPython.cmake index ad392565..ae8c70ea 100644 --- a/WrapPython.cmake +++ b/WrapPython.cmake @@ -35,9 +35,6 @@ add_compile_options(-Wno-unused-local-typedefs) # Add any cmake modules defined in this project list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE) -# Used for binding generation -set(CASTXML_EXE_LOC "/usr/bin/castxml" CACHE FILEPATH "Path to the castxml executable.") - # Find the Chaste and third party dependency header files. include_directories(${Chaste_INCLUDE_DIRS} ${Chaste_THIRD_PARTY_INCLUDE_DIRS}) @@ -102,14 +99,14 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/doc/ DESTINATION ${CMAKE_CURRENT_BINARY_DI # Target to generate bindings add_custom_target(project_PyChaste_Python_Bindings) -SET(arguments ${CMAKE_SOURCE_DIR}/) -LIST(APPEND arguments ${CMAKE_CURRENT_SOURCE_DIR}/dynamic/wrappers/) -LIST(APPEND arguments ${CMAKE_CURRENT_SOURCE_DIR}/dynamic/wrapper_generators/package_info.yaml) -LIST(APPEND arguments ${CASTXML_EXE_LOC}) -LIST(APPEND arguments ${PYCHASTE_INCLUDE_DIRS}) -LIST(APPEND arguments ${Chaste_INCLUDE_DIRS}) -LIST(APPEND arguments ${Chaste_THIRD_PARTY_INCLUDE_DIRS}) -add_custom_command(TARGET project_PyChaste_Python_Bindings COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/dynamic/wrapper_generators/generate.py ${arguments}) +add_custom_command( + TARGET project_PyChaste_Python_Bindings + COMMAND cppwg ${CMAKE_SOURCE_DIR} + -w ${CMAKE_CURRENT_SOURCE_DIR}/dynamic/wrappers + -p ${CMAKE_CURRENT_SOURCE_DIR}/dynamic/wrapper_generators/package_info.yaml + -i ${PYCHASTE_INCLUDE_DIRS} ${Chaste_INCLUDE_DIRS} ${Chaste_THIRD_PARTY_INCLUDE_DIRS} + --std c++17 +) # Loop through each module and create the shared library targets list(LENGTH PYCHASTE_PYTHON_MODULES len1) diff --git a/doc/tutorials/TestImmersedBoundaryTutorial.ipynb b/doc/tutorials/TestImmersedBoundaryTutorial.ipynb new file mode 100644 index 00000000..ff696900 --- /dev/null +++ b/doc/tutorials/TestImmersedBoundaryTutorial.ipynb @@ -0,0 +1,1182 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b3c54201", + "metadata": {}, + "source": [ + "This tutorial is automatically generated from the file /home/kwabena/repo/PyChaste/test/python/cell_based/tutorials/TestImmersedBoundaryTutorial.py.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95b3e89a", + "metadata": {}, + "outputs": [], + "source": [ + "# Jupyter notebook specific imports \n", + "import matplotlib as mpl \n", + "from IPython import display \n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "id": "db9729f7", + "metadata": {}, + "source": [ + "\n", + "## Introduction\n", + "This tutorial is a demonstration of the immersed boundary method, a technique\n", + "for simulating fluid-structure interactions. We can use the immersed boundary\n", + "method to simulate a cell as a structure with its outer **boundary immersed**\n", + "in a fluid. There is a two-way coupling between the fluid and the structure:\n", + "the flow of the fluid exerts a force on the structure, and the structure\n", + "influences the flow of the fluid.\n", + "\n", + "In this tutorial, we demonstrate:\n", + "1. Building single-cell immersed boundary capable simulations.\n", + "2. Building multi-cellular immersed boundary simulations.\n", + "3. Adding and manipulating immersed boundary fluid sources.\n", + "\n", + "## Imports\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4ced0c9", + "metadata": {}, + "outputs": [], + "source": [ + "import chaste\n", + "chaste.init() # setup MPI\n", + "from chaste.cell_based import (\n", + " AbstractCellBasedTestSuite,\n", + " CellsGeneratorUniformCellCycleModel_2,\n", + " DifferentiatedCellProliferativeType,\n", + " ForwardEulerNumericalMethod2_2,\n", + " ImmersedBoundaryCellPopulation2,\n", + " ImmersedBoundaryLinearInteractionForce2,\n", + " ImmersedBoundaryLinearMembraneForce2,\n", + " ImmersedBoundarySimulationModifier2,\n", + " OffLatticeSimulation2_2,\n", + " SetupNotebookTest,\n", + " SimulationTime,\n", + " TearDownNotebookTest,\n", + ")\n", + "from chaste.mesh import FluidSource2, ImmersedBoundaryPalisadeMeshGenerator\n", + "from chaste.visualization import (\n", + " JupyterNotebookManager,\n", + " JupyterSceneModifier2,\n", + " VtkScene2\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1d01e102", + "metadata": {}, + "source": [ + "### 1. Simple Immersed Boundary Simulations\n", + "We begin by exploring simulations containing a single cell. This will\n", + "familiarise you with how to generate immersed boundary cells, the steps\n", + "involved in setting up an immersed boundary simulation, and the options\n", + "available for controlling how the cells are generated and behave.\n", + "\n", + "Immersed boundary simulations operate over a square domain, with `x` and `y`\n", + "coordinates lying in the range `0` to `1`. The domain wraps on both axes -\n", + "this means that if a cell moves off the right hand edge of the domain,\n", + "the segment will appear on the left hand side. This is not purely visual;\n", + "forces are also transmitted across these boundaries.\n", + "\n", + " **Tip** Make sure all your coordinates are between `0` and `1`.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "d125a0f4", + "metadata": {}, + "source": [ + "Setup the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18f22aa7", + "metadata": {}, + "outputs": [], + "source": [ + "SetupNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "87432256", + "metadata": {}, + "source": [ + "Set the start time for the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76644e4f", + "metadata": {}, + "outputs": [], + "source": [ + "SimulationTime.Instance().SetStartTime(0.0)" + ] + }, + { + "cell_type": "markdown", + "id": "75801e10", + "metadata": {}, + "source": [ + "Next, we define the necessary geometry by generating a mesh to\n", + "contain a single cell.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e89d05a", + "metadata": {}, + "outputs": [], + "source": [ + "gen = ImmersedBoundaryPalisadeMeshGenerator(1, 128, 0.1, 2.0, 0.0, False)\n", + "mesh = gen.GetMesh()" + ] + }, + { + "cell_type": "markdown", + "id": "9261fc02", + "metadata": {}, + "source": [ + "The first line of code defines an `ImmersedBoundaryPalisadeMeshGenerator`\n", + "called `gen`. The 3rd parameter controls the exponent of the superellipse(`0.1`)\n", + "and the 4th parameter controls the aspect ratio of the cell(`2.0`). You can\n", + "experiment with modifying these to change the initial shape of the cell.\n", + "\n", + "The second line of code instructs the mesh generator to generate a mesh.\n", + "Checking the type of mesh with `type(mesh)` will show it as\n", + "`ImmersedBoundaryMesh2_2`. The `2_2` suffix denotes that we are using\n", + "a 2-dimensional space, and 2-dimensional elements to define the mesh.\n", + "\n", + "We now set the fluid grid resolution. The following code specifies\n", + "that we are using a 64x64 grid to simulate our fluid over.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12b402f7", + "metadata": {}, + "outputs": [], + "source": [ + "mesh.SetNumGridPtsXAndY(64)" + ] + }, + { + "cell_type": "markdown", + "id": "25a7c7ce", + "metadata": {}, + "source": [ + "Next, we generate the cells. We specify a cell type and cell cycle model.\n", + "These can be changed to modify the life cycle of the cells. The\n", + "cell generator then constructs the necessary information for each\n", + "of the elements in the mesh.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a47b2965", + "metadata": {}, + "outputs": [], + "source": [ + "cell_type = DifferentiatedCellProliferativeType()\n", + "cell_generator = CellsGeneratorUniformCellCycleModel_2()\n", + "cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type)" + ] + }, + { + "cell_type": "markdown", + "id": "95871cf1", + "metadata": {}, + "source": [ + "Finally, we construct the cell population. We then specify whether the\n", + "population has active fluid sources or not. For now, we are not\n", + "using any fluid sources, so we set this to `False`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b77dfade", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population = ImmersedBoundaryCellPopulation2(mesh, cells)\n", + "cell_population.SetIfPopulationHasActiveSources(False)" + ] + }, + { + "cell_type": "markdown", + "id": "f5455bd3", + "metadata": {}, + "source": [ + "We can make a quick visualization of the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2666d89d", + "metadata": {}, + "outputs": [], + "source": [ + "scene = VtkScene2()\n", + "scene.SetCellPopulation(cell_population)\n", + "nb_manager = JupyterNotebookManager()\n", + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "47130577", + "metadata": {}, + "source": [ + "Next, we create an `OffLatticeSimulation` simulator to control the\n", + "simulation. Although the fluid is simulated on a lattice (grid),\n", + "the nodes/cells are not bound to a lattice.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18d58d09", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = OffLatticeSimulation2_2(cell_population)\n", + "simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2())\n", + "simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True)" + ] + }, + { + "cell_type": "markdown", + "id": "35c39a46", + "metadata": {}, + "source": [ + "As we have an off-lattice simulation, we need a way to model the\n", + "fluid. This is handled by the `ImmersedBoundarySimulationModifier`.\n", + "Modifiers in Chaste are classes that can be attached to simulations\n", + "to perform some additional custom functionality each timestep.\n", + "In this case, the modifier is responsible for solving the\n", + "Navier-Stokes equations and propagating forces between the nodes and\n", + "the fluid.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "40ca1b17", + "metadata": {}, + "outputs": [], + "source": [ + "ib_modifier = ImmersedBoundarySimulationModifier2()\n", + "simulator.AddSimulationModifier(ib_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "407d1312", + "metadata": {}, + "source": [ + "We must also provide the modifier with a force model to govern\n", + "interactions between the nodes forming the cell membrane.\n", + "Note that these forces only act between nodes in the same cell;\n", + "they do not control interactions between cells.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2abeb8fa", + "metadata": {}, + "outputs": [], + "source": [ + "membrane_force = ImmersedBoundaryLinearMembraneForce2()\n", + "membrane_force.SetElementSpringConst(1.0 * 1e7)\n", + "ib_modifier.AddImmersedBoundaryForce(membrane_force)" + ] + }, + { + "cell_type": "markdown", + "id": "b72986b8", + "metadata": {}, + "source": [ + "The `ImmersedBoundaryLinearMembraneForce` models forces between\n", + "membrane nodes using linear springs i.e, the force applied is\n", + "proportional to the deviation of the distance between nodes\n", + "from a rest length. The spring constant(`1.0 * 1e7`) defines how\n", + "stiff the cell boundary is.\n", + "\n", + " **Practice** Experiment with adjusting the spring constant to\n", + " change the force behaviour between nodes of the cell boundary.\n", + " \n", + "Next, we set the simulation properties\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eda611ef", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.05\n", + "simulator.SetOutputDirectory(\"Python/TestImmersedBoundary_1\")\n", + "simulator.SetDt(dt)\n", + "simulator.SetSamplingTimestepMultiple(4)\n", + "simulator.SetEndTime(1000 * dt)" + ] + }, + { + "cell_type": "markdown", + "id": "420805f1", + "metadata": {}, + "source": [ + "We can add a modifier to visualize the cell population while the\n", + "simulation is in progress\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8e38213", + "metadata": {}, + "outputs": [], + "source": [ + "scene_modifier = JupyterSceneModifier2(nb_manager)\n", + "scene_modifier.SetVtkScene(scene)\n", + "scene_modifier.SetUpdateFrequency(1000)\n", + "simulator.AddSimulationModifier(scene_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "be93eddd", + "metadata": {}, + "source": [ + "Finally, to run the simulation we call the `Solve()` method.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cc37872", + "metadata": {}, + "outputs": [], + "source": [ + "simulator.Solve()" + ] + }, + { + "cell_type": "markdown", + "id": "98429afa", + "metadata": {}, + "source": [ + "Reset the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26d8fe0c", + "metadata": {}, + "outputs": [], + "source": [ + "TearDownNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "df554a43", + "metadata": {}, + "source": [ + "### 2. Adding More Cells\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "193fe3d3", + "metadata": {}, + "source": [ + "#### Multiple Cells\n", + "\n", + "Setup the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "90a33404", + "metadata": {}, + "outputs": [], + "source": [ + "SetupNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "7e419495", + "metadata": {}, + "source": [ + "Set the start time for the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ccfdfd8", + "metadata": {}, + "outputs": [], + "source": [ + "SimulationTime.Instance().SetStartTime(0.0)" + ] + }, + { + "cell_type": "markdown", + "id": "fa6f8515", + "metadata": {}, + "source": [ + "We can use the mesh generator to generate multiple cells. The first\n", + "parameter of the mesh generator constructor controls the number of\n", + "cells.\n", + "\n", + " **Practice** Try increasing the number of cells by adjusting the\n", + " parameter value. A sensible range for this tutorial is 4-10 cells.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fffb1781", + "metadata": {}, + "outputs": [], + "source": [ + "gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False)" + ] + }, + { + "cell_type": "markdown", + "id": "65fd54f6", + "metadata": {}, + "source": [ + "#### Laminas\n", + "In addition to the cells we have seen so far, we can introduce\n", + "laminas to the simulation. Laminas are surfaces with reduced\n", + "dimensionality. For 3D elements, a lamina is a 2D surface. For the\n", + "2D elements we are currently working with, laminas are lines.\n", + "Changing the last parameter of the mesh generator constructor from `False`\n", + "to `True` will generate a basal lamina spanning the palisade cells.\n", + "Laminas can also interact with the fluid field, and can be made\n", + "\"leaky\" to allow some flow across their boundary. This can be used\n", + "to model a permeable boundary.\n", + "\n", + " **Practice** Try changing the 6th constructor parameter to create a lamina.\n", + " \n", + "#### Cell Variations\n", + "Apart from using the 3rd and 4th constructor parameters to modify\n", + "the cell shapes, we can also introduce variation between cells by\n", + "modifying the 5th parameter.\n", + "\n", + " **Practice** Try adjusting the 3rd and 4th constructor parameters to\n", + " introduce cell variations.\n", + " \n", + "Next, we generate the mesh and set the fluid grid resolution\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e9b9169", + "metadata": {}, + "outputs": [], + "source": [ + "mesh = gen.GetMesh()\n", + "mesh.SetNumGridPtsXAndY(64)" + ] + }, + { + "cell_type": "markdown", + "id": "28331b6d", + "metadata": {}, + "source": [ + "Below, we generate the cells\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34439832", + "metadata": {}, + "outputs": [], + "source": [ + "cell_type = DifferentiatedCellProliferativeType()\n", + "cell_generator = CellsGeneratorUniformCellCycleModel_2()\n", + "cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type)" + ] + }, + { + "cell_type": "markdown", + "id": "40d93acb", + "metadata": {}, + "source": [ + "Then we set up the cell population with no active fluid sources\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "063c4b53", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population = ImmersedBoundaryCellPopulation2(mesh, cells)\n", + "cell_population.SetIfPopulationHasActiveSources(False)" + ] + }, + { + "cell_type": "markdown", + "id": "9f8b8f0b", + "metadata": {}, + "source": [ + "We can visualize the cell population below\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49250c88", + "metadata": {}, + "outputs": [], + "source": [ + "scene = VtkScene2()\n", + "scene.SetCellPopulation(cell_population)\n", + "nb_manager = JupyterNotebookManager()\n", + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "01178b85", + "metadata": {}, + "source": [ + "Now we create a simulator to manage the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8355133c", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = OffLatticeSimulation2_2(cell_population)\n", + "simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2())\n", + "simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True)" + ] + }, + { + "cell_type": "markdown", + "id": "777207e1", + "metadata": {}, + "source": [ + "We add an immersed boundary simulation modifier to the simulator\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30f98d43", + "metadata": {}, + "outputs": [], + "source": [ + "ib_modifier = ImmersedBoundarySimulationModifier2()\n", + "simulator.AddSimulationModifier(ib_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "0ab33e58", + "metadata": {}, + "source": [ + "We then add a force law to the simulation modifier to model the\n", + "behaviour of the cell membrane\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "00b7c052", + "metadata": {}, + "outputs": [], + "source": [ + "membrane_force = ImmersedBoundaryLinearMembraneForce2()\n", + "membrane_force.SetElementSpringConst(1.0 * 1e7)\n", + "ib_modifier.AddImmersedBoundaryForce(membrane_force)" + ] + }, + { + "cell_type": "markdown", + "id": "76259032", + "metadata": {}, + "source": [ + "#### Inter-cellular Interactions\n", + "So far, we have encountered forces that act to maintain the shape\n", + "of the cell membrane. We can also introduce an inter-cellular\n", + "force law using `ImmersedBoundaryLinearInteractionForce`.\n", + "This has a `SetSpringConst` method instead of a `SetElementSpringConst`\n", + "method. It also has a `SetRestLength` method that we can use to\n", + "modify the rest length.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b5bb62c", + "metadata": {}, + "outputs": [], + "source": [ + "interaction_force = ImmersedBoundaryLinearInteractionForce2()\n", + "interaction_force.SetSpringConst(1.0 * 1e6)\n", + "ib_modifier.AddImmersedBoundaryForce(interaction_force)" + ] + }, + { + "cell_type": "markdown", + "id": "ce3afc39", + "metadata": {}, + "source": [ + "Next, we set the simulation properties\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cac23cdd", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.05\n", + "simulator.SetOutputDirectory(\"Python/TestImmersedBoundary_2\")\n", + "simulator.SetDt(dt)\n", + "simulator.SetSamplingTimestepMultiple(4)\n", + "simulator.SetEndTime(1000 * dt)" + ] + }, + { + "cell_type": "markdown", + "id": "7c62c0c7", + "metadata": {}, + "source": [ + "Finally, we run the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7e99b90", + "metadata": {}, + "outputs": [], + "source": [ + "simulator.Solve()" + ] + }, + { + "cell_type": "markdown", + "id": "c6c269d9", + "metadata": {}, + "source": [ + "We can visualize the end state of the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "779bece1", + "metadata": {}, + "outputs": [], + "source": [ + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "c6633ce1", + "metadata": {}, + "source": [ + "Reset the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e02cc87", + "metadata": {}, + "outputs": [], + "source": [ + "TearDownNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "8200177a", + "metadata": {}, + "source": [ + "### 3. Adding Fluid Sources\n", + "Now that we are familiar with how to generate the cells, we will\n", + "introduce fluid sources.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "70aebcb0", + "metadata": {}, + "source": [ + "#### Adding a Fluid Source\n", + "\n", + "Setup the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a74249c", + "metadata": {}, + "outputs": [], + "source": [ + "SetupNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "88128bc4", + "metadata": {}, + "source": [ + "Set the start time for the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b34d1d4b", + "metadata": {}, + "outputs": [], + "source": [ + "SimulationTime.Instance().SetStartTime(0.0)" + ] + }, + { + "cell_type": "markdown", + "id": "df7dbbb9", + "metadata": {}, + "source": [ + "We begin by constructing a fluid source object:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "391c5088", + "metadata": {}, + "outputs": [], + "source": [ + "source = FluidSource2(0, 0.5, 0.7)" + ] + }, + { + "cell_type": "markdown", + "id": "89084277", + "metadata": {}, + "source": [ + "This constructs a `FluidSource` object in 2 dimensions. The first\n", + "parameter supplies the index of the fluid source. Each source we\n", + "create must have a unique index. The next two parameters are the\n", + "`x` and `y` coordinates of the source. Fluid sources in Chaste are\n", + "point-like, that is to say they do not have any area/volume.\n", + "\n", + "Having created the fluid source, we set its strength:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a918c5ed", + "metadata": {}, + "outputs": [], + "source": [ + "source.SetStrength(0.012)" + ] + }, + { + "cell_type": "markdown", + "id": "c67f0044", + "metadata": {}, + "source": [ + "Next, we create the mesh\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2d287e73", + "metadata": {}, + "outputs": [], + "source": [ + "gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False)\n", + "mesh = gen.GetMesh()\n", + "mesh.SetNumGridPtsXAndY(64)" + ] + }, + { + "cell_type": "markdown", + "id": "492d0e56", + "metadata": {}, + "source": [ + "We must associate the source with an element in the simulation\n", + "so that the simulation is aware of the source.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "70629793", + "metadata": {}, + "outputs": [], + "source": [ + "mesh.GetElement(0).SetFluidSource(source)" + ] + }, + { + "cell_type": "markdown", + "id": "63261c91", + "metadata": {}, + "source": [ + "We now generate the cells\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c826a2a", + "metadata": {}, + "outputs": [], + "source": [ + "cell_type = DifferentiatedCellProliferativeType()\n", + "cell_generator = CellsGeneratorUniformCellCycleModel_2()\n", + "cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type)" + ] + }, + { + "cell_type": "markdown", + "id": "b08e9d92", + "metadata": {}, + "source": [ + "Then we set up the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01ebb5a7", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population = ImmersedBoundaryCellPopulation2(mesh, cells)" + ] + }, + { + "cell_type": "markdown", + "id": "0879cc2c", + "metadata": {}, + "source": [ + "Finally, we must tell the cell population that fluid sources are present.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25aff911", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population.SetIfPopulationHasActiveSources(True)" + ] + }, + { + "cell_type": "markdown", + "id": "1d73af5e", + "metadata": {}, + "source": [ + "#### Varying the Source Location and Strength\n", + " **Practice** You can experiment with the source location. Try moving it\n", + " closer to and further away from the cells.\n", + " \n", + " **Practice** Try modifying the source strength to see what impact this\n", + " has on the cell shapes.\n", + " \n", + "Below, we visualize the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c8f1641", + "metadata": {}, + "outputs": [], + "source": [ + "scene = VtkScene2()\n", + "scene.SetCellPopulation(cell_population)\n", + "nb_manager = JupyterNotebookManager()\n", + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "41707707", + "metadata": {}, + "source": [ + "Create a simulator to manage the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e085e526", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = OffLatticeSimulation2_2(cell_population)\n", + "simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2())\n", + "simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True)" + ] + }, + { + "cell_type": "markdown", + "id": "78258cd6", + "metadata": {}, + "source": [ + "Add an immersed boundary simulation modifier\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91ddd04d", + "metadata": {}, + "outputs": [], + "source": [ + "ib_modifier = ImmersedBoundarySimulationModifier2()\n", + "simulator.AddSimulationModifier(ib_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "7209f61f", + "metadata": {}, + "source": [ + "#### Fluid-Cell Interaction\n", + " **Practice** Try modifying the spring constant of the\n", + " `ImmersedBoundaryLinearMembraneForce` to see how this changes the\n", + " effect of the fluid source on the cells.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2aa20b09", + "metadata": {}, + "outputs": [], + "source": [ + "membrane_force = ImmersedBoundaryLinearMembraneForce2()\n", + "membrane_force.SetElementSpringConst(1.0 * 1e7)\n", + "ib_modifier.AddImmersedBoundaryForce(membrane_force)" + ] + }, + { + "cell_type": "markdown", + "id": "ce742c4b", + "metadata": {}, + "source": [ + "Add an inter-cellular force law\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb5dcc19", + "metadata": {}, + "outputs": [], + "source": [ + "interaction_force = ImmersedBoundaryLinearInteractionForce2()\n", + "interaction_force.SetSpringConst(1.0 * 1e6)\n", + "ib_modifier.AddImmersedBoundaryForce(interaction_force)" + ] + }, + { + "cell_type": "markdown", + "id": "9655bc31", + "metadata": {}, + "source": [ + "#### Adding More Sources\n", + " **Practice** Try adding a second fluid source. You will need to\n", + " use a unique index, and attach it to a different element as\n", + " each element can only manage a single fluid source.\n", + " \n", + "Next, we set the simulation properties\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "57d2a340", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.05\n", + "simulator.SetOutputDirectory(\"Python/TestImmersedBoundary_3\")\n", + "simulator.SetDt(dt)\n", + "simulator.SetSamplingTimestepMultiple(4)\n", + "simulator.SetEndTime(300 * dt)" + ] + }, + { + "cell_type": "markdown", + "id": "089d64c4", + "metadata": {}, + "source": [ + "Finally, we run the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82f4d62b", + "metadata": {}, + "outputs": [], + "source": [ + "simulator.Solve()" + ] + }, + { + "cell_type": "markdown", + "id": "9a1d7c20", + "metadata": {}, + "source": [ + "Then we visualize the end state\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50308e78", + "metadata": {}, + "outputs": [], + "source": [ + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "bac3a9c4", + "metadata": {}, + "source": [ + "Reset the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f0547c5", + "metadata": {}, + "outputs": [], + "source": [ + "TearDownNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "4c9225fe", + "metadata": {}, + "source": [ + "#### Further Exercises\n", + " * Try integrating a different cell cycle model to introduce cell\n", + " division. See how the presence of a fluid source impacts the\n", + " structure that is formed.\n", + " * Use one of the cell writers to collect some statistics\n", + "\n" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/doc/tutorials/TestImmersedBoundaryTutorial.md b/doc/tutorials/TestImmersedBoundaryTutorial.md new file mode 100644 index 00000000..ab4ac2a0 --- /dev/null +++ b/doc/tutorials/TestImmersedBoundaryTutorial.md @@ -0,0 +1,738 @@ + +--- +title : "Test Immersed Boundary Tutorial" +summary: "" +draft: false +images: [] +toc: true +layout: "single" +--- + +This tutorial is automatically generated from [TestImmersedBoundaryTutorial](https://github.com/Chaste/PyChaste/blob/develop/test/python/cell_based/tutorials/TestImmersedBoundaryTutorial.py) at revision [1f56164c](https://github.com/Chaste/PyChaste/commit/1f56164c1cef48fadacfaf3312c8fc04801e180c). +Note that the code is given in full at the bottom of the page. + + +## Introduction +This tutorial is a demonstration of the immersed boundary method, a technique +for simulating fluid-structure interactions. We can use the immersed boundary +method to simulate a cell as a structure with its outer **boundary immersed** +in a fluid. There is a two-way coupling between the fluid and the structure: +the flow of the fluid exerts a force on the structure, and the structure +influences the flow of the fluid. + +In this tutorial, we demonstrate: +1. Building single-cell immersed boundary capable simulations. +2. Building multi-cellular immersed boundary simulations. +3. Adding and manipulating immersed boundary fluid sources. + +## Imports + +```python +import unittest + +import chaste + +chaste.init() # setup MPI + +from chaste.cell_based import ( + AbstractCellBasedTestSuite, + CellsGeneratorUniformCellCycleModel_2, + DifferentiatedCellProliferativeType, + ForwardEulerNumericalMethod2_2, + ImmersedBoundaryCellPopulation2, + ImmersedBoundaryLinearInteractionForce2, + ImmersedBoundaryLinearMembraneForce2, + ImmersedBoundarySimulationModifier2, + OffLatticeSimulation2_2, + SetupNotebookTest, + SimulationTime, + TearDownNotebookTest, +) + +from chaste.mesh import FluidSource2, ImmersedBoundaryPalisadeMeshGenerator + +from chaste.visualization import ( + JupyterNotebookManager, + JupyterSceneModifier2, + VtkScene2 +) + +class TestImmersedBoundaryTutorial(AbstractCellBasedTestSuite): + +``` +### 1. Simple Immersed Boundary Simulations +We begin by exploring simulations containing a single cell. This will +familiarise you with how to generate immersed boundary cells, the steps +involved in setting up an immersed boundary simulation, and the options +available for controlling how the cells are generated and behave. + +Immersed boundary simulations operate over a square domain, with `x` and `y` +coordinates lying in the range `0` to `1`. The domain wraps on both axes - +this means that if a cell moves off the right hand edge of the domain, +the segment will appear on the left hand side. This is not purely visual; +forces are also transmitted across these boundaries. + + **Tip** Make sure all your coordinates are between `0` and `1`. + +```python + def test_simple_immersed_boundary_simulation(self): + +``` +Setup the simulation environment in the notebook + +```python + SetupNotebookTest() + +``` +Set the start time for the simulation + +```python + SimulationTime.Instance().SetStartTime(0.0) + +``` +Next, we define the necessary geometry by generating a mesh to +contain a single cell. + +```python + gen = ImmersedBoundaryPalisadeMeshGenerator(1, 128, 0.1, 2.0, 0.0, False) + mesh = gen.GetMesh() + +``` +The first line of code defines an `ImmersedBoundaryPalisadeMeshGenerator` +called `gen`. The 3rd parameter controls the exponent of the superellipse(`0.1`) +and the 4th parameter controls the aspect ratio of the cell(`2.0`). You can +experiment with modifying these to change the initial shape of the cell. + +The second line of code instructs the mesh generator to generate a mesh. +Checking the type of mesh with `type(mesh)` will show it as +`ImmersedBoundaryMesh2_2`. The `2_2` suffix denotes that we are using +a 2-dimensional space, and 2-dimensional elements to define the mesh. + +We now set the fluid grid resolution. The following code specifies +that we are using a 64x64 grid to simulate our fluid over. + +```python + mesh.SetNumGridPtsXAndY(64) + +``` +Next, we generate the cells. We specify a cell type and cell cycle model. +These can be changed to modify the life cycle of the cells. The +cell generator then constructs the necessary information for each +of the elements in the mesh. + +```python + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + +``` +Finally, we construct the cell population. We then specify whether the +population has active fluid sources or not. For now, we are not +using any fluid sources, so we set this to `False` + +```python + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + cell_population.SetIfPopulationHasActiveSources(False) + +``` +We can make a quick visualization of the cell population + +```python + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + +``` +Next, we create an `OffLatticeSimulation` simulator to control the +simulation. Although the fluid is simulated on a lattice (grid), +the nodes/cells are not bound to a lattice. + +```python + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + +``` +As we have an off-lattice simulation, we need a way to model the +fluid. This is handled by the `ImmersedBoundarySimulationModifier`. +Modifiers in Chaste are classes that can be attached to simulations +to perform some additional custom functionality each timestep. +In this case, the modifier is responsible for solving the +Navier-Stokes equations and propagating forces between the nodes and +the fluid. + +```python + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + +``` +We must also provide the modifier with a force model to govern +interactions between the nodes forming the cell membrane. +Note that these forces only act between nodes in the same cell; +they do not control interactions between cells. + +```python + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + +``` +The `ImmersedBoundaryLinearMembraneForce` models forces between +membrane nodes using linear springs i.e, the force applied is +proportional to the deviation of the distance between nodes +from a rest length. The spring constant(`1.0 * 1e7`) defines how +stiff the cell boundary is. + + **Practice** Experiment with adjusting the spring constant to + change the force behaviour between nodes of the cell boundary. + +Next, we set the simulation properties + +```python + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_1") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(1000 * dt) + +``` +We can add a modifier to visualize the cell population while the +simulation is in progress + +```python + scene_modifier = JupyterSceneModifier2(nb_manager) + scene_modifier.SetVtkScene(scene) + scene_modifier.SetUpdateFrequency(1000) + simulator.AddSimulationModifier(scene_modifier) + +``` +Finally, to run the simulation we call the `Solve()` method. + +```python + simulator.Solve() + +``` +Reset the simulation environment in the notebook + +```python + TearDownNotebookTest() + +``` +### 2. Adding More Cells + +```python + def test_multicell_immersed_boundary_simulation(self): + +``` +#### Multiple Cells + +Setup the simulation environment in the notebook + +```python + SetupNotebookTest() + +``` +Set the start time for the simulation + +```python + SimulationTime.Instance().SetStartTime(0.0) + +``` +We can use the mesh generator to generate multiple cells. The first +parameter of the mesh generator constructor controls the number of +cells. + + **Practice** Try increasing the number of cells by adjusting the + parameter value. A sensible range for this tutorial is 4-10 cells. + +```python + gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False) + +``` +#### Laminas +In addition to the cells we have seen so far, we can introduce +laminas to the simulation. Laminas are surfaces with reduced +dimensionality. For 3D elements, a lamina is a 2D surface. For the +2D elements we are currently working with, laminas are lines. +Changing the last parameter of the mesh generator constructor from `False` +to `True` will generate a basal lamina spanning the palisade cells. +Laminas can also interact with the fluid field, and can be made +"leaky" to allow some flow across their boundary. This can be used +to model a permeable boundary. + + **Practice** Try changing the 6th constructor parameter to create a lamina. + +#### Cell Variations +Apart from using the 3rd and 4th constructor parameters to modify +the cell shapes, we can also introduce variation between cells by +modifying the 5th parameter. + + **Practice** Try adjusting the 3rd and 4th constructor parameters to + introduce cell variations. + +Next, we generate the mesh and set the fluid grid resolution + +```python + mesh = gen.GetMesh() + mesh.SetNumGridPtsXAndY(64) + +``` +Below, we generate the cells + +```python + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + +``` +Then we set up the cell population with no active fluid sources + +```python + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + cell_population.SetIfPopulationHasActiveSources(False) + +``` +We can visualize the cell population below + +```python + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + +``` +Now we create a simulator to manage the simulation + +```python + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + +``` +We add an immersed boundary simulation modifier to the simulator + +```python + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + +``` +We then add a force law to the simulation modifier to model the +behaviour of the cell membrane + +```python + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + +``` +#### Inter-cellular Interactions +So far, we have encountered forces that act to maintain the shape +of the cell membrane. We can also introduce an inter-cellular +force law using `ImmersedBoundaryLinearInteractionForce`. +This has a `SetSpringConst` method instead of a `SetElementSpringConst` +method. It also has a `SetRestLength` method that we can use to +modify the rest length. + +```python + interaction_force = ImmersedBoundaryLinearInteractionForce2() + interaction_force.SetSpringConst(1.0 * 1e6) + ib_modifier.AddImmersedBoundaryForce(interaction_force) + +``` +Next, we set the simulation properties + +```python + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_2") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(1000 * dt) + +``` +Finally, we run the simulation + +```python + simulator.Solve() + +``` +We can visualize the end state of the cell population + +```python + nb_manager.vtk_show(scene, height=300) + +``` +Reset the simulation environment in the notebook + +```python + TearDownNotebookTest() + +``` +### 3. Adding Fluid Sources +Now that we are familiar with how to generate the cells, we will +introduce fluid sources. + +```python + def test_fluid_source_immersed_boundary_simulation(self): + +``` +#### Adding a Fluid Source + +Setup the simulation environment in the notebook + +```python + SetupNotebookTest() + +``` +Set the start time for the simulation + +```python + SimulationTime.Instance().SetStartTime(0.0) + +``` +We begin by constructing a fluid source object: + +```python + source = FluidSource2(0, 0.5, 0.7) + +``` +This constructs a `FluidSource` object in 2 dimensions. The first +parameter supplies the index of the fluid source. Each source we +create must have a unique index. The next two parameters are the +`x` and `y` coordinates of the source. Fluid sources in Chaste are +point-like, that is to say they do not have any area/volume. + +Having created the fluid source, we set its strength: + +```python + source.SetStrength(0.012) + +``` +Next, we create the mesh + +```python + gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False) + mesh = gen.GetMesh() + mesh.SetNumGridPtsXAndY(64) + +``` +We must associate the source with an element in the simulation +so that the simulation is aware of the source. + +```python + mesh.GetElement(0).SetFluidSource(source) + +``` +We now generate the cells + +```python + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + +``` +Then we set up the cell population + +```python + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + +``` +Finally, we must tell the cell population that fluid sources are present. + +```python + cell_population.SetIfPopulationHasActiveSources(True) + +``` +#### Varying the Source Location and Strength + **Practice** You can experiment with the source location. Try moving it + closer to and further away from the cells. + + **Practice** Try modifying the source strength to see what impact this + has on the cell shapes. + +Below, we visualize the cell population + +```python + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + +``` +Create a simulator to manage the simulation + +```python + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + +``` +Add an immersed boundary simulation modifier + +```python + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + +``` +#### Fluid-Cell Interaction + **Practice** Try modifying the spring constant of the + `ImmersedBoundaryLinearMembraneForce` to see how this changes the + effect of the fluid source on the cells. + +```python + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + +``` +Add an inter-cellular force law + +```python + interaction_force = ImmersedBoundaryLinearInteractionForce2() + interaction_force.SetSpringConst(1.0 * 1e6) + ib_modifier.AddImmersedBoundaryForce(interaction_force) + +``` +#### Adding More Sources + **Practice** Try adding a second fluid source. You will need to + use a unique index, and attach it to a different element as + each element can only manage a single fluid source. + +Next, we set the simulation properties + +```python + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_3") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(300 * dt) + +``` +Finally, we run the simulation + +```python + simulator.Solve() + +``` +Then we visualize the end state + +```python + nb_manager.vtk_show(scene, height=300) + +``` +Reset the simulation environment in the notebook + +```python + TearDownNotebookTest() + +``` +#### Further Exercises + * Try integrating a different cell cycle model to introduce cell + division. See how the presence of a fluid source impacts the + structure that is formed. + * Use one of the cell writers to collect some statistics + +```python +if __name__ == "__main__": + unittest.main(verbosity=2) + +``` + + +## Full code + + +**File name:** `TestImmersedBoundaryTutorial.py` + +```python +import unittest + +import chaste + +chaste.init() # setup MPI + +from chaste.cell_based import ( + AbstractCellBasedTestSuite, + CellsGeneratorUniformCellCycleModel_2, + DifferentiatedCellProliferativeType, + ForwardEulerNumericalMethod2_2, + ImmersedBoundaryCellPopulation2, + ImmersedBoundaryLinearInteractionForce2, + ImmersedBoundaryLinearMembraneForce2, + ImmersedBoundarySimulationModifier2, + OffLatticeSimulation2_2, + SetupNotebookTest, + SimulationTime, + TearDownNotebookTest, +) + +from chaste.mesh import FluidSource2, ImmersedBoundaryPalisadeMeshGenerator + +from chaste.visualization import ( + JupyterNotebookManager, + JupyterSceneModifier2, + VtkScene2 +) + +class TestImmersedBoundaryTutorial(AbstractCellBasedTestSuite): + + def test_simple_immersed_boundary_simulation(self): + + SetupNotebookTest() + + SimulationTime.Instance().SetStartTime(0.0) + + gen = ImmersedBoundaryPalisadeMeshGenerator(1, 128, 0.1, 2.0, 0.0, False) + mesh = gen.GetMesh() + + mesh.SetNumGridPtsXAndY(64) + + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + cell_population.SetIfPopulationHasActiveSources(False) + + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_1") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(1000 * dt) + + scene_modifier = JupyterSceneModifier2(nb_manager) + scene_modifier.SetVtkScene(scene) + scene_modifier.SetUpdateFrequency(1000) + simulator.AddSimulationModifier(scene_modifier) + + simulator.Solve() + + TearDownNotebookTest() + + def test_multicell_immersed_boundary_simulation(self): + + SetupNotebookTest() + + SimulationTime.Instance().SetStartTime(0.0) + + gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False) + + mesh = gen.GetMesh() + mesh.SetNumGridPtsXAndY(64) + + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + cell_population.SetIfPopulationHasActiveSources(False) + + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + + interaction_force = ImmersedBoundaryLinearInteractionForce2() + interaction_force.SetSpringConst(1.0 * 1e6) + ib_modifier.AddImmersedBoundaryForce(interaction_force) + + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_2") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(1000 * dt) + + simulator.Solve() + + nb_manager.vtk_show(scene, height=300) + + TearDownNotebookTest() + + def test_fluid_source_immersed_boundary_simulation(self): + + SetupNotebookTest() + + SimulationTime.Instance().SetStartTime(0.0) + + source = FluidSource2(0, 0.5, 0.7) + + source.SetStrength(0.012) + + gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False) + mesh = gen.GetMesh() + mesh.SetNumGridPtsXAndY(64) + + mesh.GetElement(0).SetFluidSource(source) + + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + + cell_population.SetIfPopulationHasActiveSources(True) + + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + + interaction_force = ImmersedBoundaryLinearInteractionForce2() + interaction_force.SetSpringConst(1.0 * 1e6) + ib_modifier.AddImmersedBoundaryForce(interaction_force) + + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_3") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(300 * dt) + + simulator.Solve() + + nb_manager.vtk_show(scene, height=300) + + TearDownNotebookTest() + +if __name__ == "__main__": + unittest.main(verbosity=2) + +``` + diff --git a/doc/tutorials/TestImmersedBoundaryTutorial.nbconvert.ipynb b/doc/tutorials/TestImmersedBoundaryTutorial.nbconvert.ipynb new file mode 100644 index 00000000..ff696900 --- /dev/null +++ b/doc/tutorials/TestImmersedBoundaryTutorial.nbconvert.ipynb @@ -0,0 +1,1182 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b3c54201", + "metadata": {}, + "source": [ + "This tutorial is automatically generated from the file /home/kwabena/repo/PyChaste/test/python/cell_based/tutorials/TestImmersedBoundaryTutorial.py.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95b3e89a", + "metadata": {}, + "outputs": [], + "source": [ + "# Jupyter notebook specific imports \n", + "import matplotlib as mpl \n", + "from IPython import display \n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "id": "db9729f7", + "metadata": {}, + "source": [ + "\n", + "## Introduction\n", + "This tutorial is a demonstration of the immersed boundary method, a technique\n", + "for simulating fluid-structure interactions. We can use the immersed boundary\n", + "method to simulate a cell as a structure with its outer **boundary immersed**\n", + "in a fluid. There is a two-way coupling between the fluid and the structure:\n", + "the flow of the fluid exerts a force on the structure, and the structure\n", + "influences the flow of the fluid.\n", + "\n", + "In this tutorial, we demonstrate:\n", + "1. Building single-cell immersed boundary capable simulations.\n", + "2. Building multi-cellular immersed boundary simulations.\n", + "3. Adding and manipulating immersed boundary fluid sources.\n", + "\n", + "## Imports\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4ced0c9", + "metadata": {}, + "outputs": [], + "source": [ + "import chaste\n", + "chaste.init() # setup MPI\n", + "from chaste.cell_based import (\n", + " AbstractCellBasedTestSuite,\n", + " CellsGeneratorUniformCellCycleModel_2,\n", + " DifferentiatedCellProliferativeType,\n", + " ForwardEulerNumericalMethod2_2,\n", + " ImmersedBoundaryCellPopulation2,\n", + " ImmersedBoundaryLinearInteractionForce2,\n", + " ImmersedBoundaryLinearMembraneForce2,\n", + " ImmersedBoundarySimulationModifier2,\n", + " OffLatticeSimulation2_2,\n", + " SetupNotebookTest,\n", + " SimulationTime,\n", + " TearDownNotebookTest,\n", + ")\n", + "from chaste.mesh import FluidSource2, ImmersedBoundaryPalisadeMeshGenerator\n", + "from chaste.visualization import (\n", + " JupyterNotebookManager,\n", + " JupyterSceneModifier2,\n", + " VtkScene2\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1d01e102", + "metadata": {}, + "source": [ + "### 1. Simple Immersed Boundary Simulations\n", + "We begin by exploring simulations containing a single cell. This will\n", + "familiarise you with how to generate immersed boundary cells, the steps\n", + "involved in setting up an immersed boundary simulation, and the options\n", + "available for controlling how the cells are generated and behave.\n", + "\n", + "Immersed boundary simulations operate over a square domain, with `x` and `y`\n", + "coordinates lying in the range `0` to `1`. The domain wraps on both axes -\n", + "this means that if a cell moves off the right hand edge of the domain,\n", + "the segment will appear on the left hand side. This is not purely visual;\n", + "forces are also transmitted across these boundaries.\n", + "\n", + " **Tip** Make sure all your coordinates are between `0` and `1`.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "d125a0f4", + "metadata": {}, + "source": [ + "Setup the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18f22aa7", + "metadata": {}, + "outputs": [], + "source": [ + "SetupNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "87432256", + "metadata": {}, + "source": [ + "Set the start time for the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "76644e4f", + "metadata": {}, + "outputs": [], + "source": [ + "SimulationTime.Instance().SetStartTime(0.0)" + ] + }, + { + "cell_type": "markdown", + "id": "75801e10", + "metadata": {}, + "source": [ + "Next, we define the necessary geometry by generating a mesh to\n", + "contain a single cell.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e89d05a", + "metadata": {}, + "outputs": [], + "source": [ + "gen = ImmersedBoundaryPalisadeMeshGenerator(1, 128, 0.1, 2.0, 0.0, False)\n", + "mesh = gen.GetMesh()" + ] + }, + { + "cell_type": "markdown", + "id": "9261fc02", + "metadata": {}, + "source": [ + "The first line of code defines an `ImmersedBoundaryPalisadeMeshGenerator`\n", + "called `gen`. The 3rd parameter controls the exponent of the superellipse(`0.1`)\n", + "and the 4th parameter controls the aspect ratio of the cell(`2.0`). You can\n", + "experiment with modifying these to change the initial shape of the cell.\n", + "\n", + "The second line of code instructs the mesh generator to generate a mesh.\n", + "Checking the type of mesh with `type(mesh)` will show it as\n", + "`ImmersedBoundaryMesh2_2`. The `2_2` suffix denotes that we are using\n", + "a 2-dimensional space, and 2-dimensional elements to define the mesh.\n", + "\n", + "We now set the fluid grid resolution. The following code specifies\n", + "that we are using a 64x64 grid to simulate our fluid over.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12b402f7", + "metadata": {}, + "outputs": [], + "source": [ + "mesh.SetNumGridPtsXAndY(64)" + ] + }, + { + "cell_type": "markdown", + "id": "25a7c7ce", + "metadata": {}, + "source": [ + "Next, we generate the cells. We specify a cell type and cell cycle model.\n", + "These can be changed to modify the life cycle of the cells. The\n", + "cell generator then constructs the necessary information for each\n", + "of the elements in the mesh.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a47b2965", + "metadata": {}, + "outputs": [], + "source": [ + "cell_type = DifferentiatedCellProliferativeType()\n", + "cell_generator = CellsGeneratorUniformCellCycleModel_2()\n", + "cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type)" + ] + }, + { + "cell_type": "markdown", + "id": "95871cf1", + "metadata": {}, + "source": [ + "Finally, we construct the cell population. We then specify whether the\n", + "population has active fluid sources or not. For now, we are not\n", + "using any fluid sources, so we set this to `False`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b77dfade", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population = ImmersedBoundaryCellPopulation2(mesh, cells)\n", + "cell_population.SetIfPopulationHasActiveSources(False)" + ] + }, + { + "cell_type": "markdown", + "id": "f5455bd3", + "metadata": {}, + "source": [ + "We can make a quick visualization of the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2666d89d", + "metadata": {}, + "outputs": [], + "source": [ + "scene = VtkScene2()\n", + "scene.SetCellPopulation(cell_population)\n", + "nb_manager = JupyterNotebookManager()\n", + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "47130577", + "metadata": {}, + "source": [ + "Next, we create an `OffLatticeSimulation` simulator to control the\n", + "simulation. Although the fluid is simulated on a lattice (grid),\n", + "the nodes/cells are not bound to a lattice.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18d58d09", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = OffLatticeSimulation2_2(cell_population)\n", + "simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2())\n", + "simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True)" + ] + }, + { + "cell_type": "markdown", + "id": "35c39a46", + "metadata": {}, + "source": [ + "As we have an off-lattice simulation, we need a way to model the\n", + "fluid. This is handled by the `ImmersedBoundarySimulationModifier`.\n", + "Modifiers in Chaste are classes that can be attached to simulations\n", + "to perform some additional custom functionality each timestep.\n", + "In this case, the modifier is responsible for solving the\n", + "Navier-Stokes equations and propagating forces between the nodes and\n", + "the fluid.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "40ca1b17", + "metadata": {}, + "outputs": [], + "source": [ + "ib_modifier = ImmersedBoundarySimulationModifier2()\n", + "simulator.AddSimulationModifier(ib_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "407d1312", + "metadata": {}, + "source": [ + "We must also provide the modifier with a force model to govern\n", + "interactions between the nodes forming the cell membrane.\n", + "Note that these forces only act between nodes in the same cell;\n", + "they do not control interactions between cells.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2abeb8fa", + "metadata": {}, + "outputs": [], + "source": [ + "membrane_force = ImmersedBoundaryLinearMembraneForce2()\n", + "membrane_force.SetElementSpringConst(1.0 * 1e7)\n", + "ib_modifier.AddImmersedBoundaryForce(membrane_force)" + ] + }, + { + "cell_type": "markdown", + "id": "b72986b8", + "metadata": {}, + "source": [ + "The `ImmersedBoundaryLinearMembraneForce` models forces between\n", + "membrane nodes using linear springs i.e, the force applied is\n", + "proportional to the deviation of the distance between nodes\n", + "from a rest length. The spring constant(`1.0 * 1e7`) defines how\n", + "stiff the cell boundary is.\n", + "\n", + " **Practice** Experiment with adjusting the spring constant to\n", + " change the force behaviour between nodes of the cell boundary.\n", + " \n", + "Next, we set the simulation properties\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eda611ef", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.05\n", + "simulator.SetOutputDirectory(\"Python/TestImmersedBoundary_1\")\n", + "simulator.SetDt(dt)\n", + "simulator.SetSamplingTimestepMultiple(4)\n", + "simulator.SetEndTime(1000 * dt)" + ] + }, + { + "cell_type": "markdown", + "id": "420805f1", + "metadata": {}, + "source": [ + "We can add a modifier to visualize the cell population while the\n", + "simulation is in progress\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8e38213", + "metadata": {}, + "outputs": [], + "source": [ + "scene_modifier = JupyterSceneModifier2(nb_manager)\n", + "scene_modifier.SetVtkScene(scene)\n", + "scene_modifier.SetUpdateFrequency(1000)\n", + "simulator.AddSimulationModifier(scene_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "be93eddd", + "metadata": {}, + "source": [ + "Finally, to run the simulation we call the `Solve()` method.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cc37872", + "metadata": {}, + "outputs": [], + "source": [ + "simulator.Solve()" + ] + }, + { + "cell_type": "markdown", + "id": "98429afa", + "metadata": {}, + "source": [ + "Reset the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26d8fe0c", + "metadata": {}, + "outputs": [], + "source": [ + "TearDownNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "df554a43", + "metadata": {}, + "source": [ + "### 2. Adding More Cells\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "193fe3d3", + "metadata": {}, + "source": [ + "#### Multiple Cells\n", + "\n", + "Setup the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "90a33404", + "metadata": {}, + "outputs": [], + "source": [ + "SetupNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "7e419495", + "metadata": {}, + "source": [ + "Set the start time for the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ccfdfd8", + "metadata": {}, + "outputs": [], + "source": [ + "SimulationTime.Instance().SetStartTime(0.0)" + ] + }, + { + "cell_type": "markdown", + "id": "fa6f8515", + "metadata": {}, + "source": [ + "We can use the mesh generator to generate multiple cells. The first\n", + "parameter of the mesh generator constructor controls the number of\n", + "cells.\n", + "\n", + " **Practice** Try increasing the number of cells by adjusting the\n", + " parameter value. A sensible range for this tutorial is 4-10 cells.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fffb1781", + "metadata": {}, + "outputs": [], + "source": [ + "gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False)" + ] + }, + { + "cell_type": "markdown", + "id": "65fd54f6", + "metadata": {}, + "source": [ + "#### Laminas\n", + "In addition to the cells we have seen so far, we can introduce\n", + "laminas to the simulation. Laminas are surfaces with reduced\n", + "dimensionality. For 3D elements, a lamina is a 2D surface. For the\n", + "2D elements we are currently working with, laminas are lines.\n", + "Changing the last parameter of the mesh generator constructor from `False`\n", + "to `True` will generate a basal lamina spanning the palisade cells.\n", + "Laminas can also interact with the fluid field, and can be made\n", + "\"leaky\" to allow some flow across their boundary. This can be used\n", + "to model a permeable boundary.\n", + "\n", + " **Practice** Try changing the 6th constructor parameter to create a lamina.\n", + " \n", + "#### Cell Variations\n", + "Apart from using the 3rd and 4th constructor parameters to modify\n", + "the cell shapes, we can also introduce variation between cells by\n", + "modifying the 5th parameter.\n", + "\n", + " **Practice** Try adjusting the 3rd and 4th constructor parameters to\n", + " introduce cell variations.\n", + " \n", + "Next, we generate the mesh and set the fluid grid resolution\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e9b9169", + "metadata": {}, + "outputs": [], + "source": [ + "mesh = gen.GetMesh()\n", + "mesh.SetNumGridPtsXAndY(64)" + ] + }, + { + "cell_type": "markdown", + "id": "28331b6d", + "metadata": {}, + "source": [ + "Below, we generate the cells\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "34439832", + "metadata": {}, + "outputs": [], + "source": [ + "cell_type = DifferentiatedCellProliferativeType()\n", + "cell_generator = CellsGeneratorUniformCellCycleModel_2()\n", + "cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type)" + ] + }, + { + "cell_type": "markdown", + "id": "40d93acb", + "metadata": {}, + "source": [ + "Then we set up the cell population with no active fluid sources\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "063c4b53", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population = ImmersedBoundaryCellPopulation2(mesh, cells)\n", + "cell_population.SetIfPopulationHasActiveSources(False)" + ] + }, + { + "cell_type": "markdown", + "id": "9f8b8f0b", + "metadata": {}, + "source": [ + "We can visualize the cell population below\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49250c88", + "metadata": {}, + "outputs": [], + "source": [ + "scene = VtkScene2()\n", + "scene.SetCellPopulation(cell_population)\n", + "nb_manager = JupyterNotebookManager()\n", + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "01178b85", + "metadata": {}, + "source": [ + "Now we create a simulator to manage the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8355133c", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = OffLatticeSimulation2_2(cell_population)\n", + "simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2())\n", + "simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True)" + ] + }, + { + "cell_type": "markdown", + "id": "777207e1", + "metadata": {}, + "source": [ + "We add an immersed boundary simulation modifier to the simulator\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30f98d43", + "metadata": {}, + "outputs": [], + "source": [ + "ib_modifier = ImmersedBoundarySimulationModifier2()\n", + "simulator.AddSimulationModifier(ib_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "0ab33e58", + "metadata": {}, + "source": [ + "We then add a force law to the simulation modifier to model the\n", + "behaviour of the cell membrane\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "00b7c052", + "metadata": {}, + "outputs": [], + "source": [ + "membrane_force = ImmersedBoundaryLinearMembraneForce2()\n", + "membrane_force.SetElementSpringConst(1.0 * 1e7)\n", + "ib_modifier.AddImmersedBoundaryForce(membrane_force)" + ] + }, + { + "cell_type": "markdown", + "id": "76259032", + "metadata": {}, + "source": [ + "#### Inter-cellular Interactions\n", + "So far, we have encountered forces that act to maintain the shape\n", + "of the cell membrane. We can also introduce an inter-cellular\n", + "force law using `ImmersedBoundaryLinearInteractionForce`.\n", + "This has a `SetSpringConst` method instead of a `SetElementSpringConst`\n", + "method. It also has a `SetRestLength` method that we can use to\n", + "modify the rest length.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b5bb62c", + "metadata": {}, + "outputs": [], + "source": [ + "interaction_force = ImmersedBoundaryLinearInteractionForce2()\n", + "interaction_force.SetSpringConst(1.0 * 1e6)\n", + "ib_modifier.AddImmersedBoundaryForce(interaction_force)" + ] + }, + { + "cell_type": "markdown", + "id": "ce3afc39", + "metadata": {}, + "source": [ + "Next, we set the simulation properties\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cac23cdd", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.05\n", + "simulator.SetOutputDirectory(\"Python/TestImmersedBoundary_2\")\n", + "simulator.SetDt(dt)\n", + "simulator.SetSamplingTimestepMultiple(4)\n", + "simulator.SetEndTime(1000 * dt)" + ] + }, + { + "cell_type": "markdown", + "id": "7c62c0c7", + "metadata": {}, + "source": [ + "Finally, we run the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7e99b90", + "metadata": {}, + "outputs": [], + "source": [ + "simulator.Solve()" + ] + }, + { + "cell_type": "markdown", + "id": "c6c269d9", + "metadata": {}, + "source": [ + "We can visualize the end state of the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "779bece1", + "metadata": {}, + "outputs": [], + "source": [ + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "c6633ce1", + "metadata": {}, + "source": [ + "Reset the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e02cc87", + "metadata": {}, + "outputs": [], + "source": [ + "TearDownNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "8200177a", + "metadata": {}, + "source": [ + "### 3. Adding Fluid Sources\n", + "Now that we are familiar with how to generate the cells, we will\n", + "introduce fluid sources.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "70aebcb0", + "metadata": {}, + "source": [ + "#### Adding a Fluid Source\n", + "\n", + "Setup the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a74249c", + "metadata": {}, + "outputs": [], + "source": [ + "SetupNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "88128bc4", + "metadata": {}, + "source": [ + "Set the start time for the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b34d1d4b", + "metadata": {}, + "outputs": [], + "source": [ + "SimulationTime.Instance().SetStartTime(0.0)" + ] + }, + { + "cell_type": "markdown", + "id": "df7dbbb9", + "metadata": {}, + "source": [ + "We begin by constructing a fluid source object:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "391c5088", + "metadata": {}, + "outputs": [], + "source": [ + "source = FluidSource2(0, 0.5, 0.7)" + ] + }, + { + "cell_type": "markdown", + "id": "89084277", + "metadata": {}, + "source": [ + "This constructs a `FluidSource` object in 2 dimensions. The first\n", + "parameter supplies the index of the fluid source. Each source we\n", + "create must have a unique index. The next two parameters are the\n", + "`x` and `y` coordinates of the source. Fluid sources in Chaste are\n", + "point-like, that is to say they do not have any area/volume.\n", + "\n", + "Having created the fluid source, we set its strength:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a918c5ed", + "metadata": {}, + "outputs": [], + "source": [ + "source.SetStrength(0.012)" + ] + }, + { + "cell_type": "markdown", + "id": "c67f0044", + "metadata": {}, + "source": [ + "Next, we create the mesh\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2d287e73", + "metadata": {}, + "outputs": [], + "source": [ + "gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False)\n", + "mesh = gen.GetMesh()\n", + "mesh.SetNumGridPtsXAndY(64)" + ] + }, + { + "cell_type": "markdown", + "id": "492d0e56", + "metadata": {}, + "source": [ + "We must associate the source with an element in the simulation\n", + "so that the simulation is aware of the source.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "70629793", + "metadata": {}, + "outputs": [], + "source": [ + "mesh.GetElement(0).SetFluidSource(source)" + ] + }, + { + "cell_type": "markdown", + "id": "63261c91", + "metadata": {}, + "source": [ + "We now generate the cells\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0c826a2a", + "metadata": {}, + "outputs": [], + "source": [ + "cell_type = DifferentiatedCellProliferativeType()\n", + "cell_generator = CellsGeneratorUniformCellCycleModel_2()\n", + "cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type)" + ] + }, + { + "cell_type": "markdown", + "id": "b08e9d92", + "metadata": {}, + "source": [ + "Then we set up the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01ebb5a7", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population = ImmersedBoundaryCellPopulation2(mesh, cells)" + ] + }, + { + "cell_type": "markdown", + "id": "0879cc2c", + "metadata": {}, + "source": [ + "Finally, we must tell the cell population that fluid sources are present.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25aff911", + "metadata": {}, + "outputs": [], + "source": [ + "cell_population.SetIfPopulationHasActiveSources(True)" + ] + }, + { + "cell_type": "markdown", + "id": "1d73af5e", + "metadata": {}, + "source": [ + "#### Varying the Source Location and Strength\n", + " **Practice** You can experiment with the source location. Try moving it\n", + " closer to and further away from the cells.\n", + " \n", + " **Practice** Try modifying the source strength to see what impact this\n", + " has on the cell shapes.\n", + " \n", + "Below, we visualize the cell population\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c8f1641", + "metadata": {}, + "outputs": [], + "source": [ + "scene = VtkScene2()\n", + "scene.SetCellPopulation(cell_population)\n", + "nb_manager = JupyterNotebookManager()\n", + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "41707707", + "metadata": {}, + "source": [ + "Create a simulator to manage the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e085e526", + "metadata": {}, + "outputs": [], + "source": [ + "simulator = OffLatticeSimulation2_2(cell_population)\n", + "simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2())\n", + "simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True)" + ] + }, + { + "cell_type": "markdown", + "id": "78258cd6", + "metadata": {}, + "source": [ + "Add an immersed boundary simulation modifier\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91ddd04d", + "metadata": {}, + "outputs": [], + "source": [ + "ib_modifier = ImmersedBoundarySimulationModifier2()\n", + "simulator.AddSimulationModifier(ib_modifier)" + ] + }, + { + "cell_type": "markdown", + "id": "7209f61f", + "metadata": {}, + "source": [ + "#### Fluid-Cell Interaction\n", + " **Practice** Try modifying the spring constant of the\n", + " `ImmersedBoundaryLinearMembraneForce` to see how this changes the\n", + " effect of the fluid source on the cells.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2aa20b09", + "metadata": {}, + "outputs": [], + "source": [ + "membrane_force = ImmersedBoundaryLinearMembraneForce2()\n", + "membrane_force.SetElementSpringConst(1.0 * 1e7)\n", + "ib_modifier.AddImmersedBoundaryForce(membrane_force)" + ] + }, + { + "cell_type": "markdown", + "id": "ce742c4b", + "metadata": {}, + "source": [ + "Add an inter-cellular force law\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb5dcc19", + "metadata": {}, + "outputs": [], + "source": [ + "interaction_force = ImmersedBoundaryLinearInteractionForce2()\n", + "interaction_force.SetSpringConst(1.0 * 1e6)\n", + "ib_modifier.AddImmersedBoundaryForce(interaction_force)" + ] + }, + { + "cell_type": "markdown", + "id": "9655bc31", + "metadata": {}, + "source": [ + "#### Adding More Sources\n", + " **Practice** Try adding a second fluid source. You will need to\n", + " use a unique index, and attach it to a different element as\n", + " each element can only manage a single fluid source.\n", + " \n", + "Next, we set the simulation properties\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "57d2a340", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.05\n", + "simulator.SetOutputDirectory(\"Python/TestImmersedBoundary_3\")\n", + "simulator.SetDt(dt)\n", + "simulator.SetSamplingTimestepMultiple(4)\n", + "simulator.SetEndTime(300 * dt)" + ] + }, + { + "cell_type": "markdown", + "id": "089d64c4", + "metadata": {}, + "source": [ + "Finally, we run the simulation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "82f4d62b", + "metadata": {}, + "outputs": [], + "source": [ + "simulator.Solve()" + ] + }, + { + "cell_type": "markdown", + "id": "9a1d7c20", + "metadata": {}, + "source": [ + "Then we visualize the end state\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50308e78", + "metadata": {}, + "outputs": [], + "source": [ + "nb_manager.vtk_show(scene, height=300)" + ] + }, + { + "cell_type": "markdown", + "id": "bac3a9c4", + "metadata": {}, + "source": [ + "Reset the simulation environment in the notebook\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f0547c5", + "metadata": {}, + "outputs": [], + "source": [ + "TearDownNotebookTest()" + ] + }, + { + "cell_type": "markdown", + "id": "4c9225fe", + "metadata": {}, + "source": [ + "#### Further Exercises\n", + " * Try integrating a different cell cycle model to introduce cell\n", + " division. See how the presence of a fluid source impacts the\n", + " structure that is formed.\n", + " * Use one of the cell writers to collect some statistics\n", + "\n" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/dynamic/wrapper_generators/PopulationWriter_custom.py b/dynamic/wrapper_generators/PopulationWriter_custom.py index 7349cab2..bbba4a00 100644 --- a/dynamic/wrapper_generators/PopulationWriter_custom.py +++ b/dynamic/wrapper_generators/PopulationWriter_custom.py @@ -9,81 +9,22 @@ def __init__(self): def get_class_cpp_def_code(self, class_name): - cell_writers = [ - "CellAgesWriter", - "CellAncestorWriter", - "CellAppliedForceWriter", - "CellCycleModelProteinConcentrationsWriter", - "CellDataItemWriter", - "CellDeltaNotchWriter", - "CellIdWriter", - "CellLabelWriter", - "CellLocationIndexWriter", - "CellMutationStatesWriter", - "CellProliferativePhasesWriter", - "CellProliferativeTypesWriter", - "CellRadiusWriter", - "CellRosetteRankWriter", - "CellVolumesWriter", - "LegacyCellProliferativeTypesWriter", - ] - - for eachWriter in cell_writers: - local_reps = {"class_name": class_name, - "writer": eachWriter} - local_code = """\ - .def("AddCellWriter{writer}", &{class_name}::AddCellWriter<{writer}>) -""" - code += local_code.format(**local_reps) - - cell_population_count_writers = [ - "CellMutationStatesCountWriter", - "CellProliferativeTypesCountWriter", - "CellProliferativePhasesCountWriter", - ] - - for eachWriter in cell_population_count_writers: - local_reps = {"class_name": class_name, - "writer": eachWriter} - local_code = """\ - .def("AddCellPopulationCountWriter{writer}", &{class_name}::AddCellPopulationCountWriter<{writer}>) -""" - code += local_code.format(**local_reps) - - cell_population_event_writers = [ - "CellDivisionLocationsWriter", - "CellRemovalLocationsWriter", - ] - for eachWriter in cell_population_event_writers: + code = "" + population_writers = ["VoronoiDataWriter"] + for eachWriter in population_writers: local_reps = {"class_name": class_name, "writer": eachWriter} local_code = """\ - .def("AddCellPopulationEventWriter{writer}", &{class_name}::AddCellPopulationEventWriter<{writer}>) + .def("AddPopulationWriter{writer}", &{class_name}::AddPopulationWriter<{writer}>) """ code += local_code.format(**local_reps) - code = "" - population_writers = [ - "BoundaryNodeWriter", - "CellPopulationAdjacencyMatrixWriter", - "CellPopulationAreaWriter", - "CellPopulationElementWriter", - "HeterotypicBoundaryLengthWriter", - "NodeLocationWriter", - "NodeVelocityWriter", - "RadialCellDataDistributionWriter", - "VertexIntersectionSwapLocationsWriter", - "VertexT1SwapLocationsWriter", - "VertexT2SwapLocationsWriter", - "VertexT3SwapLocationsWriter", - "VoronoiDataWriter", - ] - for eachWriter in population_writers: + cell_writers = ["CellLabelWriter"] + for eachWriter in cell_writers: local_reps = {"class_name": class_name, "writer": eachWriter} local_code = """\ - .def("AddPopulationWriter{writer}", &{class_name}::AddPopulationWriter<{writer}>) + .def("AddCellWriter{writer}", &{class_name}::AddCellWriter<{writer}>) """ code += local_code.format(**local_reps) - return code diff --git a/dynamic/wrapper_generators/generate.py b/dynamic/wrapper_generators/generate.py index 0df3538f..03a36ec8 100644 --- a/dynamic/wrapper_generators/generate.py +++ b/dynamic/wrapper_generators/generate.py @@ -47,9 +47,12 @@ castxml_binary = sys.argv[4] includes = sys.argv[5:] - generator = CppWrapperGenerator(source_root, - includes, - wrapper_root, - castxml_binary, - package_info_path) + generator = CppWrapperGenerator( + source_root, + includes, + wrapper_root, + castxml_binary, + package_info_path, + castxml_cflags="-std=c++17", + ) generator.generate_wrapper() diff --git a/dynamic/wrapper_generators/package_info.yaml b/dynamic/wrapper_generators/package_info.yaml index b95f0e8a..f1ab8b7e 100644 --- a/dynamic/wrapper_generators/package_info.yaml +++ b/dynamic/wrapper_generators/package_info.yaml @@ -1,4 +1,11 @@ name: chaste_project_PyChaste + +smart_ptr_type: boost::shared_ptr +pointer_call_policy: reference +reference_call_policy: reference_internal + +common_include_file: OFF + source_includes: - - @@ -6,938 +13,786 @@ source_includes: - - SmartPointers.hpp - UblasIncludes.hpp -smart_ptr_type: boost::shared_ptr -common_include_file: OFF + template_substitutions: - - signature: - replacement: [[2, 2], [3, 3]] + - signature: + replacement: [[2], [3]] + - signature: + replacement: [[2], [3]] - signature: replacement: [[2, 2], [3, 3]] + - signature: + replacement: [[2, 2], [3, 3]] - signature: replacement: [[2, 2], [3, 3]] - - signature: - replacement: [[2], [3]] - - signature: - replacement: [[2], [3]] -pointer_call_policy: reference -reference_call_policy: reference_internal - + modules: -- name: core - source_locations: - - global/src - - io/src - - linalg/src - classes: - - name: Identifiable - - name: PetscTools - excluded_methods: - - GetWorld # MPI not wrapped here - - Destroy # No non-const ref to PETSc types - - ReadPetscObject - - SetupMat - excluded_variables: - - MASTER_RANK # MPI not wrapped here - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - - name: ReplicatableVector - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - - name: Timer - - name: RelativeTo # enum - source_file: FileFinder.hpp - - name: FileFinder - - name: OutputFileHandler - source_includes: - - FileFinder.hpp # forward decl - excluded_methods: - - OpenOutputFile # std io not wrapped - - name: ProgressReporter - - name: RandomNumberGenerator - - name: TimeStepper - - name: ChasteBuildInfo - source_file: Version.hpp -- name: ode - source_locations: - - ode/src - classes: - - name: AbstractOdeSystemInformation - - name: AbstractPythonOdeSystemInformation - - name: AbstractOdeSystem - - name: DeltaNotchEdgeOdeSystem - - name: DeltaNotchInteriorOdeSystem - - name: Alarcon2004OxygenBasedCellCycleOdeSystem - - name: Goldbeter1991OdeSystem - - name: TysonNovak2001OdeSystem - excluded_methods: - - AnalyticJacobian # double ** jacobian - - name: DeltaNotchOdeSystem -- name: pde - source_locations: - - pde/src - classes: - - name: AbstractLinearPde - - name: AbstractLinearParabolicPde - - name: AbstractLinearEllipticPde - - name: AbstractLinearParabolicPdeSystemForCoupledOdeSystem - - name: AbstractNonlinearEllipticPde - - name: AbstractBoundaryCondition - - name: ConstBoundaryCondition - - name: PdeSimulationTime -- name: mesh - source_locations: - - mesh/src - classes: - - name: ChastePoint - - name: AbstractChasteRegion - - name: ChasteCuboid - - name: ChasteEllipsoid - - name: NodeAttributes - - name: Node - - name: Element - excluded_methods: - - CalculateCircumsphereVolume # method not found! - - name: Edge - - name: EdgeHelper - - name: EdgeOperation - - name: AbstractMesh - - name: AbstractTetrahedralMesh - - name: TetrahedralMesh - excluded_methods: - - FreeTriangulateIo - - InitialiseTriangulateIo - - name: MutableMesh - excluded_methods: - - SplitLongEdges # can't work with vec - - RescaleMeshFromBoundaryNode # method not found! - - name: AbstractElement - - name: MutableElement - - name: NodesOnlyMesh - - name: PottsElement - - name: PottsMesh - - name: PottsMeshGenerator - - name: VertexMesh - excluded_methods: - - GetFace # dont have mixed dim elements - - GetEdgeHelper - constructor_arg_type_excludes: - - TetrahedralMesh<3, 3> - - TetrahedralMesh<2, 2> - - name: MutableVertexMesh - - name: Cylindrical2dVertexMesh - - name: Toroidal2dMesh - excluded_methods: - - GetInstanceOfMismatchedBoundaryNodes - - name: PeriodicNodesOnlyMesh - excluded_methods: - - SetUpBoxCollection # boost::numeric::ublas::zero_vector - - name: Cylindrical2dNodesOnlyMesh - excluded_methods: - - SetUpBoxCollection # boost::numeric::ublas::unit_vector - - name: Cylindrical2dMesh - excluded_methods: - - GetInstanceOfMismatchedBoundaryNodes - - name: Toroidal2dVertexMesh - - name: HoneycombMeshGenerator - - name: HoneycombVertexMeshGenerator - - name: CylindricalHoneycombMeshGenerator - - name: CylindricalHoneycombVertexMeshGenerator - - name: ToroidalHoneycombMeshGenerator - - name: ToroidalHoneycombVertexMeshGenerator - - name: VoronoiVertexMeshGenerator -- name: cell_based - source_locations: - - cell_based/src - classes: - - name: AbstractCellCycleModel - - name: AbstractPhaseBasedCellCycleModel - - name: AbstractSimpleCellCycleModel - - name: AbstractSimplePhaseBasedCellCycleModel - - name: AbstractSimpleGenerationalCellCycleModel - - name: UniformCellCycleModel - - name: SimpleOxygenBasedCellCycleModel - - name: UniformG1GenerationalCellCycleModel - - name: NoCellCycleModel - - name: BiasedBernoulliTrialCellCycleModel - - name: LabelDependentBernoulliTrialCellCycleModel - - name: AlwaysDivideCellCycleModel - - name: AbstractOdeBasedCellCycleModel - - name: ContactInhibitionCellCycleModel - - name: StochasticOxygenBasedCellCycleModel - - name: GammaG1CellCycleModel - - name: ExponentialG1GenerationalCellCycleModel - - name: AbstractOdeBasedPhaseBasedCellCycleModel - - name: TysonNovakCellCycleModel - - name: Alarcon2004OxygenBasedCellCycleModel - - name: FixedSequenceCellCycleModel - - name: BernoulliTrialCellCycleModel - - name: FixedG1GenerationalCellCycleModel - - name: AbstractCellCycleModelOdeSolver - - name: CellCycleModelOdeSolver - - name: AbstractCellProperty - excluded_methods: - - IsType # exclude templated method - - name: CellwiseOdeSystemInformation - - name: CellPropertyCollection - excluded_methods: - - GetCellPropertyRegistry - - name: AbstractCellProliferativeType - - name: StemCellProliferativeType - - name: DefaultCellProliferativeType - - name: TransitCellProliferativeType - - name: DifferentiatedCellProliferativeType - - name: AbstractCellMutationState - - name: ApcOneHitCellMutationState - - name: ApcTwoHitCellMutationState - - name: BetaCateninOneHitCellMutationState - - name: WildTypeCellMutationState - - name: ApoptoticCellProperty - - name: CellData - - name: CellLabel - - name: CellAncestor - - name: CellId - - name: CellEdgeData - - name: CellPropertyRegistry - excluded_methods: - - rGetAllCellProperties - - TakeOwnership - - Get - - name: AbstractSrnModel - - name: AbstractOdeSrnModel - - name: NullSrnModel - - name: CellSrnModel - - name: DeltaNotchSrnModel - - name: DeltaNotchEdgeSrnModel - - name: DeltaNotchInteriorSrnModel - - name: Goldbeter1991SrnModel - - name: VertexBasedPopulationSrn - - name: Cell - excluded_methods: - - rGetCellPropertyCollection - - GetSrnModel - - name: CellsGenerator - template_substitutions: - - signature: - replacement: - - [NoCellCycleModel, 2] - - [NoCellCycleModel, 3] - - [UniformCellCycleModel, 2] - - [UniformCellCycleModel, 3] - - [SimpleOxygenBasedCellCycleModel, 2] - - [SimpleOxygenBasedCellCycleModel, 3] - - [UniformG1GenerationalCellCycleModel, 2] - - [UniformG1GenerationalCellCycleModel, 3] - - [BiasedBernoulliTrialCellCycleModel, 2] - - [BiasedBernoulliTrialCellCycleModel, 3] - - [LabelDependentBernoulliTrialCellCycleModel, 2] - - [LabelDependentBernoulliTrialCellCycleModel, 3] - - [AlwaysDivideCellCycleModel, 2] - - [AlwaysDivideCellCycleModel, 3] - - [ContactInhibitionCellCycleModel, 2] - - [ContactInhibitionCellCycleModel, 3] - - [StochasticOxygenBasedCellCycleModel, 2] - - [StochasticOxygenBasedCellCycleModel, 3] - - [GammaG1CellCycleModel, 2] - - [GammaG1CellCycleModel, 3] - - [ExponentialG1GenerationalCellCycleModel, 2] - - [ExponentialG1GenerationalCellCycleModel, 3] - - [TysonNovakCellCycleModel, 2] - - [TysonNovakCellCycleModel, 3] - - [Alarcon2004OxygenBasedCellCycleModel, 2] - - [Alarcon2004OxygenBasedCellCycleModel, 3] - - [FixedSequenceCellCycleModel, 2] - - [FixedSequenceCellCycleModel, 3] - - [BernoulliTrialCellCycleModel, 2] - - [BernoulliTrialCellCycleModel, 3] - - [FixedG1GenerationalCellCycleModel, 2] - - [FixedG1GenerationalCellCycleModel, 3] - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/CellsGenerator_custom.py - source_includes: - - NoCellCycleModel.hpp - - UniformCellCycleModel.hpp - - SimpleOxygenBasedCellCycleModel.hpp - - UniformG1GenerationalCellCycleModel.hpp - - BiasedBernoulliTrialCellCycleModel.hpp - - LabelDependentBernoulliTrialCellCycleModel.hpp - - AlwaysDivideCellCycleModel.hpp - - ContactInhibitionCellCycleModel.hpp - - StochasticOxygenBasedCellCycleModel.hpp - - GammaG1CellCycleModel.hpp - - ExponentialG1GenerationalCellCycleModel.hpp - - TysonNovakCellCycleModel.hpp - - Alarcon2004OxygenBasedCellCycleModel.hpp - - FixedSequenceCellCycleModel.hpp - - BernoulliTrialCellCycleModel.hpp - - FixedG1GenerationalCellCycleModel.hpp - - name: CellwiseSourceEllipticPde - - name: AveragedSourceEllipticPde - - name: VolumeDependentAveragedSourceEllipticPde - - name: UniformSourceEllipticPde - - name: CellwiseSourceParabolicPde - - name: UniformSourceParabolicPde - - name: AveragedSourceParabolicPde - - name: CellBasedEllipticPdeSolver - source_includes: - - # forward decl - - # forward decl - - name: CellBasedParabolicPdeSolver - - name: AbstractCellBasedSimulationModifier - - name: AbstractPdeModifier - excluded_methods: - - GetSolution - - GetFeMesh - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - - name: AbstractBoxDomainPdeModifier - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - - name: AbstractGrowingDomainPdeModifier - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - - name: EllipticGrowingDomainPdeModifier - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - excluded_methods: - - ConstructBoundaryConditionsContainer - - name: ParabolicGrowingDomainPdeModifier - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - excluded_methods: - - ConstructBoundaryConditionsContainer - - name: EllipticBoxDomainPdeModifier - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - excluded_methods: - - ConstructBoundaryConditionsContainer - - name: ParabolicBoxDomainPdeModifier - source_includes: - - # forward decl - - # forward decl - - "PythonPetscObjectConverters.hpp" - excluded_methods: - - ConstructBoundaryConditionsContainer - - name: AbstractCellBasedWriter - - name: AbstractCellWriter - source_includes: - - AbstractCellPopulation.hpp - - name: AbstractCellPopulationWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: AbstractCellPopulationCountWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: AbstractCellPopulationEventWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: BoundaryNodeWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellAgesWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellAncestorWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellAppliedForceWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellCycleModelProteinConcentrationsWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellDataItemWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellDeltaNotchWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellDivisionLocationsWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellIdWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellLocationIndexWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellMutationStatesCountWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellMutationStatesWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellPopulationAdjacencyMatrixWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellPopulationAreaWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellPopulationElementWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellProliferativePhasesCountWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellProliferativePhasesWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellProliferativeTypesCountWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellProliferativeTypesWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellRadiusWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellRemovalLocationsWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: CellRosetteRankWriter - source_includes: - - AbstractCellPopulation.hpp - - name: CellVolumesWriter - source_includes: - - AbstractCellPopulation.hpp - - name: HeterotypicBoundaryLengthWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: LegacyCellProliferativeTypesWriter - source_includes: - - AbstractCellPopulation.hpp - - name: NodeLocationWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: NodeVelocityWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: PottsMeshWriter - - name: RadialCellDataDistributionWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: VertexIntersectionSwapLocationsWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: VertexT1SwapLocationsWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: VertexT2SwapLocationsWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: VertexT3SwapLocationsWriter - source_includes: - - AbstractCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - VertexBasedCellPopulation.hpp - - name: VoronoiDataWriter - source_includes: - - VertexBasedCellPopulation.hpp - - MeshBasedCellPopulation.hpp - - PottsBasedCellPopulation.hpp - - NodeBasedCellPopulation.hpp - - CaBasedCellPopulation.hpp - - name: CellLabelWriter - source_includes: - - AbstractCellPopulation.hpp - - name: AbstractUpdateRule - - name: AbstractCaUpdateRule - - name: DiffusionCaUpdateRule - - name: AbstractPottsUpdateRule - - name: VolumeConstraintPottsUpdateRule - - name: SurfaceAreaConstraintPottsUpdateRule - - name: AdhesionPottsUpdateRule - - name: DifferentialAdhesionPottsUpdateRule - - name: AbstractVertexBasedDivisionRule - - name: RandomDirectionVertexBasedDivisionRule - - name: VonMisesVertexBasedDivisionRule - - name: FixedVertexBasedDivisionRule - - name: AbstractCaBasedDivisionRule - - name: ShovingCaBasedDivisionRule - - name: ExclusionCaBasedDivisionRule - - name: RandomDirectionCentreBasedDivisionRule - - name: FixedCentreBasedDivisionRule - - name: AbstractCentreBasedDivisionRule - - name: ShortAxisVertexBasedDivisionRule - - name: RandomCaSwitchingUpdateRule - - name: ChemotaxisPottsUpdateRule - - name: AbstractCaSwitchingUpdateRule - - name: AbstractForce - - name: AbstractTwoBodyInteractionForce - - name: BuskeAdhesiveForce - - name: BuskeCompressionForce - - name: BuskeElasticForce - - name: ChemotacticForce - - name: GeneralisedLinearSpringForce - - name: DifferentialAdhesionGeneralisedLinearSpringForce - - name: NagaiHondaForce - - name: DiffusionForce - - name: RepulsionForce - - name: WelikyOsterForce - - name: FarhadifarForce - excluded_methods: - - GetLineTensionParameter - - name: PlanarPolarisedFarhadifarForce - excluded_methods: - - GetLineTensionParameter - - name: NagaiHondaDifferentialAdhesionForce - excluded_methods: - - GetAdhesionParameter - - name: AbstractCellKiller - - name: PlaneBasedCellKiller - - name: ApoptoticCellKiller - - name: TargetedCellKiller - - name: RandomCellKiller - - name: T2SwapCellKiller - - name: IsolatedLabelledCellKiller - - name: AbstractCellPopulationBoundaryCondition - - name: PlaneBoundaryCondition - source_includes: - - PythonUblasObjectConverters.hpp - - name: AttractingPlaneBoundaryCondition - source_includes: - - PythonUblasObjectConverters.hpp - - name: SphereGeometryBoundaryCondition - source_includes: - - PythonUblasObjectConverters.hpp - - name: SlidingBoundaryCondition - source_includes: - - PythonUblasObjectConverters.hpp - - name: AbstractCellPopulation - excluded_methods: - - rGetCells - source_includes: - - AbstractCellBasedSimulation.hpp - - name: AbstractOffLatticeCellPopulation - - name: AbstractCentreBasedCellPopulation - excluded_methods: - - MarkSpring - - UnmarkSpring - - name: AbstractOnLatticeCellPopulation - excluded_methods: - - GetNodeCorrespondingToCell - - MarkSpring - - UnmarkSpring - - name: NodeBasedCellPopulationWithParticles - - name: CaBasedCellPopulation - excluded_methods: - - rGetMesh - - GetTetrahedralMeshForPdeModifier - - GetNodeCorrespondingToCell - - rGetAvailableSpaces - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: MeshBasedCellPopulation - excluded_methods: - - GetVoronoiTessellation - - rGetNodePairs - - GetTetrahedralMeshForPdeModifier - - rGetMesh - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: MeshBasedCellPopulationWithGhostNodes - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: VertexBasedCellPopulation - excluded_methods: - - GetElementCorrespondingToCell - - GetElement - - GetTetrahedralMeshForPdeModifier - - rGetMesh - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - AbstractCellBasedSimulation.hpp - - AbstractVertexBasedDivisionRule.hppBoundaryNodeWriter.hpp - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: PottsBasedCellPopulation - excluded_methods: - - GetElementCorrespondingToCell - - GetElement - - GetTetrahedralMeshForPdeModifier - - rGetMesh - - GetElementTessellation - - GetMutableMesh - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: NodeBasedCellPopulation - excluded_methods: - - rGetNodePairs - - GetTetrahedralMeshForPdeModifier - - rGetMesh - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: NodeBasedCellPopulationWithBuskeUpdate - excluded_methods: - - rGetMesh - custom_generator: CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py - source_includes: - - CellAgesWriter.hpp - - CellAncestorWriter.hpp - - CellAppliedForceWriter.hpp - - CellCycleModelProteinConcentrationsWriter.hpp - - CellDataItemWriter.hpp - - CellDeltaNotchWriter.hpp - - CellDivisionLocationsWriter.hpp - - CellIdWriter.hpp - - CellLocationIndexWriter.hpp - - CellMutationStatesCountWriter.hpp - - CellMutationStatesWriter.hpp - - CellPopulationAdjacencyMatrixWriter.hpp - - CellPopulationAreaWriter.hpp - - CellPopulationElementWriter.hpp - - CellProliferativePhasesCountWriter.hpp - - CellProliferativePhasesWriter.hpp - - CellProliferativeTypesCountWriter.hpp - - CellProliferativeTypesWriter.hpp - - CellRadiusWriter.hpp - - CellRemovalLocationsWriter.hpp - - CellRosetteRankWriter.hpp - - CellVolumesWriter.hpp - - HeterotypicBoundaryLengthWriter.hpp - - LegacyCellProliferativeTypesWriter.hpp - - NodeLocationWriter.hpp - - NodeVelocityWriter.hpp - - PottsMeshWriter.hpp - - RadialCellDataDistributionWriter.hpp - - VertexIntersectionSwapLocationsWriter.hpp - - VertexT1SwapLocationsWriter.hpp - - VertexT2SwapLocationsWriter.hpp - - VertexT3SwapLocationsWriter.hpp - - VoronoiDataWriter.hpp - - name: AbstractTargetAreaModifier - - name: SimpleTargetAreaModifier - - name: DivisionBiasTrackingModifier - - name: ExtrinsicPullModifier - - name: DeltaNotchEdgeInteriorTrackingModifier - - name: DeltaNotchTrackingModifier - - name: TargetAreaLinearGrowthModifier - - name: VolumeTrackingModifier - - name: VtkSceneModifier - - name: AbstractCellBasedSimulation - excluded_methods: - - GetSimulationModifiers - - name: SimulationTime - - name: OnLatticeSimulation - - name: OffLatticeSimulation - - name: PythonSimulationModifier -- name: tutorial - source_locations: - - projects/PyChaste/tutorial/src - classes: - - name: Hello -- name: visualization - source_locations: - - projects/PyChaste/visualization/src - classes: - - name: VtkScene - - name: AbstractPyChasteActorGenerator - - name: CellPopulationPyChasteActorGenerator + #=== core + - name: core + source_locations: + - global/src + - io/src + - linalg/src + + classes: + ##=== core: chaste/global/checkpointing/ + - name: Identifiable + + ##=== core: chaste/global/parallel/ + - name: PetscTools + excluded_methods: + - GetWorld # MPI not wrapped here + - Destroy # No non-const ref to PETSc types + - ReadPetscObject + - SetupMat + excluded_variables: + - MASTER_RANK # MPI not wrapped here + source_includes: &petsc_includes + - # forward decl + - # forward decl + - "PythonPetscObjectConverters.hpp" + - name: ReplicatableVector + source_includes: *petsc_includes + + ##=== core: chaste/global/timing/ + - name: Timer + + ##=== core: chaste/global/ + - name: RelativeTo # enum + source_file: FileFinder.hpp + - name: FileFinder + - name: OutputFileHandler + source_includes: + - FileFinder.hpp # forward decl + excluded_methods: + - OpenOutputFile # std io not wrapped + - name: ProgressReporter + - name: RandomNumberGenerator + - name: TimeStepper + - name: ChasteBuildInfo + source_file: Version.hpp + + #=== ode + - name: ode + source_locations: + - ode/src + + classes: + ##=== ode: chaste/ode/common/ + - name: AbstractOdeSystemInformation + - name: AbstractOdeSystem + + ##=== ode: chaste/cell_based/ode/ + - name: DeltaNotchOdeSystem + - name: DeltaNotchEdgeOdeSystem + - name: DeltaNotchInteriorOdeSystem + - name: Alarcon2004OxygenBasedCellCycleOdeSystem + - name: Goldbeter1991OdeSystem + - name: TysonNovak2001OdeSystem + excluded_methods: + - AnalyticJacobian # double ** jacobian + # - name: CellwiseOdeSystemInformation + + ##=== ode: pychaste/ode/ + - name: AbstractPythonOdeSystemInformation + + #=== pde + - name: pde + source_locations: + - pde/src + + classes: + #=== pde: chaste/pde/common/ + - name: AbstractBoundaryCondition + - name: ConstBoundaryCondition + - name: PdeSimulationTime + + #=== pde: chaste/pde/problem/ + - name: AbstractLinearPde + - name: AbstractLinearParabolicPde + - name: AbstractLinearEllipticPde + - name: AbstractLinearParabolicPdeSystemForCoupledOdeSystem + template_substitutions: + - signature: + replacement: [[2, 2, 1], [3, 3, 1]] + - name: AbstractNonlinearEllipticPde + + #=== pde: chaste/cell_based/cell_based_pde/pdes/ + - name: CellwiseSourceEllipticPde + - name: AveragedSourceEllipticPde + - name: VolumeDependentAveragedSourceEllipticPde + - name: UniformSourceEllipticPde + - name: CellwiseSourceParabolicPde + - name: UniformSourceParabolicPde + - name: AveragedSourceParabolicPde + + #=== pde: chaste/cell_based/cell_based_pde/ + - name: CellBasedEllipticPdeSolver + source_includes: *petsc_includes + - name: CellBasedParabolicPdeSolver + - name: AbstractPdeModifier + excluded_methods: + - GetSolution + - GetFeMesh + source_includes: *petsc_includes + - name: AbstractBoxDomainPdeModifier + source_includes: *petsc_includes + - name: AbstractGrowingDomainPdeModifier + source_includes: *petsc_includes + - name: EllipticGrowingDomainPdeModifier + source_includes: *petsc_includes + excluded_methods: + - ConstructBoundaryConditionsContainer + - name: ParabolicGrowingDomainPdeModifier + source_includes: *petsc_includes + excluded_methods: + - ConstructBoundaryConditionsContainer + - name: EllipticBoxDomainPdeModifier + source_includes: *petsc_includes + excluded_methods: + - ConstructBoundaryConditionsContainer + - name: ParabolicBoxDomainPdeModifier + source_includes: *petsc_includes + excluded_methods: + - ConstructBoundaryConditionsContainer + + #=== mesh + - name: mesh + source_locations: + - mesh/src + + classes: + #=== mesh: chaste/mesh/common/ + - name: ChastePoint + - name: AbstractChasteRegion + + - name: ChasteCuboid # chaste/mesh/utilities + - name: ChasteEllipsoid # chaste/mesh/utilities + + - name: AbstractElement + template_substitutions: + - signature: + replacement: [[1, 2], [2, 2], [2, 3], [3, 3]] + - name: AbstractMesh + + - name: NodeAttributes + - name: Node + + - name: Edge + - name: EdgeHelper + - name: EdgeOperation + + - name: Element + excluded_methods: + - CalculateCircumsphereVolume # method not found! + - name: MutableElement + template_substitutions: + - signature: + replacement: [[1, 2], [2, 2], [2, 3], [3, 3]] + + - name: AbstractTetrahedralMesh + - name: TetrahedralMesh + excluded_methods: + - FreeTriangulateIo + - InitialiseTriangulateIo + - name: MutableMesh + excluded_methods: + - SplitLongEdges # can't work with vec + - RescaleMeshFromBoundaryNode # method not found! + - name: NodesOnlyMesh + + #=== mesh: chaste/mesh/mutable/ + - name: Cylindrical2dMesh + excluded_methods: + - GetInstanceOfMismatchedBoundaryNodes + - name: Cylindrical2dNodesOnlyMesh + excluded_methods: + - SetUpBoxCollection # boost::numeric::ublas::unit_vector + - name: PeriodicNodesOnlyMesh + excluded_methods: + - SetUpBoxCollection # boost::numeric::ublas::zero_vector + - name: Toroidal2dMesh + excluded_methods: + - GetInstanceOfMismatchedBoundaryNodes + + - name: HoneycombMeshGenerator + - name: CylindricalHoneycombMeshGenerator + - name: ToroidalHoneycombMeshGenerator + + #=== mesh: chaste/mesh/vertex/ + - name: VertexMesh + excluded_methods: + - GetFace # dont have mixed dim elements + - GetEdgeHelper + constructor_arg_type_excludes: + - TetrahedralMesh<3, 3> + - TetrahedralMesh<2, 2> + - name: MutableVertexMesh + - name: Cylindrical2dVertexMesh + - name: Toroidal2dVertexMesh + + - name: HoneycombVertexMeshGenerator + - name: CylindricalHoneycombVertexMeshGenerator + - name: ToroidalHoneycombVertexMeshGenerator + - name: VoronoiVertexMeshGenerator + + #=== mesh: chaste/mesh/immersed_boundary/ + - name: FluidSource + + - name: ImmersedBoundaryElement + template_substitutions: + - signature: + replacement: [[1, 2], [2, 2], [2, 3], [3, 3]] + excluded_methods: AddCornerNode # not implemented in 1D + + - name: ImmersedBoundaryMesh + + - name: ImmersedBoundaryHoneycombMeshGenerator + - name: ImmersedBoundaryPalisadeMeshGenerator + + #=== mesh: chaste/cell_based/mesh/ + - name: PottsElement + - name: PottsMesh + - name: PottsMeshGenerator + - name: PottsMeshWriter + # - name: PottsMeshReader + + #=== cell_based + - name: cell_based + source_locations: + - cell_based/src + + classes: + ##=== cell_based: chaste/cell_based/cell_based/properties/ + - name: AbstractCellProperty + excluded_methods: + - IsType # exclude templated method + - name: ApoptoticCellProperty + - name: CellPropertyCollection + excluded_methods: + - GetCellPropertyRegistry + - name: CellData + - name: CellLabel + - name: CellAncestor + - name: CellId + - name: CellEdgeData + - name: CellPropertyRegistry + excluded_methods: + - rGetAllCellProperties + - TakeOwnership + - Get + # - name: CellVecData + + ##=== cell_based: chaste/cell_based/properties/proliferative_types/ + - name: AbstractCellProliferativeType + - name: StemCellProliferativeType + - name: DefaultCellProliferativeType + - name: TransitCellProliferativeType + - name: DifferentiatedCellProliferativeType + + ##=== cell_based: chaste/cell_based/properties/mutations/ + - name: AbstractCellMutationState + - name: ApcOneHitCellMutationState + - name: ApcTwoHitCellMutationState + - name: BetaCateninOneHitCellMutationState + - name: WildTypeCellMutationState + + ##=== cell_based: chaste/cell_based/cycle/ + - name: AbstractCellCycleModel + - name: AbstractPhaseBasedCellCycleModel + - name: AbstractSimpleCellCycleModel + - name: AbstractSimplePhaseBasedCellCycleModel + - name: AbstractSimpleGenerationalCellCycleModel + - name: AbstractCellCycleModelOdeSolver + - name: AbstractOdeBasedCellCycleModel + - name: AbstractOdeBasedPhaseBasedCellCycleModel + - name: NoCellCycleModel + - name: UniformCellCycleModel + - name: UniformG1GenerationalCellCycleModel + - name: StochasticOxygenBasedCellCycleModel + - name: SimpleOxygenBasedCellCycleModel + - name: BiasedBernoulliTrialCellCycleModel + - name: LabelDependentBernoulliTrialCellCycleModel + - name: AlwaysDivideCellCycleModel + - name: ContactInhibitionCellCycleModel + - name: GammaG1CellCycleModel + - name: ExponentialG1GenerationalCellCycleModel + - name: TysonNovakCellCycleModel + - name: Alarcon2004OxygenBasedCellCycleModel + - name: FixedSequenceCellCycleModel + - name: BernoulliTrialCellCycleModel + - name: FixedG1GenerationalCellCycleModel + # - name: CellCycleModelOdeSolver + + ##=== cell_based: chaste/cell_based/srn/ + - name: AbstractSrnModel + - name: AbstractOdeSrnModel + - name: NullSrnModel + - name: CellSrnModel + - name: DeltaNotchSrnModel + - name: DeltaNotchEdgeSrnModel + - name: DeltaNotchInteriorSrnModel + - name: Goldbeter1991SrnModel + + ##=== cell_based: chaste/cell_based/cell/ + - name: Cell + excluded_methods: + - rGetCellPropertyCollection + - GetSrnModel + - name: CellsGenerator + template_substitutions: &cells_generator_substitutions + - signature: + replacement: + - [NoCellCycleModel, 2] + - [NoCellCycleModel, 3] + - [UniformCellCycleModel, 2] + - [UniformCellCycleModel, 3] + - [SimpleOxygenBasedCellCycleModel, 2] + - [SimpleOxygenBasedCellCycleModel, 3] + - [UniformG1GenerationalCellCycleModel, 2] + - [UniformG1GenerationalCellCycleModel, 3] + - [BiasedBernoulliTrialCellCycleModel, 2] + - [BiasedBernoulliTrialCellCycleModel, 3] + - [LabelDependentBernoulliTrialCellCycleModel, 2] + - [LabelDependentBernoulliTrialCellCycleModel, 3] + - [AlwaysDivideCellCycleModel, 2] + - [AlwaysDivideCellCycleModel, 3] + - [ContactInhibitionCellCycleModel, 2] + - [ContactInhibitionCellCycleModel, 3] + - [StochasticOxygenBasedCellCycleModel, 2] + - [StochasticOxygenBasedCellCycleModel, 3] + - [GammaG1CellCycleModel, 2] + - [GammaG1CellCycleModel, 3] + - [ExponentialG1GenerationalCellCycleModel, 2] + - [ExponentialG1GenerationalCellCycleModel, 3] + - [TysonNovakCellCycleModel, 2] + - [TysonNovakCellCycleModel, 3] + - [Alarcon2004OxygenBasedCellCycleModel, 2] + - [Alarcon2004OxygenBasedCellCycleModel, 3] + - [FixedSequenceCellCycleModel, 2] + - [FixedSequenceCellCycleModel, 3] + - [BernoulliTrialCellCycleModel, 2] + - [BernoulliTrialCellCycleModel, 3] + - [FixedG1GenerationalCellCycleModel, 2] + - [FixedG1GenerationalCellCycleModel, 3] + custom_generator: &cells_generator "CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/CellsGenerator_custom.py" + source_includes: + - NoCellCycleModel.hpp + - UniformCellCycleModel.hpp + - SimpleOxygenBasedCellCycleModel.hpp + - UniformG1GenerationalCellCycleModel.hpp + - BiasedBernoulliTrialCellCycleModel.hpp + - LabelDependentBernoulliTrialCellCycleModel.hpp + - AlwaysDivideCellCycleModel.hpp + - ContactInhibitionCellCycleModel.hpp + - StochasticOxygenBasedCellCycleModel.hpp + - GammaG1CellCycleModel.hpp + - ExponentialG1GenerationalCellCycleModel.hpp + - TysonNovakCellCycleModel.hpp + - Alarcon2004OxygenBasedCellCycleModel.hpp + - FixedSequenceCellCycleModel.hpp + - BernoulliTrialCellCycleModel.hpp + - FixedG1GenerationalCellCycleModel.hpp + # - name: ParallelCellsGenerator + + ##=== cell_based: chaste/cell_based/population/srn_update/ + - name: VertexBasedPopulationSrn + + ##=== cell_based: chaste/cell_based/writers/ + - name: AbstractCellBasedWriter + + ##=== cell_based: chaste/cell_based/writers/cell_writers/ + - name: AbstractCellWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellAgesWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellAncestorWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellAppliedForceWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellCycleModelProteinConcentrationsWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellDataItemWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellDeltaNotchWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellIdWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellLabelWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellLocationIndexWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellMutationStatesWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellProliferativePhasesWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellProliferativeTypesWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellRadiusWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellRosetteRankWriter + source_includes: + - AbstractCellPopulation.hpp + - name: CellVolumesWriter + source_includes: + - AbstractCellPopulation.hpp + - name: ImmersedBoundaryBoundaryCellWriter + source_includes: + - AbstractCellPopulation.hpp + - ImmersedBoundaryCellPopulation.hpp + - name: ImmersedBoundaryNeighbourNumberWriter + source_includes: + - AbstractCellPopulation.hpp + - ImmersedBoundaryCellPopulation.hpp + - name: LegacyCellProliferativeTypesWriter + source_includes: + - AbstractCellPopulation.hpp + + ##=== cell_based: chaste/cell_based/writers/population_writers/ + - name: AbstractCellPopulationWriter + source_includes: &population_writer_includes + - AbstractCellPopulation.hpp + - MeshBasedCellPopulation.hpp + - PottsBasedCellPopulation.hpp + - CaBasedCellPopulation.hpp + - ImmersedBoundaryCellPopulation.hpp + - NodeBasedCellPopulation.hpp + - VertexBasedCellPopulation.hpp + - name: BoundaryNodeWriter + source_includes: *population_writer_includes + - name: CellPopulationAdjacencyMatrixWriter + source_includes: *population_writer_includes + - name: CellPopulationAreaWriter + source_includes: *population_writer_includes + - name: CellPopulationElementWriter + source_includes: *population_writer_includes + - name: HeterotypicBoundaryLengthWriter + source_includes: *population_writer_includes + - name: NodeLocationWriter + source_includes: *population_writer_includes + - name: NodeVelocityWriter + source_includes: *population_writer_includes + - name: RadialCellDataDistributionWriter + source_includes: *population_writer_includes + - name: VertexIntersectionSwapLocationsWriter + source_includes: *population_writer_includes + - name: VertexT1SwapLocationsWriter + source_includes: *population_writer_includes + - name: VertexT2SwapLocationsWriter + source_includes: *population_writer_includes + - name: VertexT3SwapLocationsWriter + source_includes: *population_writer_includes + - name: VoronoiDataWriter + source_includes: *population_writer_includes + + ##=== cell_based: chaste/cell_based/writers/population_count_writers/ + - name: AbstractCellPopulationCountWriter + source_includes: *population_writer_includes + - name: CellMutationStatesCountWriter + source_includes: *population_writer_includes + - name: CellProliferativePhasesCountWriter + source_includes: *population_writer_includes + - name: CellProliferativeTypesCountWriter + source_includes: *population_writer_includes + + ##=== cell_based: chaste/cell_based/writers/population_event_writers/ + - name: AbstractCellPopulationEventWriter + source_includes: *population_writer_includes + - name: CellDivisionLocationsWriter + source_includes: *population_writer_includes + - name: CellRemovalLocationsWriter + source_includes: *population_writer_includes + + ##=== cell_based: chaste/cell_based/population/update_rules/ + - name: AbstractUpdateRule + - name: AbstractCaUpdateRule + - name: AbstractPottsUpdateRule + - name: AbstractCaSwitchingUpdateRule + + - name: AdhesionPottsUpdateRule + - name: ChemotaxisPottsUpdateRule + - name: DifferentialAdhesionPottsUpdateRule + - name: DiffusionCaUpdateRule + - name: RandomCaSwitchingUpdateRule + - name: SurfaceAreaConstraintPottsUpdateRule + - name: VolumeConstraintPottsUpdateRule + + ##=== cell_based: chaste/cell_based/population/division_rules/ + - name: AbstractCentreBasedDivisionRule + - name: AbstractCaBasedDivisionRule + - name: AbstractImmersedBoundaryDivisionRule + - name: AbstractVertexBasedDivisionRule + + - name: ExclusionCaBasedDivisionRule + - name: FixedCentreBasedDivisionRule + - name: FixedVertexBasedDivisionRule + - name: RandomDirectionCentreBasedDivisionRule + - name: RandomDirectionVertexBasedDivisionRule + - name: ShortAxisImmersedBoundaryDivisionRule + - name: ShortAxisVertexBasedDivisionRule + - name: ShovingCaBasedDivisionRule + - name: VonMisesVertexBasedDivisionRule + + ##=== cell_based: chaste/cell_based/population/forces/ + - name: AbstractForce + - name: AbstractTwoBodyInteractionForce + - name: AbstractImmersedBoundaryForce + + - name: BuskeAdhesiveForce + - name: BuskeCompressionForce + - name: BuskeElasticForce + - name: ChemotacticForce + - name: DiffusionForce + - name: FarhadifarForce + - name: GeneralisedLinearSpringForce + - name: ImmersedBoundaryKinematicFeedbackForce + - name: ImmersedBoundaryLinearDifferentialAdhesionForce + - name: ImmersedBoundaryLinearInteractionForce + - name: ImmersedBoundaryLinearMembraneForce + - name: ImmersedBoundaryMorseInteractionForce + - name: ImmersedBoundaryMorseMembraneForce + - name: NagaiHondaForce + - name: RepulsionForce + - name: WelikyOsterForce + excluded_methods: + - GetLineTensionParameter + + - name: DifferentialAdhesionGeneralisedLinearSpringForce + - name: NagaiHondaDifferentialAdhesionForce + excluded_methods: + - GetAdhesionParameter + - name: PlanarPolarisedFarhadifarForce + excluded_methods: + - GetLineTensionParameter + # - name: DiscreteSystemForceCalculator + + ##=== cell_based: chaste/cell_based/population/killers/ + - name: AbstractCellKiller + + - name: ApoptoticCellKiller + - name: IsolatedLabelledCellKiller + - name: PlaneBasedCellKiller + - name: RandomCellKiller + - name: T2SwapCellKiller + - name: TargetedCellKiller + + ##=== cell_based: chaste/cell_based/population/boundary_conditions/ + - name: AbstractCellPopulationBoundaryCondition + + - name: PlaneBoundaryCondition + source_includes: + - PythonUblasObjectConverters.hpp + + - name: SlidingBoundaryCondition + source_includes: + - PythonUblasObjectConverters.hpp + + - name: SphereGeometryBoundaryCondition + source_includes: + - PythonUblasObjectConverters.hpp + + ##=== cell_based: chaste/cell_based/population/ + - name: AbstractCellPopulation + excluded_methods: + - rGetCells + source_includes: + - AbstractCellBasedSimulation.hpp + + - name: AbstractOffLatticeCellPopulation + + - name: AbstractCentreBasedCellPopulation + template_substitutions: + - signature: + replacement: [[2, 2], [3, 3]] + excluded_methods: + - MarkSpring + - UnmarkSpring + + - name: AbstractOnLatticeCellPopulation + excluded_methods: + - GetNodeCorrespondingToCell + - MarkSpring + - UnmarkSpring + + - name: CaBasedCellPopulation + excluded_methods: + - rGetMesh + - GetTetrahedralMeshForPdeModifier + - GetNodeCorrespondingToCell + - rGetAvailableSpaces + custom_generator: &population_generator "CPPWG_SOURCEROOT/projects/PyChaste/dynamic/wrapper_generators/PopulationWriter_custom.py" + source_includes: &population_includes + - AbstractCellBasedSimulation.hpp + - AbstractImmersedBoundaryDivisionRule.hpp + - AbstractVertexBasedDivisionRule.hpp + - BoundaryNodeWriter.hpp + - CellAgesWriter.hpp + - CellAncestorWriter.hpp + - CellAppliedForceWriter.hpp + - CellCycleModelProteinConcentrationsWriter.hpp + - CellDataItemWriter.hpp + - CellDeltaNotchWriter.hpp + - CellDivisionLocationsWriter.hpp + - CellIdWriter.hpp + - CellLabelWriter.hpp + - CellLocationIndexWriter.hpp + - CellMutationStatesCountWriter.hpp + - CellMutationStatesWriter.hpp + - CellPopulationAdjacencyMatrixWriter.hpp + - CellPopulationAreaWriter.hpp + - CellPopulationElementWriter.hpp + - CellProliferativePhasesCountWriter.hpp + - CellProliferativePhasesWriter.hpp + - CellProliferativeTypesCountWriter.hpp + - CellProliferativeTypesWriter.hpp + - CellRadiusWriter.hpp + - CellRemovalLocationsWriter.hpp + - CellRosetteRankWriter.hpp + - CellVolumesWriter.hpp + - HeterotypicBoundaryLengthWriter.hpp + - LegacyCellProliferativeTypesWriter.hpp + - NodeLocationWriter.hpp + - NodeVelocityWriter.hpp + - PottsMeshWriter.hpp + - RadialCellDataDistributionWriter.hpp + - VertexIntersectionSwapLocationsWriter.hpp + - VertexT1SwapLocationsWriter.hpp + - VertexT2SwapLocationsWriter.hpp + - VertexT3SwapLocationsWriter.hpp + - VoronoiDataWriter.hpp + + - name: ImmersedBoundaryCellPopulation + excluded_methods: + - rGetMesh + - GetTetrahedralMeshForPdeModifier + custom_generator: *population_generator + source_includes: *population_includes + + - name: MeshBasedCellPopulation + excluded_methods: + - GetVoronoiTessellation + - rGetNodePairs + - GetTetrahedralMeshForPdeModifier + - rGetMesh + custom_generator: *population_generator + source_includes: *population_includes + + - name: MeshBasedCellPopulationWithGhostNodes + custom_generator: *population_generator + source_includes: *population_includes + + - name: NodeBasedCellPopulation + excluded_methods: + - rGetNodePairs + - GetTetrahedralMeshForPdeModifier + - rGetMesh + custom_generator: *population_generator + source_includes: *population_includes + + - name: NodeBasedCellPopulationWithBuskeUpdate + excluded_methods: + - rGetMesh + custom_generator: *population_generator + source_includes: *population_includes + + - name: NodeBasedCellPopulationWithParticles + excluded_methods: + - rGetMesh + custom_generator: *population_generator + source_includes: *population_includes + + - name: VertexBasedCellPopulation + excluded_methods: + - GetElementCorrespondingToCell + - GetElement + - GetTetrahedralMeshForPdeModifier + - rGetMesh + custom_generator: *population_generator + source_includes: *population_includes + + - name: PottsBasedCellPopulation + excluded_methods: + - GetElementCorrespondingToCell + - GetElement + - GetTetrahedralMeshForPdeModifier + - rGetMesh + - GetElementTessellation + - GetMutableMesh + custom_generator: *population_generator + source_includes: *population_includes + + # - name: CellwiseDataGradient + + ##=== cell_based: chaste/cell_based/simulation/modifiers/ + - name: AbstractCellBasedSimulationModifier + - name: AbstractTargetAreaModifier + + - name: DeltaNotchTrackingModifier + - name: DeltaNotchEdgeTrackingModifier + - name: DeltaNotchEdgeInteriorTrackingModifier + - name: DivisionBiasTrackingModifier + - name: ExtrinsicPullModifier + - name: ImmersedBoundarySimulationModifier + - name: ImmersedBoundarySvgWriter + - name: NormallyDistributedTargetAreaModifier + - name: SimpleTargetAreaModifier + - name: TargetAreaLinearGrowthModifier + - name: VolumeTrackingModifier + + ##=== cell_based: chaste/cell_based/simulation/numerical_methods/ + - name: AbstractNumericalMethod + - name: ForwardEulerNumericalMethod + # - name: StepSizeException + + ##=== cell_based: chaste/cell_based/common/ + - name: SimulationTime + # - name: OdeLinearSystemSolver + + ##=== cell_based: chaste/cell_based/simulation/ + - name: AbstractCellBasedSimulation + template_substitutions: + - signature: + replacement: [[2, 2], [3, 3]] + excluded_methods: + - GetSimulationModifiers + + - name: OffLatticeSimulation + - name: OnLatticeSimulation + # - name: CellBasedSimulationArchiver + + ##=== cell_based: pychaste/cell_based/ + - name: AttractingPlaneBoundaryCondition + source_includes: + - PythonUblasObjectConverters.hpp + - name: VtkSceneModifier + - name: PythonSimulationModifier + + #=== tutorial + - name: tutorial + source_locations: + - projects/PyChaste/tutorial/src + classes: + - name: Hello + + #=== visualization + - name: visualization + source_locations: + - projects/PyChaste/visualization/src + classes: + - name: VtkScene + - name: AbstractPyChasteActorGenerator + - name: CellPopulationPyChasteActorGenerator diff --git a/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule2_2.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule2_2.cppwg.cpp new file mode 100644 index 00000000..8a56203e --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule2_2.cppwg.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractCentreBasedDivisionRule.hpp" + +#include "AbstractCentreBasedDivisionRule2_2.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractCentreBasedDivisionRule<2 > AbstractCentreBasedDivisionRule2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::std::pair, boost::numeric::ublas::c_vector> _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_2_gt__boost_numeric_ublas_c_vector_lt_double_2_gt__gt_; + +class AbstractCentreBasedDivisionRule2_2_Overloads : public AbstractCentreBasedDivisionRule2_2{ + public: + using AbstractCentreBasedDivisionRule2_2::AbstractCentreBasedDivisionRule; + ::std::pair, boost::numeric::ublas::c_vector> CalculateCellDivisionVector(::CellPtr pParentCell, ::AbstractCentreBasedCellPopulation<2, 2> & rCellPopulation) override { + PYBIND11_OVERRIDE_PURE( + _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_2_gt__boost_numeric_ublas_c_vector_lt_double_2_gt__gt_, + AbstractCentreBasedDivisionRule2_2, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + void OutputCellCentreBasedDivisionRuleParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + AbstractCentreBasedDivisionRule2_2, + OutputCellCentreBasedDivisionRuleParameters, + rParamsFile); + } + +}; +void register_AbstractCentreBasedDivisionRule2_2_class(py::module &m){ +py::class_ >(m, "AbstractCentreBasedDivisionRule2_2") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::std::pair, boost::numeric::ublas::c_vector>(AbstractCentreBasedDivisionRule2_2::*)(::CellPtr, ::AbstractCentreBasedCellPopulation<2, 2> &)) &AbstractCentreBasedDivisionRule2_2::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + .def( + "OutputCellCentreBasedDivisionRuleInfo", + (void(AbstractCentreBasedDivisionRule2_2::*)(::out_stream &)) &AbstractCentreBasedDivisionRule2_2::OutputCellCentreBasedDivisionRuleInfo, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule2_2.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule2_2.cppwg.hpp new file mode 100644 index 00000000..7a78e450 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper +#define AbstractCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractCentreBasedDivisionRule2_2_class(py::module &m); +#endif // AbstractCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule3_3.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule3_3.cppwg.cpp new file mode 100644 index 00000000..382beb2b --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule3_3.cppwg.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractCentreBasedDivisionRule.hpp" + +#include "AbstractCentreBasedDivisionRule3_3.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractCentreBasedDivisionRule<3 > AbstractCentreBasedDivisionRule3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::std::pair, boost::numeric::ublas::c_vector> _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_3_gt__boost_numeric_ublas_c_vector_lt_double_3_gt__gt_; + +class AbstractCentreBasedDivisionRule3_3_Overloads : public AbstractCentreBasedDivisionRule3_3{ + public: + using AbstractCentreBasedDivisionRule3_3::AbstractCentreBasedDivisionRule; + ::std::pair, boost::numeric::ublas::c_vector> CalculateCellDivisionVector(::CellPtr pParentCell, ::AbstractCentreBasedCellPopulation<3, 3> & rCellPopulation) override { + PYBIND11_OVERRIDE_PURE( + _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_3_gt__boost_numeric_ublas_c_vector_lt_double_3_gt__gt_, + AbstractCentreBasedDivisionRule3_3, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + void OutputCellCentreBasedDivisionRuleParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + AbstractCentreBasedDivisionRule3_3, + OutputCellCentreBasedDivisionRuleParameters, + rParamsFile); + } + +}; +void register_AbstractCentreBasedDivisionRule3_3_class(py::module &m){ +py::class_ >(m, "AbstractCentreBasedDivisionRule3_3") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::std::pair, boost::numeric::ublas::c_vector>(AbstractCentreBasedDivisionRule3_3::*)(::CellPtr, ::AbstractCentreBasedCellPopulation<3, 3> &)) &AbstractCentreBasedDivisionRule3_3::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + .def( + "OutputCellCentreBasedDivisionRuleInfo", + (void(AbstractCentreBasedDivisionRule3_3::*)(::out_stream &)) &AbstractCentreBasedDivisionRule3_3::OutputCellCentreBasedDivisionRuleInfo, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule3_3.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule3_3.cppwg.hpp new file mode 100644 index 00000000..c520a5ef --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractCentreBasedDivisionRule3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper +#define AbstractCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractCentreBasedDivisionRule3_3_class(py::module &m); +#endif // AbstractCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule2.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule2.cppwg.cpp new file mode 100644 index 00000000..aa514e80 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule2.cppwg.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractImmersedBoundaryDivisionRule.hpp" + +#include "AbstractImmersedBoundaryDivisionRule2.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractImmersedBoundaryDivisionRule<2 > AbstractImmersedBoundaryDivisionRule2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_2_gt_; + +class AbstractImmersedBoundaryDivisionRule2_Overloads : public AbstractImmersedBoundaryDivisionRule2{ + public: + using AbstractImmersedBoundaryDivisionRule2::AbstractImmersedBoundaryDivisionRule; + ::boost::numeric::ublas::c_vector CalculateCellDivisionVector(::CellPtr pParentCell, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE_PURE( + _boost_numeric_ublas_c_vector_lt_double_2_gt_, + AbstractImmersedBoundaryDivisionRule2, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + void OutputCellImmersedBoundaryDivisionRuleParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + AbstractImmersedBoundaryDivisionRule2, + OutputCellImmersedBoundaryDivisionRuleParameters, + rParamsFile); + } + +}; +void register_AbstractImmersedBoundaryDivisionRule2_class(py::module &m){ +py::class_ >(m, "AbstractImmersedBoundaryDivisionRule2") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::boost::numeric::ublas::c_vector(AbstractImmersedBoundaryDivisionRule2::*)(::CellPtr, ::ImmersedBoundaryCellPopulation<2> &)) &AbstractImmersedBoundaryDivisionRule2::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + .def( + "OutputCellImmersedBoundaryDivisionRuleInfo", + (void(AbstractImmersedBoundaryDivisionRule2::*)(::out_stream &)) &AbstractImmersedBoundaryDivisionRule2::OutputCellImmersedBoundaryDivisionRuleInfo, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule2.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule2.cppwg.hpp new file mode 100644 index 00000000..6aeb9eb8 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractImmersedBoundaryDivisionRule2_hpp__pyplusplus_wrapper +#define AbstractImmersedBoundaryDivisionRule2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractImmersedBoundaryDivisionRule2_class(py::module &m); +#endif // AbstractImmersedBoundaryDivisionRule2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule3.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule3.cppwg.cpp new file mode 100644 index 00000000..768fa343 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule3.cppwg.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractImmersedBoundaryDivisionRule.hpp" + +#include "AbstractImmersedBoundaryDivisionRule3.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractImmersedBoundaryDivisionRule<3 > AbstractImmersedBoundaryDivisionRule3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; + +class AbstractImmersedBoundaryDivisionRule3_Overloads : public AbstractImmersedBoundaryDivisionRule3{ + public: + using AbstractImmersedBoundaryDivisionRule3::AbstractImmersedBoundaryDivisionRule; + ::boost::numeric::ublas::c_vector CalculateCellDivisionVector(::CellPtr pParentCell, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE_PURE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + AbstractImmersedBoundaryDivisionRule3, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + void OutputCellImmersedBoundaryDivisionRuleParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + AbstractImmersedBoundaryDivisionRule3, + OutputCellImmersedBoundaryDivisionRuleParameters, + rParamsFile); + } + +}; +void register_AbstractImmersedBoundaryDivisionRule3_class(py::module &m){ +py::class_ >(m, "AbstractImmersedBoundaryDivisionRule3") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::boost::numeric::ublas::c_vector(AbstractImmersedBoundaryDivisionRule3::*)(::CellPtr, ::ImmersedBoundaryCellPopulation<3> &)) &AbstractImmersedBoundaryDivisionRule3::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + .def( + "OutputCellImmersedBoundaryDivisionRuleInfo", + (void(AbstractImmersedBoundaryDivisionRule3::*)(::out_stream &)) &AbstractImmersedBoundaryDivisionRule3::OutputCellImmersedBoundaryDivisionRuleInfo, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule3.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule3.cppwg.hpp new file mode 100644 index 00000000..09b36588 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryDivisionRule3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractImmersedBoundaryDivisionRule3_hpp__pyplusplus_wrapper +#define AbstractImmersedBoundaryDivisionRule3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractImmersedBoundaryDivisionRule3_class(py::module &m); +#endif // AbstractImmersedBoundaryDivisionRule3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce2.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce2.cppwg.cpp new file mode 100644 index 00000000..14a51ad8 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce2.cppwg.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractImmersedBoundaryForce.hpp" + +#include "AbstractImmersedBoundaryForce2.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractImmersedBoundaryForce<2 > AbstractImmersedBoundaryForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class AbstractImmersedBoundaryForce2_Overloads : public AbstractImmersedBoundaryForce2{ + public: + using AbstractImmersedBoundaryForce2::AbstractImmersedBoundaryForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractImmersedBoundaryForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractImmersedBoundaryForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_AbstractImmersedBoundaryForce2_class(py::module &m){ +py::class_ >(m, "AbstractImmersedBoundaryForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(AbstractImmersedBoundaryForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &AbstractImmersedBoundaryForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(AbstractImmersedBoundaryForce2::*)(::out_stream &)) &AbstractImmersedBoundaryForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetAdditiveNormalNoise", + (bool(AbstractImmersedBoundaryForce2::*)() const ) &AbstractImmersedBoundaryForce2::GetAdditiveNormalNoise, + " " ) + .def( + "SetAdditiveNormalNoise", + (void(AbstractImmersedBoundaryForce2::*)(bool)) &AbstractImmersedBoundaryForce2::SetAdditiveNormalNoise, + " " , py::arg("additiveNormalNoise") ) + .def( + "GetNormalNoiseMean", + (double(AbstractImmersedBoundaryForce2::*)() const ) &AbstractImmersedBoundaryForce2::GetNormalNoiseMean, + " " ) + .def( + "SetNormalNoiseMean", + (void(AbstractImmersedBoundaryForce2::*)(double)) &AbstractImmersedBoundaryForce2::SetNormalNoiseMean, + " " , py::arg("normalNoiseMean") ) + .def( + "GetNormalNoiseStdDev", + (double(AbstractImmersedBoundaryForce2::*)() const ) &AbstractImmersedBoundaryForce2::GetNormalNoiseStdDev, + " " ) + .def( + "SetNormalNoiseStdDev", + (void(AbstractImmersedBoundaryForce2::*)(double)) &AbstractImmersedBoundaryForce2::SetNormalNoiseStdDev, + " " , py::arg("normalNoiseStdDev") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce2.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce2.cppwg.hpp new file mode 100644 index 00000000..a442dae0 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractImmersedBoundaryForce2_hpp__pyplusplus_wrapper +#define AbstractImmersedBoundaryForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractImmersedBoundaryForce2_class(py::module &m); +#endif // AbstractImmersedBoundaryForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce3.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce3.cppwg.cpp new file mode 100644 index 00000000..1596ae18 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce3.cppwg.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractImmersedBoundaryForce.hpp" + +#include "AbstractImmersedBoundaryForce3.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractImmersedBoundaryForce<3 > AbstractImmersedBoundaryForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class AbstractImmersedBoundaryForce3_Overloads : public AbstractImmersedBoundaryForce3{ + public: + using AbstractImmersedBoundaryForce3::AbstractImmersedBoundaryForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractImmersedBoundaryForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractImmersedBoundaryForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_AbstractImmersedBoundaryForce3_class(py::module &m){ +py::class_ >(m, "AbstractImmersedBoundaryForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(AbstractImmersedBoundaryForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &AbstractImmersedBoundaryForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(AbstractImmersedBoundaryForce3::*)(::out_stream &)) &AbstractImmersedBoundaryForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetAdditiveNormalNoise", + (bool(AbstractImmersedBoundaryForce3::*)() const ) &AbstractImmersedBoundaryForce3::GetAdditiveNormalNoise, + " " ) + .def( + "SetAdditiveNormalNoise", + (void(AbstractImmersedBoundaryForce3::*)(bool)) &AbstractImmersedBoundaryForce3::SetAdditiveNormalNoise, + " " , py::arg("additiveNormalNoise") ) + .def( + "GetNormalNoiseMean", + (double(AbstractImmersedBoundaryForce3::*)() const ) &AbstractImmersedBoundaryForce3::GetNormalNoiseMean, + " " ) + .def( + "SetNormalNoiseMean", + (void(AbstractImmersedBoundaryForce3::*)(double)) &AbstractImmersedBoundaryForce3::SetNormalNoiseMean, + " " , py::arg("normalNoiseMean") ) + .def( + "GetNormalNoiseStdDev", + (double(AbstractImmersedBoundaryForce3::*)() const ) &AbstractImmersedBoundaryForce3::GetNormalNoiseStdDev, + " " ) + .def( + "SetNormalNoiseStdDev", + (void(AbstractImmersedBoundaryForce3::*)(double)) &AbstractImmersedBoundaryForce3::SetNormalNoiseStdDev, + " " , py::arg("normalNoiseStdDev") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce3.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce3.cppwg.hpp new file mode 100644 index 00000000..ec43503e --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractImmersedBoundaryForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractImmersedBoundaryForce3_hpp__pyplusplus_wrapper +#define AbstractImmersedBoundaryForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractImmersedBoundaryForce3_class(py::module &m); +#endif // AbstractImmersedBoundaryForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractNumericalMethod2_2.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractNumericalMethod2_2.cppwg.cpp new file mode 100644 index 00000000..8ae64e94 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractNumericalMethod2_2.cppwg.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractNumericalMethod.hpp" + +#include "AbstractNumericalMethod2_2.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractNumericalMethod<2, 2 > AbstractNumericalMethod2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class AbstractNumericalMethod2_Overrides : public AbstractNumericalMethod2_2{ + public: + using AbstractNumericalMethod2_2::AbstractNumericalMethod; + void UpdateAllNodePositions(double dt) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractNumericalMethod2_2, + UpdateAllNodePositions, + dt); + } + void OutputNumericalMethodParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + AbstractNumericalMethod2_2, + OutputNumericalMethodParameters, + rParamsFile); + } + +}; +void register_AbstractNumericalMethod2_2_class(py::module &m){ +py::class_ >(m, "AbstractNumericalMethod2_2") + .def(py::init< >()) + .def( + "SetCellPopulation", + (void(AbstractNumericalMethod2_2::*)(::AbstractOffLatticeCellPopulation<2> *)) &AbstractNumericalMethod2_2::SetCellPopulation, + " " , py::arg("pPopulation") ) + .def( + "SetForceCollection", + (void(AbstractNumericalMethod2_2::*)(::std::vector>> *)) &AbstractNumericalMethod2_2::SetForceCollection, + " " , py::arg("pForces") ) + .def( + "SetBoundaryConditions", + (void(AbstractNumericalMethod2_2::*)(::std::vector>> *)) &AbstractNumericalMethod2_2::SetBoundaryConditions, + " " , py::arg("pBoundaryConditions") ) + .def( + "SetUseAdaptiveTimestep", + (void(AbstractNumericalMethod2_2::*)(bool)) &AbstractNumericalMethod2_2::SetUseAdaptiveTimestep, + " " , py::arg("useAdaptiveTimestep") ) + .def( + "SetUseUpdateNodeLocation", + (void(AbstractNumericalMethod2_2::*)(bool)) &AbstractNumericalMethod2_2::SetUseUpdateNodeLocation, + " " , py::arg("useUpdateNodeLocation") ) + .def( + "GetUseUpdateNodeLocation", + (bool(AbstractNumericalMethod2_2::*)()) &AbstractNumericalMethod2_2::GetUseUpdateNodeLocation, + " " ) + .def( + "HasAdaptiveTimestep", + (bool(AbstractNumericalMethod2_2::*)()) &AbstractNumericalMethod2_2::HasAdaptiveTimestep, + " " ) + .def( + "UpdateAllNodePositions", + (void(AbstractNumericalMethod2_2::*)(double)) &AbstractNumericalMethod2_2::UpdateAllNodePositions, + " " , py::arg("dt") ) + .def( + "OutputNumericalMethodInfo", + (void(AbstractNumericalMethod2_2::*)(::out_stream &)) &AbstractNumericalMethod2_2::OutputNumericalMethodInfo, + " " , py::arg("rParamsFile") ) + .def( + "OutputNumericalMethodParameters", + (void(AbstractNumericalMethod2_2::*)(::out_stream &)) &AbstractNumericalMethod2_2::OutputNumericalMethodParameters, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractNumericalMethod2_2.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractNumericalMethod2_2.cppwg.hpp new file mode 100644 index 00000000..9d2264ca --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractNumericalMethod2_2.cppwg.hpp @@ -0,0 +1,7 @@ +#ifndef AbstractNumericalMethod2_hpp__cppwg_wrapper +#define AbstractNumericalMethod2_hpp__cppwg_wrapper + +#include + +void register_AbstractNumericalMethod2_2_class(pybind11::module &m); +#endif // AbstractNumericalMethod2_hpp__cppwg_wrapper diff --git a/dynamic/wrappers/cell_based/AbstractNumericalMethod3_3.cppwg.cpp b/dynamic/wrappers/cell_based/AbstractNumericalMethod3_3.cppwg.cpp new file mode 100644 index 00000000..43f4da99 --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractNumericalMethod3_3.cppwg.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractNumericalMethod.hpp" + +#include "AbstractNumericalMethod3_3.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractNumericalMethod<3, 3 > AbstractNumericalMethod3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class AbstractNumericalMethod3_Overrides : public AbstractNumericalMethod3_3{ + public: + using AbstractNumericalMethod3_3::AbstractNumericalMethod; + void UpdateAllNodePositions(double dt) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractNumericalMethod3_3, + UpdateAllNodePositions, + dt); + } + void OutputNumericalMethodParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + AbstractNumericalMethod3_3, + OutputNumericalMethodParameters, + rParamsFile); + } + +}; +void register_AbstractNumericalMethod3_3_class(py::module &m){ +py::class_ >(m, "AbstractNumericalMethod3_3") + .def(py::init< >()) + .def( + "SetCellPopulation", + (void(AbstractNumericalMethod3_3::*)(::AbstractOffLatticeCellPopulation<3> *)) &AbstractNumericalMethod3_3::SetCellPopulation, + " " , py::arg("pPopulation") ) + .def( + "SetForceCollection", + (void(AbstractNumericalMethod3_3::*)(::std::vector>> *)) &AbstractNumericalMethod3_3::SetForceCollection, + " " , py::arg("pForces") ) + .def( + "SetBoundaryConditions", + (void(AbstractNumericalMethod3_3::*)(::std::vector>> *)) &AbstractNumericalMethod3_3::SetBoundaryConditions, + " " , py::arg("pBoundaryConditions") ) + .def( + "SetUseAdaptiveTimestep", + (void(AbstractNumericalMethod3_3::*)(bool)) &AbstractNumericalMethod3_3::SetUseAdaptiveTimestep, + " " , py::arg("useAdaptiveTimestep") ) + .def( + "SetUseUpdateNodeLocation", + (void(AbstractNumericalMethod3_3::*)(bool)) &AbstractNumericalMethod3_3::SetUseUpdateNodeLocation, + " " , py::arg("useUpdateNodeLocation") ) + .def( + "GetUseUpdateNodeLocation", + (bool(AbstractNumericalMethod3_3::*)()) &AbstractNumericalMethod3_3::GetUseUpdateNodeLocation, + " " ) + .def( + "HasAdaptiveTimestep", + (bool(AbstractNumericalMethod3_3::*)()) &AbstractNumericalMethod3_3::HasAdaptiveTimestep, + " " ) + .def( + "UpdateAllNodePositions", + (void(AbstractNumericalMethod3_3::*)(double)) &AbstractNumericalMethod3_3::UpdateAllNodePositions, + " " , py::arg("dt") ) + .def( + "OutputNumericalMethodInfo", + (void(AbstractNumericalMethod3_3::*)(::out_stream &)) &AbstractNumericalMethod3_3::OutputNumericalMethodInfo, + " " , py::arg("rParamsFile") ) + .def( + "OutputNumericalMethodParameters", + (void(AbstractNumericalMethod3_3::*)(::out_stream &)) &AbstractNumericalMethod3_3::OutputNumericalMethodParameters, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/AbstractNumericalMethod3_3.cppwg.hpp b/dynamic/wrappers/cell_based/AbstractNumericalMethod3_3.cppwg.hpp new file mode 100644 index 00000000..ce3f7efb --- /dev/null +++ b/dynamic/wrappers/cell_based/AbstractNumericalMethod3_3.cppwg.hpp @@ -0,0 +1,7 @@ +#ifndef AbstractNumericalMethod3_hpp__cppwg_wrapper +#define AbstractNumericalMethod3_hpp__cppwg_wrapper + +#include + +void register_AbstractNumericalMethod3_3_class(pybind11::module &m); +#endif // AbstractNumericalMethod3_hpp__cppwg_wrapper diff --git a/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule2_2.cppwg.cpp b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule2_2.cppwg.cpp new file mode 100644 index 00000000..18bc4d31 --- /dev/null +++ b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule2_2.cppwg.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "FixedCentreBasedDivisionRule.hpp" + +#include "FixedCentreBasedDivisionRule2_2.cppwg.hpp" + +namespace py = pybind11; +typedef FixedCentreBasedDivisionRule<2 > FixedCentreBasedDivisionRule2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::std::pair, boost::numeric::ublas::c_vector> _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_2_gt__boost_numeric_ublas_c_vector_lt_double_2_gt__gt_; + +class FixedCentreBasedDivisionRule2_2_Overloads : public FixedCentreBasedDivisionRule2_2{ + public: + using FixedCentreBasedDivisionRule2_2::FixedCentreBasedDivisionRule; + ::std::pair, boost::numeric::ublas::c_vector> CalculateCellDivisionVector(::CellPtr pParentCell, ::AbstractCentreBasedCellPopulation<2, 2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_2_gt__boost_numeric_ublas_c_vector_lt_double_2_gt__gt_, + FixedCentreBasedDivisionRule2_2, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + +}; +void register_FixedCentreBasedDivisionRule2_2_class(py::module &m){ +py::class_ , AbstractCentreBasedDivisionRule<2> >(m, "FixedCentreBasedDivisionRule2_2") + .def(py::init<::boost::numeric::ublas::c_vector & >(), py::arg("rDaughterLocation")) + .def( + "rGetDaughterLocation", + (::boost::numeric::ublas::c_vector const &(FixedCentreBasedDivisionRule2_2::*)() const ) &FixedCentreBasedDivisionRule2_2::rGetDaughterLocation, + " " , py::return_value_policy::reference_internal) + .def( + "CalculateCellDivisionVector", + (::std::pair, boost::numeric::ublas::c_vector>(FixedCentreBasedDivisionRule2_2::*)(::CellPtr, ::AbstractCentreBasedCellPopulation<2, 2> &)) &FixedCentreBasedDivisionRule2_2::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule2_2.cppwg.hpp b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule2_2.cppwg.hpp new file mode 100644 index 00000000..42ed2320 --- /dev/null +++ b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef FixedCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper +#define FixedCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_FixedCentreBasedDivisionRule2_2_class(py::module &m); +#endif // FixedCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule3_3.cppwg.cpp b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule3_3.cppwg.cpp new file mode 100644 index 00000000..7efd132d --- /dev/null +++ b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule3_3.cppwg.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "FixedCentreBasedDivisionRule.hpp" + +#include "FixedCentreBasedDivisionRule3_3.cppwg.hpp" + +namespace py = pybind11; +typedef FixedCentreBasedDivisionRule<3 > FixedCentreBasedDivisionRule3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::std::pair, boost::numeric::ublas::c_vector> _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_3_gt__boost_numeric_ublas_c_vector_lt_double_3_gt__gt_; + +class FixedCentreBasedDivisionRule3_3_Overloads : public FixedCentreBasedDivisionRule3_3{ + public: + using FixedCentreBasedDivisionRule3_3::FixedCentreBasedDivisionRule; + ::std::pair, boost::numeric::ublas::c_vector> CalculateCellDivisionVector(::CellPtr pParentCell, ::AbstractCentreBasedCellPopulation<3, 3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_3_gt__boost_numeric_ublas_c_vector_lt_double_3_gt__gt_, + FixedCentreBasedDivisionRule3_3, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + +}; +void register_FixedCentreBasedDivisionRule3_3_class(py::module &m){ +py::class_ , AbstractCentreBasedDivisionRule<3> >(m, "FixedCentreBasedDivisionRule3_3") + .def(py::init<::boost::numeric::ublas::c_vector & >(), py::arg("rDaughterLocation")) + .def( + "rGetDaughterLocation", + (::boost::numeric::ublas::c_vector const &(FixedCentreBasedDivisionRule3_3::*)() const ) &FixedCentreBasedDivisionRule3_3::rGetDaughterLocation, + " " , py::return_value_policy::reference_internal) + .def( + "CalculateCellDivisionVector", + (::std::pair, boost::numeric::ublas::c_vector>(FixedCentreBasedDivisionRule3_3::*)(::CellPtr, ::AbstractCentreBasedCellPopulation<3, 3> &)) &FixedCentreBasedDivisionRule3_3::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule3_3.cppwg.hpp b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule3_3.cppwg.hpp new file mode 100644 index 00000000..1142c372 --- /dev/null +++ b/dynamic/wrappers/cell_based/FixedCentreBasedDivisionRule3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef FixedCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper +#define FixedCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_FixedCentreBasedDivisionRule3_3_class(py::module &m); +#endif // FixedCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod2_2.cppwg.cpp b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod2_2.cppwg.cpp new file mode 100644 index 00000000..26efb694 --- /dev/null +++ b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod2_2.cppwg.cpp @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ForwardEulerNumericalMethod.hpp" + +#include "ForwardEulerNumericalMethod2_2.cppwg.hpp" + +namespace py = pybind11; +typedef ForwardEulerNumericalMethod<2, 2 > ForwardEulerNumericalMethod2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ForwardEulerNumericalMethod2_Overrides : public ForwardEulerNumericalMethod2_2{ + public: + using ForwardEulerNumericalMethod2_2::ForwardEulerNumericalMethod; + void UpdateAllNodePositions(double dt) override { + PYBIND11_OVERRIDE( + void, + ForwardEulerNumericalMethod2_2, + UpdateAllNodePositions, + dt); + } + void OutputNumericalMethodParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ForwardEulerNumericalMethod2_2, + OutputNumericalMethodParameters, + rParamsFile); + } + +}; +void register_ForwardEulerNumericalMethod2_2_class(py::module &m){ +py::class_ , AbstractNumericalMethod<2> >(m, "ForwardEulerNumericalMethod2_2") + .def(py::init< >()) + .def( + "UpdateAllNodePositions", + (void(ForwardEulerNumericalMethod2_2::*)(double)) &ForwardEulerNumericalMethod2_2::UpdateAllNodePositions, + " " , py::arg("dt") ) + .def( + "OutputNumericalMethodParameters", + (void(ForwardEulerNumericalMethod2_2::*)(::out_stream &)) &ForwardEulerNumericalMethod2_2::OutputNumericalMethodParameters, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod2_2.cppwg.hpp b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod2_2.cppwg.hpp new file mode 100644 index 00000000..05f78547 --- /dev/null +++ b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod2_2.cppwg.hpp @@ -0,0 +1,7 @@ +#ifndef ForwardEulerNumericalMethod2_hpp__cppwg_wrapper +#define ForwardEulerNumericalMethod2_hpp__cppwg_wrapper + +#include + +void register_ForwardEulerNumericalMethod2_2_class(pybind11::module &m); +#endif // ForwardEulerNumericalMethod2_hpp__cppwg_wrapper diff --git a/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod3_3.cppwg.cpp b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod3_3.cppwg.cpp new file mode 100644 index 00000000..f842a4cf --- /dev/null +++ b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod3_3.cppwg.cpp @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ForwardEulerNumericalMethod.hpp" + +#include "ForwardEulerNumericalMethod3_3.cppwg.hpp" + +namespace py = pybind11; +typedef ForwardEulerNumericalMethod<3, 3 > ForwardEulerNumericalMethod3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ForwardEulerNumericalMethod3_Overrides : public ForwardEulerNumericalMethod3_3{ + public: + using ForwardEulerNumericalMethod3_3::ForwardEulerNumericalMethod; + void UpdateAllNodePositions(double dt) override { + PYBIND11_OVERRIDE( + void, + ForwardEulerNumericalMethod3_3, + UpdateAllNodePositions, + dt); + } + void OutputNumericalMethodParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ForwardEulerNumericalMethod3_3, + OutputNumericalMethodParameters, + rParamsFile); + } + +}; +void register_ForwardEulerNumericalMethod3_3_class(py::module &m){ +py::class_ , AbstractNumericalMethod<3> >(m, "ForwardEulerNumericalMethod3_3") + .def(py::init< >()) + .def( + "UpdateAllNodePositions", + (void(ForwardEulerNumericalMethod3_3::*)(double)) &ForwardEulerNumericalMethod3_3::UpdateAllNodePositions, + " " , py::arg("dt") ) + .def( + "OutputNumericalMethodParameters", + (void(ForwardEulerNumericalMethod3_3::*)(::out_stream &)) &ForwardEulerNumericalMethod3_3::OutputNumericalMethodParameters, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod3_3.cppwg.hpp b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod3_3.cppwg.hpp new file mode 100644 index 00000000..20d67b1d --- /dev/null +++ b/dynamic/wrappers/cell_based/ForwardEulerNumericalMethod3_3.cppwg.hpp @@ -0,0 +1,7 @@ +#ifndef ForwardEulerNumericalMethod3_hpp__cppwg_wrapper +#define ForwardEulerNumericalMethod3_hpp__cppwg_wrapper + +#include + +void register_ForwardEulerNumericalMethod3_3_class(pybind11::module &m); +#endif // ForwardEulerNumericalMethod3_hpp__cppwg_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter2_2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter2_2.cppwg.cpp new file mode 100644 index 00000000..1760fd75 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter2_2.cppwg.cpp @@ -0,0 +1,51 @@ +#include +#include +#include "ImmersedBoundaryCellPopulation.hpp" +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryBoundaryCellWriter.hpp" + +#include "ImmersedBoundaryBoundaryCellWriter2_2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryBoundaryCellWriter<2,2 > ImmersedBoundaryBoundaryCellWriter2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryBoundaryCellWriter2_2_Overloads : public ImmersedBoundaryBoundaryCellWriter2_2{ + public: + using ImmersedBoundaryBoundaryCellWriter2_2::ImmersedBoundaryBoundaryCellWriter; + double GetCellDataForVtkOutput(::CellPtr pCell, ::AbstractCellPopulation<2> * pCellPopulation) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryBoundaryCellWriter2_2, + GetCellDataForVtkOutput, + pCell, +pCellPopulation); + } + void VisitCell(::CellPtr pCell, ::AbstractCellPopulation<2> * pCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryBoundaryCellWriter2_2, + VisitCell, + pCell, +pCellPopulation); + } + +}; +void register_ImmersedBoundaryBoundaryCellWriter2_2_class(py::module &m){ +py::class_ , AbstractCellWriter<2, 2> >(m, "ImmersedBoundaryBoundaryCellWriter2_2") + .def(py::init< >()) + .def( + "GetCellDataForVtkOutput", + (double(ImmersedBoundaryBoundaryCellWriter2_2::*)(::CellPtr, ::AbstractCellPopulation<2> *)) &ImmersedBoundaryBoundaryCellWriter2_2::GetCellDataForVtkOutput, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + .def( + "VisitCell", + (void(ImmersedBoundaryBoundaryCellWriter2_2::*)(::CellPtr, ::AbstractCellPopulation<2> *)) &ImmersedBoundaryBoundaryCellWriter2_2::VisitCell, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter2_2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter2_2.cppwg.hpp new file mode 100644 index 00000000..7d47cd85 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryBoundaryCellWriter2_2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryBoundaryCellWriter2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryBoundaryCellWriter2_2_class(py::module &m); +#endif // ImmersedBoundaryBoundaryCellWriter2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter3_3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter3_3.cppwg.cpp new file mode 100644 index 00000000..c9fdd36b --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter3_3.cppwg.cpp @@ -0,0 +1,51 @@ +#include +#include +#include "ImmersedBoundaryCellPopulation.hpp" +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryBoundaryCellWriter.hpp" + +#include "ImmersedBoundaryBoundaryCellWriter3_3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryBoundaryCellWriter<3,3 > ImmersedBoundaryBoundaryCellWriter3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryBoundaryCellWriter3_3_Overloads : public ImmersedBoundaryBoundaryCellWriter3_3{ + public: + using ImmersedBoundaryBoundaryCellWriter3_3::ImmersedBoundaryBoundaryCellWriter; + double GetCellDataForVtkOutput(::CellPtr pCell, ::AbstractCellPopulation<3> * pCellPopulation) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryBoundaryCellWriter3_3, + GetCellDataForVtkOutput, + pCell, +pCellPopulation); + } + void VisitCell(::CellPtr pCell, ::AbstractCellPopulation<3> * pCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryBoundaryCellWriter3_3, + VisitCell, + pCell, +pCellPopulation); + } + +}; +void register_ImmersedBoundaryBoundaryCellWriter3_3_class(py::module &m){ +py::class_ , AbstractCellWriter<3, 3> >(m, "ImmersedBoundaryBoundaryCellWriter3_3") + .def(py::init< >()) + .def( + "GetCellDataForVtkOutput", + (double(ImmersedBoundaryBoundaryCellWriter3_3::*)(::CellPtr, ::AbstractCellPopulation<3> *)) &ImmersedBoundaryBoundaryCellWriter3_3::GetCellDataForVtkOutput, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + .def( + "VisitCell", + (void(ImmersedBoundaryBoundaryCellWriter3_3::*)(::CellPtr, ::AbstractCellPopulation<3> *)) &ImmersedBoundaryBoundaryCellWriter3_3::VisitCell, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter3_3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter3_3.cppwg.hpp new file mode 100644 index 00000000..6d162e87 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryBoundaryCellWriter3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryBoundaryCellWriter3_3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryBoundaryCellWriter3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryBoundaryCellWriter3_3_class(py::module &m); +#endif // ImmersedBoundaryBoundaryCellWriter3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation2.cppwg.cpp new file mode 100644 index 00000000..b675190b --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation2.cppwg.cpp @@ -0,0 +1,443 @@ +#include +#include +#include "AbstractImmersedBoundaryDivisionRule.hpp" +#include "CellAgesWriter.hpp" +#include "CellAncestorWriter.hpp" +#include "CellAppliedForceWriter.hpp" +#include "CellCycleModelProteinConcentrationsWriter.hpp" +#include "CellDataItemWriter.hpp" +#include "CellDeltaNotchWriter.hpp" +#include "CellDivisionLocationsWriter.hpp" +#include "CellIdWriter.hpp" +#include "CellLabelWriter.hpp" +#include "CellLocationIndexWriter.hpp" +#include "CellMutationStatesCountWriter.hpp" +#include "CellMutationStatesWriter.hpp" +#include "CellPopulationAdjacencyMatrixWriter.hpp" +#include "CellPopulationAreaWriter.hpp" +#include "CellPopulationElementWriter.hpp" +#include "CellProliferativePhasesCountWriter.hpp" +#include "CellProliferativePhasesWriter.hpp" +#include "CellProliferativeTypesCountWriter.hpp" +#include "CellProliferativeTypesWriter.hpp" +#include "CellRadiusWriter.hpp" +#include "CellRemovalLocationsWriter.hpp" +#include "CellRosetteRankWriter.hpp" +#include "CellVolumesWriter.hpp" +#include "HeterotypicBoundaryLengthWriter.hpp" +#include "LegacyCellProliferativeTypesWriter.hpp" +#include "NodeLocationWriter.hpp" +#include "NodeVelocityWriter.hpp" +#include "PottsMeshWriter.hpp" +#include "RadialCellDataDistributionWriter.hpp" +#include "VertexIntersectionSwapLocationsWriter.hpp" +#include "VertexT1SwapLocationsWriter.hpp" +#include "VertexT2SwapLocationsWriter.hpp" +#include "VertexT3SwapLocationsWriter.hpp" +#include "VoronoiDataWriter.hpp" +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryCellPopulation.hpp" + +#include "ImmersedBoundaryCellPopulation2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryCellPopulation<2 > ImmersedBoundaryCellPopulation2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef unsigned int unsignedint; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_2_gt_; +typedef ::Node<2> * _Node_lt_2_gt_Ptr; +typedef ::std::set _std_set_lt_unsignedint_gt_; +typedef unsigned int unsignedint; +typedef ::CellPtr _CellPtr; +typedef unsigned int unsignedint; +typedef ::std::set _std_set_lt_unsignedint_gt_; +typedef ::TetrahedralMesh<2, 2> * _TetrahedralMesh_lt_2_2_gt_Ptr; + +class ImmersedBoundaryCellPopulation2_Overloads : public ImmersedBoundaryCellPopulation2{ + public: + using ImmersedBoundaryCellPopulation2::ImmersedBoundaryCellPopulation; + double GetDampingConstant(unsigned int nodeIndex) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation2, + GetDampingConstant, + nodeIndex); + } + unsigned int GetNumNodes() override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryCellPopulation2, + GetNumNodes, + ); + } + ::boost::numeric::ublas::c_vector GetLocationOfCellCentre(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_2_gt_, + ImmersedBoundaryCellPopulation2, + GetLocationOfCellCentre, + pCell); + } + ::Node<2> * GetNode(unsigned int index) override { + PYBIND11_OVERRIDE( + _Node_lt_2_gt_Ptr, + ImmersedBoundaryCellPopulation2, + GetNode, + index); + } + ::std::set GetNeighbouringLocationIndices(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + _std_set_lt_unsignedint_gt_, + ImmersedBoundaryCellPopulation2, + GetNeighbouringLocationIndices, + pCell); + } + unsigned int AddNode(::Node<2> * pNewNode) override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryCellPopulation2, + AddNode, + pNewNode); + } + void UpdateNodeLocations(double dt) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + UpdateNodeLocations, + dt); + } + void SetNode(unsigned int index, ::ChastePoint<2> & rNewLocation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + SetNode, + index, +rNewLocation); + } + ::CellPtr AddCell(::CellPtr pNewCell, ::CellPtr pParentCell) override { + PYBIND11_OVERRIDE( + _CellPtr, + ImmersedBoundaryCellPopulation2, + AddCell, + pNewCell, +pParentCell); + } + unsigned int RemoveDeadCells() override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryCellPopulation2, + RemoveDeadCells, + ); + } + bool IsCellAssociatedWithADeletedLocation(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryCellPopulation2, + IsCellAssociatedWithADeletedLocation, + pCell); + } + void Update(bool hasHadBirthsOrDeaths) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + Update, + hasHadBirthsOrDeaths); + } + void OpenWritersFiles(::OutputFileHandler & rOutputFileHandler) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + OpenWritersFiles, + rOutputFileHandler); + } + void AcceptPopulationWriter(::boost::shared_ptr> pPopulationWriter) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + AcceptPopulationWriter, + pPopulationWriter); + } + void AcceptPopulationEventWriter(::boost::shared_ptr> pPopulationEventWriter) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + AcceptPopulationEventWriter, + pPopulationEventWriter); + } + void AcceptPopulationCountWriter(::boost::shared_ptr> pPopulationCountWriter) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + AcceptPopulationCountWriter, + pPopulationCountWriter); + } + void AcceptCellWriter(::boost::shared_ptr> pCellWriter, ::CellPtr pCell) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + AcceptCellWriter, + pCellWriter, +pCell); + } + double GetVolumeOfCell(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation2, + GetVolumeOfCell, + pCell); + } + void OutputCellPopulationParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + OutputCellPopulationParameters, + rParamsFile); + } + double GetWidth(unsigned int const & rDimension) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation2, + GetWidth, + rDimension); + } + ::std::set GetNeighbouringNodeIndices(unsigned int index) override { + PYBIND11_OVERRIDE( + _std_set_lt_unsignedint_gt_, + ImmersedBoundaryCellPopulation2, + GetNeighbouringNodeIndices, + index); + } + ::TetrahedralMesh<2, 2> * GetTetrahedralMeshForPdeModifier() override { + PYBIND11_OVERRIDE( + _TetrahedralMesh_lt_2_2_gt_Ptr, + ImmersedBoundaryCellPopulation2, + GetTetrahedralMeshForPdeModifier, + ); + } + bool IsPdeNodeAssociatedWithNonApoptoticCell(unsigned int pdeNodeIndex) override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryCellPopulation2, + IsPdeNodeAssociatedWithNonApoptoticCell, + pdeNodeIndex); + } + double GetCellDataItemAtPdeNode(unsigned int pdeNodeIndex, ::std::string & rVariableName, bool dirichletBoundaryConditionApplies, double dirichletBoundaryValue) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation2, + GetCellDataItemAtPdeNode, + pdeNodeIndex, +rVariableName, +dirichletBoundaryConditionApplies, +dirichletBoundaryValue); + } + void CheckForStepSizeException(unsigned int nodeIndex, ::boost::numeric::ublas::c_vector & rDisplacement, double dt) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation2, + CheckForStepSizeException, + nodeIndex, +rDisplacement, +dt); + } + double GetDefaultTimeStep() override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation2, + GetDefaultTimeStep, + ); + } + +}; +void register_ImmersedBoundaryCellPopulation2_class(py::module &m){ +py::class_ , AbstractOffLatticeCellPopulation<2> >(m, "ImmersedBoundaryCellPopulation2") + .def(py::init<::ImmersedBoundaryMesh<2, 2> &, ::std::vector> &, bool, bool, ::std::vector const >(), py::arg("rMesh"), py::arg("rCells"), py::arg("deleteMesh") = false, py::arg("validate") = true, py::arg("locationIndices") = std::vector()) + .def(py::init<::ImmersedBoundaryMesh<2, 2> & >(), py::arg("rMesh")) + .def( + "GetDampingConstant", + (double(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::GetDampingConstant, + " " , py::arg("nodeIndex") ) + .def( + "GetElement", + (::ImmersedBoundaryElement<2, 2> *(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::GetElement, + " " , py::arg("elementIndex") , py::return_value_policy::reference) + .def( + "GetLamina", + (::ImmersedBoundaryElement<1, 2> *(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::GetLamina, + " " , py::arg("laminaIndex") , py::return_value_policy::reference) + .def( + "GetNumElements", + (unsigned int(ImmersedBoundaryCellPopulation2::*)()) &ImmersedBoundaryCellPopulation2::GetNumElements, + " " ) + .def( + "GetNumLaminas", + (unsigned int(ImmersedBoundaryCellPopulation2::*)()) &ImmersedBoundaryCellPopulation2::GetNumLaminas, + " " ) + .def( + "GetNumNodes", + (unsigned int(ImmersedBoundaryCellPopulation2::*)()) &ImmersedBoundaryCellPopulation2::GetNumNodes, + " " ) + .def( + "SetInteractionDistance", + (void(ImmersedBoundaryCellPopulation2::*)(double)) &ImmersedBoundaryCellPopulation2::SetInteractionDistance, + " " , py::arg("newDistance") ) + .def( + "GetInteractionDistance", + (double(ImmersedBoundaryCellPopulation2::*)() const ) &ImmersedBoundaryCellPopulation2::GetInteractionDistance, + " " ) + .def( + "SetReMeshFrequency", + (void(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::SetReMeshFrequency, + " " , py::arg("newFrequency") ) + .def( + "GetReMeshFrequency", + (unsigned int(ImmersedBoundaryCellPopulation2::*)() const ) &ImmersedBoundaryCellPopulation2::GetReMeshFrequency, + " " ) + .def( + "SetThrowsStepSizeException", + (void(ImmersedBoundaryCellPopulation2::*)(bool)) &ImmersedBoundaryCellPopulation2::SetThrowsStepSizeException, + " " , py::arg("throws") ) + .def( + "ThrowsStepSizeException", + (bool(ImmersedBoundaryCellPopulation2::*)() const ) &ImmersedBoundaryCellPopulation2::ThrowsStepSizeException, + " " ) + .def( + "GetIntrinsicSpacing", + (double(ImmersedBoundaryCellPopulation2::*)() const ) &ImmersedBoundaryCellPopulation2::GetIntrinsicSpacing, + " " ) + .def( + "SetCellRearrangementThreshold", + (void(ImmersedBoundaryCellPopulation2::*)(double)) &ImmersedBoundaryCellPopulation2::SetCellRearrangementThreshold, + " " , py::arg("newThreshold") ) + .def( + "GetCellRearrangementThreshold", + (double(ImmersedBoundaryCellPopulation2::*)() const ) &ImmersedBoundaryCellPopulation2::GetCellRearrangementThreshold, + " " ) + .def( + "GetLocationOfCellCentre", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryCellPopulation2::*)(::CellPtr)) &ImmersedBoundaryCellPopulation2::GetLocationOfCellCentre, + " " , py::arg("pCell") ) + .def( + "GetNode", + (::Node<2> *(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::GetNode, + " " , py::arg("index") , py::return_value_policy::reference) + .def( + "GetNeighbouringLocationIndices", + (::std::set(ImmersedBoundaryCellPopulation2::*)(::CellPtr)) &ImmersedBoundaryCellPopulation2::GetNeighbouringLocationIndices, + " " , py::arg("pCell") ) + .def( + "AddNode", + (unsigned int(ImmersedBoundaryCellPopulation2::*)(::Node<2> *)) &ImmersedBoundaryCellPopulation2::AddNode, + " " , py::arg("pNewNode") ) + .def( + "UpdateNodeLocations", + (void(ImmersedBoundaryCellPopulation2::*)(double)) &ImmersedBoundaryCellPopulation2::UpdateNodeLocations, + " " , py::arg("dt") ) + .def( + "SetNode", + (void(ImmersedBoundaryCellPopulation2::*)(unsigned int, ::ChastePoint<2> &)) &ImmersedBoundaryCellPopulation2::SetNode, + " " , py::arg("index"), py::arg("rNewLocation") ) + .def( + "GetElementCorrespondingToCell", + (::ImmersedBoundaryElement<2, 2> *(ImmersedBoundaryCellPopulation2::*)(::CellPtr)) &ImmersedBoundaryCellPopulation2::GetElementCorrespondingToCell, + " " , py::arg("pCell") , py::return_value_policy::reference) + .def( + "AddCell", + (::CellPtr(ImmersedBoundaryCellPopulation2::*)(::CellPtr, ::CellPtr)) &ImmersedBoundaryCellPopulation2::AddCell, + " " , py::arg("pNewCell"), py::arg("pParentCell") = ::CellPtr( ) ) + .def( + "RemoveDeadCells", + (unsigned int(ImmersedBoundaryCellPopulation2::*)()) &ImmersedBoundaryCellPopulation2::RemoveDeadCells, + " " ) + .def( + "IsCellAssociatedWithADeletedLocation", + (bool(ImmersedBoundaryCellPopulation2::*)(::CellPtr)) &ImmersedBoundaryCellPopulation2::IsCellAssociatedWithADeletedLocation, + " " , py::arg("pCell") ) + .def( + "Update", + (void(ImmersedBoundaryCellPopulation2::*)(bool)) &ImmersedBoundaryCellPopulation2::Update, + " " , py::arg("hasHadBirthsOrDeaths") = true ) + .def( + "OpenWritersFiles", + (void(ImmersedBoundaryCellPopulation2::*)(::OutputFileHandler &)) &ImmersedBoundaryCellPopulation2::OpenWritersFiles, + " " , py::arg("rOutputFileHandler") ) + .def( + "AcceptPopulationWriter", + (void(ImmersedBoundaryCellPopulation2::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation2::AcceptPopulationWriter, + " " , py::arg("pPopulationWriter") ) + .def( + "AcceptPopulationEventWriter", + (void(ImmersedBoundaryCellPopulation2::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation2::AcceptPopulationEventWriter, + " " , py::arg("pPopulationEventWriter") ) + .def( + "AcceptPopulationCountWriter", + (void(ImmersedBoundaryCellPopulation2::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation2::AcceptPopulationCountWriter, + " " , py::arg("pPopulationCountWriter") ) + .def( + "AcceptCellWriter", + (void(ImmersedBoundaryCellPopulation2::*)(::boost::shared_ptr>, ::CellPtr)) &ImmersedBoundaryCellPopulation2::AcceptCellWriter, + " " , py::arg("pCellWriter"), py::arg("pCell") ) + .def( + "GetVolumeOfCell", + (double(ImmersedBoundaryCellPopulation2::*)(::CellPtr)) &ImmersedBoundaryCellPopulation2::GetVolumeOfCell, + " " , py::arg("pCell") ) + .def( + "OutputCellPopulationParameters", + (void(ImmersedBoundaryCellPopulation2::*)(::out_stream &)) &ImmersedBoundaryCellPopulation2::OutputCellPopulationParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetWidth", + (double(ImmersedBoundaryCellPopulation2::*)(unsigned int const &)) &ImmersedBoundaryCellPopulation2::GetWidth, + " " , py::arg("rDimension") ) + .def( + "GetNeighbouringNodeIndices", + (::std::set(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::GetNeighbouringNodeIndices, + " " , py::arg("index") ) + .def( + "IsPdeNodeAssociatedWithNonApoptoticCell", + (bool(ImmersedBoundaryCellPopulation2::*)(unsigned int)) &ImmersedBoundaryCellPopulation2::IsPdeNodeAssociatedWithNonApoptoticCell, + " " , py::arg("pdeNodeIndex") ) + .def( + "GetCellDataItemAtPdeNode", + (double(ImmersedBoundaryCellPopulation2::*)(unsigned int, ::std::string &, bool, double)) &ImmersedBoundaryCellPopulation2::GetCellDataItemAtPdeNode, + " " , py::arg("pdeNodeIndex"), py::arg("rVariableName"), py::arg("dirichletBoundaryConditionApplies") = false, py::arg("dirichletBoundaryValue") = 0. ) + .def( + "GetImmersedBoundaryDivisionRule", + (::boost::shared_ptr >(ImmersedBoundaryCellPopulation2::*)()) &ImmersedBoundaryCellPopulation2::GetImmersedBoundaryDivisionRule, + " " ) + .def( + "SetImmersedBoundaryDivisionRule", + (void(ImmersedBoundaryCellPopulation2::*)(::boost::shared_ptr >)) &ImmersedBoundaryCellPopulation2::SetImmersedBoundaryDivisionRule, + " " , py::arg("pImmersedBoundaryDivisionRule") ) + .def( + "DoesPopulationHaveActiveSources", + (bool(ImmersedBoundaryCellPopulation2::*)() const ) &ImmersedBoundaryCellPopulation2::DoesPopulationHaveActiveSources, + " " ) + .def( + "IsCellOnBoundary", + (bool(ImmersedBoundaryCellPopulation2::*)(::CellPtr)) &ImmersedBoundaryCellPopulation2::IsCellOnBoundary, + " " , py::arg("pCell") ) + .def( + "SetIfPopulationHasActiveSources", + (void(ImmersedBoundaryCellPopulation2::*)(bool)) &ImmersedBoundaryCellPopulation2::SetIfPopulationHasActiveSources, + " " , py::arg("hasActiveSources") ) + .def( + "SetOutputNodeRegionToVtk", + (void(ImmersedBoundaryCellPopulation2::*)(bool)) &ImmersedBoundaryCellPopulation2::SetOutputNodeRegionToVtk, + " " , py::arg("outputNodeRegionsToVtk") ) + .def( + "CheckForStepSizeException", + (void(ImmersedBoundaryCellPopulation2::*)(unsigned int, ::boost::numeric::ublas::c_vector &, double)) &ImmersedBoundaryCellPopulation2::CheckForStepSizeException, + " " , py::arg("nodeIndex"), py::arg("rDisplacement"), py::arg("dt") ) + .def( + "GetDefaultTimeStep", + (double(ImmersedBoundaryCellPopulation2::*)()) &ImmersedBoundaryCellPopulation2::GetDefaultTimeStep, + " " ) + .def("AddPopulationWriterVoronoiDataWriter", &ImmersedBoundaryCellPopulation2::AddPopulationWriter) + .def("AddCellWriterCellLabelWriter", &ImmersedBoundaryCellPopulation2::AddCellWriter) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation2.cppwg.hpp new file mode 100644 index 00000000..7b850ef5 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryCellPopulation2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryCellPopulation2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryCellPopulation2_class(py::module &m); +#endif // ImmersedBoundaryCellPopulation2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation3.cppwg.cpp new file mode 100644 index 00000000..7c4bba72 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation3.cppwg.cpp @@ -0,0 +1,443 @@ +#include +#include +#include "AbstractImmersedBoundaryDivisionRule.hpp" +#include "CellAgesWriter.hpp" +#include "CellAncestorWriter.hpp" +#include "CellAppliedForceWriter.hpp" +#include "CellCycleModelProteinConcentrationsWriter.hpp" +#include "CellDataItemWriter.hpp" +#include "CellDeltaNotchWriter.hpp" +#include "CellDivisionLocationsWriter.hpp" +#include "CellIdWriter.hpp" +#include "CellLabelWriter.hpp" +#include "CellLocationIndexWriter.hpp" +#include "CellMutationStatesCountWriter.hpp" +#include "CellMutationStatesWriter.hpp" +#include "CellPopulationAdjacencyMatrixWriter.hpp" +#include "CellPopulationAreaWriter.hpp" +#include "CellPopulationElementWriter.hpp" +#include "CellProliferativePhasesCountWriter.hpp" +#include "CellProliferativePhasesWriter.hpp" +#include "CellProliferativeTypesCountWriter.hpp" +#include "CellProliferativeTypesWriter.hpp" +#include "CellRadiusWriter.hpp" +#include "CellRemovalLocationsWriter.hpp" +#include "CellRosetteRankWriter.hpp" +#include "CellVolumesWriter.hpp" +#include "HeterotypicBoundaryLengthWriter.hpp" +#include "LegacyCellProliferativeTypesWriter.hpp" +#include "NodeLocationWriter.hpp" +#include "NodeVelocityWriter.hpp" +#include "PottsMeshWriter.hpp" +#include "RadialCellDataDistributionWriter.hpp" +#include "VertexIntersectionSwapLocationsWriter.hpp" +#include "VertexT1SwapLocationsWriter.hpp" +#include "VertexT2SwapLocationsWriter.hpp" +#include "VertexT3SwapLocationsWriter.hpp" +#include "VoronoiDataWriter.hpp" +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryCellPopulation.hpp" + +#include "ImmersedBoundaryCellPopulation3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryCellPopulation<3 > ImmersedBoundaryCellPopulation3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef unsigned int unsignedint; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; +typedef ::Node<3> * _Node_lt_3_gt_Ptr; +typedef ::std::set _std_set_lt_unsignedint_gt_; +typedef unsigned int unsignedint; +typedef ::CellPtr _CellPtr; +typedef unsigned int unsignedint; +typedef ::std::set _std_set_lt_unsignedint_gt_; +typedef ::TetrahedralMesh<3, 3> * _TetrahedralMesh_lt_3_3_gt_Ptr; + +class ImmersedBoundaryCellPopulation3_Overloads : public ImmersedBoundaryCellPopulation3{ + public: + using ImmersedBoundaryCellPopulation3::ImmersedBoundaryCellPopulation; + double GetDampingConstant(unsigned int nodeIndex) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation3, + GetDampingConstant, + nodeIndex); + } + unsigned int GetNumNodes() override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryCellPopulation3, + GetNumNodes, + ); + } + ::boost::numeric::ublas::c_vector GetLocationOfCellCentre(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + ImmersedBoundaryCellPopulation3, + GetLocationOfCellCentre, + pCell); + } + ::Node<3> * GetNode(unsigned int index) override { + PYBIND11_OVERRIDE( + _Node_lt_3_gt_Ptr, + ImmersedBoundaryCellPopulation3, + GetNode, + index); + } + ::std::set GetNeighbouringLocationIndices(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + _std_set_lt_unsignedint_gt_, + ImmersedBoundaryCellPopulation3, + GetNeighbouringLocationIndices, + pCell); + } + unsigned int AddNode(::Node<3> * pNewNode) override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryCellPopulation3, + AddNode, + pNewNode); + } + void UpdateNodeLocations(double dt) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + UpdateNodeLocations, + dt); + } + void SetNode(unsigned int index, ::ChastePoint<3> & rNewLocation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + SetNode, + index, +rNewLocation); + } + ::CellPtr AddCell(::CellPtr pNewCell, ::CellPtr pParentCell) override { + PYBIND11_OVERRIDE( + _CellPtr, + ImmersedBoundaryCellPopulation3, + AddCell, + pNewCell, +pParentCell); + } + unsigned int RemoveDeadCells() override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryCellPopulation3, + RemoveDeadCells, + ); + } + bool IsCellAssociatedWithADeletedLocation(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryCellPopulation3, + IsCellAssociatedWithADeletedLocation, + pCell); + } + void Update(bool hasHadBirthsOrDeaths) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + Update, + hasHadBirthsOrDeaths); + } + void OpenWritersFiles(::OutputFileHandler & rOutputFileHandler) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + OpenWritersFiles, + rOutputFileHandler); + } + void AcceptPopulationWriter(::boost::shared_ptr> pPopulationWriter) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + AcceptPopulationWriter, + pPopulationWriter); + } + void AcceptPopulationEventWriter(::boost::shared_ptr> pPopulationEventWriter) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + AcceptPopulationEventWriter, + pPopulationEventWriter); + } + void AcceptPopulationCountWriter(::boost::shared_ptr> pPopulationCountWriter) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + AcceptPopulationCountWriter, + pPopulationCountWriter); + } + void AcceptCellWriter(::boost::shared_ptr> pCellWriter, ::CellPtr pCell) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + AcceptCellWriter, + pCellWriter, +pCell); + } + double GetVolumeOfCell(::CellPtr pCell) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation3, + GetVolumeOfCell, + pCell); + } + void OutputCellPopulationParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + OutputCellPopulationParameters, + rParamsFile); + } + double GetWidth(unsigned int const & rDimension) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation3, + GetWidth, + rDimension); + } + ::std::set GetNeighbouringNodeIndices(unsigned int index) override { + PYBIND11_OVERRIDE( + _std_set_lt_unsignedint_gt_, + ImmersedBoundaryCellPopulation3, + GetNeighbouringNodeIndices, + index); + } + ::TetrahedralMesh<3, 3> * GetTetrahedralMeshForPdeModifier() override { + PYBIND11_OVERRIDE( + _TetrahedralMesh_lt_3_3_gt_Ptr, + ImmersedBoundaryCellPopulation3, + GetTetrahedralMeshForPdeModifier, + ); + } + bool IsPdeNodeAssociatedWithNonApoptoticCell(unsigned int pdeNodeIndex) override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryCellPopulation3, + IsPdeNodeAssociatedWithNonApoptoticCell, + pdeNodeIndex); + } + double GetCellDataItemAtPdeNode(unsigned int pdeNodeIndex, ::std::string & rVariableName, bool dirichletBoundaryConditionApplies, double dirichletBoundaryValue) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation3, + GetCellDataItemAtPdeNode, + pdeNodeIndex, +rVariableName, +dirichletBoundaryConditionApplies, +dirichletBoundaryValue); + } + void CheckForStepSizeException(unsigned int nodeIndex, ::boost::numeric::ublas::c_vector & rDisplacement, double dt) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryCellPopulation3, + CheckForStepSizeException, + nodeIndex, +rDisplacement, +dt); + } + double GetDefaultTimeStep() override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryCellPopulation3, + GetDefaultTimeStep, + ); + } + +}; +void register_ImmersedBoundaryCellPopulation3_class(py::module &m){ +py::class_ , AbstractOffLatticeCellPopulation<3> >(m, "ImmersedBoundaryCellPopulation3") + .def(py::init<::ImmersedBoundaryMesh<3, 3> &, ::std::vector> &, bool, bool, ::std::vector const >(), py::arg("rMesh"), py::arg("rCells"), py::arg("deleteMesh") = false, py::arg("validate") = true, py::arg("locationIndices") = std::vector()) + .def(py::init<::ImmersedBoundaryMesh<3, 3> & >(), py::arg("rMesh")) + .def( + "GetDampingConstant", + (double(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::GetDampingConstant, + " " , py::arg("nodeIndex") ) + .def( + "GetElement", + (::ImmersedBoundaryElement<3, 3> *(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::GetElement, + " " , py::arg("elementIndex") , py::return_value_policy::reference) + .def( + "GetLamina", + (::ImmersedBoundaryElement<2, 3> *(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::GetLamina, + " " , py::arg("laminaIndex") , py::return_value_policy::reference) + .def( + "GetNumElements", + (unsigned int(ImmersedBoundaryCellPopulation3::*)()) &ImmersedBoundaryCellPopulation3::GetNumElements, + " " ) + .def( + "GetNumLaminas", + (unsigned int(ImmersedBoundaryCellPopulation3::*)()) &ImmersedBoundaryCellPopulation3::GetNumLaminas, + " " ) + .def( + "GetNumNodes", + (unsigned int(ImmersedBoundaryCellPopulation3::*)()) &ImmersedBoundaryCellPopulation3::GetNumNodes, + " " ) + .def( + "SetInteractionDistance", + (void(ImmersedBoundaryCellPopulation3::*)(double)) &ImmersedBoundaryCellPopulation3::SetInteractionDistance, + " " , py::arg("newDistance") ) + .def( + "GetInteractionDistance", + (double(ImmersedBoundaryCellPopulation3::*)() const ) &ImmersedBoundaryCellPopulation3::GetInteractionDistance, + " " ) + .def( + "SetReMeshFrequency", + (void(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::SetReMeshFrequency, + " " , py::arg("newFrequency") ) + .def( + "GetReMeshFrequency", + (unsigned int(ImmersedBoundaryCellPopulation3::*)() const ) &ImmersedBoundaryCellPopulation3::GetReMeshFrequency, + " " ) + .def( + "SetThrowsStepSizeException", + (void(ImmersedBoundaryCellPopulation3::*)(bool)) &ImmersedBoundaryCellPopulation3::SetThrowsStepSizeException, + " " , py::arg("throws") ) + .def( + "ThrowsStepSizeException", + (bool(ImmersedBoundaryCellPopulation3::*)() const ) &ImmersedBoundaryCellPopulation3::ThrowsStepSizeException, + " " ) + .def( + "GetIntrinsicSpacing", + (double(ImmersedBoundaryCellPopulation3::*)() const ) &ImmersedBoundaryCellPopulation3::GetIntrinsicSpacing, + " " ) + .def( + "SetCellRearrangementThreshold", + (void(ImmersedBoundaryCellPopulation3::*)(double)) &ImmersedBoundaryCellPopulation3::SetCellRearrangementThreshold, + " " , py::arg("newThreshold") ) + .def( + "GetCellRearrangementThreshold", + (double(ImmersedBoundaryCellPopulation3::*)() const ) &ImmersedBoundaryCellPopulation3::GetCellRearrangementThreshold, + " " ) + .def( + "GetLocationOfCellCentre", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryCellPopulation3::*)(::CellPtr)) &ImmersedBoundaryCellPopulation3::GetLocationOfCellCentre, + " " , py::arg("pCell") ) + .def( + "GetNode", + (::Node<3> *(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::GetNode, + " " , py::arg("index") , py::return_value_policy::reference) + .def( + "GetNeighbouringLocationIndices", + (::std::set(ImmersedBoundaryCellPopulation3::*)(::CellPtr)) &ImmersedBoundaryCellPopulation3::GetNeighbouringLocationIndices, + " " , py::arg("pCell") ) + .def( + "AddNode", + (unsigned int(ImmersedBoundaryCellPopulation3::*)(::Node<3> *)) &ImmersedBoundaryCellPopulation3::AddNode, + " " , py::arg("pNewNode") ) + .def( + "UpdateNodeLocations", + (void(ImmersedBoundaryCellPopulation3::*)(double)) &ImmersedBoundaryCellPopulation3::UpdateNodeLocations, + " " , py::arg("dt") ) + .def( + "SetNode", + (void(ImmersedBoundaryCellPopulation3::*)(unsigned int, ::ChastePoint<3> &)) &ImmersedBoundaryCellPopulation3::SetNode, + " " , py::arg("index"), py::arg("rNewLocation") ) + .def( + "GetElementCorrespondingToCell", + (::ImmersedBoundaryElement<3, 3> *(ImmersedBoundaryCellPopulation3::*)(::CellPtr)) &ImmersedBoundaryCellPopulation3::GetElementCorrespondingToCell, + " " , py::arg("pCell") , py::return_value_policy::reference) + .def( + "AddCell", + (::CellPtr(ImmersedBoundaryCellPopulation3::*)(::CellPtr, ::CellPtr)) &ImmersedBoundaryCellPopulation3::AddCell, + " " , py::arg("pNewCell"), py::arg("pParentCell") = ::CellPtr( ) ) + .def( + "RemoveDeadCells", + (unsigned int(ImmersedBoundaryCellPopulation3::*)()) &ImmersedBoundaryCellPopulation3::RemoveDeadCells, + " " ) + .def( + "IsCellAssociatedWithADeletedLocation", + (bool(ImmersedBoundaryCellPopulation3::*)(::CellPtr)) &ImmersedBoundaryCellPopulation3::IsCellAssociatedWithADeletedLocation, + " " , py::arg("pCell") ) + .def( + "Update", + (void(ImmersedBoundaryCellPopulation3::*)(bool)) &ImmersedBoundaryCellPopulation3::Update, + " " , py::arg("hasHadBirthsOrDeaths") = true ) + .def( + "OpenWritersFiles", + (void(ImmersedBoundaryCellPopulation3::*)(::OutputFileHandler &)) &ImmersedBoundaryCellPopulation3::OpenWritersFiles, + " " , py::arg("rOutputFileHandler") ) + .def( + "AcceptPopulationWriter", + (void(ImmersedBoundaryCellPopulation3::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation3::AcceptPopulationWriter, + " " , py::arg("pPopulationWriter") ) + .def( + "AcceptPopulationEventWriter", + (void(ImmersedBoundaryCellPopulation3::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation3::AcceptPopulationEventWriter, + " " , py::arg("pPopulationEventWriter") ) + .def( + "AcceptPopulationCountWriter", + (void(ImmersedBoundaryCellPopulation3::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation3::AcceptPopulationCountWriter, + " " , py::arg("pPopulationCountWriter") ) + .def( + "AcceptCellWriter", + (void(ImmersedBoundaryCellPopulation3::*)(::boost::shared_ptr>, ::CellPtr)) &ImmersedBoundaryCellPopulation3::AcceptCellWriter, + " " , py::arg("pCellWriter"), py::arg("pCell") ) + .def( + "GetVolumeOfCell", + (double(ImmersedBoundaryCellPopulation3::*)(::CellPtr)) &ImmersedBoundaryCellPopulation3::GetVolumeOfCell, + " " , py::arg("pCell") ) + .def( + "OutputCellPopulationParameters", + (void(ImmersedBoundaryCellPopulation3::*)(::out_stream &)) &ImmersedBoundaryCellPopulation3::OutputCellPopulationParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetWidth", + (double(ImmersedBoundaryCellPopulation3::*)(unsigned int const &)) &ImmersedBoundaryCellPopulation3::GetWidth, + " " , py::arg("rDimension") ) + .def( + "GetNeighbouringNodeIndices", + (::std::set(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::GetNeighbouringNodeIndices, + " " , py::arg("index") ) + .def( + "IsPdeNodeAssociatedWithNonApoptoticCell", + (bool(ImmersedBoundaryCellPopulation3::*)(unsigned int)) &ImmersedBoundaryCellPopulation3::IsPdeNodeAssociatedWithNonApoptoticCell, + " " , py::arg("pdeNodeIndex") ) + .def( + "GetCellDataItemAtPdeNode", + (double(ImmersedBoundaryCellPopulation3::*)(unsigned int, ::std::string &, bool, double)) &ImmersedBoundaryCellPopulation3::GetCellDataItemAtPdeNode, + " " , py::arg("pdeNodeIndex"), py::arg("rVariableName"), py::arg("dirichletBoundaryConditionApplies") = false, py::arg("dirichletBoundaryValue") = 0. ) + .def( + "GetImmersedBoundaryDivisionRule", + (::boost::shared_ptr>(ImmersedBoundaryCellPopulation3::*)()) &ImmersedBoundaryCellPopulation3::GetImmersedBoundaryDivisionRule, + " " ) + .def( + "SetImmersedBoundaryDivisionRule", + (void(ImmersedBoundaryCellPopulation3::*)(::boost::shared_ptr>)) &ImmersedBoundaryCellPopulation3::SetImmersedBoundaryDivisionRule, + " " , py::arg("pImmersedBoundaryDivisionRule") ) + .def( + "DoesPopulationHaveActiveSources", + (bool(ImmersedBoundaryCellPopulation3::*)() const ) &ImmersedBoundaryCellPopulation3::DoesPopulationHaveActiveSources, + " " ) + .def( + "IsCellOnBoundary", + (bool(ImmersedBoundaryCellPopulation3::*)(::CellPtr)) &ImmersedBoundaryCellPopulation3::IsCellOnBoundary, + " " , py::arg("pCell") ) + .def( + "SetIfPopulationHasActiveSources", + (void(ImmersedBoundaryCellPopulation3::*)(bool)) &ImmersedBoundaryCellPopulation3::SetIfPopulationHasActiveSources, + " " , py::arg("hasActiveSources") ) + .def( + "SetOutputNodeRegionToVtk", + (void(ImmersedBoundaryCellPopulation3::*)(bool)) &ImmersedBoundaryCellPopulation3::SetOutputNodeRegionToVtk, + " " , py::arg("outputNodeRegionsToVtk") ) + .def( + "CheckForStepSizeException", + (void(ImmersedBoundaryCellPopulation3::*)(unsigned int, ::boost::numeric::ublas::c_vector &, double)) &ImmersedBoundaryCellPopulation3::CheckForStepSizeException, + " " , py::arg("nodeIndex"), py::arg("rDisplacement"), py::arg("dt") ) + .def( + "GetDefaultTimeStep", + (double(ImmersedBoundaryCellPopulation3::*)()) &ImmersedBoundaryCellPopulation3::GetDefaultTimeStep, + " " ) + .def("AddPopulationWriterVoronoiDataWriter", &ImmersedBoundaryCellPopulation3::AddPopulationWriter) + .def("AddCellWriterCellLabelWriter", &ImmersedBoundaryCellPopulation3::AddCellWriter) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation3.cppwg.hpp new file mode 100644 index 00000000..b6d94022 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryCellPopulation3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryCellPopulation3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryCellPopulation3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryCellPopulation3_class(py::module &m); +#endif // ImmersedBoundaryCellPopulation3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce2.cppwg.cpp new file mode 100644 index 00000000..fd164760 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce2.cppwg.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryKinematicFeedbackForce.hpp" + +#include "ImmersedBoundaryKinematicFeedbackForce2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryKinematicFeedbackForce<2 > ImmersedBoundaryKinematicFeedbackForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryKinematicFeedbackForce2_Overloads : public ImmersedBoundaryKinematicFeedbackForce2{ + public: + using ImmersedBoundaryKinematicFeedbackForce2::ImmersedBoundaryKinematicFeedbackForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryKinematicFeedbackForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryKinematicFeedbackForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryKinematicFeedbackForce2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<2> >(m, "ImmersedBoundaryKinematicFeedbackForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryKinematicFeedbackForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &ImmersedBoundaryKinematicFeedbackForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryKinematicFeedbackForce2::*)(::out_stream &)) &ImmersedBoundaryKinematicFeedbackForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetSpringConst", + (double(ImmersedBoundaryKinematicFeedbackForce2::*)() const ) &ImmersedBoundaryKinematicFeedbackForce2::GetSpringConst, + " " ) + .def( + "SetSpringConst", + (void(ImmersedBoundaryKinematicFeedbackForce2::*)(double)) &ImmersedBoundaryKinematicFeedbackForce2::SetSpringConst, + " " , py::arg("springConst") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce2.cppwg.hpp new file mode 100644 index 00000000..aed2c12b --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryKinematicFeedbackForce2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryKinematicFeedbackForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryKinematicFeedbackForce2_class(py::module &m); +#endif // ImmersedBoundaryKinematicFeedbackForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce3.cppwg.cpp new file mode 100644 index 00000000..e71be5e2 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce3.cppwg.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryKinematicFeedbackForce.hpp" + +#include "ImmersedBoundaryKinematicFeedbackForce3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryKinematicFeedbackForce<3 > ImmersedBoundaryKinematicFeedbackForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryKinematicFeedbackForce3_Overloads : public ImmersedBoundaryKinematicFeedbackForce3{ + public: + using ImmersedBoundaryKinematicFeedbackForce3::ImmersedBoundaryKinematicFeedbackForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryKinematicFeedbackForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryKinematicFeedbackForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryKinematicFeedbackForce3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<3> >(m, "ImmersedBoundaryKinematicFeedbackForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryKinematicFeedbackForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &ImmersedBoundaryKinematicFeedbackForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryKinematicFeedbackForce3::*)(::out_stream &)) &ImmersedBoundaryKinematicFeedbackForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetSpringConst", + (double(ImmersedBoundaryKinematicFeedbackForce3::*)() const ) &ImmersedBoundaryKinematicFeedbackForce3::GetSpringConst, + " " ) + .def( + "SetSpringConst", + (void(ImmersedBoundaryKinematicFeedbackForce3::*)(double)) &ImmersedBoundaryKinematicFeedbackForce3::SetSpringConst, + " " , py::arg("springConst") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce3.cppwg.hpp new file mode 100644 index 00000000..b67c7797 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryKinematicFeedbackForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryKinematicFeedbackForce3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryKinematicFeedbackForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryKinematicFeedbackForce3_class(py::module &m); +#endif // ImmersedBoundaryKinematicFeedbackForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.cpp new file mode 100644 index 00000000..7b56dadd --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryLinearDifferentialAdhesionForce.hpp" + +#include "ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryLinearDifferentialAdhesionForce<2 > ImmersedBoundaryLinearDifferentialAdhesionForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryLinearDifferentialAdhesionForce2_Overloads : public ImmersedBoundaryLinearDifferentialAdhesionForce2{ + public: + using ImmersedBoundaryLinearDifferentialAdhesionForce2::ImmersedBoundaryLinearDifferentialAdhesionForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearDifferentialAdhesionForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearDifferentialAdhesionForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryLinearDifferentialAdhesionForce2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<2> >(m, "ImmersedBoundaryLinearDifferentialAdhesionForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &ImmersedBoundaryLinearDifferentialAdhesionForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)(::out_stream &)) &ImmersedBoundaryLinearDifferentialAdhesionForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetLabelledCellToLabelledCellSpringConst", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce2::GetLabelledCellToLabelledCellSpringConst, + " " ) + .def( + "SetLabelledCellToLabelledCellSpringConst", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce2::SetLabelledCellToLabelledCellSpringConst, + " " , py::arg("labelledCellToLabelledCellSpringConst") ) + .def( + "GetLabelledCellToCellSpringConst", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce2::GetLabelledCellToCellSpringConst, + " " ) + .def( + "SetLabelledCellToCellSpringConst", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce2::SetLabelledCellToCellSpringConst, + " " , py::arg("labelledCellToCellSpringConst") ) + .def( + "GetCellToCellSpringConst", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce2::GetCellToCellSpringConst, + " " ) + .def( + "SetCellToCellSpringConst", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce2::SetCellToCellSpringConst, + " " , py::arg("cellToCellSpringConst") ) + .def( + "GetRestLength", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce2::GetRestLength, + " " ) + .def( + "SetRestLength", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce2::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce2::SetRestLength, + " " , py::arg("restLength") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.hpp new file mode 100644 index 00000000..77ac16e4 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryLinearDifferentialAdhesionForce2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryLinearDifferentialAdhesionForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryLinearDifferentialAdhesionForce2_class(py::module &m); +#endif // ImmersedBoundaryLinearDifferentialAdhesionForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.cpp new file mode 100644 index 00000000..63c81738 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryLinearDifferentialAdhesionForce.hpp" + +#include "ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryLinearDifferentialAdhesionForce<3 > ImmersedBoundaryLinearDifferentialAdhesionForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryLinearDifferentialAdhesionForce3_Overloads : public ImmersedBoundaryLinearDifferentialAdhesionForce3{ + public: + using ImmersedBoundaryLinearDifferentialAdhesionForce3::ImmersedBoundaryLinearDifferentialAdhesionForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearDifferentialAdhesionForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearDifferentialAdhesionForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryLinearDifferentialAdhesionForce3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<3> >(m, "ImmersedBoundaryLinearDifferentialAdhesionForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &ImmersedBoundaryLinearDifferentialAdhesionForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)(::out_stream &)) &ImmersedBoundaryLinearDifferentialAdhesionForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetLabelledCellToLabelledCellSpringConst", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce3::GetLabelledCellToLabelledCellSpringConst, + " " ) + .def( + "SetLabelledCellToLabelledCellSpringConst", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce3::SetLabelledCellToLabelledCellSpringConst, + " " , py::arg("labelledCellToLabelledCellSpringConst") ) + .def( + "GetLabelledCellToCellSpringConst", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce3::GetLabelledCellToCellSpringConst, + " " ) + .def( + "SetLabelledCellToCellSpringConst", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce3::SetLabelledCellToCellSpringConst, + " " , py::arg("labelledCellToCellSpringConst") ) + .def( + "GetCellToCellSpringConst", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce3::GetCellToCellSpringConst, + " " ) + .def( + "SetCellToCellSpringConst", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce3::SetCellToCellSpringConst, + " " , py::arg("cellToCellSpringConst") ) + .def( + "GetRestLength", + (double(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)() const ) &ImmersedBoundaryLinearDifferentialAdhesionForce3::GetRestLength, + " " ) + .def( + "SetRestLength", + (void(ImmersedBoundaryLinearDifferentialAdhesionForce3::*)(double)) &ImmersedBoundaryLinearDifferentialAdhesionForce3::SetRestLength, + " " , py::arg("restLength") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.hpp new file mode 100644 index 00000000..2eed97d1 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryLinearDifferentialAdhesionForce3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryLinearDifferentialAdhesionForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryLinearDifferentialAdhesionForce3_class(py::module &m); +#endif // ImmersedBoundaryLinearDifferentialAdhesionForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce2.cppwg.cpp new file mode 100644 index 00000000..205f19b0 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce2.cppwg.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryLinearInteractionForce.hpp" + +#include "ImmersedBoundaryLinearInteractionForce2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryLinearInteractionForce<2 > ImmersedBoundaryLinearInteractionForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryLinearInteractionForce2_Overloads : public ImmersedBoundaryLinearInteractionForce2{ + public: + using ImmersedBoundaryLinearInteractionForce2::ImmersedBoundaryLinearInteractionForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearInteractionForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearInteractionForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryLinearInteractionForce2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<2> >(m, "ImmersedBoundaryLinearInteractionForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryLinearInteractionForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &ImmersedBoundaryLinearInteractionForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryLinearInteractionForce2::*)(::out_stream &)) &ImmersedBoundaryLinearInteractionForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetSpringConst", + (double(ImmersedBoundaryLinearInteractionForce2::*)() const ) &ImmersedBoundaryLinearInteractionForce2::GetSpringConst, + " " ) + .def( + "SetSpringConst", + (void(ImmersedBoundaryLinearInteractionForce2::*)(double)) &ImmersedBoundaryLinearInteractionForce2::SetSpringConst, + " " , py::arg("springConst") ) + .def( + "GetRestLength", + (double(ImmersedBoundaryLinearInteractionForce2::*)() const ) &ImmersedBoundaryLinearInteractionForce2::GetRestLength, + " " ) + .def( + "SetRestLength", + (void(ImmersedBoundaryLinearInteractionForce2::*)(double)) &ImmersedBoundaryLinearInteractionForce2::SetRestLength, + " " , py::arg("restLength") ) + .def( + "GetLaminaSpringConstMult", + (double(ImmersedBoundaryLinearInteractionForce2::*)() const ) &ImmersedBoundaryLinearInteractionForce2::GetLaminaSpringConstMult, + " " ) + .def( + "SetLaminaSpringConstMult", + (void(ImmersedBoundaryLinearInteractionForce2::*)(double)) &ImmersedBoundaryLinearInteractionForce2::SetLaminaSpringConstMult, + " " , py::arg("laminaSpringConstMult") ) + .def( + "GetLaminaRestLengthMult", + (double(ImmersedBoundaryLinearInteractionForce2::*)() const ) &ImmersedBoundaryLinearInteractionForce2::GetLaminaRestLengthMult, + " " ) + .def( + "SetLaminaRestLengthMult", + (void(ImmersedBoundaryLinearInteractionForce2::*)(double)) &ImmersedBoundaryLinearInteractionForce2::SetLaminaRestLengthMult, + " " , py::arg("laminaRestLengthMult") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce2.cppwg.hpp new file mode 100644 index 00000000..1b282923 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryLinearInteractionForce2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryLinearInteractionForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryLinearInteractionForce2_class(py::module &m); +#endif // ImmersedBoundaryLinearInteractionForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce3.cppwg.cpp new file mode 100644 index 00000000..81c89b7b --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce3.cppwg.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryLinearInteractionForce.hpp" + +#include "ImmersedBoundaryLinearInteractionForce3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryLinearInteractionForce<3 > ImmersedBoundaryLinearInteractionForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryLinearInteractionForce3_Overloads : public ImmersedBoundaryLinearInteractionForce3{ + public: + using ImmersedBoundaryLinearInteractionForce3::ImmersedBoundaryLinearInteractionForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearInteractionForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearInteractionForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryLinearInteractionForce3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<3> >(m, "ImmersedBoundaryLinearInteractionForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryLinearInteractionForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &ImmersedBoundaryLinearInteractionForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryLinearInteractionForce3::*)(::out_stream &)) &ImmersedBoundaryLinearInteractionForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetSpringConst", + (double(ImmersedBoundaryLinearInteractionForce3::*)() const ) &ImmersedBoundaryLinearInteractionForce3::GetSpringConst, + " " ) + .def( + "SetSpringConst", + (void(ImmersedBoundaryLinearInteractionForce3::*)(double)) &ImmersedBoundaryLinearInteractionForce3::SetSpringConst, + " " , py::arg("springConst") ) + .def( + "GetRestLength", + (double(ImmersedBoundaryLinearInteractionForce3::*)() const ) &ImmersedBoundaryLinearInteractionForce3::GetRestLength, + " " ) + .def( + "SetRestLength", + (void(ImmersedBoundaryLinearInteractionForce3::*)(double)) &ImmersedBoundaryLinearInteractionForce3::SetRestLength, + " " , py::arg("restLength") ) + .def( + "GetLaminaSpringConstMult", + (double(ImmersedBoundaryLinearInteractionForce3::*)() const ) &ImmersedBoundaryLinearInteractionForce3::GetLaminaSpringConstMult, + " " ) + .def( + "SetLaminaSpringConstMult", + (void(ImmersedBoundaryLinearInteractionForce3::*)(double)) &ImmersedBoundaryLinearInteractionForce3::SetLaminaSpringConstMult, + " " , py::arg("laminaSpringConstMult") ) + .def( + "GetLaminaRestLengthMult", + (double(ImmersedBoundaryLinearInteractionForce3::*)() const ) &ImmersedBoundaryLinearInteractionForce3::GetLaminaRestLengthMult, + " " ) + .def( + "SetLaminaRestLengthMult", + (void(ImmersedBoundaryLinearInteractionForce3::*)(double)) &ImmersedBoundaryLinearInteractionForce3::SetLaminaRestLengthMult, + " " , py::arg("laminaRestLengthMult") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce3.cppwg.hpp new file mode 100644 index 00000000..6ee4fbaf --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearInteractionForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryLinearInteractionForce3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryLinearInteractionForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryLinearInteractionForce3_class(py::module &m); +#endif // ImmersedBoundaryLinearInteractionForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce2.cppwg.cpp new file mode 100644 index 00000000..dcea093f --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce2.cppwg.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryLinearMembraneForce.hpp" + +#include "ImmersedBoundaryLinearMembraneForce2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryLinearMembraneForce<2 > ImmersedBoundaryLinearMembraneForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryLinearMembraneForce2_Overloads : public ImmersedBoundaryLinearMembraneForce2{ + public: + using ImmersedBoundaryLinearMembraneForce2::ImmersedBoundaryLinearMembraneForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearMembraneForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearMembraneForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryLinearMembraneForce2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<2> >(m, "ImmersedBoundaryLinearMembraneForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryLinearMembraneForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &ImmersedBoundaryLinearMembraneForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryLinearMembraneForce2::*)(::out_stream &)) &ImmersedBoundaryLinearMembraneForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetElementSpringConst", + (double(ImmersedBoundaryLinearMembraneForce2::*)() const ) &ImmersedBoundaryLinearMembraneForce2::GetElementSpringConst, + " " ) + .def( + "SetElementSpringConst", + (void(ImmersedBoundaryLinearMembraneForce2::*)(double)) &ImmersedBoundaryLinearMembraneForce2::SetElementSpringConst, + " " , py::arg("elementSpringConst") ) + .def( + "GetElementRestLength", + (double(ImmersedBoundaryLinearMembraneForce2::*)() const ) &ImmersedBoundaryLinearMembraneForce2::GetElementRestLength, + " " ) + .def( + "SetElementRestLength", + (void(ImmersedBoundaryLinearMembraneForce2::*)(double)) &ImmersedBoundaryLinearMembraneForce2::SetElementRestLength, + " " , py::arg("elementRestLength") ) + .def( + "GetLaminaSpringConst", + (double(ImmersedBoundaryLinearMembraneForce2::*)() const ) &ImmersedBoundaryLinearMembraneForce2::GetLaminaSpringConst, + " " ) + .def( + "SetLaminaSpringConst", + (void(ImmersedBoundaryLinearMembraneForce2::*)(double)) &ImmersedBoundaryLinearMembraneForce2::SetLaminaSpringConst, + " " , py::arg("laminaSpringConst") ) + .def( + "GetLaminaRestLength", + (double(ImmersedBoundaryLinearMembraneForce2::*)() const ) &ImmersedBoundaryLinearMembraneForce2::GetLaminaRestLength, + " " ) + .def( + "SetLaminaRestLength", + (void(ImmersedBoundaryLinearMembraneForce2::*)(double)) &ImmersedBoundaryLinearMembraneForce2::SetLaminaRestLength, + " " , py::arg("laminaRestLength") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce2.cppwg.hpp new file mode 100644 index 00000000..4018d1e7 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryLinearMembraneForce2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryLinearMembraneForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryLinearMembraneForce2_class(py::module &m); +#endif // ImmersedBoundaryLinearMembraneForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce3.cppwg.cpp new file mode 100644 index 00000000..e7ebf474 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce3.cppwg.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryLinearMembraneForce.hpp" + +#include "ImmersedBoundaryLinearMembraneForce3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryLinearMembraneForce<3 > ImmersedBoundaryLinearMembraneForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryLinearMembraneForce3_Overloads : public ImmersedBoundaryLinearMembraneForce3{ + public: + using ImmersedBoundaryLinearMembraneForce3::ImmersedBoundaryLinearMembraneForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearMembraneForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryLinearMembraneForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryLinearMembraneForce3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<3> >(m, "ImmersedBoundaryLinearMembraneForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryLinearMembraneForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &ImmersedBoundaryLinearMembraneForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryLinearMembraneForce3::*)(::out_stream &)) &ImmersedBoundaryLinearMembraneForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetElementSpringConst", + (double(ImmersedBoundaryLinearMembraneForce3::*)() const ) &ImmersedBoundaryLinearMembraneForce3::GetElementSpringConst, + " " ) + .def( + "SetElementSpringConst", + (void(ImmersedBoundaryLinearMembraneForce3::*)(double)) &ImmersedBoundaryLinearMembraneForce3::SetElementSpringConst, + " " , py::arg("elementSpringConst") ) + .def( + "GetElementRestLength", + (double(ImmersedBoundaryLinearMembraneForce3::*)() const ) &ImmersedBoundaryLinearMembraneForce3::GetElementRestLength, + " " ) + .def( + "SetElementRestLength", + (void(ImmersedBoundaryLinearMembraneForce3::*)(double)) &ImmersedBoundaryLinearMembraneForce3::SetElementRestLength, + " " , py::arg("elementRestLength") ) + .def( + "GetLaminaSpringConst", + (double(ImmersedBoundaryLinearMembraneForce3::*)() const ) &ImmersedBoundaryLinearMembraneForce3::GetLaminaSpringConst, + " " ) + .def( + "SetLaminaSpringConst", + (void(ImmersedBoundaryLinearMembraneForce3::*)(double)) &ImmersedBoundaryLinearMembraneForce3::SetLaminaSpringConst, + " " , py::arg("laminaSpringConst") ) + .def( + "GetLaminaRestLength", + (double(ImmersedBoundaryLinearMembraneForce3::*)() const ) &ImmersedBoundaryLinearMembraneForce3::GetLaminaRestLength, + " " ) + .def( + "SetLaminaRestLength", + (void(ImmersedBoundaryLinearMembraneForce3::*)(double)) &ImmersedBoundaryLinearMembraneForce3::SetLaminaRestLength, + " " , py::arg("laminaRestLength") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce3.cppwg.hpp new file mode 100644 index 00000000..688dfaec --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryLinearMembraneForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryLinearMembraneForce3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryLinearMembraneForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryLinearMembraneForce3_class(py::module &m); +#endif // ImmersedBoundaryLinearMembraneForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce2.cppwg.cpp new file mode 100644 index 00000000..1ccb1952 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce2.cppwg.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryMorseInteractionForce.hpp" + +#include "ImmersedBoundaryMorseInteractionForce2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryMorseInteractionForce<2 > ImmersedBoundaryMorseInteractionForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryMorseInteractionForce2_Overloads : public ImmersedBoundaryMorseInteractionForce2{ + public: + using ImmersedBoundaryMorseInteractionForce2::ImmersedBoundaryMorseInteractionForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseInteractionForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseInteractionForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryMorseInteractionForce2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<2> >(m, "ImmersedBoundaryMorseInteractionForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryMorseInteractionForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &ImmersedBoundaryMorseInteractionForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryMorseInteractionForce2::*)(::out_stream &)) &ImmersedBoundaryMorseInteractionForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetWellDepth", + (double(ImmersedBoundaryMorseInteractionForce2::*)() const ) &ImmersedBoundaryMorseInteractionForce2::GetWellDepth, + " " ) + .def( + "SetWellDepth", + (void(ImmersedBoundaryMorseInteractionForce2::*)(double)) &ImmersedBoundaryMorseInteractionForce2::SetWellDepth, + " " , py::arg("wellDepth") ) + .def( + "GetRestLength", + (double(ImmersedBoundaryMorseInteractionForce2::*)() const ) &ImmersedBoundaryMorseInteractionForce2::GetRestLength, + " " ) + .def( + "SetRestLength", + (void(ImmersedBoundaryMorseInteractionForce2::*)(double)) &ImmersedBoundaryMorseInteractionForce2::SetRestLength, + " " , py::arg("restLength") ) + .def( + "GetLaminaWellDepthMult", + (double(ImmersedBoundaryMorseInteractionForce2::*)() const ) &ImmersedBoundaryMorseInteractionForce2::GetLaminaWellDepthMult, + " " ) + .def( + "SetLaminaWellDepthMult", + (void(ImmersedBoundaryMorseInteractionForce2::*)(double)) &ImmersedBoundaryMorseInteractionForce2::SetLaminaWellDepthMult, + " " , py::arg("laminaWellDepthMult") ) + .def( + "GetLaminaRestLengthMult", + (double(ImmersedBoundaryMorseInteractionForce2::*)() const ) &ImmersedBoundaryMorseInteractionForce2::GetLaminaRestLengthMult, + " " ) + .def( + "SetLaminaRestLengthMult", + (void(ImmersedBoundaryMorseInteractionForce2::*)(double)) &ImmersedBoundaryMorseInteractionForce2::SetLaminaRestLengthMult, + " " , py::arg("laminaRestLengthMult") ) + .def( + "GetWellWidth", + (double(ImmersedBoundaryMorseInteractionForce2::*)() const ) &ImmersedBoundaryMorseInteractionForce2::GetWellWidth, + " " ) + .def( + "SetWellWidth", + (void(ImmersedBoundaryMorseInteractionForce2::*)(double)) &ImmersedBoundaryMorseInteractionForce2::SetWellWidth, + " " , py::arg("wellWidth") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce2.cppwg.hpp new file mode 100644 index 00000000..72453f4c --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryMorseInteractionForce2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryMorseInteractionForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryMorseInteractionForce2_class(py::module &m); +#endif // ImmersedBoundaryMorseInteractionForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce3.cppwg.cpp new file mode 100644 index 00000000..60a0aabc --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce3.cppwg.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryMorseInteractionForce.hpp" + +#include "ImmersedBoundaryMorseInteractionForce3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryMorseInteractionForce<3 > ImmersedBoundaryMorseInteractionForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryMorseInteractionForce3_Overloads : public ImmersedBoundaryMorseInteractionForce3{ + public: + using ImmersedBoundaryMorseInteractionForce3::ImmersedBoundaryMorseInteractionForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseInteractionForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseInteractionForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryMorseInteractionForce3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<3> >(m, "ImmersedBoundaryMorseInteractionForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryMorseInteractionForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &ImmersedBoundaryMorseInteractionForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryMorseInteractionForce3::*)(::out_stream &)) &ImmersedBoundaryMorseInteractionForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetWellDepth", + (double(ImmersedBoundaryMorseInteractionForce3::*)() const ) &ImmersedBoundaryMorseInteractionForce3::GetWellDepth, + " " ) + .def( + "SetWellDepth", + (void(ImmersedBoundaryMorseInteractionForce3::*)(double)) &ImmersedBoundaryMorseInteractionForce3::SetWellDepth, + " " , py::arg("wellDepth") ) + .def( + "GetRestLength", + (double(ImmersedBoundaryMorseInteractionForce3::*)() const ) &ImmersedBoundaryMorseInteractionForce3::GetRestLength, + " " ) + .def( + "SetRestLength", + (void(ImmersedBoundaryMorseInteractionForce3::*)(double)) &ImmersedBoundaryMorseInteractionForce3::SetRestLength, + " " , py::arg("restLength") ) + .def( + "GetLaminaWellDepthMult", + (double(ImmersedBoundaryMorseInteractionForce3::*)() const ) &ImmersedBoundaryMorseInteractionForce3::GetLaminaWellDepthMult, + " " ) + .def( + "SetLaminaWellDepthMult", + (void(ImmersedBoundaryMorseInteractionForce3::*)(double)) &ImmersedBoundaryMorseInteractionForce3::SetLaminaWellDepthMult, + " " , py::arg("laminaWellDepthMult") ) + .def( + "GetLaminaRestLengthMult", + (double(ImmersedBoundaryMorseInteractionForce3::*)() const ) &ImmersedBoundaryMorseInteractionForce3::GetLaminaRestLengthMult, + " " ) + .def( + "SetLaminaRestLengthMult", + (void(ImmersedBoundaryMorseInteractionForce3::*)(double)) &ImmersedBoundaryMorseInteractionForce3::SetLaminaRestLengthMult, + " " , py::arg("laminaRestLengthMult") ) + .def( + "GetWellWidth", + (double(ImmersedBoundaryMorseInteractionForce3::*)() const ) &ImmersedBoundaryMorseInteractionForce3::GetWellWidth, + " " ) + .def( + "SetWellWidth", + (void(ImmersedBoundaryMorseInteractionForce3::*)(double)) &ImmersedBoundaryMorseInteractionForce3::SetWellWidth, + " " , py::arg("wellWidth") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce3.cppwg.hpp new file mode 100644 index 00000000..3dee75eb --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseInteractionForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryMorseInteractionForce3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryMorseInteractionForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryMorseInteractionForce3_class(py::module &m); +#endif // ImmersedBoundaryMorseInteractionForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce2.cppwg.cpp new file mode 100644 index 00000000..8ba9c823 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce2.cppwg.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryMorseMembraneForce.hpp" + +#include "ImmersedBoundaryMorseMembraneForce2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryMorseMembraneForce<2 > ImmersedBoundaryMorseMembraneForce2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryMorseMembraneForce2_Overloads : public ImmersedBoundaryMorseMembraneForce2{ + public: + using ImmersedBoundaryMorseMembraneForce2::ImmersedBoundaryMorseMembraneForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<2> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseMembraneForce2, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseMembraneForce2, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryMorseMembraneForce2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<2> >(m, "ImmersedBoundaryMorseMembraneForce2") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryMorseMembraneForce2::*)(::std::vector *, Node<2> *>> &, ::ImmersedBoundaryCellPopulation<2> &)) &ImmersedBoundaryMorseMembraneForce2::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryMorseMembraneForce2::*)(::out_stream &)) &ImmersedBoundaryMorseMembraneForce2::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetElementWellDepth", + (double(ImmersedBoundaryMorseMembraneForce2::*)() const ) &ImmersedBoundaryMorseMembraneForce2::GetElementWellDepth, + " " ) + .def( + "SetElementWellDepth", + (void(ImmersedBoundaryMorseMembraneForce2::*)(double)) &ImmersedBoundaryMorseMembraneForce2::SetElementWellDepth, + " " , py::arg("elementWellDepth") ) + .def( + "GetElementRestLength", + (double(ImmersedBoundaryMorseMembraneForce2::*)() const ) &ImmersedBoundaryMorseMembraneForce2::GetElementRestLength, + " " ) + .def( + "SetElementRestLength", + (void(ImmersedBoundaryMorseMembraneForce2::*)(double)) &ImmersedBoundaryMorseMembraneForce2::SetElementRestLength, + " " , py::arg("elementRestLength") ) + .def( + "GetLaminaWellDepth", + (double(ImmersedBoundaryMorseMembraneForce2::*)() const ) &ImmersedBoundaryMorseMembraneForce2::GetLaminaWellDepth, + " " ) + .def( + "SetLaminaWellDepth", + (void(ImmersedBoundaryMorseMembraneForce2::*)(double)) &ImmersedBoundaryMorseMembraneForce2::SetLaminaWellDepth, + " " , py::arg("laminaWellDepth") ) + .def( + "GetLaminaRestLength", + (double(ImmersedBoundaryMorseMembraneForce2::*)() const ) &ImmersedBoundaryMorseMembraneForce2::GetLaminaRestLength, + " " ) + .def( + "SetLaminaRestLength", + (void(ImmersedBoundaryMorseMembraneForce2::*)(double)) &ImmersedBoundaryMorseMembraneForce2::SetLaminaRestLength, + " " , py::arg("laminaRestLength") ) + .def( + "GetWellWidth", + (double(ImmersedBoundaryMorseMembraneForce2::*)() const ) &ImmersedBoundaryMorseMembraneForce2::GetWellWidth, + " " ) + .def( + "SetWellWidth", + (void(ImmersedBoundaryMorseMembraneForce2::*)(double)) &ImmersedBoundaryMorseMembraneForce2::SetWellWidth, + " " , py::arg("wellWidth") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce2.cppwg.hpp new file mode 100644 index 00000000..292f04dc --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryMorseMembraneForce2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryMorseMembraneForce2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryMorseMembraneForce2_class(py::module &m); +#endif // ImmersedBoundaryMorseMembraneForce2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce3.cppwg.cpp new file mode 100644 index 00000000..657c5e2d --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce3.cppwg.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryMorseMembraneForce.hpp" + +#include "ImmersedBoundaryMorseMembraneForce3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryMorseMembraneForce<3 > ImmersedBoundaryMorseMembraneForce3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryMorseMembraneForce3_Overloads : public ImmersedBoundaryMorseMembraneForce3{ + public: + using ImmersedBoundaryMorseMembraneForce3::ImmersedBoundaryMorseMembraneForce; + void AddImmersedBoundaryForceContribution(::std::vector *, Node<3> *>> & rNodePairs, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseMembraneForce3, + AddImmersedBoundaryForceContribution, + rNodePairs, +rCellPopulation); + } + void OutputImmersedBoundaryForceParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMorseMembraneForce3, + OutputImmersedBoundaryForceParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundaryMorseMembraneForce3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryForce<3> >(m, "ImmersedBoundaryMorseMembraneForce3") + .def(py::init< >()) + .def( + "AddImmersedBoundaryForceContribution", + (void(ImmersedBoundaryMorseMembraneForce3::*)(::std::vector *, Node<3> *>> &, ::ImmersedBoundaryCellPopulation<3> &)) &ImmersedBoundaryMorseMembraneForce3::AddImmersedBoundaryForceContribution, + " " , py::arg("rNodePairs"), py::arg("rCellPopulation") ) + .def( + "OutputImmersedBoundaryForceParameters", + (void(ImmersedBoundaryMorseMembraneForce3::*)(::out_stream &)) &ImmersedBoundaryMorseMembraneForce3::OutputImmersedBoundaryForceParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetElementWellDepth", + (double(ImmersedBoundaryMorseMembraneForce3::*)() const ) &ImmersedBoundaryMorseMembraneForce3::GetElementWellDepth, + " " ) + .def( + "SetElementWellDepth", + (void(ImmersedBoundaryMorseMembraneForce3::*)(double)) &ImmersedBoundaryMorseMembraneForce3::SetElementWellDepth, + " " , py::arg("elementWellDepth") ) + .def( + "GetElementRestLength", + (double(ImmersedBoundaryMorseMembraneForce3::*)() const ) &ImmersedBoundaryMorseMembraneForce3::GetElementRestLength, + " " ) + .def( + "SetElementRestLength", + (void(ImmersedBoundaryMorseMembraneForce3::*)(double)) &ImmersedBoundaryMorseMembraneForce3::SetElementRestLength, + " " , py::arg("elementRestLength") ) + .def( + "GetLaminaWellDepth", + (double(ImmersedBoundaryMorseMembraneForce3::*)() const ) &ImmersedBoundaryMorseMembraneForce3::GetLaminaWellDepth, + " " ) + .def( + "SetLaminaWellDepth", + (void(ImmersedBoundaryMorseMembraneForce3::*)(double)) &ImmersedBoundaryMorseMembraneForce3::SetLaminaWellDepth, + " " , py::arg("laminaWellDepth") ) + .def( + "GetLaminaRestLength", + (double(ImmersedBoundaryMorseMembraneForce3::*)() const ) &ImmersedBoundaryMorseMembraneForce3::GetLaminaRestLength, + " " ) + .def( + "SetLaminaRestLength", + (void(ImmersedBoundaryMorseMembraneForce3::*)(double)) &ImmersedBoundaryMorseMembraneForce3::SetLaminaRestLength, + " " , py::arg("laminaRestLength") ) + .def( + "GetWellWidth", + (double(ImmersedBoundaryMorseMembraneForce3::*)() const ) &ImmersedBoundaryMorseMembraneForce3::GetWellWidth, + " " ) + .def( + "SetWellWidth", + (void(ImmersedBoundaryMorseMembraneForce3::*)(double)) &ImmersedBoundaryMorseMembraneForce3::SetWellWidth, + " " , py::arg("wellWidth") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce3.cppwg.hpp new file mode 100644 index 00000000..f2f70f77 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryMorseMembraneForce3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryMorseMembraneForce3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryMorseMembraneForce3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryMorseMembraneForce3_class(py::module &m); +#endif // ImmersedBoundaryMorseMembraneForce3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.cpp new file mode 100644 index 00000000..1747a780 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.cpp @@ -0,0 +1,51 @@ +#include +#include +#include "ImmersedBoundaryCellPopulation.hpp" +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryNeighbourNumberWriter.hpp" + +#include "ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryNeighbourNumberWriter<2,2 > ImmersedBoundaryNeighbourNumberWriter2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryNeighbourNumberWriter2_2_Overloads : public ImmersedBoundaryNeighbourNumberWriter2_2{ + public: + using ImmersedBoundaryNeighbourNumberWriter2_2::ImmersedBoundaryNeighbourNumberWriter; + double GetCellDataForVtkOutput(::CellPtr pCell, ::AbstractCellPopulation<2> * pCellPopulation) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryNeighbourNumberWriter2_2, + GetCellDataForVtkOutput, + pCell, +pCellPopulation); + } + void VisitCell(::CellPtr pCell, ::AbstractCellPopulation<2> * pCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryNeighbourNumberWriter2_2, + VisitCell, + pCell, +pCellPopulation); + } + +}; +void register_ImmersedBoundaryNeighbourNumberWriter2_2_class(py::module &m){ +py::class_ , AbstractCellWriter<2, 2> >(m, "ImmersedBoundaryNeighbourNumberWriter2_2") + .def(py::init< >()) + .def( + "GetCellDataForVtkOutput", + (double(ImmersedBoundaryNeighbourNumberWriter2_2::*)(::CellPtr, ::AbstractCellPopulation<2> *)) &ImmersedBoundaryNeighbourNumberWriter2_2::GetCellDataForVtkOutput, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + .def( + "VisitCell", + (void(ImmersedBoundaryNeighbourNumberWriter2_2::*)(::CellPtr, ::AbstractCellPopulation<2> *)) &ImmersedBoundaryNeighbourNumberWriter2_2::VisitCell, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.hpp new file mode 100644 index 00000000..dc47c685 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryNeighbourNumberWriter2_2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryNeighbourNumberWriter2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryNeighbourNumberWriter2_2_class(py::module &m); +#endif // ImmersedBoundaryNeighbourNumberWriter2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.cpp new file mode 100644 index 00000000..94e70f50 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.cpp @@ -0,0 +1,51 @@ +#include +#include +#include "ImmersedBoundaryCellPopulation.hpp" +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryNeighbourNumberWriter.hpp" + +#include "ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryNeighbourNumberWriter<3,3 > ImmersedBoundaryNeighbourNumberWriter3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryNeighbourNumberWriter3_3_Overloads : public ImmersedBoundaryNeighbourNumberWriter3_3{ + public: + using ImmersedBoundaryNeighbourNumberWriter3_3::ImmersedBoundaryNeighbourNumberWriter; + double GetCellDataForVtkOutput(::CellPtr pCell, ::AbstractCellPopulation<3> * pCellPopulation) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryNeighbourNumberWriter3_3, + GetCellDataForVtkOutput, + pCell, +pCellPopulation); + } + void VisitCell(::CellPtr pCell, ::AbstractCellPopulation<3> * pCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryNeighbourNumberWriter3_3, + VisitCell, + pCell, +pCellPopulation); + } + +}; +void register_ImmersedBoundaryNeighbourNumberWriter3_3_class(py::module &m){ +py::class_ , AbstractCellWriter<3, 3> >(m, "ImmersedBoundaryNeighbourNumberWriter3_3") + .def(py::init< >()) + .def( + "GetCellDataForVtkOutput", + (double(ImmersedBoundaryNeighbourNumberWriter3_3::*)(::CellPtr, ::AbstractCellPopulation<3> *)) &ImmersedBoundaryNeighbourNumberWriter3_3::GetCellDataForVtkOutput, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + .def( + "VisitCell", + (void(ImmersedBoundaryNeighbourNumberWriter3_3::*)(::CellPtr, ::AbstractCellPopulation<3> *)) &ImmersedBoundaryNeighbourNumberWriter3_3::VisitCell, + " " , py::arg("pCell"), py::arg("pCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.hpp new file mode 100644 index 00000000..66bf0516 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryNeighbourNumberWriter3_3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryNeighbourNumberWriter3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryNeighbourNumberWriter3_3_class(py::module &m); +#endif // ImmersedBoundaryNeighbourNumberWriter3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier2.cppwg.cpp new file mode 100644 index 00000000..9f027077 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier2.cppwg.cpp @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundarySimulationModifier.hpp" + +#include "ImmersedBoundarySimulationModifier2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundarySimulationModifier<2 > ImmersedBoundarySimulationModifier2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundarySimulationModifier2_Overloads : public ImmersedBoundarySimulationModifier2{ + public: + using ImmersedBoundarySimulationModifier2::ImmersedBoundarySimulationModifier; + void UpdateAtEndOfTimeStep(::AbstractCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySimulationModifier2, + UpdateAtEndOfTimeStep, + rCellPopulation); + } + void SetupSolve(::AbstractCellPopulation<2> & rCellPopulation, ::std::string outputDirectory) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySimulationModifier2, + SetupSolve, + rCellPopulation, +outputDirectory); + } + void OutputSimulationModifierParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySimulationModifier2, + OutputSimulationModifierParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundarySimulationModifier2_class(py::module &m){ +py::class_ , AbstractCellBasedSimulationModifier<2> >(m, "ImmersedBoundarySimulationModifier2") + .def(py::init< >()) + .def( + "UpdateAtEndOfTimeStep", + (void(ImmersedBoundarySimulationModifier2::*)(::AbstractCellPopulation<2> &)) &ImmersedBoundarySimulationModifier2::UpdateAtEndOfTimeStep, + " " , py::arg("rCellPopulation") ) + .def( + "SetupSolve", + (void(ImmersedBoundarySimulationModifier2::*)(::AbstractCellPopulation<2> &, ::std::string)) &ImmersedBoundarySimulationModifier2::SetupSolve, + " " , py::arg("rCellPopulation"), py::arg("outputDirectory") ) + .def( + "OutputSimulationModifierParameters", + (void(ImmersedBoundarySimulationModifier2::*)(::out_stream &)) &ImmersedBoundarySimulationModifier2::OutputSimulationModifierParameters, + " " , py::arg("rParamsFile") ) + .def( + "SetNodeNeighbourUpdateFrequency", + (void(ImmersedBoundarySimulationModifier2::*)(unsigned int)) &ImmersedBoundarySimulationModifier2::SetNodeNeighbourUpdateFrequency, + " " , py::arg("newFrequency") ) + .def( + "GetNodeNeighbourUpdateFrequency", + (unsigned int(ImmersedBoundarySimulationModifier2::*)()) &ImmersedBoundarySimulationModifier2::GetNodeNeighbourUpdateFrequency, + " " ) + .def( + "AddImmersedBoundaryForce", + (void(ImmersedBoundarySimulationModifier2::*)(::boost::shared_ptr>)) &ImmersedBoundarySimulationModifier2::AddImmersedBoundaryForce, + " " , py::arg("pForce") ) + .def( + "AddNormalNoise", + (void(ImmersedBoundarySimulationModifier2::*)() const ) &ImmersedBoundarySimulationModifier2::AddNormalNoise, + " " ) + .def( + "GetZeroFieldSums", + (bool(ImmersedBoundarySimulationModifier2::*)() const ) &ImmersedBoundarySimulationModifier2::GetZeroFieldSums, + " " ) + .def( + "SetZeroFieldSums", + (void(ImmersedBoundarySimulationModifier2::*)(bool)) &ImmersedBoundarySimulationModifier2::SetZeroFieldSums, + " " , py::arg("zeroFieldSums") ) + .def( + "SetReynoldsNumber", + (void(ImmersedBoundarySimulationModifier2::*)(double)) &ImmersedBoundarySimulationModifier2::SetReynoldsNumber, + " " , py::arg("reynoldsNumber") ) + .def( + "GetReynoldsNumber", + (double(ImmersedBoundarySimulationModifier2::*)()) &ImmersedBoundarySimulationModifier2::GetReynoldsNumber, + " " ) + .def( + "GetAdditiveNormalNoise", + (bool(ImmersedBoundarySimulationModifier2::*)() const ) &ImmersedBoundarySimulationModifier2::GetAdditiveNormalNoise, + " " ) + .def( + "SetAdditiveNormalNoise", + (void(ImmersedBoundarySimulationModifier2::*)(bool)) &ImmersedBoundarySimulationModifier2::SetAdditiveNormalNoise, + " " , py::arg("additiveNormalNoise") ) + .def( + "GetNoiseStrength", + (double(ImmersedBoundarySimulationModifier2::*)() const ) &ImmersedBoundarySimulationModifier2::GetNoiseStrength, + " " ) + .def( + "SetNoiseStrength", + (void(ImmersedBoundarySimulationModifier2::*)(double)) &ImmersedBoundarySimulationModifier2::SetNoiseStrength, + " " , py::arg("noiseStrength") ) + .def( + "GetNoiseSkip", + (unsigned int(ImmersedBoundarySimulationModifier2::*)() const ) &ImmersedBoundarySimulationModifier2::GetNoiseSkip, + " " ) + .def( + "SetNoiseSkip", + (void(ImmersedBoundarySimulationModifier2::*)(unsigned int)) &ImmersedBoundarySimulationModifier2::SetNoiseSkip, + " " , py::arg("noiseSkip") ) + .def( + "GetNoiseLengthScale", + (double(ImmersedBoundarySimulationModifier2::*)() const ) &ImmersedBoundarySimulationModifier2::GetNoiseLengthScale, + " " ) + .def( + "SetNoiseLengthScale", + (void(ImmersedBoundarySimulationModifier2::*)(double)) &ImmersedBoundarySimulationModifier2::SetNoiseLengthScale, + " " , py::arg("noiseLengthScale") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier2.cppwg.hpp new file mode 100644 index 00000000..ef1de78b --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundarySimulationModifier2_hpp__pyplusplus_wrapper +#define ImmersedBoundarySimulationModifier2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundarySimulationModifier2_class(py::module &m); +#endif // ImmersedBoundarySimulationModifier2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier3.cppwg.cpp new file mode 100644 index 00000000..0ebe0126 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier3.cppwg.cpp @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundarySimulationModifier.hpp" + +#include "ImmersedBoundarySimulationModifier3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundarySimulationModifier<3 > ImmersedBoundarySimulationModifier3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundarySimulationModifier3_Overloads : public ImmersedBoundarySimulationModifier3{ + public: + using ImmersedBoundarySimulationModifier3::ImmersedBoundarySimulationModifier; + void UpdateAtEndOfTimeStep(::AbstractCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySimulationModifier3, + UpdateAtEndOfTimeStep, + rCellPopulation); + } + void SetupSolve(::AbstractCellPopulation<3> & rCellPopulation, ::std::string outputDirectory) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySimulationModifier3, + SetupSolve, + rCellPopulation, +outputDirectory); + } + void OutputSimulationModifierParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySimulationModifier3, + OutputSimulationModifierParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundarySimulationModifier3_class(py::module &m){ +py::class_ , AbstractCellBasedSimulationModifier<3> >(m, "ImmersedBoundarySimulationModifier3") + .def(py::init< >()) + .def( + "UpdateAtEndOfTimeStep", + (void(ImmersedBoundarySimulationModifier3::*)(::AbstractCellPopulation<3> &)) &ImmersedBoundarySimulationModifier3::UpdateAtEndOfTimeStep, + " " , py::arg("rCellPopulation") ) + .def( + "SetupSolve", + (void(ImmersedBoundarySimulationModifier3::*)(::AbstractCellPopulation<3> &, ::std::string)) &ImmersedBoundarySimulationModifier3::SetupSolve, + " " , py::arg("rCellPopulation"), py::arg("outputDirectory") ) + .def( + "OutputSimulationModifierParameters", + (void(ImmersedBoundarySimulationModifier3::*)(::out_stream &)) &ImmersedBoundarySimulationModifier3::OutputSimulationModifierParameters, + " " , py::arg("rParamsFile") ) + .def( + "SetNodeNeighbourUpdateFrequency", + (void(ImmersedBoundarySimulationModifier3::*)(unsigned int)) &ImmersedBoundarySimulationModifier3::SetNodeNeighbourUpdateFrequency, + " " , py::arg("newFrequency") ) + .def( + "GetNodeNeighbourUpdateFrequency", + (unsigned int(ImmersedBoundarySimulationModifier3::*)()) &ImmersedBoundarySimulationModifier3::GetNodeNeighbourUpdateFrequency, + " " ) + .def( + "AddImmersedBoundaryForce", + (void(ImmersedBoundarySimulationModifier3::*)(::boost::shared_ptr>)) &ImmersedBoundarySimulationModifier3::AddImmersedBoundaryForce, + " " , py::arg("pForce") ) + .def( + "AddNormalNoise", + (void(ImmersedBoundarySimulationModifier3::*)() const ) &ImmersedBoundarySimulationModifier3::AddNormalNoise, + " " ) + .def( + "GetZeroFieldSums", + (bool(ImmersedBoundarySimulationModifier3::*)() const ) &ImmersedBoundarySimulationModifier3::GetZeroFieldSums, + " " ) + .def( + "SetZeroFieldSums", + (void(ImmersedBoundarySimulationModifier3::*)(bool)) &ImmersedBoundarySimulationModifier3::SetZeroFieldSums, + " " , py::arg("zeroFieldSums") ) + .def( + "SetReynoldsNumber", + (void(ImmersedBoundarySimulationModifier3::*)(double)) &ImmersedBoundarySimulationModifier3::SetReynoldsNumber, + " " , py::arg("reynoldsNumber") ) + .def( + "GetReynoldsNumber", + (double(ImmersedBoundarySimulationModifier3::*)()) &ImmersedBoundarySimulationModifier3::GetReynoldsNumber, + " " ) + .def( + "GetAdditiveNormalNoise", + (bool(ImmersedBoundarySimulationModifier3::*)() const ) &ImmersedBoundarySimulationModifier3::GetAdditiveNormalNoise, + " " ) + .def( + "SetAdditiveNormalNoise", + (void(ImmersedBoundarySimulationModifier3::*)(bool)) &ImmersedBoundarySimulationModifier3::SetAdditiveNormalNoise, + " " , py::arg("additiveNormalNoise") ) + .def( + "GetNoiseStrength", + (double(ImmersedBoundarySimulationModifier3::*)() const ) &ImmersedBoundarySimulationModifier3::GetNoiseStrength, + " " ) + .def( + "SetNoiseStrength", + (void(ImmersedBoundarySimulationModifier3::*)(double)) &ImmersedBoundarySimulationModifier3::SetNoiseStrength, + " " , py::arg("noiseStrength") ) + .def( + "GetNoiseSkip", + (unsigned int(ImmersedBoundarySimulationModifier3::*)() const ) &ImmersedBoundarySimulationModifier3::GetNoiseSkip, + " " ) + .def( + "SetNoiseSkip", + (void(ImmersedBoundarySimulationModifier3::*)(unsigned int)) &ImmersedBoundarySimulationModifier3::SetNoiseSkip, + " " , py::arg("noiseSkip") ) + .def( + "GetNoiseLengthScale", + (double(ImmersedBoundarySimulationModifier3::*)() const ) &ImmersedBoundarySimulationModifier3::GetNoiseLengthScale, + " " ) + .def( + "SetNoiseLengthScale", + (void(ImmersedBoundarySimulationModifier3::*)(double)) &ImmersedBoundarySimulationModifier3::SetNoiseLengthScale, + " " , py::arg("noiseLengthScale") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier3.cppwg.hpp new file mode 100644 index 00000000..29009ea0 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySimulationModifier3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundarySimulationModifier3_hpp__pyplusplus_wrapper +#define ImmersedBoundarySimulationModifier3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundarySimulationModifier3_class(py::module &m); +#endif // ImmersedBoundarySimulationModifier3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter2.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter2.cppwg.cpp new file mode 100644 index 00000000..0e099ad9 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter2.cppwg.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundarySvgWriter.hpp" + +#include "ImmersedBoundarySvgWriter2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundarySvgWriter<2 > ImmersedBoundarySvgWriter2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundarySvgWriter2_Overloads : public ImmersedBoundarySvgWriter2{ + public: + using ImmersedBoundarySvgWriter2::ImmersedBoundarySvgWriter; + void UpdateAtEndOfTimeStep(::AbstractCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySvgWriter2, + UpdateAtEndOfTimeStep, + rCellPopulation); + } + void SetupSolve(::AbstractCellPopulation<2> & rCellPopulation, ::std::string outputDirectory) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySvgWriter2, + SetupSolve, + rCellPopulation, +outputDirectory); + } + void OutputSimulationModifierParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySvgWriter2, + OutputSimulationModifierParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundarySvgWriter2_class(py::module &m){ +py::class_ , AbstractCellBasedSimulationModifier<2> >(m, "ImmersedBoundarySvgWriter2") + .def(py::init< >()) + .def( + "UpdateAtEndOfTimeStep", + (void(ImmersedBoundarySvgWriter2::*)(::AbstractCellPopulation<2> &)) &ImmersedBoundarySvgWriter2::UpdateAtEndOfTimeStep, + " " , py::arg("rCellPopulation") ) + .def( + "SetupSolve", + (void(ImmersedBoundarySvgWriter2::*)(::AbstractCellPopulation<2> &, ::std::string)) &ImmersedBoundarySvgWriter2::SetupSolve, + " " , py::arg("rCellPopulation"), py::arg("outputDirectory") ) + .def( + "AddPointToSvgFile", + (void(ImmersedBoundarySvgWriter2::*)(::out_stream &, ::boost::numeric::ublas::c_vector, unsigned int, double)) &ImmersedBoundarySvgWriter2::AddPointToSvgFile, + " " , py::arg("rSvgFile"), py::arg("location"), py::arg("region"), py::arg("rad") ) + .def( + "OutputSimulationModifierParameters", + (void(ImmersedBoundarySvgWriter2::*)(::out_stream &)) &ImmersedBoundarySvgWriter2::OutputSimulationModifierParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetSamplingMultiple", + (unsigned int(ImmersedBoundarySvgWriter2::*)() const ) &ImmersedBoundarySvgWriter2::GetSamplingMultiple, + " " ) + .def( + "SetSamplingMultiple", + (void(ImmersedBoundarySvgWriter2::*)(unsigned int)) &ImmersedBoundarySvgWriter2::SetSamplingMultiple, + " " , py::arg("samplingMultiple") ) + .def( + "GetSvgSize", + (double(ImmersedBoundarySvgWriter2::*)() const ) &ImmersedBoundarySvgWriter2::GetSvgSize, + " " ) + .def( + "SetSvgSize", + (void(ImmersedBoundarySvgWriter2::*)(double)) &ImmersedBoundarySvgWriter2::SetSvgSize, + " " , py::arg("svgSize") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter2.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter2.cppwg.hpp new file mode 100644 index 00000000..d27918ab --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundarySvgWriter2_hpp__pyplusplus_wrapper +#define ImmersedBoundarySvgWriter2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundarySvgWriter2_class(py::module &m); +#endif // ImmersedBoundarySvgWriter2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter3.cppwg.cpp b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter3.cppwg.cpp new file mode 100644 index 00000000..310be3c5 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter3.cppwg.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundarySvgWriter.hpp" + +#include "ImmersedBoundarySvgWriter3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundarySvgWriter<3 > ImmersedBoundarySvgWriter3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundarySvgWriter3_Overloads : public ImmersedBoundarySvgWriter3{ + public: + using ImmersedBoundarySvgWriter3::ImmersedBoundarySvgWriter; + void UpdateAtEndOfTimeStep(::AbstractCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySvgWriter3, + UpdateAtEndOfTimeStep, + rCellPopulation); + } + void SetupSolve(::AbstractCellPopulation<3> & rCellPopulation, ::std::string outputDirectory) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySvgWriter3, + SetupSolve, + rCellPopulation, +outputDirectory); + } + void OutputSimulationModifierParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundarySvgWriter3, + OutputSimulationModifierParameters, + rParamsFile); + } + +}; +void register_ImmersedBoundarySvgWriter3_class(py::module &m){ +py::class_ , AbstractCellBasedSimulationModifier<3> >(m, "ImmersedBoundarySvgWriter3") + .def(py::init< >()) + .def( + "UpdateAtEndOfTimeStep", + (void(ImmersedBoundarySvgWriter3::*)(::AbstractCellPopulation<3> &)) &ImmersedBoundarySvgWriter3::UpdateAtEndOfTimeStep, + " " , py::arg("rCellPopulation") ) + .def( + "SetupSolve", + (void(ImmersedBoundarySvgWriter3::*)(::AbstractCellPopulation<3> &, ::std::string)) &ImmersedBoundarySvgWriter3::SetupSolve, + " " , py::arg("rCellPopulation"), py::arg("outputDirectory") ) + .def( + "AddPointToSvgFile", + (void(ImmersedBoundarySvgWriter3::*)(::out_stream &, ::boost::numeric::ublas::c_vector, unsigned int, double)) &ImmersedBoundarySvgWriter3::AddPointToSvgFile, + " " , py::arg("rSvgFile"), py::arg("location"), py::arg("region"), py::arg("rad") ) + .def( + "OutputSimulationModifierParameters", + (void(ImmersedBoundarySvgWriter3::*)(::out_stream &)) &ImmersedBoundarySvgWriter3::OutputSimulationModifierParameters, + " " , py::arg("rParamsFile") ) + .def( + "GetSamplingMultiple", + (unsigned int(ImmersedBoundarySvgWriter3::*)() const ) &ImmersedBoundarySvgWriter3::GetSamplingMultiple, + " " ) + .def( + "SetSamplingMultiple", + (void(ImmersedBoundarySvgWriter3::*)(unsigned int)) &ImmersedBoundarySvgWriter3::SetSamplingMultiple, + " " , py::arg("samplingMultiple") ) + .def( + "GetSvgSize", + (double(ImmersedBoundarySvgWriter3::*)() const ) &ImmersedBoundarySvgWriter3::GetSvgSize, + " " ) + .def( + "SetSvgSize", + (void(ImmersedBoundarySvgWriter3::*)(double)) &ImmersedBoundarySvgWriter3::SetSvgSize, + " " , py::arg("svgSize") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter3.cppwg.hpp b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter3.cppwg.hpp new file mode 100644 index 00000000..f3497156 --- /dev/null +++ b/dynamic/wrappers/cell_based/ImmersedBoundarySvgWriter3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundarySvgWriter3_hpp__pyplusplus_wrapper +#define ImmersedBoundarySvgWriter3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundarySvgWriter3_class(py::module &m); +#endif // ImmersedBoundarySvgWriter3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier2.cppwg.cpp b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier2.cppwg.cpp new file mode 100644 index 00000000..494b354d --- /dev/null +++ b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier2.cppwg.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "NormallyDistributedTargetAreaModifier.hpp" + +#include "NormallyDistributedTargetAreaModifier2.cppwg.hpp" + +namespace py = pybind11; +typedef NormallyDistributedTargetAreaModifier<2 > NormallyDistributedTargetAreaModifier2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class NormallyDistributedTargetAreaModifier2_Overloads : public NormallyDistributedTargetAreaModifier2{ + public: + using NormallyDistributedTargetAreaModifier2::NormallyDistributedTargetAreaModifier; + void UpdateTargetAreaOfCell(::CellPtr const pCell) override { + PYBIND11_OVERRIDE( + void, + NormallyDistributedTargetAreaModifier2, + UpdateTargetAreaOfCell, + pCell); + } + void OutputSimulationModifierParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + NormallyDistributedTargetAreaModifier2, + OutputSimulationModifierParameters, + rParamsFile); + } + +}; +void register_NormallyDistributedTargetAreaModifier2_class(py::module &m){ +py::class_ , AbstractTargetAreaModifier<2> >(m, "NormallyDistributedTargetAreaModifier2") + .def(py::init< >()) + .def( + "UpdateTargetAreaOfCell", + (void(NormallyDistributedTargetAreaModifier2::*)(::CellPtr const)) &NormallyDistributedTargetAreaModifier2::UpdateTargetAreaOfCell, + " " , py::arg("pCell") ) + .def( + "GetGrowthDuration", + (double(NormallyDistributedTargetAreaModifier2::*)()) &NormallyDistributedTargetAreaModifier2::GetGrowthDuration, + " " ) + .def( + "SetGrowthDuration", + (void(NormallyDistributedTargetAreaModifier2::*)(double)) &NormallyDistributedTargetAreaModifier2::SetGrowthDuration, + " " , py::arg("growthDuration") ) + .def( + "OutputSimulationModifierParameters", + (void(NormallyDistributedTargetAreaModifier2::*)(::out_stream &)) &NormallyDistributedTargetAreaModifier2::OutputSimulationModifierParameters, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier2.cppwg.hpp b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier2.cppwg.hpp new file mode 100644 index 00000000..7b27f8b9 --- /dev/null +++ b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef NormallyDistributedTargetAreaModifier2_hpp__pyplusplus_wrapper +#define NormallyDistributedTargetAreaModifier2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_NormallyDistributedTargetAreaModifier2_class(py::module &m); +#endif // NormallyDistributedTargetAreaModifier2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier3.cppwg.cpp b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier3.cppwg.cpp new file mode 100644 index 00000000..28dd10c5 --- /dev/null +++ b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier3.cppwg.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "NormallyDistributedTargetAreaModifier.hpp" + +#include "NormallyDistributedTargetAreaModifier3.cppwg.hpp" + +namespace py = pybind11; +typedef NormallyDistributedTargetAreaModifier<3 > NormallyDistributedTargetAreaModifier3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class NormallyDistributedTargetAreaModifier3_Overloads : public NormallyDistributedTargetAreaModifier3{ + public: + using NormallyDistributedTargetAreaModifier3::NormallyDistributedTargetAreaModifier; + void UpdateTargetAreaOfCell(::CellPtr const pCell) override { + PYBIND11_OVERRIDE( + void, + NormallyDistributedTargetAreaModifier3, + UpdateTargetAreaOfCell, + pCell); + } + void OutputSimulationModifierParameters(::out_stream & rParamsFile) override { + PYBIND11_OVERRIDE( + void, + NormallyDistributedTargetAreaModifier3, + OutputSimulationModifierParameters, + rParamsFile); + } + +}; +void register_NormallyDistributedTargetAreaModifier3_class(py::module &m){ +py::class_ , AbstractTargetAreaModifier<3> >(m, "NormallyDistributedTargetAreaModifier3") + .def(py::init< >()) + .def( + "UpdateTargetAreaOfCell", + (void(NormallyDistributedTargetAreaModifier3::*)(::CellPtr const)) &NormallyDistributedTargetAreaModifier3::UpdateTargetAreaOfCell, + " " , py::arg("pCell") ) + .def( + "GetGrowthDuration", + (double(NormallyDistributedTargetAreaModifier3::*)()) &NormallyDistributedTargetAreaModifier3::GetGrowthDuration, + " " ) + .def( + "SetGrowthDuration", + (void(NormallyDistributedTargetAreaModifier3::*)(double)) &NormallyDistributedTargetAreaModifier3::SetGrowthDuration, + " " , py::arg("growthDuration") ) + .def( + "OutputSimulationModifierParameters", + (void(NormallyDistributedTargetAreaModifier3::*)(::out_stream &)) &NormallyDistributedTargetAreaModifier3::OutputSimulationModifierParameters, + " " , py::arg("rParamsFile") ) + ; +} diff --git a/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier3.cppwg.hpp b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier3.cppwg.hpp new file mode 100644 index 00000000..716e2bf9 --- /dev/null +++ b/dynamic/wrappers/cell_based/NormallyDistributedTargetAreaModifier3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef NormallyDistributedTargetAreaModifier3_hpp__pyplusplus_wrapper +#define NormallyDistributedTargetAreaModifier3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_NormallyDistributedTargetAreaModifier3_class(py::module &m); +#endif // NormallyDistributedTargetAreaModifier3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule2_2.cppwg.cpp b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule2_2.cppwg.cpp new file mode 100644 index 00000000..3e4b99cf --- /dev/null +++ b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule2_2.cppwg.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "RandomDirectionCentreBasedDivisionRule.hpp" + +#include "RandomDirectionCentreBasedDivisionRule2_2.cppwg.hpp" + +namespace py = pybind11; +typedef RandomDirectionCentreBasedDivisionRule<2 > RandomDirectionCentreBasedDivisionRule2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::std::pair, boost::numeric::ublas::c_vector> _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_2_gt__boost_numeric_ublas_c_vector_lt_double_2_gt__gt_; + +class RandomDirectionCentreBasedDivisionRule2_2_Overloads : public RandomDirectionCentreBasedDivisionRule2_2{ + public: + using RandomDirectionCentreBasedDivisionRule2_2::RandomDirectionCentreBasedDivisionRule; + ::std::pair, boost::numeric::ublas::c_vector> CalculateCellDivisionVector(::CellPtr pParentCell, ::AbstractCentreBasedCellPopulation<2, 2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_2_gt__boost_numeric_ublas_c_vector_lt_double_2_gt__gt_, + RandomDirectionCentreBasedDivisionRule2_2, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + +}; +void register_RandomDirectionCentreBasedDivisionRule2_2_class(py::module &m){ +py::class_ , AbstractCentreBasedDivisionRule<2> >(m, "RandomDirectionCentreBasedDivisionRule2_2") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::std::pair, boost::numeric::ublas::c_vector>(RandomDirectionCentreBasedDivisionRule2_2::*)(::CellPtr, ::AbstractCentreBasedCellPopulation<2, 2> &)) &RandomDirectionCentreBasedDivisionRule2_2::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule2_2.cppwg.hpp b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule2_2.cppwg.hpp new file mode 100644 index 00000000..be2dc4af --- /dev/null +++ b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef RandomDirectionCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper +#define RandomDirectionCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_RandomDirectionCentreBasedDivisionRule2_2_class(py::module &m); +#endif // RandomDirectionCentreBasedDivisionRule2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule3_3.cppwg.cpp b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule3_3.cppwg.cpp new file mode 100644 index 00000000..c98e4ff2 --- /dev/null +++ b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule3_3.cppwg.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "RandomDirectionCentreBasedDivisionRule.hpp" + +#include "RandomDirectionCentreBasedDivisionRule3_3.cppwg.hpp" + +namespace py = pybind11; +typedef RandomDirectionCentreBasedDivisionRule<3 > RandomDirectionCentreBasedDivisionRule3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::std::pair, boost::numeric::ublas::c_vector> _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_3_gt__boost_numeric_ublas_c_vector_lt_double_3_gt__gt_; + +class RandomDirectionCentreBasedDivisionRule3_3_Overloads : public RandomDirectionCentreBasedDivisionRule3_3{ + public: + using RandomDirectionCentreBasedDivisionRule3_3::RandomDirectionCentreBasedDivisionRule; + ::std::pair, boost::numeric::ublas::c_vector> CalculateCellDivisionVector(::CellPtr pParentCell, ::AbstractCentreBasedCellPopulation<3, 3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + _std_pair_lt_boost_numeric_ublas_c_vector_lt_double_3_gt__boost_numeric_ublas_c_vector_lt_double_3_gt__gt_, + RandomDirectionCentreBasedDivisionRule3_3, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + +}; +void register_RandomDirectionCentreBasedDivisionRule3_3_class(py::module &m){ +py::class_ , AbstractCentreBasedDivisionRule<3> >(m, "RandomDirectionCentreBasedDivisionRule3_3") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::std::pair, boost::numeric::ublas::c_vector>(RandomDirectionCentreBasedDivisionRule3_3::*)(::CellPtr, ::AbstractCentreBasedCellPopulation<3, 3> &)) &RandomDirectionCentreBasedDivisionRule3_3::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule3_3.cppwg.hpp b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule3_3.cppwg.hpp new file mode 100644 index 00000000..65ac131b --- /dev/null +++ b/dynamic/wrappers/cell_based/RandomDirectionCentreBasedDivisionRule3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef RandomDirectionCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper +#define RandomDirectionCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_RandomDirectionCentreBasedDivisionRule3_3_class(py::module &m); +#endif // RandomDirectionCentreBasedDivisionRule3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule2.cppwg.cpp b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule2.cppwg.cpp new file mode 100644 index 00000000..83e80c4a --- /dev/null +++ b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule2.cppwg.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ShortAxisImmersedBoundaryDivisionRule.hpp" + +#include "ShortAxisImmersedBoundaryDivisionRule2.cppwg.hpp" + +namespace py = pybind11; +typedef ShortAxisImmersedBoundaryDivisionRule<2 > ShortAxisImmersedBoundaryDivisionRule2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_2_gt_; + +class ShortAxisImmersedBoundaryDivisionRule2_Overloads : public ShortAxisImmersedBoundaryDivisionRule2{ + public: + using ShortAxisImmersedBoundaryDivisionRule2::ShortAxisImmersedBoundaryDivisionRule; + ::boost::numeric::ublas::c_vector CalculateCellDivisionVector(::CellPtr pParentCell, ::ImmersedBoundaryCellPopulation<2> & rCellPopulation) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_2_gt_, + ShortAxisImmersedBoundaryDivisionRule2, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + +}; +void register_ShortAxisImmersedBoundaryDivisionRule2_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryDivisionRule<2> >(m, "ShortAxisImmersedBoundaryDivisionRule2") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::boost::numeric::ublas::c_vector(ShortAxisImmersedBoundaryDivisionRule2::*)(::CellPtr, ::ImmersedBoundaryCellPopulation<2> &)) &ShortAxisImmersedBoundaryDivisionRule2::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule2.cppwg.hpp b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule2.cppwg.hpp new file mode 100644 index 00000000..698c42e9 --- /dev/null +++ b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ShortAxisImmersedBoundaryDivisionRule2_hpp__pyplusplus_wrapper +#define ShortAxisImmersedBoundaryDivisionRule2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ShortAxisImmersedBoundaryDivisionRule2_class(py::module &m); +#endif // ShortAxisImmersedBoundaryDivisionRule2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule3.cppwg.cpp b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule3.cppwg.cpp new file mode 100644 index 00000000..c1101606 --- /dev/null +++ b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule3.cppwg.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ShortAxisImmersedBoundaryDivisionRule.hpp" + +#include "ShortAxisImmersedBoundaryDivisionRule3.cppwg.hpp" + +namespace py = pybind11; +typedef ShortAxisImmersedBoundaryDivisionRule<3 > ShortAxisImmersedBoundaryDivisionRule3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; + +class ShortAxisImmersedBoundaryDivisionRule3_Overloads : public ShortAxisImmersedBoundaryDivisionRule3{ + public: + using ShortAxisImmersedBoundaryDivisionRule3::ShortAxisImmersedBoundaryDivisionRule; + ::boost::numeric::ublas::c_vector CalculateCellDivisionVector(::CellPtr pParentCell, ::ImmersedBoundaryCellPopulation<3> & rCellPopulation) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + ShortAxisImmersedBoundaryDivisionRule3, + CalculateCellDivisionVector, + pParentCell, +rCellPopulation); + } + +}; +void register_ShortAxisImmersedBoundaryDivisionRule3_class(py::module &m){ +py::class_ , AbstractImmersedBoundaryDivisionRule<3> >(m, "ShortAxisImmersedBoundaryDivisionRule3") + .def(py::init< >()) + .def( + "CalculateCellDivisionVector", + (::boost::numeric::ublas::c_vector(ShortAxisImmersedBoundaryDivisionRule3::*)(::CellPtr, ::ImmersedBoundaryCellPopulation<3> &)) &ShortAxisImmersedBoundaryDivisionRule3::CalculateCellDivisionVector, + " " , py::arg("pParentCell"), py::arg("rCellPopulation") ) + ; +} diff --git a/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule3.cppwg.hpp b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule3.cppwg.hpp new file mode 100644 index 00000000..71f18d52 --- /dev/null +++ b/dynamic/wrappers/cell_based/ShortAxisImmersedBoundaryDivisionRule3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ShortAxisImmersedBoundaryDivisionRule3_hpp__pyplusplus_wrapper +#define ShortAxisImmersedBoundaryDivisionRule3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ShortAxisImmersedBoundaryDivisionRule3_class(py::module &m); +#endif // ShortAxisImmersedBoundaryDivisionRule3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/cell_based/cell_based.main.cpp b/dynamic/wrappers/cell_based/cell_based.main.cpp index ad22d52d..69fbab15 100644 --- a/dynamic/wrappers/cell_based/cell_based.main.cpp +++ b/dynamic/wrappers/cell_based/cell_based.main.cpp @@ -1,6 +1,4 @@ #include - -#include "AbstractCellCycleModelOdeSolver.cppwg.hpp" #include "AbstractCellCycleModel.cppwg.hpp" #include "AbstractPhaseBasedCellCycleModel.cppwg.hpp" #include "AbstractSimpleCellCycleModel.cppwg.hpp" @@ -19,11 +17,12 @@ #include "GammaG1CellCycleModel.cppwg.hpp" #include "ExponentialG1GenerationalCellCycleModel.cppwg.hpp" #include "AbstractOdeBasedPhaseBasedCellCycleModel.cppwg.hpp" +#include "TysonNovakCellCycleModel.cppwg.hpp" +#include "Alarcon2004OxygenBasedCellCycleModel.cppwg.hpp" #include "FixedSequenceCellCycleModel.cppwg.hpp" #include "BernoulliTrialCellCycleModel.cppwg.hpp" #include "FixedG1GenerationalCellCycleModel.cppwg.hpp" -#include "TysonNovakCellCycleModel.cppwg.hpp" -#include "Alarcon2004OxygenBasedCellCycleModel.cppwg.hpp" +#include "AbstractCellCycleModelOdeSolver.cppwg.hpp" #include "AbstractCellProperty.cppwg.hpp" #include "CellPropertyCollection.cppwg.hpp" #include "AbstractCellProliferativeType.cppwg.hpp" @@ -76,16 +75,16 @@ #include "CellsGeneratorGammaG1CellCycleModel_3.cppwg.hpp" #include "CellsGeneratorExponentialG1GenerationalCellCycleModel_2.cppwg.hpp" #include "CellsGeneratorExponentialG1GenerationalCellCycleModel_3.cppwg.hpp" +#include "CellsGeneratorTysonNovakCellCycleModel_2.cppwg.hpp" +#include "CellsGeneratorTysonNovakCellCycleModel_3.cppwg.hpp" +#include "CellsGeneratorAlarcon2004OxygenBasedCellCycleModel_2.cppwg.hpp" +#include "CellsGeneratorAlarcon2004OxygenBasedCellCycleModel_3.cppwg.hpp" #include "CellsGeneratorFixedSequenceCellCycleModel_2.cppwg.hpp" #include "CellsGeneratorFixedSequenceCellCycleModel_3.cppwg.hpp" #include "CellsGeneratorBernoulliTrialCellCycleModel_2.cppwg.hpp" #include "CellsGeneratorBernoulliTrialCellCycleModel_3.cppwg.hpp" #include "CellsGeneratorFixedG1GenerationalCellCycleModel_2.cppwg.hpp" #include "CellsGeneratorFixedG1GenerationalCellCycleModel_3.cppwg.hpp" -#include "CellsGeneratorTysonNovakCellCycleModel_2.cppwg.hpp" -#include "CellsGeneratorTysonNovakCellCycleModel_3.cppwg.hpp" -#include "CellsGeneratorAlarcon2004OxygenBasedCellCycleModel_2.cppwg.hpp" -#include "CellsGeneratorAlarcon2004OxygenBasedCellCycleModel_3.cppwg.hpp" #include "CellwiseSourceEllipticPde2.cppwg.hpp" #include "CellwiseSourceEllipticPde3.cppwg.hpp" #include "AveragedSourceEllipticPde2.cppwg.hpp" @@ -96,8 +95,6 @@ #include "UniformSourceEllipticPde3.cppwg.hpp" #include "CellwiseSourceParabolicPde2.cppwg.hpp" #include "CellwiseSourceParabolicPde3.cppwg.hpp" -#include "AbstractCellBasedSimulationModifier2_2.cppwg.hpp" -#include "AbstractCellBasedSimulationModifier3_3.cppwg.hpp" #include "UniformSourceParabolicPde2.cppwg.hpp" #include "UniformSourceParabolicPde3.cppwg.hpp" #include "AveragedSourceParabolicPde2.cppwg.hpp" @@ -106,6 +103,8 @@ #include "CellBasedEllipticPdeSolver3.cppwg.hpp" #include "CellBasedParabolicPdeSolver2.cppwg.hpp" #include "CellBasedParabolicPdeSolver3.cppwg.hpp" +#include "AbstractCellBasedSimulationModifier2_2.cppwg.hpp" +#include "AbstractCellBasedSimulationModifier3_3.cppwg.hpp" #include "AbstractPdeModifier2.cppwg.hpp" #include "AbstractPdeModifier3.cppwg.hpp" #include "AbstractBoxDomainPdeModifier2.cppwg.hpp" @@ -120,8 +119,88 @@ #include "EllipticBoxDomainPdeModifier3.cppwg.hpp" #include "ParabolicBoxDomainPdeModifier2.cppwg.hpp" #include "ParabolicBoxDomainPdeModifier3.cppwg.hpp" +#include "AbstractCellBasedWriter2_2.cppwg.hpp" +#include "AbstractCellBasedWriter3_3.cppwg.hpp" +#include "AbstractCellWriter2_2.cppwg.hpp" +#include "AbstractCellWriter3_3.cppwg.hpp" +#include "AbstractCellPopulationWriter2_2.cppwg.hpp" +#include "AbstractCellPopulationWriter3_3.cppwg.hpp" +#include "AbstractCellPopulationCountWriter2_2.cppwg.hpp" +#include "AbstractCellPopulationCountWriter3_3.cppwg.hpp" +#include "AbstractCellPopulationEventWriter2_2.cppwg.hpp" +#include "AbstractCellPopulationEventWriter3_3.cppwg.hpp" +#include "BoundaryNodeWriter2_2.cppwg.hpp" +#include "BoundaryNodeWriter3_3.cppwg.hpp" +#include "CellAgesWriter2_2.cppwg.hpp" +#include "CellAgesWriter3_3.cppwg.hpp" +#include "CellAncestorWriter2_2.cppwg.hpp" +#include "CellAncestorWriter3_3.cppwg.hpp" +#include "CellAppliedForceWriter2_2.cppwg.hpp" +#include "CellAppliedForceWriter3_3.cppwg.hpp" +#include "CellCycleModelProteinConcentrationsWriter2_2.cppwg.hpp" +#include "CellCycleModelProteinConcentrationsWriter3_3.cppwg.hpp" +#include "CellDataItemWriter2_2.cppwg.hpp" +#include "CellDataItemWriter3_3.cppwg.hpp" +#include "CellDeltaNotchWriter2_2.cppwg.hpp" +#include "CellDeltaNotchWriter3_3.cppwg.hpp" +#include "CellDivisionLocationsWriter2_2.cppwg.hpp" +#include "CellDivisionLocationsWriter3_3.cppwg.hpp" +#include "CellIdWriter2_2.cppwg.hpp" +#include "CellIdWriter3_3.cppwg.hpp" +#include "CellLocationIndexWriter2_2.cppwg.hpp" +#include "CellLocationIndexWriter3_3.cppwg.hpp" +#include "CellMutationStatesCountWriter2_2.cppwg.hpp" +#include "CellMutationStatesCountWriter3_3.cppwg.hpp" +#include "CellMutationStatesWriter2_2.cppwg.hpp" +#include "CellMutationStatesWriter3_3.cppwg.hpp" +#include "CellPopulationAdjacencyMatrixWriter2_2.cppwg.hpp" +#include "CellPopulationAdjacencyMatrixWriter3_3.cppwg.hpp" +#include "CellPopulationAreaWriter2_2.cppwg.hpp" +#include "CellPopulationAreaWriter3_3.cppwg.hpp" +#include "CellPopulationElementWriter2_2.cppwg.hpp" +#include "CellPopulationElementWriter3_3.cppwg.hpp" +#include "CellProliferativePhasesCountWriter2_2.cppwg.hpp" +#include "CellProliferativePhasesCountWriter3_3.cppwg.hpp" +#include "CellProliferativePhasesWriter2_2.cppwg.hpp" +#include "CellProliferativePhasesWriter3_3.cppwg.hpp" +#include "CellProliferativeTypesCountWriter2_2.cppwg.hpp" +#include "CellProliferativeTypesCountWriter3_3.cppwg.hpp" +#include "CellProliferativeTypesWriter2_2.cppwg.hpp" +#include "CellProliferativeTypesWriter3_3.cppwg.hpp" +#include "CellRadiusWriter2_2.cppwg.hpp" +#include "CellRadiusWriter3_3.cppwg.hpp" +#include "CellRemovalLocationsWriter2_2.cppwg.hpp" +#include "CellRemovalLocationsWriter3_3.cppwg.hpp" +#include "CellRosetteRankWriter2_2.cppwg.hpp" +#include "CellRosetteRankWriter3_3.cppwg.hpp" +#include "CellVolumesWriter2_2.cppwg.hpp" +#include "CellVolumesWriter3_3.cppwg.hpp" +#include "HeterotypicBoundaryLengthWriter2_2.cppwg.hpp" +#include "HeterotypicBoundaryLengthWriter3_3.cppwg.hpp" +#include "LegacyCellProliferativeTypesWriter2_2.cppwg.hpp" +#include "LegacyCellProliferativeTypesWriter3_3.cppwg.hpp" +#include "NodeLocationWriter2_2.cppwg.hpp" +#include "NodeLocationWriter3_3.cppwg.hpp" +#include "NodeVelocityWriter2_2.cppwg.hpp" +#include "NodeVelocityWriter3_3.cppwg.hpp" +#include "PottsMeshWriter2.cppwg.hpp" +#include "PottsMeshWriter3.cppwg.hpp" +#include "RadialCellDataDistributionWriter2_2.cppwg.hpp" +#include "RadialCellDataDistributionWriter3_3.cppwg.hpp" +#include "VertexIntersectionSwapLocationsWriter2_2.cppwg.hpp" +#include "VertexIntersectionSwapLocationsWriter3_3.cppwg.hpp" +#include "VertexT1SwapLocationsWriter2_2.cppwg.hpp" +#include "VertexT1SwapLocationsWriter3_3.cppwg.hpp" +#include "VertexT2SwapLocationsWriter2_2.cppwg.hpp" +#include "VertexT2SwapLocationsWriter3_3.cppwg.hpp" +#include "VertexT3SwapLocationsWriter2_2.cppwg.hpp" +#include "VertexT3SwapLocationsWriter3_3.cppwg.hpp" #include "VoronoiDataWriter2_2.cppwg.hpp" #include "VoronoiDataWriter3_3.cppwg.hpp" +#include "ImmersedBoundaryBoundaryCellWriter2_2.cppwg.hpp" +#include "ImmersedBoundaryBoundaryCellWriter3_3.cppwg.hpp" +#include "ImmersedBoundaryNeighbourNumberWriter2_2.cppwg.hpp" +#include "ImmersedBoundaryNeighbourNumberWriter3_3.cppwg.hpp" #include "CellLabelWriter2_2.cppwg.hpp" #include "CellLabelWriter3_3.cppwg.hpp" #include "AbstractUpdateRule2.cppwg.hpp" @@ -142,10 +221,6 @@ #include "DifferentialAdhesionPottsUpdateRule3.cppwg.hpp" #include "AbstractVertexBasedDivisionRule2.cppwg.hpp" #include "AbstractVertexBasedDivisionRule3.cppwg.hpp" -#include "AbstractForce2_2.cppwg.hpp" -#include "AbstractForce3_3.cppwg.hpp" -#include "AbstractTwoBodyInteractionForce2_2.cppwg.hpp" -#include "AbstractTwoBodyInteractionForce3_3.cppwg.hpp" #include "RandomDirectionVertexBasedDivisionRule2.cppwg.hpp" #include "RandomDirectionVertexBasedDivisionRule3.cppwg.hpp" #include "VonMisesVertexBasedDivisionRule2.cppwg.hpp" @@ -158,14 +233,28 @@ #include "ShovingCaBasedDivisionRule3.cppwg.hpp" #include "ExclusionCaBasedDivisionRule2.cppwg.hpp" #include "ExclusionCaBasedDivisionRule3.cppwg.hpp" +#include "RandomDirectionCentreBasedDivisionRule2_2.cppwg.hpp" +#include "RandomDirectionCentreBasedDivisionRule3_3.cppwg.hpp" +#include "FixedCentreBasedDivisionRule2_2.cppwg.hpp" +#include "FixedCentreBasedDivisionRule3_3.cppwg.hpp" +#include "AbstractCentreBasedDivisionRule2_2.cppwg.hpp" +#include "AbstractCentreBasedDivisionRule3_3.cppwg.hpp" #include "ShortAxisVertexBasedDivisionRule2.cppwg.hpp" #include "ShortAxisVertexBasedDivisionRule3.cppwg.hpp" +#include "AbstractImmersedBoundaryDivisionRule2.cppwg.hpp" +#include "AbstractImmersedBoundaryDivisionRule3.cppwg.hpp" +#include "ShortAxisImmersedBoundaryDivisionRule2.cppwg.hpp" +#include "ShortAxisImmersedBoundaryDivisionRule3.cppwg.hpp" +#include "RandomCaSwitchingUpdateRule2.cppwg.hpp" +#include "RandomCaSwitchingUpdateRule3.cppwg.hpp" #include "ChemotaxisPottsUpdateRule2.cppwg.hpp" #include "ChemotaxisPottsUpdateRule3.cppwg.hpp" #include "AbstractCaSwitchingUpdateRule2.cppwg.hpp" #include "AbstractCaSwitchingUpdateRule3.cppwg.hpp" -#include "RandomCaSwitchingUpdateRule2.cppwg.hpp" -#include "RandomCaSwitchingUpdateRule3.cppwg.hpp" +#include "AbstractForce2_2.cppwg.hpp" +#include "AbstractForce3_3.cppwg.hpp" +#include "AbstractTwoBodyInteractionForce2_2.cppwg.hpp" +#include "AbstractTwoBodyInteractionForce3_3.cppwg.hpp" #include "BuskeAdhesiveForce2.cppwg.hpp" #include "BuskeAdhesiveForce3.cppwg.hpp" #include "BuskeCompressionForce2.cppwg.hpp" @@ -192,16 +281,26 @@ #include "PlanarPolarisedFarhadifarForce3.cppwg.hpp" #include "NagaiHondaDifferentialAdhesionForce2.cppwg.hpp" #include "NagaiHondaDifferentialAdhesionForce3.cppwg.hpp" +#include "AbstractImmersedBoundaryForce2.cppwg.hpp" +#include "AbstractImmersedBoundaryForce3.cppwg.hpp" +#include "ImmersedBoundaryKinematicFeedbackForce2.cppwg.hpp" +#include "ImmersedBoundaryKinematicFeedbackForce3.cppwg.hpp" +#include "ImmersedBoundaryLinearDifferentialAdhesionForce2.cppwg.hpp" +#include "ImmersedBoundaryLinearDifferentialAdhesionForce3.cppwg.hpp" +#include "ImmersedBoundaryLinearInteractionForce2.cppwg.hpp" +#include "ImmersedBoundaryLinearInteractionForce3.cppwg.hpp" +#include "ImmersedBoundaryLinearMembraneForce2.cppwg.hpp" +#include "ImmersedBoundaryLinearMembraneForce3.cppwg.hpp" +#include "ImmersedBoundaryMorseInteractionForce2.cppwg.hpp" +#include "ImmersedBoundaryMorseInteractionForce3.cppwg.hpp" +#include "ImmersedBoundaryMorseMembraneForce2.cppwg.hpp" +#include "ImmersedBoundaryMorseMembraneForce3.cppwg.hpp" #include "AbstractCellKiller2.cppwg.hpp" #include "AbstractCellKiller3.cppwg.hpp" #include "PlaneBasedCellKiller2.cppwg.hpp" #include "PlaneBasedCellKiller3.cppwg.hpp" #include "ApoptoticCellKiller2.cppwg.hpp" #include "ApoptoticCellKiller3.cppwg.hpp" -#include "AbstractCellPopulationBoundaryCondition2_2.cppwg.hpp" -#include "AbstractCellPopulationBoundaryCondition3_3.cppwg.hpp" -#include "AttractingPlaneBoundaryCondition2_2.cppwg.hpp" -#include "AttractingPlaneBoundaryCondition3_3.cppwg.hpp" #include "TargetedCellKiller2.cppwg.hpp" #include "TargetedCellKiller3.cppwg.hpp" #include "RandomCellKiller2.cppwg.hpp" @@ -210,22 +309,30 @@ #include "T2SwapCellKiller3.cppwg.hpp" #include "IsolatedLabelledCellKiller2.cppwg.hpp" #include "IsolatedLabelledCellKiller3.cppwg.hpp" +#include "AbstractCellPopulationBoundaryCondition2_2.cppwg.hpp" +#include "AbstractCellPopulationBoundaryCondition3_3.cppwg.hpp" +#include "PlaneBoundaryCondition2_2.cppwg.hpp" +#include "PlaneBoundaryCondition3_3.cppwg.hpp" +#include "AttractingPlaneBoundaryCondition2_2.cppwg.hpp" +#include "AttractingPlaneBoundaryCondition3_3.cppwg.hpp" #include "SphereGeometryBoundaryCondition2.cppwg.hpp" #include "SphereGeometryBoundaryCondition3.cppwg.hpp" +#include "SlidingBoundaryCondition2.cppwg.hpp" +#include "SlidingBoundaryCondition3.cppwg.hpp" #include "AbstractCellPopulation2_2.cppwg.hpp" #include "AbstractCellPopulation3_3.cppwg.hpp" #include "AbstractOffLatticeCellPopulation2_2.cppwg.hpp" #include "AbstractOffLatticeCellPopulation3_3.cppwg.hpp" #include "AbstractCentreBasedCellPopulation2_2.cppwg.hpp" #include "AbstractCentreBasedCellPopulation3_3.cppwg.hpp" -#include "PlaneBoundaryCondition2_2.cppwg.hpp" -#include "PlaneBoundaryCondition3_3.cppwg.hpp" -#include "SlidingBoundaryCondition2.cppwg.hpp" -#include "SlidingBoundaryCondition3.cppwg.hpp" #include "AbstractOnLatticeCellPopulation2.cppwg.hpp" #include "AbstractOnLatticeCellPopulation3.cppwg.hpp" +#include "NodeBasedCellPopulationWithParticles2.cppwg.hpp" +#include "NodeBasedCellPopulationWithParticles3.cppwg.hpp" #include "CaBasedCellPopulation2.cppwg.hpp" #include "CaBasedCellPopulation3.cppwg.hpp" +#include "ImmersedBoundaryCellPopulation2.cppwg.hpp" +#include "ImmersedBoundaryCellPopulation3.cppwg.hpp" #include "MeshBasedCellPopulation2_2.cppwg.hpp" #include "MeshBasedCellPopulation3_3.cppwg.hpp" #include "MeshBasedCellPopulationWithGhostNodes2.cppwg.hpp" @@ -238,8 +345,6 @@ #include "NodeBasedCellPopulation3.cppwg.hpp" #include "NodeBasedCellPopulationWithBuskeUpdate2.cppwg.hpp" #include "NodeBasedCellPopulationWithBuskeUpdate3.cppwg.hpp" -#include "NodeBasedCellPopulationWithParticles2.cppwg.hpp" -#include "NodeBasedCellPopulationWithParticles3.cppwg.hpp" #include "AbstractTargetAreaModifier2.cppwg.hpp" #include "AbstractTargetAreaModifier3.cppwg.hpp" #include "SimpleTargetAreaModifier2.cppwg.hpp" @@ -258,6 +363,16 @@ #include "VolumeTrackingModifier3.cppwg.hpp" #include "VtkSceneModifier2.cppwg.hpp" #include "VtkSceneModifier3.cppwg.hpp" +#include "ImmersedBoundarySimulationModifier2.cppwg.hpp" +#include "ImmersedBoundarySimulationModifier3.cppwg.hpp" +#include "ImmersedBoundarySvgWriter2.cppwg.hpp" +#include "ImmersedBoundarySvgWriter3.cppwg.hpp" +#include "NormallyDistributedTargetAreaModifier2.cppwg.hpp" +#include "NormallyDistributedTargetAreaModifier3.cppwg.hpp" +#include "AbstractNumericalMethod2_2.cppwg.hpp" +#include "AbstractNumericalMethod3_3.cppwg.hpp" +#include "ForwardEulerNumericalMethod2_2.cppwg.hpp" +#include "ForwardEulerNumericalMethod3_3.cppwg.hpp" #include "AbstractCellBasedSimulation2_2.cppwg.hpp" #include "AbstractCellBasedSimulation3_3.cppwg.hpp" #include "SimulationTime.cppwg.hpp" @@ -272,12 +387,12 @@ namespace py = pybind11; PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) { - register_AbstractCellCycleModelOdeSolver_class(m); register_AbstractCellCycleModel_class(m); register_AbstractPhaseBasedCellCycleModel_class(m); register_AbstractSimpleCellCycleModel_class(m); register_AbstractSimplePhaseBasedCellCycleModel_class(m); register_AbstractSimpleGenerationalCellCycleModel_class(m); + register_AbstractCellCycleModelOdeSolver_class(m); register_UniformCellCycleModel_class(m); register_SimpleOxygenBasedCellCycleModel_class(m); register_UniformG1GenerationalCellCycleModel_class(m); @@ -291,11 +406,11 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_GammaG1CellCycleModel_class(m); register_ExponentialG1GenerationalCellCycleModel_class(m); register_AbstractOdeBasedPhaseBasedCellCycleModel_class(m); + register_Alarcon2004OxygenBasedCellCycleModel_class(m); register_FixedSequenceCellCycleModel_class(m); register_BernoulliTrialCellCycleModel_class(m); register_FixedG1GenerationalCellCycleModel_class(m); register_TysonNovakCellCycleModel_class(m); - register_Alarcon2004OxygenBasedCellCycleModel_class(m); register_AbstractCellProperty_class(m); register_CellPropertyCollection_class(m); register_AbstractCellProliferativeType_class(m); @@ -368,8 +483,6 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_UniformSourceEllipticPde3_class(m); register_CellwiseSourceParabolicPde2_class(m); register_CellwiseSourceParabolicPde3_class(m); - register_AbstractCellBasedSimulationModifier2_2_class(m); - register_AbstractCellBasedSimulationModifier3_3_class(m); register_UniformSourceParabolicPde2_class(m); register_UniformSourceParabolicPde3_class(m); register_AveragedSourceParabolicPde2_class(m); @@ -378,6 +491,8 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_CellBasedEllipticPdeSolver3_class(m); register_CellBasedParabolicPdeSolver2_class(m); register_CellBasedParabolicPdeSolver3_class(m); + register_AbstractCellBasedSimulationModifier2_2_class(m); + register_AbstractCellBasedSimulationModifier3_3_class(m); register_AbstractPdeModifier2_class(m); register_AbstractPdeModifier3_class(m); register_AbstractBoxDomainPdeModifier2_class(m); @@ -392,18 +507,108 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_EllipticBoxDomainPdeModifier3_class(m); register_ParabolicBoxDomainPdeModifier2_class(m); register_ParabolicBoxDomainPdeModifier3_class(m); + register_AbstractCellBasedWriter2_2_class(m); + register_AbstractCellBasedWriter3_3_class(m); + register_AbstractCellWriter2_2_class(m); + register_AbstractCellWriter3_3_class(m); + register_AbstractCellPopulationWriter2_2_class(m); + register_AbstractCellPopulationWriter3_3_class(m); + register_AbstractCellPopulationCountWriter2_2_class(m); + register_AbstractCellPopulationCountWriter3_3_class(m); + register_AbstractCellPopulationEventWriter2_2_class(m); + register_AbstractCellPopulationEventWriter3_3_class(m); + register_BoundaryNodeWriter2_2_class(m); + register_BoundaryNodeWriter3_3_class(m); + register_CellAgesWriter2_2_class(m); + register_CellAgesWriter3_3_class(m); + register_CellAncestorWriter2_2_class(m); + register_CellAncestorWriter3_3_class(m); + register_CellAppliedForceWriter2_2_class(m); + register_CellAppliedForceWriter3_3_class(m); + register_CellCycleModelProteinConcentrationsWriter2_2_class(m); + register_CellCycleModelProteinConcentrationsWriter3_3_class(m); + register_CellDataItemWriter2_2_class(m); + register_CellDataItemWriter3_3_class(m); + register_CellDeltaNotchWriter2_2_class(m); + register_CellDeltaNotchWriter3_3_class(m); + register_CellDivisionLocationsWriter2_2_class(m); + register_CellDivisionLocationsWriter3_3_class(m); + register_CellIdWriter2_2_class(m); + register_CellIdWriter3_3_class(m); + register_CellLocationIndexWriter2_2_class(m); + register_CellLocationIndexWriter3_3_class(m); + register_CellMutationStatesCountWriter2_2_class(m); + register_CellMutationStatesCountWriter3_3_class(m); + register_CellMutationStatesWriter2_2_class(m); + register_CellMutationStatesWriter3_3_class(m); + register_CellPopulationAdjacencyMatrixWriter2_2_class(m); + register_CellPopulationAdjacencyMatrixWriter3_3_class(m); + register_CellPopulationAreaWriter2_2_class(m); + register_CellPopulationAreaWriter3_3_class(m); + register_CellPopulationElementWriter2_2_class(m); + register_CellPopulationElementWriter3_3_class(m); + register_CellProliferativePhasesCountWriter2_2_class(m); + register_CellProliferativePhasesCountWriter3_3_class(m); + register_CellProliferativePhasesWriter2_2_class(m); + register_CellProliferativePhasesWriter3_3_class(m); + register_CellProliferativeTypesCountWriter2_2_class(m); + register_CellProliferativeTypesCountWriter3_3_class(m); + register_CellProliferativeTypesWriter2_2_class(m); + register_CellProliferativeTypesWriter3_3_class(m); + register_CellRadiusWriter2_2_class(m); + register_CellRadiusWriter3_3_class(m); + register_CellRemovalLocationsWriter2_2_class(m); + register_CellRemovalLocationsWriter3_3_class(m); + register_CellRosetteRankWriter2_2_class(m); + register_CellRosetteRankWriter3_3_class(m); + register_CellVolumesWriter2_2_class(m); + register_CellVolumesWriter3_3_class(m); + register_HeterotypicBoundaryLengthWriter2_2_class(m); + register_HeterotypicBoundaryLengthWriter3_3_class(m); + register_LegacyCellProliferativeTypesWriter2_2_class(m); + register_LegacyCellProliferativeTypesWriter3_3_class(m); + register_NodeLocationWriter2_2_class(m); + register_NodeLocationWriter3_3_class(m); + register_NodeVelocityWriter2_2_class(m); + register_NodeVelocityWriter3_3_class(m); + register_PottsMeshWriter2_class(m); + register_PottsMeshWriter3_class(m); + register_RadialCellDataDistributionWriter2_2_class(m); + register_RadialCellDataDistributionWriter3_3_class(m); + register_VertexIntersectionSwapLocationsWriter2_2_class(m); + register_VertexIntersectionSwapLocationsWriter3_3_class(m); + register_VertexT1SwapLocationsWriter2_2_class(m); + register_VertexT1SwapLocationsWriter3_3_class(m); + register_VertexT2SwapLocationsWriter2_2_class(m); + register_VertexT2SwapLocationsWriter3_3_class(m); + register_VertexT3SwapLocationsWriter2_2_class(m); + register_VertexT3SwapLocationsWriter3_3_class(m); register_VoronoiDataWriter2_2_class(m); register_VoronoiDataWriter3_3_class(m); + register_ImmersedBoundaryBoundaryCellWriter2_2_class(m); + register_ImmersedBoundaryBoundaryCellWriter3_3_class(m); + register_ImmersedBoundaryNeighbourNumberWriter2_2_class(m); + register_ImmersedBoundaryNeighbourNumberWriter3_3_class(m); register_CellLabelWriter2_2_class(m); register_CellLabelWriter3_3_class(m); register_AbstractUpdateRule2_class(m); register_AbstractUpdateRule3_class(m); register_AbstractCaUpdateRule2_class(m); register_AbstractCaUpdateRule3_class(m); - register_DiffusionCaUpdateRule2_class(m); - register_DiffusionCaUpdateRule3_class(m); register_AbstractPottsUpdateRule2_class(m); register_AbstractPottsUpdateRule3_class(m); + register_AbstractCentreBasedDivisionRule2_2_class(m); + register_AbstractCentreBasedDivisionRule3_3_class(m); + register_AbstractCaBasedDivisionRule2_class(m); + register_AbstractCaBasedDivisionRule3_class(m); + register_AbstractCaSwitchingUpdateRule2_class(m); + register_AbstractCaSwitchingUpdateRule3_class(m); + register_AbstractImmersedBoundaryDivisionRule2_class(m); + register_AbstractImmersedBoundaryDivisionRule3_class(m); + register_AbstractVertexBasedDivisionRule2_class(m); + register_AbstractVertexBasedDivisionRule3_class(m); + register_DiffusionCaUpdateRule2_class(m); + register_DiffusionCaUpdateRule3_class(m); register_VolumeConstraintPottsUpdateRule2_class(m); register_VolumeConstraintPottsUpdateRule3_class(m); register_SurfaceAreaConstraintPottsUpdateRule2_class(m); @@ -412,32 +617,32 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_AdhesionPottsUpdateRule3_class(m); register_DifferentialAdhesionPottsUpdateRule2_class(m); register_DifferentialAdhesionPottsUpdateRule3_class(m); - register_AbstractVertexBasedDivisionRule2_class(m); - register_AbstractVertexBasedDivisionRule3_class(m); - register_AbstractForce2_2_class(m); - register_AbstractForce3_3_class(m); - register_AbstractTwoBodyInteractionForce2_2_class(m); - register_AbstractTwoBodyInteractionForce3_3_class(m); register_RandomDirectionVertexBasedDivisionRule2_class(m); register_RandomDirectionVertexBasedDivisionRule3_class(m); register_VonMisesVertexBasedDivisionRule2_class(m); register_VonMisesVertexBasedDivisionRule3_class(m); register_FixedVertexBasedDivisionRule2_class(m); register_FixedVertexBasedDivisionRule3_class(m); - register_AbstractCaBasedDivisionRule2_class(m); - register_AbstractCaBasedDivisionRule3_class(m); register_ShovingCaBasedDivisionRule2_class(m); register_ShovingCaBasedDivisionRule3_class(m); register_ExclusionCaBasedDivisionRule2_class(m); register_ExclusionCaBasedDivisionRule3_class(m); + register_RandomDirectionCentreBasedDivisionRule2_2_class(m); + register_RandomDirectionCentreBasedDivisionRule3_3_class(m); + register_FixedCentreBasedDivisionRule2_2_class(m); + register_FixedCentreBasedDivisionRule3_3_class(m); register_ShortAxisVertexBasedDivisionRule2_class(m); register_ShortAxisVertexBasedDivisionRule3_class(m); - register_ChemotaxisPottsUpdateRule2_class(m); - register_ChemotaxisPottsUpdateRule3_class(m); - register_AbstractCaSwitchingUpdateRule2_class(m); - register_AbstractCaSwitchingUpdateRule3_class(m); + register_ShortAxisImmersedBoundaryDivisionRule2_class(m); + register_ShortAxisImmersedBoundaryDivisionRule3_class(m); register_RandomCaSwitchingUpdateRule2_class(m); register_RandomCaSwitchingUpdateRule3_class(m); + register_ChemotaxisPottsUpdateRule2_class(m); + register_ChemotaxisPottsUpdateRule3_class(m); + register_AbstractForce2_2_class(m); + register_AbstractForce3_3_class(m); + register_AbstractTwoBodyInteractionForce2_2_class(m); + register_AbstractTwoBodyInteractionForce3_3_class(m); register_BuskeAdhesiveForce2_class(m); register_BuskeAdhesiveForce3_class(m); register_BuskeCompressionForce2_class(m); @@ -464,18 +669,26 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_PlanarPolarisedFarhadifarForce3_class(m); register_NagaiHondaDifferentialAdhesionForce2_class(m); register_NagaiHondaDifferentialAdhesionForce3_class(m); + register_AbstractImmersedBoundaryForce2_class(m); + register_AbstractImmersedBoundaryForce3_class(m); + register_ImmersedBoundaryKinematicFeedbackForce2_class(m); + register_ImmersedBoundaryKinematicFeedbackForce3_class(m); + register_ImmersedBoundaryLinearDifferentialAdhesionForce2_class(m); + register_ImmersedBoundaryLinearDifferentialAdhesionForce3_class(m); + register_ImmersedBoundaryLinearInteractionForce2_class(m); + register_ImmersedBoundaryLinearInteractionForce3_class(m); + register_ImmersedBoundaryLinearMembraneForce2_class(m); + register_ImmersedBoundaryLinearMembraneForce3_class(m); + register_ImmersedBoundaryMorseInteractionForce2_class(m); + register_ImmersedBoundaryMorseInteractionForce3_class(m); + register_ImmersedBoundaryMorseMembraneForce2_class(m); + register_ImmersedBoundaryMorseMembraneForce3_class(m); register_AbstractCellKiller2_class(m); register_AbstractCellKiller3_class(m); register_PlaneBasedCellKiller2_class(m); register_PlaneBasedCellKiller3_class(m); register_ApoptoticCellKiller2_class(m); register_ApoptoticCellKiller3_class(m); - register_AbstractCellPopulationBoundaryCondition2_2_class(m); - register_AbstractCellPopulationBoundaryCondition3_3_class(m); - register_PlaneBoundaryCondition2_2_class(m); - register_PlaneBoundaryCondition3_3_class(m); - register_AttractingPlaneBoundaryCondition2_2_class(m); - register_AttractingPlaneBoundaryCondition3_3_class(m); register_TargetedCellKiller2_class(m); register_TargetedCellKiller3_class(m); register_RandomCellKiller2_class(m); @@ -484,20 +697,28 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_T2SwapCellKiller3_class(m); register_IsolatedLabelledCellKiller2_class(m); register_IsolatedLabelledCellKiller3_class(m); + register_AbstractCellPopulationBoundaryCondition2_2_class(m); + register_AbstractCellPopulationBoundaryCondition3_3_class(m); + register_PlaneBoundaryCondition2_2_class(m); + register_PlaneBoundaryCondition3_3_class(m); + register_AttractingPlaneBoundaryCondition2_2_class(m); + register_AttractingPlaneBoundaryCondition3_3_class(m); register_SphereGeometryBoundaryCondition2_class(m); register_SphereGeometryBoundaryCondition3_class(m); + register_SlidingBoundaryCondition2_class(m); + register_SlidingBoundaryCondition3_class(m); register_AbstractCellPopulation2_2_class(m); register_AbstractCellPopulation3_3_class(m); register_AbstractOffLatticeCellPopulation2_2_class(m); register_AbstractOffLatticeCellPopulation3_3_class(m); register_AbstractCentreBasedCellPopulation2_2_class(m); register_AbstractCentreBasedCellPopulation3_3_class(m); - register_SlidingBoundaryCondition2_class(m); - register_SlidingBoundaryCondition3_class(m); register_AbstractOnLatticeCellPopulation2_class(m); register_AbstractOnLatticeCellPopulation3_class(m); register_CaBasedCellPopulation2_class(m); register_CaBasedCellPopulation3_class(m); + register_ImmersedBoundaryCellPopulation2_class(m); + register_ImmersedBoundaryCellPopulation3_class(m); register_MeshBasedCellPopulation2_2_class(m); register_MeshBasedCellPopulation3_3_class(m); register_MeshBasedCellPopulationWithGhostNodes2_class(m); @@ -508,10 +729,10 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_PottsBasedCellPopulation3_class(m); register_NodeBasedCellPopulation2_class(m); register_NodeBasedCellPopulation3_class(m); - register_NodeBasedCellPopulationWithBuskeUpdate2_class(m); - register_NodeBasedCellPopulationWithBuskeUpdate3_class(m); register_NodeBasedCellPopulationWithParticles2_class(m); register_NodeBasedCellPopulationWithParticles3_class(m); + register_NodeBasedCellPopulationWithBuskeUpdate2_class(m); + register_NodeBasedCellPopulationWithBuskeUpdate3_class(m); register_AbstractTargetAreaModifier2_class(m); register_AbstractTargetAreaModifier3_class(m); register_SimpleTargetAreaModifier2_class(m); @@ -530,6 +751,16 @@ PYBIND11_MODULE(_chaste_project_PyChaste_cell_based, m) register_VolumeTrackingModifier3_class(m); register_VtkSceneModifier2_class(m); register_VtkSceneModifier3_class(m); + register_ImmersedBoundarySimulationModifier2_class(m); + register_ImmersedBoundarySimulationModifier3_class(m); + register_ImmersedBoundarySvgWriter2_class(m); + register_ImmersedBoundarySvgWriter3_class(m); + register_NormallyDistributedTargetAreaModifier2_class(m); + register_NormallyDistributedTargetAreaModifier3_class(m); + register_AbstractNumericalMethod2_2_class(m); + register_AbstractNumericalMethod3_3_class(m); + register_ForwardEulerNumericalMethod2_2_class(m); + register_ForwardEulerNumericalMethod3_3_class(m); register_AbstractCellBasedSimulation2_2_class(m); register_AbstractCellBasedSimulation3_3_class(m); register_SimulationTime_class(m); diff --git a/dynamic/wrappers/core/core.main.cpp b/dynamic/wrappers/core/core.main.cpp index 9407366f..bbdb2312 100644 --- a/dynamic/wrappers/core/core.main.cpp +++ b/dynamic/wrappers/core/core.main.cpp @@ -1,6 +1,4 @@ #include -#include -#include #include "Identifiable.cppwg.hpp" #include "PetscTools.cppwg.hpp" #include "ReplicatableVector.cppwg.hpp" @@ -17,9 +15,6 @@ namespace py = pybind11; PYBIND11_MODULE(_chaste_project_PyChaste_core, m) { - py::class_<_p_Mat>(m, "_p_Mat", py::module_local()); - py::class_<_p_Vec>(m, "_p_Vec", py::module_local()); - register_Identifiable_class(m); register_PetscTools_class(m); register_ReplicatableVector_class(m); diff --git a/dynamic/wrappers/mesh/AbstractElement1_2.cppwg.cpp b/dynamic/wrappers/mesh/AbstractElement1_2.cppwg.cpp new file mode 100644 index 00000000..a055977a --- /dev/null +++ b/dynamic/wrappers/mesh/AbstractElement1_2.cppwg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractElement.hpp" + +#include "AbstractElement1_2.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractElement<1,2 > AbstractElement1_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class AbstractElement1_2_Overloads : public AbstractElement1_2{ + public: + using AbstractElement1_2::AbstractElement; + void UpdateNode(unsigned int const & rIndex, ::Node<2> * pNode) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractElement1_2, + UpdateNode, + rIndex, +pNode); + } + void MarkAsDeleted() override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractElement1_2, + MarkAsDeleted, + ); + } + void RegisterWithNodes() override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractElement1_2, + RegisterWithNodes, + ); + } + +}; +void register_AbstractElement1_2_class(py::module &m){ +py::class_ >(m, "AbstractElement1_2") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def(py::init(), py::arg("index") = ::INDEX_IS_NOT_USED) + .def( + "UpdateNode", + (void(AbstractElement1_2::*)(unsigned int const &, ::Node<2> *)) &AbstractElement1_2::UpdateNode, + " " , py::arg("rIndex"), py::arg("pNode") ) + .def( + "ReplaceNode", + (void(AbstractElement1_2::*)(::Node<2> *, ::Node<2> *)) &AbstractElement1_2::ReplaceNode, + " " , py::arg("pOldNode"), py::arg("pNewNode") ) + .def( + "MarkAsDeleted", + (void(AbstractElement1_2::*)()) &AbstractElement1_2::MarkAsDeleted, + " " ) + .def( + "RegisterWithNodes", + (void(AbstractElement1_2::*)()) &AbstractElement1_2::RegisterWithNodes, + " " ) + .def( + "GetNodeLocation", + (double(AbstractElement1_2::*)(unsigned int, unsigned int) const ) &AbstractElement1_2::GetNodeLocation, + " " , py::arg("localIndex"), py::arg("dimension") ) + .def( + "GetNodeLocation", + (::boost::numeric::ublas::c_vector(AbstractElement1_2::*)(unsigned int) const ) &AbstractElement1_2::GetNodeLocation, + " " , py::arg("localIndex") ) + .def( + "GetNodeGlobalIndex", + (unsigned int(AbstractElement1_2::*)(unsigned int) const ) &AbstractElement1_2::GetNodeGlobalIndex, + " " , py::arg("localIndex") ) + .def( + "GetNode", + (::Node<2> *(AbstractElement1_2::*)(unsigned int) const ) &AbstractElement1_2::GetNode, + " " , py::arg("localIndex") , py::return_value_policy::reference) + .def( + "GetNumNodes", + (unsigned int(AbstractElement1_2::*)() const ) &AbstractElement1_2::GetNumNodes, + " " ) + .def( + "AddNode", + (void(AbstractElement1_2::*)(::Node<2> *)) &AbstractElement1_2::AddNode, + " " , py::arg("pNode") ) + .def( + "IsDeleted", + (bool(AbstractElement1_2::*)() const ) &AbstractElement1_2::IsDeleted, + " " ) + .def( + "GetIndex", + (unsigned int(AbstractElement1_2::*)() const ) &AbstractElement1_2::GetIndex, + " " ) + .def( + "SetIndex", + (void(AbstractElement1_2::*)(unsigned int)) &AbstractElement1_2::SetIndex, + " " , py::arg("index") ) + .def( + "GetOwnership", + (bool(AbstractElement1_2::*)() const ) &AbstractElement1_2::GetOwnership, + " " ) + .def( + "SetOwnership", + (void(AbstractElement1_2::*)(bool)) &AbstractElement1_2::SetOwnership, + " " , py::arg("ownership") ) + .def( + "SetAttribute", + (void(AbstractElement1_2::*)(double)) &AbstractElement1_2::SetAttribute, + " " , py::arg("attribute") ) + .def( + "GetAttribute", + (double(AbstractElement1_2::*)()) &AbstractElement1_2::GetAttribute, + " " ) + .def( + "GetUnsignedAttribute", + (unsigned int(AbstractElement1_2::*)()) &AbstractElement1_2::GetUnsignedAttribute, + " " ) + .def( + "AddElementAttribute", + (void(AbstractElement1_2::*)(double)) &AbstractElement1_2::AddElementAttribute, + " " , py::arg("attribute") ) + .def( + "rGetElementAttributes", + (::std::vector &(AbstractElement1_2::*)()) &AbstractElement1_2::rGetElementAttributes, + " " , py::return_value_policy::reference_internal) + .def( + "GetNumElementAttributes", + (unsigned int(AbstractElement1_2::*)()) &AbstractElement1_2::GetNumElementAttributes, + " " ) + ; +} diff --git a/dynamic/wrappers/mesh/AbstractElement1_2.cppwg.hpp b/dynamic/wrappers/mesh/AbstractElement1_2.cppwg.hpp new file mode 100644 index 00000000..6a1151e9 --- /dev/null +++ b/dynamic/wrappers/mesh/AbstractElement1_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractElement1_2_hpp__pyplusplus_wrapper +#define AbstractElement1_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractElement1_2_class(py::module &m); +#endif // AbstractElement1_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/AbstractElement2_2.cppwg.cpp b/dynamic/wrappers/mesh/AbstractElement2_2.cppwg.cpp index f4ca618f..01c10bee 100644 --- a/dynamic/wrappers/mesh/AbstractElement2_2.cppwg.cpp +++ b/dynamic/wrappers/mesh/AbstractElement2_2.cppwg.cpp @@ -18,7 +18,7 @@ class AbstractElement2_2_Overloads : public AbstractElement2_2{ public: using AbstractElement2_2::AbstractElement; void UpdateNode(unsigned int const & rIndex, ::Node<2> * pNode) override { - PYBIND11_OVERLOAD_PURE( + PYBIND11_OVERRIDE_PURE( void, AbstractElement2_2, UpdateNode, @@ -26,14 +26,14 @@ class AbstractElement2_2_Overloads : public AbstractElement2_2{ pNode); } void MarkAsDeleted() override { - PYBIND11_OVERLOAD_PURE( + PYBIND11_OVERRIDE_PURE( void, AbstractElement2_2, MarkAsDeleted, ); } void RegisterWithNodes() override { - PYBIND11_OVERLOAD_PURE( + PYBIND11_OVERRIDE_PURE( void, AbstractElement2_2, RegisterWithNodes, diff --git a/dynamic/wrappers/mesh/AbstractElement2_3.cppwg.cpp b/dynamic/wrappers/mesh/AbstractElement2_3.cppwg.cpp new file mode 100644 index 00000000..3bfb5a6c --- /dev/null +++ b/dynamic/wrappers/mesh/AbstractElement2_3.cppwg.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractElement.hpp" + +#include "AbstractElement2_3.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractElement<2,3 > AbstractElement2_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class AbstractElement2_3_Overloads : public AbstractElement2_3{ + public: + using AbstractElement2_3::AbstractElement; + void UpdateNode(unsigned int const & rIndex, ::Node<3> * pNode) override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractElement2_3, + UpdateNode, + rIndex, +pNode); + } + void MarkAsDeleted() override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractElement2_3, + MarkAsDeleted, + ); + } + void RegisterWithNodes() override { + PYBIND11_OVERRIDE_PURE( + void, + AbstractElement2_3, + RegisterWithNodes, + ); + } + +}; +void register_AbstractElement2_3_class(py::module &m){ +py::class_ >(m, "AbstractElement2_3") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def(py::init(), py::arg("index") = ::INDEX_IS_NOT_USED) + .def( + "UpdateNode", + (void(AbstractElement2_3::*)(unsigned int const &, ::Node<3> *)) &AbstractElement2_3::UpdateNode, + " " , py::arg("rIndex"), py::arg("pNode") ) + .def( + "ReplaceNode", + (void(AbstractElement2_3::*)(::Node<3> *, ::Node<3> *)) &AbstractElement2_3::ReplaceNode, + " " , py::arg("pOldNode"), py::arg("pNewNode") ) + .def( + "MarkAsDeleted", + (void(AbstractElement2_3::*)()) &AbstractElement2_3::MarkAsDeleted, + " " ) + .def( + "RegisterWithNodes", + (void(AbstractElement2_3::*)()) &AbstractElement2_3::RegisterWithNodes, + " " ) + .def( + "GetNodeLocation", + (double(AbstractElement2_3::*)(unsigned int, unsigned int) const ) &AbstractElement2_3::GetNodeLocation, + " " , py::arg("localIndex"), py::arg("dimension") ) + .def( + "GetNodeLocation", + (::boost::numeric::ublas::c_vector(AbstractElement2_3::*)(unsigned int) const ) &AbstractElement2_3::GetNodeLocation, + " " , py::arg("localIndex") ) + .def( + "GetNodeGlobalIndex", + (unsigned int(AbstractElement2_3::*)(unsigned int) const ) &AbstractElement2_3::GetNodeGlobalIndex, + " " , py::arg("localIndex") ) + .def( + "GetNode", + (::Node<3> *(AbstractElement2_3::*)(unsigned int) const ) &AbstractElement2_3::GetNode, + " " , py::arg("localIndex") , py::return_value_policy::reference) + .def( + "GetNumNodes", + (unsigned int(AbstractElement2_3::*)() const ) &AbstractElement2_3::GetNumNodes, + " " ) + .def( + "AddNode", + (void(AbstractElement2_3::*)(::Node<3> *)) &AbstractElement2_3::AddNode, + " " , py::arg("pNode") ) + .def( + "IsDeleted", + (bool(AbstractElement2_3::*)() const ) &AbstractElement2_3::IsDeleted, + " " ) + .def( + "GetIndex", + (unsigned int(AbstractElement2_3::*)() const ) &AbstractElement2_3::GetIndex, + " " ) + .def( + "SetIndex", + (void(AbstractElement2_3::*)(unsigned int)) &AbstractElement2_3::SetIndex, + " " , py::arg("index") ) + .def( + "GetOwnership", + (bool(AbstractElement2_3::*)() const ) &AbstractElement2_3::GetOwnership, + " " ) + .def( + "SetOwnership", + (void(AbstractElement2_3::*)(bool)) &AbstractElement2_3::SetOwnership, + " " , py::arg("ownership") ) + .def( + "SetAttribute", + (void(AbstractElement2_3::*)(double)) &AbstractElement2_3::SetAttribute, + " " , py::arg("attribute") ) + .def( + "GetAttribute", + (double(AbstractElement2_3::*)()) &AbstractElement2_3::GetAttribute, + " " ) + .def( + "GetUnsignedAttribute", + (unsigned int(AbstractElement2_3::*)()) &AbstractElement2_3::GetUnsignedAttribute, + " " ) + .def( + "AddElementAttribute", + (void(AbstractElement2_3::*)(double)) &AbstractElement2_3::AddElementAttribute, + " " , py::arg("attribute") ) + .def( + "rGetElementAttributes", + (::std::vector &(AbstractElement2_3::*)()) &AbstractElement2_3::rGetElementAttributes, + " " , py::return_value_policy::reference_internal) + .def( + "GetNumElementAttributes", + (unsigned int(AbstractElement2_3::*)()) &AbstractElement2_3::GetNumElementAttributes, + " " ) + ; +} diff --git a/dynamic/wrappers/mesh/AbstractElement2_3.cppwg.hpp b/dynamic/wrappers/mesh/AbstractElement2_3.cppwg.hpp new file mode 100644 index 00000000..b20cb880 --- /dev/null +++ b/dynamic/wrappers/mesh/AbstractElement2_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractElement2_3_hpp__pyplusplus_wrapper +#define AbstractElement2_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractElement2_3_class(py::module &m); +#endif // AbstractElement2_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/AbstractElement3_3.cppwg.cpp b/dynamic/wrappers/mesh/AbstractElement3_3.cppwg.cpp index c24139c6..6bd9cd75 100644 --- a/dynamic/wrappers/mesh/AbstractElement3_3.cppwg.cpp +++ b/dynamic/wrappers/mesh/AbstractElement3_3.cppwg.cpp @@ -18,7 +18,7 @@ class AbstractElement3_3_Overloads : public AbstractElement3_3{ public: using AbstractElement3_3::AbstractElement; void UpdateNode(unsigned int const & rIndex, ::Node<3> * pNode) override { - PYBIND11_OVERLOAD_PURE( + PYBIND11_OVERRIDE_PURE( void, AbstractElement3_3, UpdateNode, @@ -26,14 +26,14 @@ class AbstractElement3_3_Overloads : public AbstractElement3_3{ pNode); } void MarkAsDeleted() override { - PYBIND11_OVERLOAD_PURE( + PYBIND11_OVERRIDE_PURE( void, AbstractElement3_3, MarkAsDeleted, ); } void RegisterWithNodes() override { - PYBIND11_OVERLOAD_PURE( + PYBIND11_OVERRIDE_PURE( void, AbstractElement3_3, RegisterWithNodes, diff --git a/dynamic/wrappers/mesh/FluidSource2.cppwg.cpp b/dynamic/wrappers/mesh/FluidSource2.cppwg.cpp new file mode 100644 index 00000000..ee354d31 --- /dev/null +++ b/dynamic/wrappers/mesh/FluidSource2.cppwg.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "FluidSource.hpp" + +#include "FluidSource2.cppwg.hpp" + +namespace py = pybind11; +typedef FluidSource<2 > FluidSource2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +void register_FluidSource2_class(py::module &m){ +py::class_ >(m, "FluidSource2") + .def(py::init >(), py::arg("index"), py::arg("point")) + .def(py::init >(), py::arg("index"), py::arg("location")) + .def(py::init(), py::arg("index"), py::arg("v1") = 0., py::arg("v2") = 0., py::arg("v3") = 0.) + .def( + "GetIndex", + (unsigned int(FluidSource2::*)() const ) &FluidSource2::GetIndex, + " " ) + .def( + "SetIndex", + (void(FluidSource2::*)(unsigned int)) &FluidSource2::SetIndex, + " " , py::arg("index") ) + .def( + "GetPoint", + (::ChastePoint<2>(FluidSource2::*)() const ) &FluidSource2::GetPoint, + " " ) + .def( + "rGetLocation", + (::boost::numeric::ublas::c_vector const &(FluidSource2::*)() const ) &FluidSource2::rGetLocation, + " " , py::return_value_policy::reference_internal) + .def( + "rGetModifiableLocation", + (::boost::numeric::ublas::c_vector &(FluidSource2::*)()) &FluidSource2::rGetModifiableLocation, + " " , py::return_value_policy::reference_internal) + .def( + "GetStrength", + (double(FluidSource2::*)() const ) &FluidSource2::GetStrength, + " " ) + .def( + "SetStrength", + (void(FluidSource2::*)(double)) &FluidSource2::SetStrength, + " " , py::arg("strength") ) + .def( + "SetIfSourceIsAssociatedWithElement", + (void(FluidSource2::*)(bool)) &FluidSource2::SetIfSourceIsAssociatedWithElement, + " " , py::arg("associated") ) + .def( + "IsSourceAssociatedWithElement", + (bool(FluidSource2::*)()) &FluidSource2::IsSourceAssociatedWithElement, + " " ) + .def( + "GetAssociatedElementIndex", + (unsigned int(FluidSource2::*)() const ) &FluidSource2::GetAssociatedElementIndex, + " " ) + .def( + "SetAssociatedElementIndex", + (void(FluidSource2::*)(unsigned int)) &FluidSource2::SetAssociatedElementIndex, + " " , py::arg("associatedElementIndex") ) + ; +} diff --git a/dynamic/wrappers/mesh/FluidSource2.cppwg.hpp b/dynamic/wrappers/mesh/FluidSource2.cppwg.hpp new file mode 100644 index 00000000..ef7adf18 --- /dev/null +++ b/dynamic/wrappers/mesh/FluidSource2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef FluidSource2_hpp__pyplusplus_wrapper +#define FluidSource2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_FluidSource2_class(py::module &m); +#endif // FluidSource2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/FluidSource3.cppwg.cpp b/dynamic/wrappers/mesh/FluidSource3.cppwg.cpp new file mode 100644 index 00000000..76c13407 --- /dev/null +++ b/dynamic/wrappers/mesh/FluidSource3.cppwg.cpp @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "FluidSource.hpp" + +#include "FluidSource3.cppwg.hpp" + +namespace py = pybind11; +typedef FluidSource<3 > FluidSource3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +void register_FluidSource3_class(py::module &m){ +py::class_ >(m, "FluidSource3") + .def(py::init >(), py::arg("index"), py::arg("point")) + .def(py::init >(), py::arg("index"), py::arg("location")) + .def(py::init(), py::arg("index"), py::arg("v1") = 0., py::arg("v2") = 0., py::arg("v3") = 0.) + .def( + "GetIndex", + (unsigned int(FluidSource3::*)() const ) &FluidSource3::GetIndex, + " " ) + .def( + "SetIndex", + (void(FluidSource3::*)(unsigned int)) &FluidSource3::SetIndex, + " " , py::arg("index") ) + .def( + "GetPoint", + (::ChastePoint<3>(FluidSource3::*)() const ) &FluidSource3::GetPoint, + " " ) + .def( + "rGetLocation", + (::boost::numeric::ublas::c_vector const &(FluidSource3::*)() const ) &FluidSource3::rGetLocation, + " " , py::return_value_policy::reference_internal) + .def( + "rGetModifiableLocation", + (::boost::numeric::ublas::c_vector &(FluidSource3::*)()) &FluidSource3::rGetModifiableLocation, + " " , py::return_value_policy::reference_internal) + .def( + "GetStrength", + (double(FluidSource3::*)() const ) &FluidSource3::GetStrength, + " " ) + .def( + "SetStrength", + (void(FluidSource3::*)(double)) &FluidSource3::SetStrength, + " " , py::arg("strength") ) + .def( + "SetIfSourceIsAssociatedWithElement", + (void(FluidSource3::*)(bool)) &FluidSource3::SetIfSourceIsAssociatedWithElement, + " " , py::arg("associated") ) + .def( + "IsSourceAssociatedWithElement", + (bool(FluidSource3::*)()) &FluidSource3::IsSourceAssociatedWithElement, + " " ) + .def( + "GetAssociatedElementIndex", + (unsigned int(FluidSource3::*)() const ) &FluidSource3::GetAssociatedElementIndex, + " " ) + .def( + "SetAssociatedElementIndex", + (void(FluidSource3::*)(unsigned int)) &FluidSource3::SetAssociatedElementIndex, + " " , py::arg("associatedElementIndex") ) + ; +} diff --git a/dynamic/wrappers/mesh/FluidSource3.cppwg.hpp b/dynamic/wrappers/mesh/FluidSource3.cppwg.hpp new file mode 100644 index 00000000..62bc931d --- /dev/null +++ b/dynamic/wrappers/mesh/FluidSource3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef FluidSource3_hpp__pyplusplus_wrapper +#define FluidSource3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_FluidSource3_class(py::module &m); +#endif // FluidSource3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement1_2.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement1_2.cppwg.cpp new file mode 100644 index 00000000..b88ef2dd --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement1_2.cppwg.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryElement.hpp" + +#include "ImmersedBoundaryElement1_2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryElement<1,2 > ImmersedBoundaryElement1_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryElement1_2_Overloads : public ImmersedBoundaryElement1_2{ + public: + using ImmersedBoundaryElement1_2::ImmersedBoundaryElement; + bool IsElementOnBoundary() const override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryElement1_2, + IsElementOnBoundary, + ); + } + +}; +void register_ImmersedBoundaryElement1_2_class(py::module &m){ +py::class_ , MutableElement<1, 2> >(m, "ImmersedBoundaryElement1_2") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def( + "SetFluidSource", + (void(ImmersedBoundaryElement1_2::*)(::std::shared_ptr>)) &ImmersedBoundaryElement1_2::SetFluidSource, + " " , py::arg("fluidSource") ) + .def( + "GetFluidSource", + (::std::shared_ptr>(ImmersedBoundaryElement1_2::*)()) &ImmersedBoundaryElement1_2::GetFluidSource, + " " ) + .def( + "rGetCornerNodes", + (::std::vector *> &(ImmersedBoundaryElement1_2::*)()) &ImmersedBoundaryElement1_2::rGetCornerNodes, + " " , py::return_value_policy::reference_internal) + .def( + "GetAverageNodeSpacing", + (double(ImmersedBoundaryElement1_2::*)()) &ImmersedBoundaryElement1_2::GetAverageNodeSpacing, + " " ) + .def( + "SetAverageNodeSpacing", + (void(ImmersedBoundaryElement1_2::*)(double)) &ImmersedBoundaryElement1_2::SetAverageNodeSpacing, + " " , py::arg("averageNodeSpacing") ) + .def( + "IsElementOnBoundary", + (bool(ImmersedBoundaryElement1_2::*)() const ) &ImmersedBoundaryElement1_2::IsElementOnBoundary, + " " ) + .def( + "SetIsBoundaryElement", + (void(ImmersedBoundaryElement1_2::*)(bool)) &ImmersedBoundaryElement1_2::SetIsBoundaryElement, + " " , py::arg("isBoundaryElement") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement1_2.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement1_2.cppwg.hpp new file mode 100644 index 00000000..4932aad6 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement1_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryElement1_2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryElement1_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryElement1_2_class(py::module &m); +#endif // ImmersedBoundaryElement1_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement2_2.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_2.cppwg.cpp new file mode 100644 index 00000000..5b948dc9 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_2.cppwg.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryElement.hpp" + +#include "ImmersedBoundaryElement2_2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryElement<2,2 > ImmersedBoundaryElement2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryElement2_2_Overloads : public ImmersedBoundaryElement2_2{ + public: + using ImmersedBoundaryElement2_2::ImmersedBoundaryElement; + bool IsElementOnBoundary() const override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryElement2_2, + IsElementOnBoundary, + ); + } + +}; +void register_ImmersedBoundaryElement2_2_class(py::module &m){ +py::class_ , MutableElement<2, 2> >(m, "ImmersedBoundaryElement2_2") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def( + "SetFluidSource", + (void(ImmersedBoundaryElement2_2::*)(::std::shared_ptr>)) &ImmersedBoundaryElement2_2::SetFluidSource, + " " , py::arg("fluidSource") ) + .def( + "GetFluidSource", + (::std::shared_ptr>(ImmersedBoundaryElement2_2::*)()) &ImmersedBoundaryElement2_2::GetFluidSource, + " " ) + .def( + "rGetCornerNodes", + (::std::vector *> &(ImmersedBoundaryElement2_2::*)()) &ImmersedBoundaryElement2_2::rGetCornerNodes, + " " , py::return_value_policy::reference_internal) + .def( + "GetAverageNodeSpacing", + (double(ImmersedBoundaryElement2_2::*)()) &ImmersedBoundaryElement2_2::GetAverageNodeSpacing, + " " ) + .def( + "SetAverageNodeSpacing", + (void(ImmersedBoundaryElement2_2::*)(double)) &ImmersedBoundaryElement2_2::SetAverageNodeSpacing, + " " , py::arg("averageNodeSpacing") ) + .def( + "IsElementOnBoundary", + (bool(ImmersedBoundaryElement2_2::*)() const ) &ImmersedBoundaryElement2_2::IsElementOnBoundary, + " " ) + .def( + "SetIsBoundaryElement", + (void(ImmersedBoundaryElement2_2::*)(bool)) &ImmersedBoundaryElement2_2::SetIsBoundaryElement, + " " , py::arg("isBoundaryElement") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement2_2.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_2.cppwg.hpp new file mode 100644 index 00000000..58e676f6 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryElement2_2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryElement2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryElement2_2_class(py::module &m); +#endif // ImmersedBoundaryElement2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement2_3.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_3.cppwg.cpp new file mode 100644 index 00000000..e3a07cca --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_3.cppwg.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryElement.hpp" + +#include "ImmersedBoundaryElement2_3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryElement<2,3 > ImmersedBoundaryElement2_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryElement2_3_Overloads : public ImmersedBoundaryElement2_3{ + public: + using ImmersedBoundaryElement2_3::ImmersedBoundaryElement; + bool IsElementOnBoundary() const override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryElement2_3, + IsElementOnBoundary, + ); + } + +}; +void register_ImmersedBoundaryElement2_3_class(py::module &m){ +py::class_ , MutableElement<2, 3> >(m, "ImmersedBoundaryElement2_3") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def( + "SetFluidSource", + (void(ImmersedBoundaryElement2_3::*)(::std::shared_ptr>)) &ImmersedBoundaryElement2_3::SetFluidSource, + " " , py::arg("fluidSource") ) + .def( + "GetFluidSource", + (::std::shared_ptr>(ImmersedBoundaryElement2_3::*)()) &ImmersedBoundaryElement2_3::GetFluidSource, + " " ) + .def( + "rGetCornerNodes", + (::std::vector *> &(ImmersedBoundaryElement2_3::*)()) &ImmersedBoundaryElement2_3::rGetCornerNodes, + " " , py::return_value_policy::reference_internal) + .def( + "GetAverageNodeSpacing", + (double(ImmersedBoundaryElement2_3::*)()) &ImmersedBoundaryElement2_3::GetAverageNodeSpacing, + " " ) + .def( + "SetAverageNodeSpacing", + (void(ImmersedBoundaryElement2_3::*)(double)) &ImmersedBoundaryElement2_3::SetAverageNodeSpacing, + " " , py::arg("averageNodeSpacing") ) + .def( + "IsElementOnBoundary", + (bool(ImmersedBoundaryElement2_3::*)() const ) &ImmersedBoundaryElement2_3::IsElementOnBoundary, + " " ) + .def( + "SetIsBoundaryElement", + (void(ImmersedBoundaryElement2_3::*)(bool)) &ImmersedBoundaryElement2_3::SetIsBoundaryElement, + " " , py::arg("isBoundaryElement") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement2_3.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_3.cppwg.hpp new file mode 100644 index 00000000..813eac7c --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement2_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryElement2_3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryElement2_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryElement2_3_class(py::module &m); +#endif // ImmersedBoundaryElement2_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement3_3.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement3_3.cppwg.cpp new file mode 100644 index 00000000..e2860b08 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement3_3.cppwg.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryElement.hpp" + +#include "ImmersedBoundaryElement3_3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryElement<3,3 > ImmersedBoundaryElement3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class ImmersedBoundaryElement3_3_Overloads : public ImmersedBoundaryElement3_3{ + public: + using ImmersedBoundaryElement3_3::ImmersedBoundaryElement; + bool IsElementOnBoundary() const override { + PYBIND11_OVERRIDE( + bool, + ImmersedBoundaryElement3_3, + IsElementOnBoundary, + ); + } + +}; +void register_ImmersedBoundaryElement3_3_class(py::module &m){ +py::class_ , MutableElement<3, 3> >(m, "ImmersedBoundaryElement3_3") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def( + "SetFluidSource", + (void(ImmersedBoundaryElement3_3::*)(::std::shared_ptr>)) &ImmersedBoundaryElement3_3::SetFluidSource, + " " , py::arg("fluidSource") ) + .def( + "GetFluidSource", + (::std::shared_ptr>(ImmersedBoundaryElement3_3::*)()) &ImmersedBoundaryElement3_3::GetFluidSource, + " " ) + .def( + "rGetCornerNodes", + (::std::vector *> &(ImmersedBoundaryElement3_3::*)()) &ImmersedBoundaryElement3_3::rGetCornerNodes, + " " , py::return_value_policy::reference_internal) + .def( + "GetAverageNodeSpacing", + (double(ImmersedBoundaryElement3_3::*)()) &ImmersedBoundaryElement3_3::GetAverageNodeSpacing, + " " ) + .def( + "SetAverageNodeSpacing", + (void(ImmersedBoundaryElement3_3::*)(double)) &ImmersedBoundaryElement3_3::SetAverageNodeSpacing, + " " , py::arg("averageNodeSpacing") ) + .def( + "IsElementOnBoundary", + (bool(ImmersedBoundaryElement3_3::*)() const ) &ImmersedBoundaryElement3_3::IsElementOnBoundary, + " " ) + .def( + "SetIsBoundaryElement", + (void(ImmersedBoundaryElement3_3::*)(bool)) &ImmersedBoundaryElement3_3::SetIsBoundaryElement, + " " , py::arg("isBoundaryElement") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryElement3_3.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryElement3_3.cppwg.hpp new file mode 100644 index 00000000..fa4fa138 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryElement3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryElement3_3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryElement3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryElement3_3_class(py::module &m); +#endif // ImmersedBoundaryElement3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryHoneycombMeshGenerator.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryHoneycombMeshGenerator.cppwg.cpp new file mode 100644 index 00000000..f5ec8ade --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryHoneycombMeshGenerator.cppwg.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryHoneycombMeshGenerator.hpp" + +#include "ImmersedBoundaryHoneycombMeshGenerator.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryHoneycombMeshGenerator ImmersedBoundaryHoneycombMeshGenerator; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +void register_ImmersedBoundaryHoneycombMeshGenerator_class(py::module &m){ +py::class_ >(m, "ImmersedBoundaryHoneycombMeshGenerator") + .def(py::init(), py::arg("numElementsX"), py::arg("numElementsY"), py::arg("numNodesPerEdge"), py::arg("proportionalGap"), py::arg("padding")) + .def(py::init< >()) + .def( + "GetMesh", + (::ImmersedBoundaryMesh<2, 2> *(ImmersedBoundaryHoneycombMeshGenerator::*)()) &ImmersedBoundaryHoneycombMeshGenerator::GetMesh, + " " , py::return_value_policy::reference) + .def( + "GetUnitHexagon", + (::std::vector>(ImmersedBoundaryHoneycombMeshGenerator::*)(unsigned int)) &ImmersedBoundaryHoneycombMeshGenerator::GetUnitHexagon, + " " , py::arg("numPtsPerSide") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryHoneycombMeshGenerator.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryHoneycombMeshGenerator.cppwg.hpp new file mode 100644 index 00000000..cff18946 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryHoneycombMeshGenerator.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryHoneycombMeshGenerator_hpp__pyplusplus_wrapper +#define ImmersedBoundaryHoneycombMeshGenerator_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryHoneycombMeshGenerator_class(py::module &m); +#endif // ImmersedBoundaryHoneycombMeshGenerator_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryMesh2_2.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryMesh2_2.cppwg.cpp new file mode 100644 index 00000000..ba8ee4ad --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryMesh2_2.cppwg.cpp @@ -0,0 +1,357 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryMesh.hpp" + +#include "ImmersedBoundaryMesh2_2.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryMesh<2,2 > ImmersedBoundaryMesh2_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef unsigned int unsignedint; +typedef unsigned int unsignedint; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_2_gt_; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_2_gt_; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; +typedef unsigned int unsignedint; + +class ImmersedBoundaryMesh2_2_Overloads : public ImmersedBoundaryMesh2_2{ + public: + using ImmersedBoundaryMesh2_2::ImmersedBoundaryMesh; + unsigned int GetNumNodes() const override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryMesh2_2, + GetNumNodes, + ); + } + unsigned int GetNumElements() const override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryMesh2_2, + GetNumElements, + ); + } + ::boost::numeric::ublas::c_vector GetVectorFromAtoB(::boost::numeric::ublas::c_vector const & rLocation1, ::boost::numeric::ublas::c_vector const & rLocation2) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_2_gt_, + ImmersedBoundaryMesh2_2, + GetVectorFromAtoB, + rLocation1, +rLocation2); + } + ::boost::numeric::ublas::c_vector GetCentroidOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_2_gt_, + ImmersedBoundaryMesh2_2, + GetCentroidOfElement, + index); + } + void Clear() override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMesh2_2, + Clear, + ); + } + double GetVolumeOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryMesh2_2, + GetVolumeOfElement, + index); + } + double GetSurfaceAreaOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryMesh2_2, + GetSurfaceAreaOfElement, + index); + } + ::boost::numeric::ublas::c_vector CalculateMomentsOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + ImmersedBoundaryMesh2_2, + CalculateMomentsOfElement, + index); + } + unsigned int SolveNodeMapping(unsigned int index) const override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryMesh2_2, + SolveNodeMapping, + index); + } + +}; +void register_ImmersedBoundaryMesh2_2_class(py::module &m){ +py::class_ , AbstractMesh<2, 2> >(m, "ImmersedBoundaryMesh2_2") + .def(py::init<::std::vector *>, ::std::vector *>, ::std::vector *>, unsigned int, unsigned int >(), py::arg("nodes"), py::arg("elements"), py::arg("laminas") = std::vector *>{}, py::arg("numGridPtsX") = 128U, py::arg("numGridPtsY") = 128U) + .def(py::init< >()) + .def( + "rGetNodes", + (::std::vector *> const &(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::rGetNodes, + " " , py::return_value_policy::reference_internal) + .def( + "GetElementIteratorBegin", + (::ImmersedBoundaryMesh<2, 2>::ImmersedBoundaryElementIterator(ImmersedBoundaryMesh2_2::*)(bool)) &ImmersedBoundaryMesh2_2::GetElementIteratorBegin, + " " , py::arg("skipDeletedElements") = true ) + .def( + "GetElementIteratorEnd", + (::ImmersedBoundaryMesh<2, 2>::ImmersedBoundaryElementIterator(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::GetElementIteratorEnd, + " " ) + .def( + "GetLaminaIteratorBegin", + (::ImmersedBoundaryMesh<2, 2>::ImmersedBoundaryLaminaIterator(ImmersedBoundaryMesh2_2::*)(bool)) &ImmersedBoundaryMesh2_2::GetLaminaIteratorBegin, + " " , py::arg("skipDeletedLaminas") = true ) + .def( + "GetLaminaIteratorEnd", + (::ImmersedBoundaryMesh<2, 2>::ImmersedBoundaryLaminaIterator(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::GetLaminaIteratorEnd, + " " ) + .def( + "GetNumNodes", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNumNodes, + " " ) + .def( + "GetNumElements", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNumElements, + " " ) + .def( + "GetNumAllElements", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNumAllElements, + " " ) + .def( + "GetNumLaminas", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNumLaminas, + " " ) + .def( + "GetNumGridPtsX", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNumGridPtsX, + " " ) + .def( + "GetNumGridPtsY", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNumGridPtsY, + " " ) + .def( + "GetCharacteristicNodeSpacing", + (double(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetCharacteristicNodeSpacing, + " " ) + .def( + "GetSpacingRatio", + (double(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetSpacingRatio, + " " ) + .def( + "GetMaxNodeIndex", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetMaxNodeIndex, + " " ) + .def( + "GetMaxElementIndex", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetMaxElementIndex, + " " ) + .def( + "GetMaxLaminaIndex", + (unsigned int(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetMaxLaminaIndex, + " " ) + .def( + "GetVectorFromAtoB", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh2_2::*)(::boost::numeric::ublas::c_vector const &, ::boost::numeric::ublas::c_vector const &)) &ImmersedBoundaryMesh2_2::GetVectorFromAtoB, + " " , py::arg("rLocation1"), py::arg("rLocation2") ) + .def( + "SetNode", + (void(ImmersedBoundaryMesh2_2::*)(unsigned int, ::ChastePoint<2>)) &ImmersedBoundaryMesh2_2::SetNode, + " " , py::arg("nodeIndex"), py::arg("point") ) + .def( + "ConformToGeometry", + (void(ImmersedBoundaryMesh2_2::*)(::boost::numeric::ublas::c_vector &)) &ImmersedBoundaryMesh2_2::ConformToGeometry, + " " , py::arg("rLocation") ) + .def( + "rGet2dVelocityGrids", + (::boost::multi_array const &(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::rGet2dVelocityGrids, + " " , py::return_value_policy::reference_internal) + .def( + "rGetModifiable2dVelocityGrids", + (::boost::multi_array &(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::rGetModifiable2dVelocityGrids, + " " , py::return_value_policy::reference_internal) + .def( + "SetNumGridPtsX", + (void(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::SetNumGridPtsX, + " " , py::arg("meshPointsX") ) + .def( + "SetNumGridPtsY", + (void(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::SetNumGridPtsY, + " " , py::arg("meshPointsY") ) + .def( + "SetNumGridPtsXAndY", + (void(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::SetNumGridPtsXAndY, + " " , py::arg("numGridPts") ) + .def( + "SetCharacteristicNodeSpacing", + (void(ImmersedBoundaryMesh2_2::*)(double)) &ImmersedBoundaryMesh2_2::SetCharacteristicNodeSpacing, + " " , py::arg("nodeSpacing") ) + .def( + "AddNode", + (unsigned int(ImmersedBoundaryMesh2_2::*)(::Node<2> *)) &ImmersedBoundaryMesh2_2::AddNode, + " " , py::arg("pNewNode") ) + .def( + "rGetElementFluidSources", + (::std::vector>> &(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::rGetElementFluidSources, + " " , py::return_value_policy::reference_internal) + .def( + "rGetBalancingFluidSources", + (::std::vector>> &(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::rGetBalancingFluidSources, + " " , py::return_value_policy::reference_internal) + .def( + "GetNeighbouringNodeIndices", + (::std::set(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetNeighbouringNodeIndices, + " " , py::arg("nodeIndex") ) + .def( + "GetElement", + (::ImmersedBoundaryElement<2, 2> *(ImmersedBoundaryMesh2_2::*)(unsigned int) const ) &ImmersedBoundaryMesh2_2::GetElement, + " " , py::arg("index") , py::return_value_policy::reference) + .def( + "GetLamina", + (::ImmersedBoundaryElement<1, 2> *(ImmersedBoundaryMesh2_2::*)(unsigned int) const ) &ImmersedBoundaryMesh2_2::GetLamina, + " " , py::arg("index") , py::return_value_policy::reference) + .def( + "GetCentroidOfElement", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetCentroidOfElement, + " " , py::arg("index") ) + .def( + "ConstructFromMeshReader", + (void(ImmersedBoundaryMesh2_2::*)(::AbstractMeshReader<2, 2> &)) &ImmersedBoundaryMesh2_2::ConstructFromMeshReader, + " " , py::arg("rMeshReader") ) + .def( + "Clear", + (void(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::Clear, + " " ) + .def( + "GetVolumeOfElement", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetVolumeOfElement, + " " , py::arg("index") ) + .def( + "GetSurfaceAreaOfElement", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetSurfaceAreaOfElement, + " " , py::arg("index") ) + .def( + "GetVoronoiSurfaceAreaOfElement", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetVoronoiSurfaceAreaOfElement, + " " , py::arg("elemIdx") ) + .def( + "GetAverageNodeSpacingOfElement", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int, bool)) &ImmersedBoundaryMesh2_2::GetAverageNodeSpacingOfElement, + " " , py::arg("index"), py::arg("recalculate") = true ) + .def( + "GetAverageNodeSpacingOfLamina", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int, bool)) &ImmersedBoundaryMesh2_2::GetAverageNodeSpacingOfLamina, + " " , py::arg("index"), py::arg("recalculate") = true ) + .def( + "CalculateMomentsOfElement", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::CalculateMomentsOfElement, + " " , py::arg("index") ) + .def( + "GetElongationShapeFactorOfElement", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetElongationShapeFactorOfElement, + " " , py::arg("elementIndex") ) + .def( + "GetTortuosityOfMesh", + (double(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::GetTortuosityOfMesh, + " " ) + .def( + "GetSkewnessOfElementMassDistributionAboutAxis", + (double(ImmersedBoundaryMesh2_2::*)(unsigned int, ::boost::numeric::ublas::c_vector)) &ImmersedBoundaryMesh2_2::GetSkewnessOfElementMassDistributionAboutAxis, + " " , py::arg("elemIndex"), py::arg("axis") ) + .def( + "CalculateBoundingBoxOfElement", + (::ChasteCuboid<2>(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::CalculateBoundingBoxOfElement, + " " , py::arg("index") ) + .def( + "GetShortAxisOfElement", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetShortAxisOfElement, + " " , py::arg("index") ) + .def( + "DivideElementAlongGivenAxis", + (unsigned int(ImmersedBoundaryMesh2_2::*)(::ImmersedBoundaryElement<2, 2> *, ::boost::numeric::ublas::c_vector, bool)) &ImmersedBoundaryMesh2_2::DivideElementAlongGivenAxis, + " " , py::arg("pElement"), py::arg("axisOfDivision"), py::arg("placeOriginalElementBelow") = false ) + .def( + "DivideElementAlongShortAxis", + (unsigned int(ImmersedBoundaryMesh2_2::*)(::ImmersedBoundaryElement<2, 2> *, bool)) &ImmersedBoundaryMesh2_2::DivideElementAlongShortAxis, + " " , py::arg("pElement"), py::arg("placeOriginalElementBelow") = false ) + .def( + "GetElementDivisionSpacing", + (double(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::GetElementDivisionSpacing, + " " ) + .def( + "SetElementDivisionSpacing", + (void(ImmersedBoundaryMesh2_2::*)(double)) &ImmersedBoundaryMesh2_2::SetElementDivisionSpacing, + " " , py::arg("elementDivisionSpacing") ) + .def( + "GetNeighbourDist", + (double(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetNeighbourDist, + " " ) + .def( + "SetCellRearrangementThreshold", + (void(ImmersedBoundaryMesh2_2::*)(double)) &ImmersedBoundaryMesh2_2::SetCellRearrangementThreshold, + " " , py::arg("cellRearrangementThreshold") ) + .def( + "GetCellRearrangementThreshold", + (double(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::GetCellRearrangementThreshold, + " " ) + .def( + "SetNeighbourDist", + (void(ImmersedBoundaryMesh2_2::*)(double)) &ImmersedBoundaryMesh2_2::SetNeighbourDist, + " " , py::arg("neighbourDist") ) + .def( + "UpdateNodeLocationsVoronoiDiagramIfOutOfDate", + (void(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::UpdateNodeLocationsVoronoiDiagramIfOutOfDate, + " " ) + .def( + "ReMesh", + (void(ImmersedBoundaryMesh2_2::*)(bool)) &ImmersedBoundaryMesh2_2::ReMesh, + " " , py::arg("randomOrder") = false ) + .def( + "ReMeshElement", + (void(ImmersedBoundaryMesh2_2::*)(::ImmersedBoundaryElement<2, 2> *, bool)) &ImmersedBoundaryMesh2_2::ReMeshElement, + " " , py::arg("pElement"), py::arg("randomOrder") ) + .def( + "ReMeshLamina", + (void(ImmersedBoundaryMesh2_2::*)(::ImmersedBoundaryElement<1, 2> *, bool)) &ImmersedBoundaryMesh2_2::ReMeshLamina, + " " , py::arg("pLamina"), py::arg("randomOrder") ) + .def( + "NodesInDifferentElementOrLamina", + (bool(ImmersedBoundaryMesh2_2::*)(::Node<2> *, ::Node<2> *)) &ImmersedBoundaryMesh2_2::NodesInDifferentElementOrLamina, + " " , py::arg("pNodeA"), py::arg("pNodeB") ) + .def( + "GetNeighbouringElementIndices", + (::std::set(ImmersedBoundaryMesh2_2::*)(unsigned int)) &ImmersedBoundaryMesh2_2::GetNeighbouringElementIndices, + " " , py::arg("elemIdx") ) + .def( + "CalculateLengthOfVoronoiEdge", + (double(ImmersedBoundaryMesh2_2::*)(::boost::polygon::voronoi_diagram::edge_type const &)) &ImmersedBoundaryMesh2_2::CalculateLengthOfVoronoiEdge, + " " , py::arg("rEdge") ) + .def( + "GetPolygonDistribution", + (::std::array(ImmersedBoundaryMesh2_2::*)()) &ImmersedBoundaryMesh2_2::GetPolygonDistribution, + " " ) + .def( + "rGetNodeLocationsVoronoiDiagram", + (::boost::polygon::voronoi_diagram const &(ImmersedBoundaryMesh2_2::*)(bool)) &ImmersedBoundaryMesh2_2::rGetNodeLocationsVoronoiDiagram, + " " , py::arg("update") = true , py::return_value_policy::reference_internal) + .def( + "GetVoronoiCellIdsIndexedByNodeIndex", + (::std::vector const &(ImmersedBoundaryMesh2_2::*)() const ) &ImmersedBoundaryMesh2_2::GetVoronoiCellIdsIndexedByNodeIndex, + " " , py::return_value_policy::reference_internal) + .def( + "ScaleUpToVoronoiCoordinate", + (int(ImmersedBoundaryMesh2_2::*)(double) const ) &ImmersedBoundaryMesh2_2::ScaleUpToVoronoiCoordinate, + " " , py::arg("location") ) + .def( + "ScaleDistanceDownFromVoronoi", + (double(ImmersedBoundaryMesh2_2::*)(double const) const ) &ImmersedBoundaryMesh2_2::ScaleDistanceDownFromVoronoi, + " " , py::arg("distance") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryMesh2_2.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryMesh2_2.cppwg.hpp new file mode 100644 index 00000000..e74537e5 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryMesh2_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryMesh2_2_hpp__pyplusplus_wrapper +#define ImmersedBoundaryMesh2_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryMesh2_2_class(py::module &m); +#endif // ImmersedBoundaryMesh2_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryMesh3_3.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryMesh3_3.cppwg.cpp new file mode 100644 index 00000000..4bc4989a --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryMesh3_3.cppwg.cpp @@ -0,0 +1,357 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryMesh.hpp" + +#include "ImmersedBoundaryMesh3_3.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryMesh<3,3 > ImmersedBoundaryMesh3_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef unsigned int unsignedint; +typedef unsigned int unsignedint; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; +typedef ::boost::numeric::ublas::c_vector _boost_numeric_ublas_c_vector_lt_double_3_gt_; +typedef unsigned int unsignedint; + +class ImmersedBoundaryMesh3_3_Overloads : public ImmersedBoundaryMesh3_3{ + public: + using ImmersedBoundaryMesh3_3::ImmersedBoundaryMesh; + unsigned int GetNumNodes() const override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryMesh3_3, + GetNumNodes, + ); + } + unsigned int GetNumElements() const override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryMesh3_3, + GetNumElements, + ); + } + ::boost::numeric::ublas::c_vector GetVectorFromAtoB(::boost::numeric::ublas::c_vector const & rLocation1, ::boost::numeric::ublas::c_vector const & rLocation2) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + ImmersedBoundaryMesh3_3, + GetVectorFromAtoB, + rLocation1, +rLocation2); + } + ::boost::numeric::ublas::c_vector GetCentroidOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + ImmersedBoundaryMesh3_3, + GetCentroidOfElement, + index); + } + void Clear() override { + PYBIND11_OVERRIDE( + void, + ImmersedBoundaryMesh3_3, + Clear, + ); + } + double GetVolumeOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryMesh3_3, + GetVolumeOfElement, + index); + } + double GetSurfaceAreaOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + double, + ImmersedBoundaryMesh3_3, + GetSurfaceAreaOfElement, + index); + } + ::boost::numeric::ublas::c_vector CalculateMomentsOfElement(unsigned int index) override { + PYBIND11_OVERRIDE( + _boost_numeric_ublas_c_vector_lt_double_3_gt_, + ImmersedBoundaryMesh3_3, + CalculateMomentsOfElement, + index); + } + unsigned int SolveNodeMapping(unsigned int index) const override { + PYBIND11_OVERRIDE( + unsignedint, + ImmersedBoundaryMesh3_3, + SolveNodeMapping, + index); + } + +}; +void register_ImmersedBoundaryMesh3_3_class(py::module &m){ +py::class_ , AbstractMesh<3, 3> >(m, "ImmersedBoundaryMesh3_3") + .def(py::init<::std::vector *>, ::std::vector *>, ::std::vector *>, unsigned int, unsigned int >(), py::arg("nodes"), py::arg("elements"), py::arg("laminas") = std::vector *>{}, py::arg("numGridPtsX") = 128U, py::arg("numGridPtsY") = 128U) + .def(py::init< >()) + .def( + "rGetNodes", + (::std::vector *> const &(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::rGetNodes, + " " , py::return_value_policy::reference_internal) + .def( + "GetElementIteratorBegin", + (::ImmersedBoundaryMesh<3, 3>::ImmersedBoundaryElementIterator(ImmersedBoundaryMesh3_3::*)(bool)) &ImmersedBoundaryMesh3_3::GetElementIteratorBegin, + " " , py::arg("skipDeletedElements") = true ) + .def( + "GetElementIteratorEnd", + (::ImmersedBoundaryMesh<3, 3>::ImmersedBoundaryElementIterator(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::GetElementIteratorEnd, + " " ) + .def( + "GetLaminaIteratorBegin", + (::ImmersedBoundaryMesh<3, 3>::ImmersedBoundaryLaminaIterator(ImmersedBoundaryMesh3_3::*)(bool)) &ImmersedBoundaryMesh3_3::GetLaminaIteratorBegin, + " " , py::arg("skipDeletedLaminas") = true ) + .def( + "GetLaminaIteratorEnd", + (::ImmersedBoundaryMesh<3, 3>::ImmersedBoundaryLaminaIterator(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::GetLaminaIteratorEnd, + " " ) + .def( + "GetNumNodes", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNumNodes, + " " ) + .def( + "GetNumElements", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNumElements, + " " ) + .def( + "GetNumAllElements", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNumAllElements, + " " ) + .def( + "GetNumLaminas", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNumLaminas, + " " ) + .def( + "GetNumGridPtsX", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNumGridPtsX, + " " ) + .def( + "GetNumGridPtsY", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNumGridPtsY, + " " ) + .def( + "GetCharacteristicNodeSpacing", + (double(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetCharacteristicNodeSpacing, + " " ) + .def( + "GetSpacingRatio", + (double(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetSpacingRatio, + " " ) + .def( + "GetMaxNodeIndex", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetMaxNodeIndex, + " " ) + .def( + "GetMaxElementIndex", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetMaxElementIndex, + " " ) + .def( + "GetMaxLaminaIndex", + (unsigned int(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetMaxLaminaIndex, + " " ) + .def( + "GetVectorFromAtoB", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh3_3::*)(::boost::numeric::ublas::c_vector const &, ::boost::numeric::ublas::c_vector const &)) &ImmersedBoundaryMesh3_3::GetVectorFromAtoB, + " " , py::arg("rLocation1"), py::arg("rLocation2") ) + .def( + "SetNode", + (void(ImmersedBoundaryMesh3_3::*)(unsigned int, ::ChastePoint<3>)) &ImmersedBoundaryMesh3_3::SetNode, + " " , py::arg("nodeIndex"), py::arg("point") ) + .def( + "ConformToGeometry", + (void(ImmersedBoundaryMesh3_3::*)(::boost::numeric::ublas::c_vector &)) &ImmersedBoundaryMesh3_3::ConformToGeometry, + " " , py::arg("rLocation") ) + .def( + "rGet2dVelocityGrids", + (::boost::multi_array const &(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::rGet2dVelocityGrids, + " " , py::return_value_policy::reference_internal) + .def( + "rGetModifiable2dVelocityGrids", + (::boost::multi_array &(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::rGetModifiable2dVelocityGrids, + " " , py::return_value_policy::reference_internal) + .def( + "SetNumGridPtsX", + (void(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::SetNumGridPtsX, + " " , py::arg("meshPointsX") ) + .def( + "SetNumGridPtsY", + (void(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::SetNumGridPtsY, + " " , py::arg("meshPointsY") ) + .def( + "SetNumGridPtsXAndY", + (void(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::SetNumGridPtsXAndY, + " " , py::arg("numGridPts") ) + .def( + "SetCharacteristicNodeSpacing", + (void(ImmersedBoundaryMesh3_3::*)(double)) &ImmersedBoundaryMesh3_3::SetCharacteristicNodeSpacing, + " " , py::arg("nodeSpacing") ) + .def( + "AddNode", + (unsigned int(ImmersedBoundaryMesh3_3::*)(::Node<3> *)) &ImmersedBoundaryMesh3_3::AddNode, + " " , py::arg("pNewNode") ) + .def( + "rGetElementFluidSources", + (::std::vector>> &(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::rGetElementFluidSources, + " " , py::return_value_policy::reference_internal) + .def( + "rGetBalancingFluidSources", + (::std::vector>> &(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::rGetBalancingFluidSources, + " " , py::return_value_policy::reference_internal) + .def( + "GetNeighbouringNodeIndices", + (::std::set(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetNeighbouringNodeIndices, + " " , py::arg("nodeIndex") ) + .def( + "GetElement", + (::ImmersedBoundaryElement<3, 3> *(ImmersedBoundaryMesh3_3::*)(unsigned int) const ) &ImmersedBoundaryMesh3_3::GetElement, + " " , py::arg("index") , py::return_value_policy::reference) + .def( + "GetLamina", + (::ImmersedBoundaryElement<2, 3> *(ImmersedBoundaryMesh3_3::*)(unsigned int) const ) &ImmersedBoundaryMesh3_3::GetLamina, + " " , py::arg("index") , py::return_value_policy::reference) + .def( + "GetCentroidOfElement", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetCentroidOfElement, + " " , py::arg("index") ) + .def( + "ConstructFromMeshReader", + (void(ImmersedBoundaryMesh3_3::*)(::AbstractMeshReader<3, 3> &)) &ImmersedBoundaryMesh3_3::ConstructFromMeshReader, + " " , py::arg("rMeshReader") ) + .def( + "Clear", + (void(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::Clear, + " " ) + .def( + "GetVolumeOfElement", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetVolumeOfElement, + " " , py::arg("index") ) + .def( + "GetSurfaceAreaOfElement", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetSurfaceAreaOfElement, + " " , py::arg("index") ) + .def( + "GetVoronoiSurfaceAreaOfElement", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetVoronoiSurfaceAreaOfElement, + " " , py::arg("elemIdx") ) + .def( + "GetAverageNodeSpacingOfElement", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int, bool)) &ImmersedBoundaryMesh3_3::GetAverageNodeSpacingOfElement, + " " , py::arg("index"), py::arg("recalculate") = true ) + .def( + "GetAverageNodeSpacingOfLamina", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int, bool)) &ImmersedBoundaryMesh3_3::GetAverageNodeSpacingOfLamina, + " " , py::arg("index"), py::arg("recalculate") = true ) + .def( + "CalculateMomentsOfElement", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::CalculateMomentsOfElement, + " " , py::arg("index") ) + .def( + "GetElongationShapeFactorOfElement", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetElongationShapeFactorOfElement, + " " , py::arg("elementIndex") ) + .def( + "GetTortuosityOfMesh", + (double(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::GetTortuosityOfMesh, + " " ) + .def( + "GetSkewnessOfElementMassDistributionAboutAxis", + (double(ImmersedBoundaryMesh3_3::*)(unsigned int, ::boost::numeric::ublas::c_vector)) &ImmersedBoundaryMesh3_3::GetSkewnessOfElementMassDistributionAboutAxis, + " " , py::arg("elemIndex"), py::arg("axis") ) + .def( + "CalculateBoundingBoxOfElement", + (::ChasteCuboid<3>(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::CalculateBoundingBoxOfElement, + " " , py::arg("index") ) + .def( + "GetShortAxisOfElement", + (::boost::numeric::ublas::c_vector(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetShortAxisOfElement, + " " , py::arg("index") ) + .def( + "DivideElementAlongGivenAxis", + (unsigned int(ImmersedBoundaryMesh3_3::*)(::ImmersedBoundaryElement<3, 3> *, ::boost::numeric::ublas::c_vector, bool)) &ImmersedBoundaryMesh3_3::DivideElementAlongGivenAxis, + " " , py::arg("pElement"), py::arg("axisOfDivision"), py::arg("placeOriginalElementBelow") = false ) + .def( + "DivideElementAlongShortAxis", + (unsigned int(ImmersedBoundaryMesh3_3::*)(::ImmersedBoundaryElement<3, 3> *, bool)) &ImmersedBoundaryMesh3_3::DivideElementAlongShortAxis, + " " , py::arg("pElement"), py::arg("placeOriginalElementBelow") = false ) + .def( + "GetElementDivisionSpacing", + (double(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::GetElementDivisionSpacing, + " " ) + .def( + "SetElementDivisionSpacing", + (void(ImmersedBoundaryMesh3_3::*)(double)) &ImmersedBoundaryMesh3_3::SetElementDivisionSpacing, + " " , py::arg("elementDivisionSpacing") ) + .def( + "GetNeighbourDist", + (double(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetNeighbourDist, + " " ) + .def( + "SetCellRearrangementThreshold", + (void(ImmersedBoundaryMesh3_3::*)(double)) &ImmersedBoundaryMesh3_3::SetCellRearrangementThreshold, + " " , py::arg("cellRearrangementThreshold") ) + .def( + "GetCellRearrangementThreshold", + (double(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::GetCellRearrangementThreshold, + " " ) + .def( + "SetNeighbourDist", + (void(ImmersedBoundaryMesh3_3::*)(double)) &ImmersedBoundaryMesh3_3::SetNeighbourDist, + " " , py::arg("neighbourDist") ) + .def( + "UpdateNodeLocationsVoronoiDiagramIfOutOfDate", + (void(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::UpdateNodeLocationsVoronoiDiagramIfOutOfDate, + " " ) + .def( + "ReMesh", + (void(ImmersedBoundaryMesh3_3::*)(bool)) &ImmersedBoundaryMesh3_3::ReMesh, + " " , py::arg("randomOrder") = false ) + .def( + "ReMeshElement", + (void(ImmersedBoundaryMesh3_3::*)(::ImmersedBoundaryElement<3, 3> *, bool)) &ImmersedBoundaryMesh3_3::ReMeshElement, + " " , py::arg("pElement"), py::arg("randomOrder") ) + .def( + "ReMeshLamina", + (void(ImmersedBoundaryMesh3_3::*)(::ImmersedBoundaryElement<2, 3> *, bool)) &ImmersedBoundaryMesh3_3::ReMeshLamina, + " " , py::arg("pLamina"), py::arg("randomOrder") ) + .def( + "NodesInDifferentElementOrLamina", + (bool(ImmersedBoundaryMesh3_3::*)(::Node<3> *, ::Node<3> *)) &ImmersedBoundaryMesh3_3::NodesInDifferentElementOrLamina, + " " , py::arg("pNodeA"), py::arg("pNodeB") ) + .def( + "GetNeighbouringElementIndices", + (::std::set(ImmersedBoundaryMesh3_3::*)(unsigned int)) &ImmersedBoundaryMesh3_3::GetNeighbouringElementIndices, + " " , py::arg("elemIdx") ) + .def( + "CalculateLengthOfVoronoiEdge", + (double(ImmersedBoundaryMesh3_3::*)(::boost::polygon::voronoi_diagram::edge_type const &)) &ImmersedBoundaryMesh3_3::CalculateLengthOfVoronoiEdge, + " " , py::arg("rEdge") ) + .def( + "GetPolygonDistribution", + (::std::array(ImmersedBoundaryMesh3_3::*)()) &ImmersedBoundaryMesh3_3::GetPolygonDistribution, + " " ) + .def( + "rGetNodeLocationsVoronoiDiagram", + (::boost::polygon::voronoi_diagram const &(ImmersedBoundaryMesh3_3::*)(bool)) &ImmersedBoundaryMesh3_3::rGetNodeLocationsVoronoiDiagram, + " " , py::arg("update") = true , py::return_value_policy::reference_internal) + .def( + "GetVoronoiCellIdsIndexedByNodeIndex", + (::std::vector const &(ImmersedBoundaryMesh3_3::*)() const ) &ImmersedBoundaryMesh3_3::GetVoronoiCellIdsIndexedByNodeIndex, + " " , py::return_value_policy::reference_internal) + .def( + "ScaleUpToVoronoiCoordinate", + (int(ImmersedBoundaryMesh3_3::*)(double) const ) &ImmersedBoundaryMesh3_3::ScaleUpToVoronoiCoordinate, + " " , py::arg("location") ) + .def( + "ScaleDistanceDownFromVoronoi", + (double(ImmersedBoundaryMesh3_3::*)(double const) const ) &ImmersedBoundaryMesh3_3::ScaleDistanceDownFromVoronoi, + " " , py::arg("distance") ) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryMesh3_3.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryMesh3_3.cppwg.hpp new file mode 100644 index 00000000..8f63d5f1 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryMesh3_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryMesh3_3_hpp__pyplusplus_wrapper +#define ImmersedBoundaryMesh3_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryMesh3_3_class(py::module &m); +#endif // ImmersedBoundaryMesh3_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryPalisadeMeshGenerator.cppwg.cpp b/dynamic/wrappers/mesh/ImmersedBoundaryPalisadeMeshGenerator.cppwg.cpp new file mode 100644 index 00000000..a8ba433b --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryPalisadeMeshGenerator.cppwg.cpp @@ -0,0 +1,26 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "ImmersedBoundaryPalisadeMeshGenerator.hpp" + +#include "ImmersedBoundaryPalisadeMeshGenerator.cppwg.hpp" + +namespace py = pybind11; +typedef ImmersedBoundaryPalisadeMeshGenerator ImmersedBoundaryPalisadeMeshGenerator; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +void register_ImmersedBoundaryPalisadeMeshGenerator_class(py::module &m){ +py::class_ >(m, "ImmersedBoundaryPalisadeMeshGenerator") + .def(py::init(), py::arg("numCellsWide"), py::arg("numNodesPerCell") = 100, py::arg("ellipseExponent") = 0.20000000000000001, py::arg("cellAspectRatio") = 2., py::arg("randomYMult") = 0., py::arg("basalLamina") = false, py::arg("apicalLamina") = false, py::arg("leakyLaminas") = false, py::arg("numFluidMeshPoints") = (2147483647 * 2U + 1U), py::arg("absoluteGap") = DOUBLE_UNSET) + .def(py::init< >()) + .def( + "GetMesh", + (::ImmersedBoundaryMesh<2, 2> *(ImmersedBoundaryPalisadeMeshGenerator::*)()) &ImmersedBoundaryPalisadeMeshGenerator::GetMesh, + " " , py::return_value_policy::reference) + ; +} diff --git a/dynamic/wrappers/mesh/ImmersedBoundaryPalisadeMeshGenerator.cppwg.hpp b/dynamic/wrappers/mesh/ImmersedBoundaryPalisadeMeshGenerator.cppwg.hpp new file mode 100644 index 00000000..425709d5 --- /dev/null +++ b/dynamic/wrappers/mesh/ImmersedBoundaryPalisadeMeshGenerator.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef ImmersedBoundaryPalisadeMeshGenerator_hpp__pyplusplus_wrapper +#define ImmersedBoundaryPalisadeMeshGenerator_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_ImmersedBoundaryPalisadeMeshGenerator_class(py::module &m); +#endif // ImmersedBoundaryPalisadeMeshGenerator_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/MutableElement1_2.cppwg.cpp b/dynamic/wrappers/mesh/MutableElement1_2.cppwg.cpp new file mode 100644 index 00000000..b126e1fc --- /dev/null +++ b/dynamic/wrappers/mesh/MutableElement1_2.cppwg.cpp @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "MutableElement.hpp" + +#include "MutableElement1_2.cppwg.hpp" + +namespace py = pybind11; +typedef MutableElement<1,2 > MutableElement1_2; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class MutableElement1_2_Overloads : public MutableElement1_2{ + public: + using MutableElement1_2::MutableElement; + void RegisterWithNodes() override { + PYBIND11_OVERRIDE( + void, + MutableElement1_2, + RegisterWithNodes, + ); + } + void MarkAsDeleted() override { + PYBIND11_OVERRIDE( + void, + MutableElement1_2, + MarkAsDeleted, + ); + } + void UpdateNode(unsigned int const & rIndex, ::Node<2> * pNode) override { + PYBIND11_OVERRIDE( + void, + MutableElement1_2, + UpdateNode, + rIndex, +pNode); + } + bool IsElementOnBoundary() const override { + PYBIND11_OVERRIDE( + bool, + MutableElement1_2, + IsElementOnBoundary, + ); + } + +}; +void register_MutableElement1_2_class(py::module &m){ +py::class_ , AbstractElement<1, 2> >(m, "MutableElement1_2") + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def( + "RegisterWithNodes", + (void(MutableElement1_2::*)()) &MutableElement1_2::RegisterWithNodes, + " " ) + .def( + "MarkAsDeleted", + (void(MutableElement1_2::*)()) &MutableElement1_2::MarkAsDeleted, + " " ) + .def( + "ResetIndex", + (void(MutableElement1_2::*)(unsigned int)) &MutableElement1_2::ResetIndex, + " " , py::arg("index") ) + .def( + "UpdateNode", + (void(MutableElement1_2::*)(unsigned int const &, ::Node<2> *)) &MutableElement1_2::UpdateNode, + " " , py::arg("rIndex"), py::arg("pNode") ) + .def( + "DeleteNode", + (void(MutableElement1_2::*)(unsigned int const &)) &MutableElement1_2::DeleteNode, + " " , py::arg("rIndex") ) + .def( + "AddNode", + (void(MutableElement1_2::*)(::Node<2> *, unsigned int const &)) &MutableElement1_2::AddNode, + " " , py::arg("pNode"), py::arg("rIndex") ) + .def( + "GetNodeLocalIndex", + (unsigned int(MutableElement1_2::*)(unsigned int) const ) &MutableElement1_2::GetNodeLocalIndex, + " " , py::arg("globalIndex") ) + .def( + "RegisterWithEdges", + (void(MutableElement1_2::*)()) &MutableElement1_2::RegisterWithEdges, + " " ) + .def( + "RebuildEdges", + (void(MutableElement1_2::*)()) &MutableElement1_2::RebuildEdges, + " " ) + .def( + "IsElementOnBoundary", + (bool(MutableElement1_2::*)() const ) &MutableElement1_2::IsElementOnBoundary, + " " ) + .def( + "SetEdgeHelper", + (void(MutableElement1_2::*)(::EdgeHelper<2> *)) &MutableElement1_2::SetEdgeHelper, + " " , py::arg("pEdgeHelper") ) + .def( + "ClearEdges", + (void(MutableElement1_2::*)()) &MutableElement1_2::ClearEdges, + " " ) + .def( + "BuildEdges", + (void(MutableElement1_2::*)()) &MutableElement1_2::BuildEdges, + " " ) + .def( + "GetEdgeGlobalIndex", + (unsigned int(MutableElement1_2::*)(unsigned int) const ) &MutableElement1_2::GetEdgeGlobalIndex, + " " , py::arg("localIndex") ) + .def( + "GetEdge", + (::Edge<2> *(MutableElement1_2::*)(unsigned int) const ) &MutableElement1_2::GetEdge, + " " , py::arg("localIndex") , py::return_value_policy::reference) + .def( + "GetNumEdges", + (unsigned int(MutableElement1_2::*)() const ) &MutableElement1_2::GetNumEdges, + " " ) + .def( + "GetNeighbouringElementAtEdgeIndex", + (::std::set(MutableElement1_2::*)(unsigned int)) &MutableElement1_2::GetNeighbouringElementAtEdgeIndex, + " " , py::arg("localIndex") ) + .def( + "ContainsEdge", + (bool(MutableElement1_2::*)(::Edge<2> const *) const ) &MutableElement1_2::ContainsEdge, + " " , py::arg("pEdge") ) + .def( + "GetLocalEdgeIndex", + (long int(MutableElement1_2::*)(::Edge<2> const *) const ) &MutableElement1_2::GetLocalEdgeIndex, + " " , py::arg("pEdge") ) + ; +} diff --git a/dynamic/wrappers/mesh/MutableElement1_2.cppwg.hpp b/dynamic/wrappers/mesh/MutableElement1_2.cppwg.hpp new file mode 100644 index 00000000..9736fd4a --- /dev/null +++ b/dynamic/wrappers/mesh/MutableElement1_2.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef MutableElement1_2_hpp__pyplusplus_wrapper +#define MutableElement1_2_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_MutableElement1_2_class(py::module &m); +#endif // MutableElement1_2_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/MutableElement2_2.cppwg.cpp b/dynamic/wrappers/mesh/MutableElement2_2.cppwg.cpp index 3bbc7622..c48b6ab5 100644 --- a/dynamic/wrappers/mesh/MutableElement2_2.cppwg.cpp +++ b/dynamic/wrappers/mesh/MutableElement2_2.cppwg.cpp @@ -18,21 +18,21 @@ class MutableElement2_2_Overloads : public MutableElement2_2{ public: using MutableElement2_2::MutableElement; void RegisterWithNodes() override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( void, MutableElement2_2, RegisterWithNodes, ); } void MarkAsDeleted() override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( void, MutableElement2_2, MarkAsDeleted, ); } void UpdateNode(unsigned int const & rIndex, ::Node<2> * pNode) override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( void, MutableElement2_2, UpdateNode, @@ -40,7 +40,7 @@ class MutableElement2_2_Overloads : public MutableElement2_2{ pNode); } bool IsElementOnBoundary() const override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( bool, MutableElement2_2, IsElementOnBoundary, diff --git a/dynamic/wrappers/mesh/MutableElement2_3.cppwg.cpp b/dynamic/wrappers/mesh/MutableElement2_3.cppwg.cpp new file mode 100644 index 00000000..38fcd9b0 --- /dev/null +++ b/dynamic/wrappers/mesh/MutableElement2_3.cppwg.cpp @@ -0,0 +1,132 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "MutableElement.hpp" + +#include "MutableElement2_3.cppwg.hpp" + +namespace py = pybind11; +typedef MutableElement<2,3 > MutableElement2_3; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); + +class MutableElement2_3_Overloads : public MutableElement2_3{ + public: + using MutableElement2_3::MutableElement; + void RegisterWithNodes() override { + PYBIND11_OVERRIDE( + void, + MutableElement2_3, + RegisterWithNodes, + ); + } + void MarkAsDeleted() override { + PYBIND11_OVERRIDE( + void, + MutableElement2_3, + MarkAsDeleted, + ); + } + void UpdateNode(unsigned int const & rIndex, ::Node<3> * pNode) override { + PYBIND11_OVERRIDE( + void, + MutableElement2_3, + UpdateNode, + rIndex, +pNode); + } + bool IsElementOnBoundary() const override { + PYBIND11_OVERRIDE( + bool, + MutableElement2_3, + IsElementOnBoundary, + ); + } + +}; +void register_MutableElement2_3_class(py::module &m){ +py::class_ , AbstractElement<2, 3> >(m, "MutableElement2_3") + .def(py::init(), py::arg("index")) + .def(py::init *> const & >(), py::arg("index"), py::arg("rNodes")) + .def( + "RegisterWithNodes", + (void(MutableElement2_3::*)()) &MutableElement2_3::RegisterWithNodes, + " " ) + .def( + "MarkAsDeleted", + (void(MutableElement2_3::*)()) &MutableElement2_3::MarkAsDeleted, + " " ) + .def( + "ResetIndex", + (void(MutableElement2_3::*)(unsigned int)) &MutableElement2_3::ResetIndex, + " " , py::arg("index") ) + .def( + "UpdateNode", + (void(MutableElement2_3::*)(unsigned int const &, ::Node<3> *)) &MutableElement2_3::UpdateNode, + " " , py::arg("rIndex"), py::arg("pNode") ) + .def( + "DeleteNode", + (void(MutableElement2_3::*)(unsigned int const &)) &MutableElement2_3::DeleteNode, + " " , py::arg("rIndex") ) + .def( + "AddNode", + (void(MutableElement2_3::*)(::Node<3> *, unsigned int const &)) &MutableElement2_3::AddNode, + " " , py::arg("pNode"), py::arg("rIndex") ) + .def( + "GetNodeLocalIndex", + (unsigned int(MutableElement2_3::*)(unsigned int) const ) &MutableElement2_3::GetNodeLocalIndex, + " " , py::arg("globalIndex") ) + .def( + "RegisterWithEdges", + (void(MutableElement2_3::*)()) &MutableElement2_3::RegisterWithEdges, + " " ) + .def( + "RebuildEdges", + (void(MutableElement2_3::*)()) &MutableElement2_3::RebuildEdges, + " " ) + .def( + "IsElementOnBoundary", + (bool(MutableElement2_3::*)() const ) &MutableElement2_3::IsElementOnBoundary, + " " ) + .def( + "SetEdgeHelper", + (void(MutableElement2_3::*)(::EdgeHelper<3> *)) &MutableElement2_3::SetEdgeHelper, + " " , py::arg("pEdgeHelper") ) + .def( + "ClearEdges", + (void(MutableElement2_3::*)()) &MutableElement2_3::ClearEdges, + " " ) + .def( + "BuildEdges", + (void(MutableElement2_3::*)()) &MutableElement2_3::BuildEdges, + " " ) + .def( + "GetEdgeGlobalIndex", + (unsigned int(MutableElement2_3::*)(unsigned int) const ) &MutableElement2_3::GetEdgeGlobalIndex, + " " , py::arg("localIndex") ) + .def( + "GetEdge", + (::Edge<3> *(MutableElement2_3::*)(unsigned int) const ) &MutableElement2_3::GetEdge, + " " , py::arg("localIndex") , py::return_value_policy::reference) + .def( + "GetNumEdges", + (unsigned int(MutableElement2_3::*)() const ) &MutableElement2_3::GetNumEdges, + " " ) + .def( + "GetNeighbouringElementAtEdgeIndex", + (::std::set(MutableElement2_3::*)(unsigned int)) &MutableElement2_3::GetNeighbouringElementAtEdgeIndex, + " " , py::arg("localIndex") ) + .def( + "ContainsEdge", + (bool(MutableElement2_3::*)(::Edge<3> const *) const ) &MutableElement2_3::ContainsEdge, + " " , py::arg("pEdge") ) + .def( + "GetLocalEdgeIndex", + (long int(MutableElement2_3::*)(::Edge<3> const *) const ) &MutableElement2_3::GetLocalEdgeIndex, + " " , py::arg("pEdge") ) + ; +} diff --git a/dynamic/wrappers/mesh/MutableElement2_3.cppwg.hpp b/dynamic/wrappers/mesh/MutableElement2_3.cppwg.hpp new file mode 100644 index 00000000..32a874a4 --- /dev/null +++ b/dynamic/wrappers/mesh/MutableElement2_3.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef MutableElement2_3_hpp__pyplusplus_wrapper +#define MutableElement2_3_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_MutableElement2_3_class(py::module &m); +#endif // MutableElement2_3_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/mesh/MutableElement3_3.cppwg.cpp b/dynamic/wrappers/mesh/MutableElement3_3.cppwg.cpp index d4dfc118..272251f4 100644 --- a/dynamic/wrappers/mesh/MutableElement3_3.cppwg.cpp +++ b/dynamic/wrappers/mesh/MutableElement3_3.cppwg.cpp @@ -18,21 +18,21 @@ class MutableElement3_3_Overloads : public MutableElement3_3{ public: using MutableElement3_3::MutableElement; void RegisterWithNodes() override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( void, MutableElement3_3, RegisterWithNodes, ); } void MarkAsDeleted() override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( void, MutableElement3_3, MarkAsDeleted, ); } void UpdateNode(unsigned int const & rIndex, ::Node<3> * pNode) override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( void, MutableElement3_3, UpdateNode, @@ -40,7 +40,7 @@ class MutableElement3_3_Overloads : public MutableElement3_3{ pNode); } bool IsElementOnBoundary() const override { - PYBIND11_OVERLOAD( + PYBIND11_OVERRIDE( bool, MutableElement3_3, IsElementOnBoundary, diff --git a/dynamic/wrappers/mesh/mesh.main.cpp b/dynamic/wrappers/mesh/mesh.main.cpp index c1530c47..235e7531 100644 --- a/dynamic/wrappers/mesh/mesh.main.cpp +++ b/dynamic/wrappers/mesh/mesh.main.cpp @@ -1,5 +1,4 @@ #include - #include "ChastePoint2.cppwg.hpp" #include "ChastePoint3.cppwg.hpp" #include "AbstractChasteRegion2.cppwg.hpp" @@ -19,10 +18,6 @@ #include "EdgeHelper2.cppwg.hpp" #include "EdgeHelper3.cppwg.hpp" #include "EdgeOperation.cppwg.hpp" -#include "AbstractElement2_2.cppwg.hpp" -#include "AbstractElement3_3.cppwg.hpp" -#include "MutableElement2_2.cppwg.hpp" -#include "MutableElement3_3.cppwg.hpp" #include "AbstractMesh2_2.cppwg.hpp" #include "AbstractMesh3_3.cppwg.hpp" #include "AbstractTetrahedralMesh2_2.cppwg.hpp" @@ -31,12 +26,26 @@ #include "TetrahedralMesh3_3.cppwg.hpp" #include "MutableMesh2_2.cppwg.hpp" #include "MutableMesh3_3.cppwg.hpp" +#include "AbstractElement1_2.cppwg.hpp" +#include "AbstractElement2_2.cppwg.hpp" +#include "AbstractElement2_3.cppwg.hpp" +#include "AbstractElement3_3.cppwg.hpp" +#include "MutableElement1_2.cppwg.hpp" +#include "MutableElement2_2.cppwg.hpp" +#include "MutableElement2_3.cppwg.hpp" +#include "MutableElement3_3.cppwg.hpp" #include "NodesOnlyMesh2.cppwg.hpp" #include "NodesOnlyMesh3.cppwg.hpp" #include "PottsElement2.cppwg.hpp" #include "PottsElement3.cppwg.hpp" #include "PottsMesh2.cppwg.hpp" #include "PottsMesh3.cppwg.hpp" +#include "FluidSource2.cppwg.hpp" +#include "FluidSource3.cppwg.hpp" +#include "ImmersedBoundaryElement1_2.cppwg.hpp" +#include "ImmersedBoundaryElement2_2.cppwg.hpp" +#include "ImmersedBoundaryElement2_3.cppwg.hpp" +#include "ImmersedBoundaryElement3_3.cppwg.hpp" #include "PottsMeshGenerator2.cppwg.hpp" #include "PottsMeshGenerator3.cppwg.hpp" #include "VertexMesh2_2.cppwg.hpp" @@ -50,13 +59,17 @@ #include "Cylindrical2dNodesOnlyMesh.cppwg.hpp" #include "Cylindrical2dMesh.cppwg.hpp" #include "Toroidal2dVertexMesh.cppwg.hpp" +#include "ImmersedBoundaryMesh2_2.cppwg.hpp" +#include "ImmersedBoundaryMesh3_3.cppwg.hpp" #include "HoneycombMeshGenerator.cppwg.hpp" #include "HoneycombVertexMeshGenerator.cppwg.hpp" -#include "CylindricalHoneycombVertexMeshGenerator.cppwg.hpp" #include "CylindricalHoneycombMeshGenerator.cppwg.hpp" +#include "CylindricalHoneycombVertexMeshGenerator.cppwg.hpp" #include "ToroidalHoneycombMeshGenerator.cppwg.hpp" #include "ToroidalHoneycombVertexMeshGenerator.cppwg.hpp" #include "VoronoiVertexMeshGenerator.cppwg.hpp" +#include "ImmersedBoundaryHoneycombMeshGenerator.cppwg.hpp" +#include "ImmersedBoundaryPalisadeMeshGenerator.cppwg.hpp" namespace py = pybind11; @@ -81,10 +94,6 @@ PYBIND11_MODULE(_chaste_project_PyChaste_mesh, m) register_EdgeHelper2_class(m); register_EdgeHelper3_class(m); register_EdgeOperation_class(m); - register_AbstractElement2_2_class(m); - register_AbstractElement3_3_class(m); - register_MutableElement2_2_class(m); - register_MutableElement3_3_class(m); register_AbstractMesh2_2_class(m); register_AbstractMesh3_3_class(m); register_AbstractTetrahedralMesh2_2_class(m); @@ -93,12 +102,26 @@ PYBIND11_MODULE(_chaste_project_PyChaste_mesh, m) register_TetrahedralMesh3_3_class(m); register_MutableMesh2_2_class(m); register_MutableMesh3_3_class(m); + register_AbstractElement1_2_class(m); + register_AbstractElement2_2_class(m); + register_AbstractElement2_3_class(m); + register_AbstractElement3_3_class(m); + register_MutableElement1_2_class(m); + register_MutableElement2_2_class(m); + register_MutableElement2_3_class(m); + register_MutableElement3_3_class(m); register_NodesOnlyMesh2_class(m); register_NodesOnlyMesh3_class(m); register_PottsElement2_class(m); register_PottsElement3_class(m); register_PottsMesh2_class(m); register_PottsMesh3_class(m); + register_FluidSource2_class(m); + register_FluidSource3_class(m); + register_ImmersedBoundaryElement1_2_class(m); + register_ImmersedBoundaryElement2_2_class(m); + register_ImmersedBoundaryElement2_3_class(m); + register_ImmersedBoundaryElement3_3_class(m); register_PottsMeshGenerator2_class(m); register_PottsMeshGenerator3_class(m); register_VertexMesh2_2_class(m); @@ -112,11 +135,15 @@ PYBIND11_MODULE(_chaste_project_PyChaste_mesh, m) register_Cylindrical2dNodesOnlyMesh_class(m); register_Cylindrical2dMesh_class(m); register_Toroidal2dVertexMesh_class(m); + register_ImmersedBoundaryMesh2_2_class(m); + register_ImmersedBoundaryMesh3_3_class(m); register_HoneycombMeshGenerator_class(m); register_HoneycombVertexMeshGenerator_class(m); - register_CylindricalHoneycombVertexMeshGenerator_class(m); register_CylindricalHoneycombMeshGenerator_class(m); + register_CylindricalHoneycombVertexMeshGenerator_class(m); register_ToroidalHoneycombMeshGenerator_class(m); register_ToroidalHoneycombVertexMeshGenerator_class(m); register_VoronoiVertexMeshGenerator_class(m); + register_ImmersedBoundaryHoneycombMeshGenerator_class(m); + register_ImmersedBoundaryPalisadeMeshGenerator_class(m); } diff --git a/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.cpp b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.cpp new file mode 100644 index 00000000..541b6e9a --- /dev/null +++ b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem.hpp" + +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractLinearParabolicPdeSystemForCoupledOdeSystem<2,2,1 > AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::boost::numeric::ublas::c_matrix _boost_numeric_ublas_c_matrix_lt_double_2_2_gt_; + +class AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_Overloads : public AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1{ + public: + using AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::AbstractLinearParabolicPdeSystemForCoupledOdeSystem; + double ComputeDuDtCoefficientFunction(::ChastePoint<2> const & rX, unsigned int pdeIndex) override { + PYBIND11_OVERRIDE_PURE( + double, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1, + ComputeDuDtCoefficientFunction, + rX, +pdeIndex); + } + double ComputeSourceTerm(::ChastePoint<2> const & rX, ::boost::numeric::ublas::c_vector & rU, ::std::vector & rOdeSolution, unsigned int pdeIndex) override { + PYBIND11_OVERRIDE_PURE( + double, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1, + ComputeSourceTerm, + rX, +rU, +rOdeSolution, +pdeIndex); + } + double ComputeSourceTermAtNode(::Node<2> const & rNode, ::boost::numeric::ublas::c_vector & rU, ::std::vector & rOdeSolution, unsigned int pdeIndex) override { + PYBIND11_OVERRIDE( + double, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1, + ComputeSourceTermAtNode, + rNode, +rU, +rOdeSolution, +pdeIndex); + } + ::boost::numeric::ublas::c_matrix ComputeDiffusionTerm(::ChastePoint<2> const & rX, unsigned int pdeIndex, ::Element<2, 2> * pElement) override { + PYBIND11_OVERRIDE_PURE( + _boost_numeric_ublas_c_matrix_lt_double_2_2_gt_, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1, + ComputeDiffusionTerm, + rX, +pdeIndex, +pElement); + } + +}; +void register_AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_class(py::module &m){ +py::class_ >(m, "AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1") + .def(py::init< >()) + .def( + "ComputeDuDtCoefficientFunction", + (double(AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::*)(::ChastePoint<2> const &, unsigned int)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::ComputeDuDtCoefficientFunction, + " " , py::arg("rX"), py::arg("pdeIndex") ) + .def( + "ComputeSourceTerm", + (double(AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::*)(::ChastePoint<2> const &, ::boost::numeric::ublas::c_vector &, ::std::vector &, unsigned int)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::ComputeSourceTerm, + " " , py::arg("rX"), py::arg("rU"), py::arg("rOdeSolution"), py::arg("pdeIndex") ) + .def( + "ComputeSourceTermAtNode", + (double(AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::*)(::Node<2> const &, ::boost::numeric::ublas::c_vector &, ::std::vector &, unsigned int)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::ComputeSourceTermAtNode, + " " , py::arg("rNode"), py::arg("rU"), py::arg("rOdeSolution"), py::arg("pdeIndex") ) + .def( + "ComputeDiffusionTerm", + (::boost::numeric::ublas::c_matrix(AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::*)(::ChastePoint<2> const &, unsigned int, ::Element<2, 2> *)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1::ComputeDiffusionTerm, + " " , py::arg("rX"), py::arg("pdeIndex"), py::arg("pElement") = __null ) + ; +} diff --git a/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.hpp b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.hpp new file mode 100644 index 00000000..0d460d11 --- /dev/null +++ b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_hpp__pyplusplus_wrapper +#define AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_class(py::module &m); +#endif // AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.cpp b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.cpp new file mode 100644 index 00000000..d2a62032 --- /dev/null +++ b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include "SmartPointers.hpp" +#include "UblasIncludes.hpp" +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem.hpp" + +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.hpp" + +namespace py = pybind11; +typedef AbstractLinearParabolicPdeSystemForCoupledOdeSystem<3,3,1 > AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1; +PYBIND11_DECLARE_HOLDER_TYPE(T, boost::shared_ptr); +typedef ::boost::numeric::ublas::c_matrix _boost_numeric_ublas_c_matrix_lt_double_3_3_gt_; + +class AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_Overloads : public AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1{ + public: + using AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::AbstractLinearParabolicPdeSystemForCoupledOdeSystem; + double ComputeDuDtCoefficientFunction(::ChastePoint<3> const & rX, unsigned int pdeIndex) override { + PYBIND11_OVERRIDE_PURE( + double, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1, + ComputeDuDtCoefficientFunction, + rX, +pdeIndex); + } + double ComputeSourceTerm(::ChastePoint<3> const & rX, ::boost::numeric::ublas::c_vector & rU, ::std::vector & rOdeSolution, unsigned int pdeIndex) override { + PYBIND11_OVERRIDE_PURE( + double, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1, + ComputeSourceTerm, + rX, +rU, +rOdeSolution, +pdeIndex); + } + double ComputeSourceTermAtNode(::Node<3> const & rNode, ::boost::numeric::ublas::c_vector & rU, ::std::vector & rOdeSolution, unsigned int pdeIndex) override { + PYBIND11_OVERRIDE( + double, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1, + ComputeSourceTermAtNode, + rNode, +rU, +rOdeSolution, +pdeIndex); + } + ::boost::numeric::ublas::c_matrix ComputeDiffusionTerm(::ChastePoint<3> const & rX, unsigned int pdeIndex, ::Element<3, 3> * pElement) override { + PYBIND11_OVERRIDE_PURE( + _boost_numeric_ublas_c_matrix_lt_double_3_3_gt_, + AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1, + ComputeDiffusionTerm, + rX, +pdeIndex, +pElement); + } + +}; +void register_AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_class(py::module &m){ +py::class_ >(m, "AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1") + .def(py::init< >()) + .def( + "ComputeDuDtCoefficientFunction", + (double(AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::*)(::ChastePoint<3> const &, unsigned int)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::ComputeDuDtCoefficientFunction, + " " , py::arg("rX"), py::arg("pdeIndex") ) + .def( + "ComputeSourceTerm", + (double(AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::*)(::ChastePoint<3> const &, ::boost::numeric::ublas::c_vector &, ::std::vector &, unsigned int)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::ComputeSourceTerm, + " " , py::arg("rX"), py::arg("rU"), py::arg("rOdeSolution"), py::arg("pdeIndex") ) + .def( + "ComputeSourceTermAtNode", + (double(AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::*)(::Node<3> const &, ::boost::numeric::ublas::c_vector &, ::std::vector &, unsigned int)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::ComputeSourceTermAtNode, + " " , py::arg("rNode"), py::arg("rU"), py::arg("rOdeSolution"), py::arg("pdeIndex") ) + .def( + "ComputeDiffusionTerm", + (::boost::numeric::ublas::c_matrix(AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::*)(::ChastePoint<3> const &, unsigned int, ::Element<3, 3> *)) &AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1::ComputeDiffusionTerm, + " " , py::arg("rX"), py::arg("pdeIndex"), py::arg("pElement") = __null ) + ; +} diff --git a/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.hpp b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.hpp new file mode 100644 index 00000000..71634219 --- /dev/null +++ b/dynamic/wrappers/pde/AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.hpp @@ -0,0 +1,6 @@ +#ifndef AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_hpp__pyplusplus_wrapper +#define AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_hpp__pyplusplus_wrapper + +namespace py = pybind11; +void register_AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_class(py::module &m); +#endif // AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_hpp__pyplusplus_wrapper diff --git a/dynamic/wrappers/pde/pde.main.cpp b/dynamic/wrappers/pde/pde.main.cpp index 48d3ff46..1267775c 100644 --- a/dynamic/wrappers/pde/pde.main.cpp +++ b/dynamic/wrappers/pde/pde.main.cpp @@ -5,6 +5,8 @@ #include "AbstractLinearParabolicPde3_3.cppwg.hpp" #include "AbstractLinearEllipticPde2_2.cppwg.hpp" #include "AbstractLinearEllipticPde3_3.cppwg.hpp" +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1.cppwg.hpp" +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1.cppwg.hpp" #include "AbstractNonlinearEllipticPde2.cppwg.hpp" #include "AbstractNonlinearEllipticPde3.cppwg.hpp" #include "AbstractBoundaryCondition2.cppwg.hpp" @@ -23,6 +25,8 @@ PYBIND11_MODULE(_chaste_project_PyChaste_pde, m) register_AbstractLinearParabolicPde3_3_class(m); register_AbstractLinearEllipticPde2_2_class(m); register_AbstractLinearEllipticPde3_3_class(m); + register_AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1_class(m); + register_AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1_class(m); register_AbstractNonlinearEllipticPde2_class(m); register_AbstractNonlinearEllipticPde3_class(m); register_AbstractBoundaryCondition2_class(m); diff --git a/dynamic/wrappers/wrapper_header_collection.hpp b/dynamic/wrappers/wrapper_header_collection.hpp index 9865dafe..1b0794a0 100644 --- a/dynamic/wrappers/wrapper_header_collection.hpp +++ b/dynamic/wrappers/wrapper_header_collection.hpp @@ -7,7 +7,6 @@ #include "ReplicatableVector.hpp" #include "Timer.hpp" #include "FileFinder.hpp" -#include "FileFinder.hpp" #include "OutputFileHandler.hpp" #include "ProgressReporter.hpp" #include "RandomNumberGenerator.hpp" @@ -16,35 +15,41 @@ #include "AbstractOdeSystemInformation.hpp" #include "AbstractPythonOdeSystemInformation.hpp" #include "AbstractOdeSystem.hpp" -#include "AbstractLinearPde.hpp" -#include "AbstractLinearParabolicPde.hpp" #include "DeltaNotchEdgeOdeSystem.hpp" #include "DeltaNotchInteriorOdeSystem.hpp" #include "Alarcon2004OxygenBasedCellCycleOdeSystem.hpp" #include "Goldbeter1991OdeSystem.hpp" #include "TysonNovak2001OdeSystem.hpp" #include "DeltaNotchOdeSystem.hpp" +#include "AbstractLinearPde.hpp" +#include "AbstractLinearParabolicPde.hpp" #include "AbstractLinearEllipticPde.hpp" +#include "AbstractLinearParabolicPdeSystemForCoupledOdeSystem.hpp" #include "AbstractNonlinearEllipticPde.hpp" #include "AbstractBoundaryCondition.hpp" #include "ConstBoundaryCondition.hpp" #include "PdeSimulationTime.hpp" #include "ChastePoint.hpp" +#include "AbstractChasteRegion.hpp" +#include "ChasteCuboid.hpp" +#include "ChasteEllipsoid.hpp" #include "NodeAttributes.hpp" #include "Node.hpp" #include "Element.hpp" #include "Edge.hpp" #include "EdgeHelper.hpp" #include "EdgeOperation.hpp" -#include "AbstractElement.hpp" -#include "MutableElement.hpp" #include "AbstractMesh.hpp" #include "AbstractTetrahedralMesh.hpp" #include "TetrahedralMesh.hpp" #include "MutableMesh.hpp" +#include "AbstractElement.hpp" +#include "MutableElement.hpp" #include "NodesOnlyMesh.hpp" #include "PottsElement.hpp" #include "PottsMesh.hpp" +#include "FluidSource.hpp" +#include "ImmersedBoundaryElement.hpp" #include "PottsMeshGenerator.hpp" #include "VertexMesh.hpp" #include "MutableVertexMesh.hpp" @@ -54,13 +59,16 @@ #include "Cylindrical2dNodesOnlyMesh.hpp" #include "Cylindrical2dMesh.hpp" #include "Toroidal2dVertexMesh.hpp" +#include "ImmersedBoundaryMesh.hpp" #include "HoneycombMeshGenerator.hpp" #include "HoneycombVertexMeshGenerator.hpp" -#include "CylindricalHoneycombVertexMeshGenerator.hpp" #include "CylindricalHoneycombMeshGenerator.hpp" +#include "CylindricalHoneycombVertexMeshGenerator.hpp" #include "ToroidalHoneycombMeshGenerator.hpp" #include "ToroidalHoneycombVertexMeshGenerator.hpp" #include "VoronoiVertexMeshGenerator.hpp" +#include "ImmersedBoundaryHoneycombMeshGenerator.hpp" +#include "ImmersedBoundaryPalisadeMeshGenerator.hpp" #include "AbstractCellCycleModel.hpp" #include "AbstractPhaseBasedCellCycleModel.hpp" #include "AbstractSimpleCellCycleModel.hpp" @@ -120,11 +128,11 @@ #include "VolumeDependentAveragedSourceEllipticPde.hpp" #include "UniformSourceEllipticPde.hpp" #include "CellwiseSourceParabolicPde.hpp" -#include "AbstractCellBasedSimulationModifier.hpp" #include "UniformSourceParabolicPde.hpp" #include "AveragedSourceParabolicPde.hpp" #include "CellBasedEllipticPdeSolver.hpp" #include "CellBasedParabolicPdeSolver.hpp" +#include "AbstractCellBasedSimulationModifier.hpp" #include "AbstractPdeModifier.hpp" #include "AbstractBoxDomainPdeModifier.hpp" #include "AbstractGrowingDomainPdeModifier.hpp" @@ -132,7 +140,47 @@ #include "ParabolicGrowingDomainPdeModifier.hpp" #include "EllipticBoxDomainPdeModifier.hpp" #include "ParabolicBoxDomainPdeModifier.hpp" +#include "AbstractCellBasedWriter.hpp" +#include "AbstractCellWriter.hpp" +#include "AbstractCellPopulationWriter.hpp" +#include "AbstractCellPopulationCountWriter.hpp" +#include "AbstractCellPopulationEventWriter.hpp" +#include "BoundaryNodeWriter.hpp" +#include "CellAgesWriter.hpp" +#include "CellAncestorWriter.hpp" +#include "CellAppliedForceWriter.hpp" +#include "CellCycleModelProteinConcentrationsWriter.hpp" +#include "CellDataItemWriter.hpp" +#include "CellDeltaNotchWriter.hpp" +#include "CellDivisionLocationsWriter.hpp" +#include "CellIdWriter.hpp" +#include "CellLocationIndexWriter.hpp" +#include "CellMutationStatesCountWriter.hpp" +#include "CellMutationStatesWriter.hpp" +#include "CellPopulationAdjacencyMatrixWriter.hpp" +#include "CellPopulationAreaWriter.hpp" +#include "CellPopulationElementWriter.hpp" +#include "CellProliferativePhasesCountWriter.hpp" +#include "CellProliferativePhasesWriter.hpp" +#include "CellProliferativeTypesCountWriter.hpp" +#include "CellProliferativeTypesWriter.hpp" +#include "CellRadiusWriter.hpp" +#include "CellRemovalLocationsWriter.hpp" +#include "CellRosetteRankWriter.hpp" +#include "CellVolumesWriter.hpp" +#include "HeterotypicBoundaryLengthWriter.hpp" +#include "LegacyCellProliferativeTypesWriter.hpp" +#include "NodeLocationWriter.hpp" +#include "NodeVelocityWriter.hpp" +#include "PottsMeshWriter.hpp" +#include "RadialCellDataDistributionWriter.hpp" +#include "VertexIntersectionSwapLocationsWriter.hpp" +#include "VertexT1SwapLocationsWriter.hpp" +#include "VertexT2SwapLocationsWriter.hpp" +#include "VertexT3SwapLocationsWriter.hpp" #include "VoronoiDataWriter.hpp" +#include "ImmersedBoundaryBoundaryCellWriter.hpp" +#include "ImmersedBoundaryNeighbourNumberWriter.hpp" #include "CellLabelWriter.hpp" #include "AbstractUpdateRule.hpp" #include "AbstractCaUpdateRule.hpp" @@ -143,18 +191,23 @@ #include "AdhesionPottsUpdateRule.hpp" #include "DifferentialAdhesionPottsUpdateRule.hpp" #include "AbstractVertexBasedDivisionRule.hpp" -#include "AbstractForce.hpp" -#include "AbstractTwoBodyInteractionForce.hpp" #include "RandomDirectionVertexBasedDivisionRule.hpp" #include "VonMisesVertexBasedDivisionRule.hpp" #include "FixedVertexBasedDivisionRule.hpp" #include "AbstractCaBasedDivisionRule.hpp" #include "ShovingCaBasedDivisionRule.hpp" #include "ExclusionCaBasedDivisionRule.hpp" +#include "RandomDirectionCentreBasedDivisionRule.hpp" +#include "FixedCentreBasedDivisionRule.hpp" +#include "AbstractCentreBasedDivisionRule.hpp" #include "ShortAxisVertexBasedDivisionRule.hpp" +#include "AbstractImmersedBoundaryDivisionRule.hpp" +#include "ShortAxisImmersedBoundaryDivisionRule.hpp" #include "RandomCaSwitchingUpdateRule.hpp" #include "ChemotaxisPottsUpdateRule.hpp" #include "AbstractCaSwitchingUpdateRule.hpp" +#include "AbstractForce.hpp" +#include "AbstractTwoBodyInteractionForce.hpp" #include "BuskeAdhesiveForce.hpp" #include "BuskeCompressionForce.hpp" #include "BuskeElasticForce.hpp" @@ -168,24 +221,32 @@ #include "FarhadifarForce.hpp" #include "PlanarPolarisedFarhadifarForce.hpp" #include "NagaiHondaDifferentialAdhesionForce.hpp" +#include "AbstractImmersedBoundaryForce.hpp" +#include "ImmersedBoundaryKinematicFeedbackForce.hpp" +#include "ImmersedBoundaryLinearDifferentialAdhesionForce.hpp" +#include "ImmersedBoundaryLinearInteractionForce.hpp" +#include "ImmersedBoundaryLinearMembraneForce.hpp" +#include "ImmersedBoundaryMorseInteractionForce.hpp" +#include "ImmersedBoundaryMorseMembraneForce.hpp" #include "AbstractCellKiller.hpp" #include "PlaneBasedCellKiller.hpp" #include "ApoptoticCellKiller.hpp" -#include "AbstractCellPopulation.hpp" -#include "AbstractCellPopulationBoundaryCondition.hpp" -#include "PlaneBoundaryCondition.hpp" -#include "AttractingPlaneBoundaryCondition.hpp" #include "TargetedCellKiller.hpp" #include "RandomCellKiller.hpp" #include "T2SwapCellKiller.hpp" #include "IsolatedLabelledCellKiller.hpp" +#include "AbstractCellPopulationBoundaryCondition.hpp" +#include "PlaneBoundaryCondition.hpp" +#include "AttractingPlaneBoundaryCondition.hpp" #include "SphereGeometryBoundaryCondition.hpp" +#include "SlidingBoundaryCondition.hpp" +#include "AbstractCellPopulation.hpp" #include "AbstractOffLatticeCellPopulation.hpp" #include "AbstractCentreBasedCellPopulation.hpp" -#include "SlidingBoundaryCondition.hpp" #include "AbstractOnLatticeCellPopulation.hpp" #include "NodeBasedCellPopulationWithParticles.hpp" #include "CaBasedCellPopulation.hpp" +#include "ImmersedBoundaryCellPopulation.hpp" #include "MeshBasedCellPopulation.hpp" #include "MeshBasedCellPopulationWithGhostNodes.hpp" #include "VertexBasedCellPopulation.hpp" @@ -201,6 +262,9 @@ #include "TargetAreaLinearGrowthModifier.hpp" #include "VolumeTrackingModifier.hpp" #include "VtkSceneModifier.hpp" +#include "ImmersedBoundarySimulationModifier.hpp" +#include "ImmersedBoundarySvgWriter.hpp" +#include "NormallyDistributedTargetAreaModifier.hpp" #include "AbstractCellBasedSimulation.hpp" #include "SimulationTime.hpp" #include "OnLatticeSimulation.hpp" @@ -210,49 +274,6 @@ #include "VtkScene.hpp" #include "AbstractPyChasteActorGenerator.hpp" #include "CellPopulationPyChasteActorGenerator.hpp" -#include "AbstractChasteRegion.hpp" -#include "ChastePoint.hpp" -#include "ChasteCuboid.hpp" -#include "ChasteEllipsoid.hpp" -#include "AbstractCellBasedWriter.hpp" -#include "AbstractCellWriter.hpp" -#include "AbstractCellPopulationWriter.hpp" -#include "AbstractCellPopulationCountWriter.hpp" -#include "AbstractCellPopulationEventWriter.hpp" -#include "BoundaryNodeWriter.hpp" -#include "CellAgesWriter.hpp" -#include "CellAncestorWriter.hpp" -#include "CellAppliedForceWriter.hpp" -#include "CellCycleModelProteinConcentrationsWriter.hpp" -#include "CellDataItemWriter.hpp" -#include "CellDeltaNotchWriter.hpp" -#include "CellDivisionLocationsWriter.hpp" -#include "CellIdWriter.hpp" -#include "CellLocationIndexWriter.hpp" -#include "CellMutationStatesCountWriter.hpp" -#include "CellMutationStatesWriter.hpp" -#include "CellPopulationAdjacencyMatrixWriter.hpp" -#include "CellPopulationAreaWriter.hpp" -#include "CellPopulationElementWriter.hpp" -#include "CellProliferativePhasesCountWriter.hpp" -#include "CellProliferativePhasesWriter.hpp" -#include "CellProliferativeTypesCountWriter.hpp" -#include "CellProliferativeTypesWriter.hpp" -#include "CellRadiusWriter.hpp" -#include "CellRemovalLocationsWriter.hpp" -#include "CellRosetteRankWriter.hpp" -#include "CellVolumesWriter.hpp" -#include "HeterotypicBoundaryLengthWriter.hpp" -#include "LegacyCellProliferativeTypesWriter.hpp" -#include "NodeLocationWriter.hpp" -#include "NodeVelocityWriter.hpp" -#include "PottsMeshWriter.hpp" -#include "RadialCellDataDistributionWriter.hpp" -#include "VertexIntersectionSwapLocationsWriter.hpp" -#include "VertexT1SwapLocationsWriter.hpp" -#include "VertexT2SwapLocationsWriter.hpp" -#include "VertexT3SwapLocationsWriter.hpp" - // Instantiate Template Classes template class AbstractLinearPde<2,2>; @@ -261,6 +282,8 @@ template class AbstractLinearParabolicPde<2,2>; template class AbstractLinearParabolicPde<3,3>; template class AbstractLinearEllipticPde<2,2>; template class AbstractLinearEllipticPde<3,3>; +template class AbstractLinearParabolicPdeSystemForCoupledOdeSystem<2,2,1>; +template class AbstractLinearParabolicPdeSystemForCoupledOdeSystem<3,3,1>; template class AbstractNonlinearEllipticPde<2>; template class AbstractNonlinearEllipticPde<3>; template class AbstractBoundaryCondition<2>; @@ -269,6 +292,12 @@ template class ConstBoundaryCondition<2>; template class ConstBoundaryCondition<3>; template class ChastePoint<2>; template class ChastePoint<3>; +template class AbstractChasteRegion<2>; +template class AbstractChasteRegion<3>; +template class ChasteCuboid<2>; +template class ChasteCuboid<3>; +template class ChasteEllipsoid<2>; +template class ChasteEllipsoid<3>; template class NodeAttributes<2>; template class NodeAttributes<3>; template class Node<2>; @@ -279,10 +308,6 @@ template class Edge<2>; template class Edge<3>; template class EdgeHelper<2>; template class EdgeHelper<3>; -template class AbstractElement<2,2>; -template class AbstractElement<3,3>; -template class MutableElement<2,2>; -template class MutableElement<3,3>; template class AbstractMesh<2,2>; template class AbstractMesh<3,3>; template class AbstractTetrahedralMesh<2,2>; @@ -291,12 +316,24 @@ template class TetrahedralMesh<2,2>; template class TetrahedralMesh<3,3>; template class MutableMesh<2,2>; template class MutableMesh<3,3>; +template class AbstractElement<2,2>; +template class AbstractElement<3,3>; +template class MutableElement<1,2>; +template class MutableElement<2,2>; +template class MutableElement<2,3>; +template class MutableElement<3,3>; template class NodesOnlyMesh<2>; template class NodesOnlyMesh<3>; template class PottsElement<2>; template class PottsElement<3>; template class PottsMesh<2>; template class PottsMesh<3>; +template class FluidSource<2>; +template class FluidSource<3>; +template class ImmersedBoundaryElement<1,2>; +template class ImmersedBoundaryElement<2,2>; +template class ImmersedBoundaryElement<2,3>; +template class ImmersedBoundaryElement<3,3>; template class PottsMeshGenerator<2>; template class PottsMeshGenerator<3>; template class VertexMesh<2,2>; @@ -305,6 +342,8 @@ template class MutableVertexMesh<2,2>; template class MutableVertexMesh<3,3>; template class PeriodicNodesOnlyMesh<2>; template class PeriodicNodesOnlyMesh<3>; +template class ImmersedBoundaryMesh<2,2>; +template class ImmersedBoundaryMesh<3,3>; template class VertexBasedPopulationSrn<2>; template class VertexBasedPopulationSrn<3>; template class CellsGenerator; @@ -349,8 +388,6 @@ template class UniformSourceEllipticPde<2>; template class UniformSourceEllipticPde<3>; template class CellwiseSourceParabolicPde<2>; template class CellwiseSourceParabolicPde<3>; -template class AbstractCellBasedSimulationModifier<2,2>; -template class AbstractCellBasedSimulationModifier<3,3>; template class UniformSourceParabolicPde<2>; template class UniformSourceParabolicPde<3>; template class AveragedSourceParabolicPde<2>; @@ -359,6 +396,8 @@ template class CellBasedEllipticPdeSolver<2>; template class CellBasedEllipticPdeSolver<3>; template class CellBasedParabolicPdeSolver<2>; template class CellBasedParabolicPdeSolver<3>; +template class AbstractCellBasedSimulationModifier<2,2>; +template class AbstractCellBasedSimulationModifier<3,3>; template class AbstractPdeModifier<2>; template class AbstractPdeModifier<3>; template class AbstractBoxDomainPdeModifier<2>; @@ -373,8 +412,88 @@ template class EllipticBoxDomainPdeModifier<2>; template class EllipticBoxDomainPdeModifier<3>; template class ParabolicBoxDomainPdeModifier<2>; template class ParabolicBoxDomainPdeModifier<3>; +template class AbstractCellBasedWriter<2,2>; +template class AbstractCellBasedWriter<3,3>; +template class AbstractCellWriter<2,2>; +template class AbstractCellWriter<3,3>; +template class AbstractCellPopulationWriter<2,2>; +template class AbstractCellPopulationWriter<3,3>; +template class AbstractCellPopulationCountWriter<2,2>; +template class AbstractCellPopulationCountWriter<3,3>; +template class AbstractCellPopulationEventWriter<2,2>; +template class AbstractCellPopulationEventWriter<3,3>; +template class BoundaryNodeWriter<2,2>; +template class BoundaryNodeWriter<3,3>; +template class CellAgesWriter<2,2>; +template class CellAgesWriter<3,3>; +template class CellAncestorWriter<2,2>; +template class CellAncestorWriter<3,3>; +template class CellAppliedForceWriter<2,2>; +template class CellAppliedForceWriter<3,3>; +template class CellCycleModelProteinConcentrationsWriter<2,2>; +template class CellCycleModelProteinConcentrationsWriter<3,3>; +template class CellDataItemWriter<2,2>; +template class CellDataItemWriter<3,3>; +template class CellDeltaNotchWriter<2,2>; +template class CellDeltaNotchWriter<3,3>; +template class CellDivisionLocationsWriter<2,2>; +template class CellDivisionLocationsWriter<3,3>; +template class CellIdWriter<2,2>; +template class CellIdWriter<3,3>; +template class CellLocationIndexWriter<2,2>; +template class CellLocationIndexWriter<3,3>; +template class CellMutationStatesCountWriter<2,2>; +template class CellMutationStatesCountWriter<3,3>; +template class CellMutationStatesWriter<2,2>; +template class CellMutationStatesWriter<3,3>; +template class CellPopulationAdjacencyMatrixWriter<2,2>; +template class CellPopulationAdjacencyMatrixWriter<3,3>; +template class CellPopulationAreaWriter<2,2>; +template class CellPopulationAreaWriter<3,3>; +template class CellPopulationElementWriter<2,2>; +template class CellPopulationElementWriter<3,3>; +template class CellProliferativePhasesCountWriter<2,2>; +template class CellProliferativePhasesCountWriter<3,3>; +template class CellProliferativePhasesWriter<2,2>; +template class CellProliferativePhasesWriter<3,3>; +template class CellProliferativeTypesCountWriter<2,2>; +template class CellProliferativeTypesCountWriter<3,3>; +template class CellProliferativeTypesWriter<2,2>; +template class CellProliferativeTypesWriter<3,3>; +template class CellRadiusWriter<2,2>; +template class CellRadiusWriter<3,3>; +template class CellRemovalLocationsWriter<2,2>; +template class CellRemovalLocationsWriter<3,3>; +template class CellRosetteRankWriter<2,2>; +template class CellRosetteRankWriter<3,3>; +template class CellVolumesWriter<2,2>; +template class CellVolumesWriter<3,3>; +template class HeterotypicBoundaryLengthWriter<2,2>; +template class HeterotypicBoundaryLengthWriter<3,3>; +template class LegacyCellProliferativeTypesWriter<2,2>; +template class LegacyCellProliferativeTypesWriter<3,3>; +template class NodeLocationWriter<2,2>; +template class NodeLocationWriter<3,3>; +template class NodeVelocityWriter<2,2>; +template class NodeVelocityWriter<3,3>; +template class PottsMeshWriter<2>; +template class PottsMeshWriter<3>; +template class RadialCellDataDistributionWriter<2,2>; +template class RadialCellDataDistributionWriter<3,3>; +template class VertexIntersectionSwapLocationsWriter<2,2>; +template class VertexIntersectionSwapLocationsWriter<3,3>; +template class VertexT1SwapLocationsWriter<2,2>; +template class VertexT1SwapLocationsWriter<3,3>; +template class VertexT2SwapLocationsWriter<2,2>; +template class VertexT2SwapLocationsWriter<3,3>; +template class VertexT3SwapLocationsWriter<2,2>; +template class VertexT3SwapLocationsWriter<3,3>; template class VoronoiDataWriter<2,2>; template class VoronoiDataWriter<3,3>; +template class ImmersedBoundaryBoundaryCellWriter<2,2>; +template class ImmersedBoundaryBoundaryCellWriter<3,3>; +template class ImmersedBoundaryNeighbourNumberWriter<2,2>; +template class ImmersedBoundaryNeighbourNumberWriter<3,3>; template class CellLabelWriter<2,2>; template class CellLabelWriter<3,3>; template class AbstractUpdateRule<2>; @@ -395,10 +514,6 @@ template class DifferentialAdhesionPottsUpdateRule<2>; template class DifferentialAdhesionPottsUpdateRule<3>; template class AbstractVertexBasedDivisionRule<2>; template class AbstractVertexBasedDivisionRule<3>; -template class AbstractForce<2,2>; -template class AbstractForce<3,3>; -template class AbstractTwoBodyInteractionForce<2,2>; -template class AbstractTwoBodyInteractionForce<3,3>; template class RandomDirectionVertexBasedDivisionRule<2>; template class RandomDirectionVertexBasedDivisionRule<3>; template class VonMisesVertexBasedDivisionRule<2>; @@ -411,14 +526,28 @@ template class ShovingCaBasedDivisionRule<2>; template class ShovingCaBasedDivisionRule<3>; template class ExclusionCaBasedDivisionRule<2>; template class ExclusionCaBasedDivisionRule<3>; +template class RandomDirectionCentreBasedDivisionRule<2,2>; +template class RandomDirectionCentreBasedDivisionRule<3,3>; +template class FixedCentreBasedDivisionRule<2>; +template class FixedCentreBasedDivisionRule<3>; +template class AbstractCentreBasedDivisionRule<2,2>; +template class AbstractCentreBasedDivisionRule<3,3>; template class ShortAxisVertexBasedDivisionRule<2>; template class ShortAxisVertexBasedDivisionRule<3>; +template class AbstractImmersedBoundaryDivisionRule<2>; +template class AbstractImmersedBoundaryDivisionRule<3>; +template class ShortAxisImmersedBoundaryDivisionRule<2>; +template class ShortAxisImmersedBoundaryDivisionRule<3>; template class RandomCaSwitchingUpdateRule<2>; template class RandomCaSwitchingUpdateRule<3>; template class ChemotaxisPottsUpdateRule<2>; template class ChemotaxisPottsUpdateRule<3>; template class AbstractCaSwitchingUpdateRule<2>; template class AbstractCaSwitchingUpdateRule<3>; +template class AbstractForce<2,2>; +template class AbstractForce<3,3>; +template class AbstractTwoBodyInteractionForce<2,2>; +template class AbstractTwoBodyInteractionForce<3,3>; template class BuskeAdhesiveForce<2>; template class BuskeAdhesiveForce<3>; template class BuskeCompressionForce<2>; @@ -445,20 +574,26 @@ template class PlanarPolarisedFarhadifarForce<2>; template class PlanarPolarisedFarhadifarForce<3>; template class NagaiHondaDifferentialAdhesionForce<2>; template class NagaiHondaDifferentialAdhesionForce<3>; +template class AbstractImmersedBoundaryForce<2>; +template class AbstractImmersedBoundaryForce<3>; +template class ImmersedBoundaryKinematicFeedbackForce<2>; +template class ImmersedBoundaryKinematicFeedbackForce<3>; +template class ImmersedBoundaryLinearDifferentialAdhesionForce<2>; +template class ImmersedBoundaryLinearDifferentialAdhesionForce<3>; +template class ImmersedBoundaryLinearInteractionForce<2>; +template class ImmersedBoundaryLinearInteractionForce<3>; +template class ImmersedBoundaryLinearMembraneForce<2>; +template class ImmersedBoundaryLinearMembraneForce<3>; +template class ImmersedBoundaryMorseInteractionForce<2>; +template class ImmersedBoundaryMorseInteractionForce<3>; +template class ImmersedBoundaryMorseMembraneForce<2>; +template class ImmersedBoundaryMorseMembraneForce<3>; template class AbstractCellKiller<2>; template class AbstractCellKiller<3>; template class PlaneBasedCellKiller<2>; template class PlaneBasedCellKiller<3>; template class ApoptoticCellKiller<2>; template class ApoptoticCellKiller<3>; -template class AbstractCellPopulation<2,2>; -template class AbstractCellPopulation<3,3>; -template class AbstractCellPopulationBoundaryCondition<2,2>; -template class AbstractCellPopulationBoundaryCondition<3,3>; -template class PlaneBoundaryCondition<2,2>; -template class PlaneBoundaryCondition<3,3>; -template class AttractingPlaneBoundaryCondition<2,2>; -template class AttractingPlaneBoundaryCondition<3,3>; template class TargetedCellKiller<2>; template class TargetedCellKiller<3>; template class RandomCellKiller<2>; @@ -467,20 +602,30 @@ template class T2SwapCellKiller<2>; template class T2SwapCellKiller<3>; template class IsolatedLabelledCellKiller<2>; template class IsolatedLabelledCellKiller<3>; +template class AbstractCellPopulationBoundaryCondition<2,2>; +template class AbstractCellPopulationBoundaryCondition<3,3>; +template class PlaneBoundaryCondition<2,2>; +template class PlaneBoundaryCondition<3,3>; +template class AttractingPlaneBoundaryCondition<2,2>; +template class AttractingPlaneBoundaryCondition<3,3>; template class SphereGeometryBoundaryCondition<2>; template class SphereGeometryBoundaryCondition<3>; +template class SlidingBoundaryCondition<2>; +template class SlidingBoundaryCondition<3>; +template class AbstractCellPopulation<2,2>; +template class AbstractCellPopulation<3,3>; template class AbstractOffLatticeCellPopulation<2,2>; template class AbstractOffLatticeCellPopulation<3,3>; template class AbstractCentreBasedCellPopulation<2,2>; template class AbstractCentreBasedCellPopulation<3,3>; -template class SlidingBoundaryCondition<2>; -template class SlidingBoundaryCondition<3>; template class AbstractOnLatticeCellPopulation<2>; template class AbstractOnLatticeCellPopulation<3>; template class NodeBasedCellPopulationWithParticles<2>; template class NodeBasedCellPopulationWithParticles<3>; template class CaBasedCellPopulation<2>; template class CaBasedCellPopulation<3>; +template class ImmersedBoundaryCellPopulation<2>; +template class ImmersedBoundaryCellPopulation<3>; template class MeshBasedCellPopulation<2,2>; template class MeshBasedCellPopulation<3,3>; template class MeshBasedCellPopulationWithGhostNodes<2>; @@ -511,6 +656,16 @@ template class VolumeTrackingModifier<2>; template class VolumeTrackingModifier<3>; template class VtkSceneModifier<2>; template class VtkSceneModifier<3>; +template class ImmersedBoundarySimulationModifier<2>; +template class ImmersedBoundarySimulationModifier<3>; +template class ImmersedBoundarySvgWriter<2>; +template class ImmersedBoundarySvgWriter<3>; +template class NormallyDistributedTargetAreaModifier<2>; +template class NormallyDistributedTargetAreaModifier<3>; +template class AbstractNumericalMethod<2,2>; +template class AbstractNumericalMethod<3,3>; +template class ForwardEulerNumericalMethod<2,2>; +template class ForwardEulerNumericalMethod<3,3>; template class AbstractCellBasedSimulation<2,2>; template class AbstractCellBasedSimulation<3,3>; template class OnLatticeSimulation<2>; @@ -525,90 +680,6 @@ template class AbstractPyChasteActorGenerator<2>; template class AbstractPyChasteActorGenerator<3>; template class CellPopulationPyChasteActorGenerator<2>; template class CellPopulationPyChasteActorGenerator<3>; -template class AbstractChasteRegion<2>; -template class AbstractChasteRegion<3>; -template class ChastePoint<2>; -template class ChastePoint<3>; -template class ChasteCuboid<2>; -template class ChasteCuboid<3>; -template class ChasteEllipsoid<2>; -template class ChasteEllipsoid<3>; -template class AbstractCellBasedWriter<2,2>; -template class AbstractCellBasedWriter<3,3>; -template class AbstractCellWriter<2,2>; -template class AbstractCellWriter<3,3>; -template class AbstractCellPopulationWriter<2,2>; -template class AbstractCellPopulationWriter<3,3>; -template class AbstractCellPopulationCountWriter<2,2>; -template class AbstractCellPopulationCountWriter<3,3>; -template class AbstractCellPopulationEventWriter<2,2>; -template class AbstractCellPopulationEventWriter<3,3>; -template class BoundaryNodeWriter<2,2>; -template class BoundaryNodeWriter<3,3>; -template class CellAgesWriter<2,2>; -template class CellAgesWriter<3,3>; -template class CellAncestorWriter<2,2>; -template class CellAncestorWriter<3,3>; -template class CellAppliedForceWriter<2,2>; -template class CellAppliedForceWriter<3,3>; -template class CellCycleModelProteinConcentrationsWriter<2,2>; -template class CellCycleModelProteinConcentrationsWriter<3,3>; -template class CellDataItemWriter<2,2>; -template class CellDataItemWriter<3,3>; -template class CellDeltaNotchWriter<2,2>; -template class CellDeltaNotchWriter<3,3>; -template class CellDivisionLocationsWriter<2,2>; -template class CellDivisionLocationsWriter<3,3>; -template class CellIdWriter<2,2>; -template class CellIdWriter<3,3>; -template class CellLocationIndexWriter<2,2>; -template class CellLocationIndexWriter<3,3>; -template class CellMutationStatesCountWriter<2,2>; -template class CellMutationStatesCountWriter<3,3>; -template class CellMutationStatesWriter<2,2>; -template class CellMutationStatesWriter<3,3>; -template class CellPopulationAdjacencyMatrixWriter<2,2>; -template class CellPopulationAdjacencyMatrixWriter<3,3>; -template class CellPopulationAreaWriter<2,2>; -template class CellPopulationAreaWriter<3,3>; -template class CellPopulationElementWriter<2,2>; -template class CellPopulationElementWriter<3,3>; -template class CellProliferativePhasesCountWriter<2,2>; -template class CellProliferativePhasesCountWriter<3,3>; -template class CellProliferativePhasesWriter<2,2>; -template class CellProliferativePhasesWriter<3,3>; -template class CellProliferativeTypesCountWriter<2,2>; -template class CellProliferativeTypesCountWriter<3,3>; -template class CellProliferativeTypesWriter<2,2>; -template class CellProliferativeTypesWriter<3,3>; -template class CellRadiusWriter<2,2>; -template class CellRadiusWriter<3,3>; -template class CellRemovalLocationsWriter<2,2>; -template class CellRemovalLocationsWriter<3,3>; -template class CellRosetteRankWriter<2,2>; -template class CellRosetteRankWriter<3,3>; -template class CellVolumesWriter<2,2>; -template class CellVolumesWriter<3,3>; -template class HeterotypicBoundaryLengthWriter<2,2>; -template class HeterotypicBoundaryLengthWriter<3,3>; -template class LegacyCellProliferativeTypesWriter<2,2>; -template class LegacyCellProliferativeTypesWriter<3,3>; -template class NodeLocationWriter<2,2>; -template class NodeLocationWriter<3,3>; -template class NodeVelocityWriter<2,2>; -template class NodeVelocityWriter<3,3>; -template class PottsMeshWriter<2>; -template class PottsMeshWriter<3>; -template class RadialCellDataDistributionWriter<2,2>; -template class RadialCellDataDistributionWriter<3,3>; -template class VertexIntersectionSwapLocationsWriter<2,2>; -template class VertexIntersectionSwapLocationsWriter<3,3>; -template class VertexT1SwapLocationsWriter<2,2>; -template class VertexT1SwapLocationsWriter<3,3>; -template class VertexT2SwapLocationsWriter<2,2>; -template class VertexT2SwapLocationsWriter<3,3>; -template class VertexT3SwapLocationsWriter<2,2>; -template class VertexT3SwapLocationsWriter<3,3>; // Typedef for nicer naming namespace cppwg{ @@ -618,6 +689,8 @@ typedef AbstractLinearParabolicPde<2,2> AbstractLinearParabolicPde2_2; typedef AbstractLinearParabolicPde<3,3> AbstractLinearParabolicPde3_3; typedef AbstractLinearEllipticPde<2,2> AbstractLinearEllipticPde2_2; typedef AbstractLinearEllipticPde<3,3> AbstractLinearEllipticPde3_3; +typedef AbstractLinearParabolicPdeSystemForCoupledOdeSystem<2,2,1> AbstractLinearParabolicPdeSystemForCoupledOdeSystem2_2_1; +typedef AbstractLinearParabolicPdeSystemForCoupledOdeSystem<3,3,1> AbstractLinearParabolicPdeSystemForCoupledOdeSystem3_3_1; typedef AbstractNonlinearEllipticPde<2> AbstractNonlinearEllipticPde2; typedef AbstractNonlinearEllipticPde<3> AbstractNonlinearEllipticPde3; typedef AbstractBoundaryCondition<2> AbstractBoundaryCondition2; @@ -626,6 +699,12 @@ typedef ConstBoundaryCondition<2> ConstBoundaryCondition2; typedef ConstBoundaryCondition<3> ConstBoundaryCondition3; typedef ChastePoint<2> ChastePoint2; typedef ChastePoint<3> ChastePoint3; +typedef AbstractChasteRegion<2> AbstractChasteRegion2; +typedef AbstractChasteRegion<3> AbstractChasteRegion3; +typedef ChasteCuboid<2> ChasteCuboid2; +typedef ChasteCuboid<3> ChasteCuboid3; +typedef ChasteEllipsoid<2> ChasteEllipsoid2; +typedef ChasteEllipsoid<3> ChasteEllipsoid3; typedef NodeAttributes<2> NodeAttributes2; typedef NodeAttributes<3> NodeAttributes3; typedef Node<2> Node2; @@ -636,10 +715,6 @@ typedef Edge<2> Edge2; typedef Edge<3> Edge3; typedef EdgeHelper<2> EdgeHelper2; typedef EdgeHelper<3> EdgeHelper3; -typedef AbstractElement<2,2> AbstractElement2_2; -typedef AbstractElement<3,3> AbstractElement3_3; -typedef MutableElement<2,2> MutableElement2_2; -typedef MutableElement<3,3> MutableElement3_3; typedef AbstractMesh<2,2> AbstractMesh2_2; typedef AbstractMesh<3,3> AbstractMesh3_3; typedef AbstractTetrahedralMesh<2,2> AbstractTetrahedralMesh2_2; @@ -648,12 +723,26 @@ typedef TetrahedralMesh<2,2> TetrahedralMesh2_2; typedef TetrahedralMesh<3,3> TetrahedralMesh3_3; typedef MutableMesh<2,2> MutableMesh2_2; typedef MutableMesh<3,3> MutableMesh3_3; +typedef AbstractElement<1,2> AbstractElement1_2; +typedef AbstractElement<2,2> AbstractElement2_2; +typedef AbstractElement<2,3> AbstractElement2_3; +typedef AbstractElement<3,3> AbstractElement3_3; +typedef MutableElement<1,2> MutableElement1_2; +typedef MutableElement<2,2> MutableElement2_2; +typedef MutableElement<2,3> MutableElement2_3; +typedef MutableElement<3,3> MutableElement3_3; typedef NodesOnlyMesh<2> NodesOnlyMesh2; typedef NodesOnlyMesh<3> NodesOnlyMesh3; typedef PottsElement<2> PottsElement2; typedef PottsElement<3> PottsElement3; typedef PottsMesh<2> PottsMesh2; typedef PottsMesh<3> PottsMesh3; +typedef FluidSource<2> FluidSource2; +typedef FluidSource<3> FluidSource3; +typedef ImmersedBoundaryElement<1,2> ImmersedBoundaryElement1_2; +typedef ImmersedBoundaryElement<2,2> ImmersedBoundaryElement2_2; +typedef ImmersedBoundaryElement<2,3> ImmersedBoundaryElement2_3; +typedef ImmersedBoundaryElement<3,3> ImmersedBoundaryElement3_3; typedef PottsMeshGenerator<2> PottsMeshGenerator2; typedef PottsMeshGenerator<3> PottsMeshGenerator3; typedef VertexMesh<2,2> VertexMesh2_2; @@ -662,6 +751,8 @@ typedef MutableVertexMesh<2,2> MutableVertexMesh2_2; typedef MutableVertexMesh<3,3> MutableVertexMesh3_3; typedef PeriodicNodesOnlyMesh<2> PeriodicNodesOnlyMesh2; typedef PeriodicNodesOnlyMesh<3> PeriodicNodesOnlyMesh3; +typedef ImmersedBoundaryMesh<2,2> ImmersedBoundaryMesh2_2; +typedef ImmersedBoundaryMesh<3,3> ImmersedBoundaryMesh3_3; typedef VertexBasedPopulationSrn<2> VertexBasedPopulationSrn2; typedef VertexBasedPopulationSrn<3> VertexBasedPopulationSrn3; typedef CellsGenerator CellsGeneratorNoCellCycleModel_2; @@ -706,8 +797,6 @@ typedef UniformSourceEllipticPde<2> UniformSourceEllipticPde2; typedef UniformSourceEllipticPde<3> UniformSourceEllipticPde3; typedef CellwiseSourceParabolicPde<2> CellwiseSourceParabolicPde2; typedef CellwiseSourceParabolicPde<3> CellwiseSourceParabolicPde3; -typedef AbstractCellBasedSimulationModifier<2,2> AbstractCellBasedSimulationModifier2_2; -typedef AbstractCellBasedSimulationModifier<3,3> AbstractCellBasedSimulationModifier3_3; typedef UniformSourceParabolicPde<2> UniformSourceParabolicPde2; typedef UniformSourceParabolicPde<3> UniformSourceParabolicPde3; typedef AveragedSourceParabolicPde<2> AveragedSourceParabolicPde2; @@ -716,6 +805,8 @@ typedef CellBasedEllipticPdeSolver<2> CellBasedEllipticPdeSolver2; typedef CellBasedEllipticPdeSolver<3> CellBasedEllipticPdeSolver3; typedef CellBasedParabolicPdeSolver<2> CellBasedParabolicPdeSolver2; typedef CellBasedParabolicPdeSolver<3> CellBasedParabolicPdeSolver3; +typedef AbstractCellBasedSimulationModifier<2,2> AbstractCellBasedSimulationModifier2_2; +typedef AbstractCellBasedSimulationModifier<3,3> AbstractCellBasedSimulationModifier3_3; typedef AbstractPdeModifier<2> AbstractPdeModifier2; typedef AbstractPdeModifier<3> AbstractPdeModifier3; typedef AbstractBoxDomainPdeModifier<2> AbstractBoxDomainPdeModifier2; @@ -730,8 +821,88 @@ typedef EllipticBoxDomainPdeModifier<2> EllipticBoxDomainPdeModifier2; typedef EllipticBoxDomainPdeModifier<3> EllipticBoxDomainPdeModifier3; typedef ParabolicBoxDomainPdeModifier<2> ParabolicBoxDomainPdeModifier2; typedef ParabolicBoxDomainPdeModifier<3> ParabolicBoxDomainPdeModifier3; +typedef AbstractCellBasedWriter<2,2> AbstractCellBasedWriter2_2; +typedef AbstractCellBasedWriter<3,3> AbstractCellBasedWriter3_3; +typedef AbstractCellWriter<2,2> AbstractCellWriter2_2; +typedef AbstractCellWriter<3,3> AbstractCellWriter3_3; +typedef AbstractCellPopulationWriter<2,2> AbstractCellPopulationWriter2_2; +typedef AbstractCellPopulationWriter<3,3> AbstractCellPopulationWriter3_3; +typedef AbstractCellPopulationCountWriter<2,2> AbstractCellPopulationCountWriter2_2; +typedef AbstractCellPopulationCountWriter<3,3> AbstractCellPopulationCountWriter3_3; +typedef AbstractCellPopulationEventWriter<2,2> AbstractCellPopulationEventWriter2_2; +typedef AbstractCellPopulationEventWriter<3,3> AbstractCellPopulationEventWriter3_3; +typedef BoundaryNodeWriter<2,2> BoundaryNodeWriter2_2; +typedef BoundaryNodeWriter<3,3> BoundaryNodeWriter3_3; +typedef CellAgesWriter<2,2> CellAgesWriter2_2; +typedef CellAgesWriter<3,3> CellAgesWriter3_3; +typedef CellAncestorWriter<2,2> CellAncestorWriter2_2; +typedef CellAncestorWriter<3,3> CellAncestorWriter3_3; +typedef CellAppliedForceWriter<2,2> CellAppliedForceWriter2_2; +typedef CellAppliedForceWriter<3,3> CellAppliedForceWriter3_3; +typedef CellCycleModelProteinConcentrationsWriter<2,2> CellCycleModelProteinConcentrationsWriter2_2; +typedef CellCycleModelProteinConcentrationsWriter<3,3> CellCycleModelProteinConcentrationsWriter3_3; +typedef CellDataItemWriter<2,2> CellDataItemWriter2_2; +typedef CellDataItemWriter<3,3> CellDataItemWriter3_3; +typedef CellDeltaNotchWriter<2,2> CellDeltaNotchWriter2_2; +typedef CellDeltaNotchWriter<3,3> CellDeltaNotchWriter3_3; +typedef CellDivisionLocationsWriter<2,2> CellDivisionLocationsWriter2_2; +typedef CellDivisionLocationsWriter<3,3> CellDivisionLocationsWriter3_3; +typedef CellIdWriter<2,2> CellIdWriter2_2; +typedef CellIdWriter<3,3> CellIdWriter3_3; +typedef CellLocationIndexWriter<2,2> CellLocationIndexWriter2_2; +typedef CellLocationIndexWriter<3,3> CellLocationIndexWriter3_3; +typedef CellMutationStatesCountWriter<2,2> CellMutationStatesCountWriter2_2; +typedef CellMutationStatesCountWriter<3,3> CellMutationStatesCountWriter3_3; +typedef CellMutationStatesWriter<2,2> CellMutationStatesWriter2_2; +typedef CellMutationStatesWriter<3,3> CellMutationStatesWriter3_3; +typedef CellPopulationAdjacencyMatrixWriter<2,2> CellPopulationAdjacencyMatrixWriter2_2; +typedef CellPopulationAdjacencyMatrixWriter<3,3> CellPopulationAdjacencyMatrixWriter3_3; +typedef CellPopulationAreaWriter<2,2> CellPopulationAreaWriter2_2; +typedef CellPopulationAreaWriter<3,3> CellPopulationAreaWriter3_3; +typedef CellPopulationElementWriter<2,2> CellPopulationElementWriter2_2; +typedef CellPopulationElementWriter<3,3> CellPopulationElementWriter3_3; +typedef CellProliferativePhasesCountWriter<2,2> CellProliferativePhasesCountWriter2_2; +typedef CellProliferativePhasesCountWriter<3,3> CellProliferativePhasesCountWriter3_3; +typedef CellProliferativePhasesWriter<2,2> CellProliferativePhasesWriter2_2; +typedef CellProliferativePhasesWriter<3,3> CellProliferativePhasesWriter3_3; +typedef CellProliferativeTypesCountWriter<2,2> CellProliferativeTypesCountWriter2_2; +typedef CellProliferativeTypesCountWriter<3,3> CellProliferativeTypesCountWriter3_3; +typedef CellProliferativeTypesWriter<2,2> CellProliferativeTypesWriter2_2; +typedef CellProliferativeTypesWriter<3,3> CellProliferativeTypesWriter3_3; +typedef CellRadiusWriter<2,2> CellRadiusWriter2_2; +typedef CellRadiusWriter<3,3> CellRadiusWriter3_3; +typedef CellRemovalLocationsWriter<2,2> CellRemovalLocationsWriter2_2; +typedef CellRemovalLocationsWriter<3,3> CellRemovalLocationsWriter3_3; +typedef CellRosetteRankWriter<2,2> CellRosetteRankWriter2_2; +typedef CellRosetteRankWriter<3,3> CellRosetteRankWriter3_3; +typedef CellVolumesWriter<2,2> CellVolumesWriter2_2; +typedef CellVolumesWriter<3,3> CellVolumesWriter3_3; +typedef HeterotypicBoundaryLengthWriter<2,2> HeterotypicBoundaryLengthWriter2_2; +typedef HeterotypicBoundaryLengthWriter<3,3> HeterotypicBoundaryLengthWriter3_3; +typedef LegacyCellProliferativeTypesWriter<2,2> LegacyCellProliferativeTypesWriter2_2; +typedef LegacyCellProliferativeTypesWriter<3,3> LegacyCellProliferativeTypesWriter3_3; +typedef NodeLocationWriter<2,2> NodeLocationWriter2_2; +typedef NodeLocationWriter<3,3> NodeLocationWriter3_3; +typedef NodeVelocityWriter<2,2> NodeVelocityWriter2_2; +typedef NodeVelocityWriter<3,3> NodeVelocityWriter3_3; +typedef PottsMeshWriter<2> PottsMeshWriter2; +typedef PottsMeshWriter<3> PottsMeshWriter3; +typedef RadialCellDataDistributionWriter<2,2> RadialCellDataDistributionWriter2_2; +typedef RadialCellDataDistributionWriter<3,3> RadialCellDataDistributionWriter3_3; +typedef VertexIntersectionSwapLocationsWriter<2,2> VertexIntersectionSwapLocationsWriter2_2; +typedef VertexIntersectionSwapLocationsWriter<3,3> VertexIntersectionSwapLocationsWriter3_3; +typedef VertexT1SwapLocationsWriter<2,2> VertexT1SwapLocationsWriter2_2; +typedef VertexT1SwapLocationsWriter<3,3> VertexT1SwapLocationsWriter3_3; +typedef VertexT2SwapLocationsWriter<2,2> VertexT2SwapLocationsWriter2_2; +typedef VertexT2SwapLocationsWriter<3,3> VertexT2SwapLocationsWriter3_3; +typedef VertexT3SwapLocationsWriter<2,2> VertexT3SwapLocationsWriter2_2; +typedef VertexT3SwapLocationsWriter<3,3> VertexT3SwapLocationsWriter3_3; typedef VoronoiDataWriter<2,2> VoronoiDataWriter2_2; typedef VoronoiDataWriter<3,3> VoronoiDataWriter3_3; +typedef ImmersedBoundaryBoundaryCellWriter<2,2> ImmersedBoundaryBoundaryCellWriter2_2; +typedef ImmersedBoundaryBoundaryCellWriter<3,3> ImmersedBoundaryBoundaryCellWriter3_3; +typedef ImmersedBoundaryNeighbourNumberWriter<2,2> ImmersedBoundaryNeighbourNumberWriter2_2; +typedef ImmersedBoundaryNeighbourNumberWriter<3,3> ImmersedBoundaryNeighbourNumberWriter3_3; typedef CellLabelWriter<2,2> CellLabelWriter2_2; typedef CellLabelWriter<3,3> CellLabelWriter3_3; typedef AbstractUpdateRule<2> AbstractUpdateRule2; @@ -752,10 +923,6 @@ typedef DifferentialAdhesionPottsUpdateRule<2> DifferentialAdhesionPottsUpdateRu typedef DifferentialAdhesionPottsUpdateRule<3> DifferentialAdhesionPottsUpdateRule3; typedef AbstractVertexBasedDivisionRule<2> AbstractVertexBasedDivisionRule2; typedef AbstractVertexBasedDivisionRule<3> AbstractVertexBasedDivisionRule3; -typedef AbstractForce<2,2> AbstractForce2_2; -typedef AbstractForce<3,3> AbstractForce3_3; -typedef AbstractTwoBodyInteractionForce<2,2> AbstractTwoBodyInteractionForce2_2; -typedef AbstractTwoBodyInteractionForce<3,3> AbstractTwoBodyInteractionForce3_3; typedef RandomDirectionVertexBasedDivisionRule<2> RandomDirectionVertexBasedDivisionRule2; typedef RandomDirectionVertexBasedDivisionRule<3> RandomDirectionVertexBasedDivisionRule3; typedef VonMisesVertexBasedDivisionRule<2> VonMisesVertexBasedDivisionRule2; @@ -768,14 +935,28 @@ typedef ShovingCaBasedDivisionRule<2> ShovingCaBasedDivisionRule2; typedef ShovingCaBasedDivisionRule<3> ShovingCaBasedDivisionRule3; typedef ExclusionCaBasedDivisionRule<2> ExclusionCaBasedDivisionRule2; typedef ExclusionCaBasedDivisionRule<3> ExclusionCaBasedDivisionRule3; +typedef RandomDirectionCentreBasedDivisionRule<2,2> RandomDirectionCentreBasedDivisionRule2_2; +typedef RandomDirectionCentreBasedDivisionRule<3,3> RandomDirectionCentreBasedDivisionRule3_3; +typedef FixedCentreBasedDivisionRule<2,2> FixedCentreBasedDivisionRule2_2; +typedef FixedCentreBasedDivisionRule<3,3> FixedCentreBasedDivisionRule3_3; +typedef AbstractCentreBasedDivisionRule<2,2> AbstractCentreBasedDivisionRule2_2; +typedef AbstractCentreBasedDivisionRule<3,3> AbstractCentreBasedDivisionRule3_3; typedef ShortAxisVertexBasedDivisionRule<2> ShortAxisVertexBasedDivisionRule2; typedef ShortAxisVertexBasedDivisionRule<3> ShortAxisVertexBasedDivisionRule3; +typedef AbstractImmersedBoundaryDivisionRule<2> AbstractImmersedBoundaryDivisionRule2; +typedef AbstractImmersedBoundaryDivisionRule<3> AbstractImmersedBoundaryDivisionRule3; +typedef ShortAxisImmersedBoundaryDivisionRule<2> ShortAxisImmersedBoundaryDivisionRule2; +typedef ShortAxisImmersedBoundaryDivisionRule<3> ShortAxisImmersedBoundaryDivisionRule3; typedef RandomCaSwitchingUpdateRule<2> RandomCaSwitchingUpdateRule2; typedef RandomCaSwitchingUpdateRule<3> RandomCaSwitchingUpdateRule3; typedef ChemotaxisPottsUpdateRule<2> ChemotaxisPottsUpdateRule2; typedef ChemotaxisPottsUpdateRule<3> ChemotaxisPottsUpdateRule3; typedef AbstractCaSwitchingUpdateRule<2> AbstractCaSwitchingUpdateRule2; typedef AbstractCaSwitchingUpdateRule<3> AbstractCaSwitchingUpdateRule3; +typedef AbstractForce<2,2> AbstractForce2_2; +typedef AbstractForce<3,3> AbstractForce3_3; +typedef AbstractTwoBodyInteractionForce<2,2> AbstractTwoBodyInteractionForce2_2; +typedef AbstractTwoBodyInteractionForce<3,3> AbstractTwoBodyInteractionForce3_3; typedef BuskeAdhesiveForce<2> BuskeAdhesiveForce2; typedef BuskeAdhesiveForce<3> BuskeAdhesiveForce3; typedef BuskeCompressionForce<2> BuskeCompressionForce2; @@ -802,18 +983,26 @@ typedef PlanarPolarisedFarhadifarForce<2> PlanarPolarisedFarhadifarForce2; typedef PlanarPolarisedFarhadifarForce<3> PlanarPolarisedFarhadifarForce3; typedef NagaiHondaDifferentialAdhesionForce<2> NagaiHondaDifferentialAdhesionForce2; typedef NagaiHondaDifferentialAdhesionForce<3> NagaiHondaDifferentialAdhesionForce3; +typedef AbstractImmersedBoundaryForce<2> AbstractImmersedBoundaryForce2; +typedef AbstractImmersedBoundaryForce<3> AbstractImmersedBoundaryForce3; +typedef ImmersedBoundaryKinematicFeedbackForce<2> ImmersedBoundaryKinematicFeedbackForce2; +typedef ImmersedBoundaryKinematicFeedbackForce<3> ImmersedBoundaryKinematicFeedbackForce3; +typedef ImmersedBoundaryLinearDifferentialAdhesionForce<2> ImmersedBoundaryLinearDifferentialAdhesionForce2; +typedef ImmersedBoundaryLinearDifferentialAdhesionForce<3> ImmersedBoundaryLinearDifferentialAdhesionForce3; +typedef ImmersedBoundaryLinearInteractionForce<2> ImmersedBoundaryLinearInteractionForce2; +typedef ImmersedBoundaryLinearInteractionForce<3> ImmersedBoundaryLinearInteractionForce3; +typedef ImmersedBoundaryLinearMembraneForce<2> ImmersedBoundaryLinearMembraneForce2; +typedef ImmersedBoundaryLinearMembraneForce<3> ImmersedBoundaryLinearMembraneForce3; +typedef ImmersedBoundaryMorseInteractionForce<2> ImmersedBoundaryMorseInteractionForce2; +typedef ImmersedBoundaryMorseInteractionForce<3> ImmersedBoundaryMorseInteractionForce3; +typedef ImmersedBoundaryMorseMembraneForce<2> ImmersedBoundaryMorseMembraneForce2; +typedef ImmersedBoundaryMorseMembraneForce<3> ImmersedBoundaryMorseMembraneForce3; typedef AbstractCellKiller<2> AbstractCellKiller2; typedef AbstractCellKiller<3> AbstractCellKiller3; typedef PlaneBasedCellKiller<2> PlaneBasedCellKiller2; typedef PlaneBasedCellKiller<3> PlaneBasedCellKiller3; typedef ApoptoticCellKiller<2> ApoptoticCellKiller2; typedef ApoptoticCellKiller<3> ApoptoticCellKiller3; -typedef AbstractCellPopulationBoundaryCondition<2,2> AbstractCellPopulationBoundaryCondition2_2; -typedef AbstractCellPopulationBoundaryCondition<3,3> AbstractCellPopulationBoundaryCondition3_3; -typedef PlaneBoundaryCondition<2,2> PlaneBoundaryCondition2_2; -typedef PlaneBoundaryCondition<3,3> PlaneBoundaryCondition3_3; -typedef AttractingPlaneBoundaryCondition<2,2> AttractingPlaneBoundaryCondition2_2; -typedef AttractingPlaneBoundaryCondition<3,3> AttractingPlaneBoundaryCondition3_3; typedef TargetedCellKiller<2> TargetedCellKiller2; typedef TargetedCellKiller<3> TargetedCellKiller3; typedef RandomCellKiller<2> RandomCellKiller2; @@ -822,22 +1011,30 @@ typedef T2SwapCellKiller<2> T2SwapCellKiller2; typedef T2SwapCellKiller<3> T2SwapCellKiller3; typedef IsolatedLabelledCellKiller<2> IsolatedLabelledCellKiller2; typedef IsolatedLabelledCellKiller<3> IsolatedLabelledCellKiller3; +typedef AbstractCellPopulationBoundaryCondition<2,2> AbstractCellPopulationBoundaryCondition2_2; +typedef AbstractCellPopulationBoundaryCondition<3,3> AbstractCellPopulationBoundaryCondition3_3; +typedef PlaneBoundaryCondition<2,2> PlaneBoundaryCondition2_2; +typedef PlaneBoundaryCondition<3,3> PlaneBoundaryCondition3_3; +typedef AttractingPlaneBoundaryCondition<2,2> AttractingPlaneBoundaryCondition2_2; +typedef AttractingPlaneBoundaryCondition<3,3> AttractingPlaneBoundaryCondition3_3; typedef SphereGeometryBoundaryCondition<2> SphereGeometryBoundaryCondition2; typedef SphereGeometryBoundaryCondition<3> SphereGeometryBoundaryCondition3; +typedef SlidingBoundaryCondition<2> SlidingBoundaryCondition2; +typedef SlidingBoundaryCondition<3> SlidingBoundaryCondition3; typedef AbstractCellPopulation<2,2> AbstractCellPopulation2_2; typedef AbstractCellPopulation<3,3> AbstractCellPopulation3_3; typedef AbstractOffLatticeCellPopulation<2,2> AbstractOffLatticeCellPopulation2_2; typedef AbstractOffLatticeCellPopulation<3,3> AbstractOffLatticeCellPopulation3_3; typedef AbstractCentreBasedCellPopulation<2,2> AbstractCentreBasedCellPopulation2_2; typedef AbstractCentreBasedCellPopulation<3,3> AbstractCentreBasedCellPopulation3_3; -typedef SlidingBoundaryCondition<2> SlidingBoundaryCondition2; -typedef SlidingBoundaryCondition<3> SlidingBoundaryCondition3; typedef AbstractOnLatticeCellPopulation<2> AbstractOnLatticeCellPopulation2; typedef AbstractOnLatticeCellPopulation<3> AbstractOnLatticeCellPopulation3; typedef NodeBasedCellPopulationWithParticles<2> NodeBasedCellPopulationWithParticles2; typedef NodeBasedCellPopulationWithParticles<3> NodeBasedCellPopulationWithParticles3; typedef CaBasedCellPopulation<2> CaBasedCellPopulation2; typedef CaBasedCellPopulation<3> CaBasedCellPopulation3; +typedef ImmersedBoundaryCellPopulation<2> ImmersedBoundaryCellPopulation2; +typedef ImmersedBoundaryCellPopulation<3> ImmersedBoundaryCellPopulation3; typedef MeshBasedCellPopulation<2,2> MeshBasedCellPopulation2_2; typedef MeshBasedCellPopulation<3,3> MeshBasedCellPopulation3_3; typedef MeshBasedCellPopulationWithGhostNodes<2> MeshBasedCellPopulationWithGhostNodes2; @@ -868,6 +1065,12 @@ typedef VolumeTrackingModifier<2> VolumeTrackingModifier2; typedef VolumeTrackingModifier<3> VolumeTrackingModifier3; typedef VtkSceneModifier<2> VtkSceneModifier2; typedef VtkSceneModifier<3> VtkSceneModifier3; +typedef ImmersedBoundarySimulationModifier<2> ImmersedBoundarySimulationModifier2; +typedef ImmersedBoundarySimulationModifier<3> ImmersedBoundarySimulationModifier3; +typedef ImmersedBoundarySvgWriter<2> ImmersedBoundarySvgWriter2; +typedef ImmersedBoundarySvgWriter<3> ImmersedBoundarySvgWriter3; +typedef NormallyDistributedTargetAreaModifier<2> NormallyDistributedTargetAreaModifier2; +typedef NormallyDistributedTargetAreaModifier<3> NormallyDistributedTargetAreaModifier3; typedef AbstractCellBasedSimulation<2,2> AbstractCellBasedSimulation2_2; typedef AbstractCellBasedSimulation<3,3> AbstractCellBasedSimulation3_3; typedef OnLatticeSimulation<2> OnLatticeSimulation2; @@ -882,90 +1085,6 @@ typedef AbstractPyChasteActorGenerator<2> AbstractPyChasteActorGenerator2; typedef AbstractPyChasteActorGenerator<3> AbstractPyChasteActorGenerator3; typedef CellPopulationPyChasteActorGenerator<2> CellPopulationPyChasteActorGenerator2; typedef CellPopulationPyChasteActorGenerator<3> CellPopulationPyChasteActorGenerator3; -typedef AbstractChasteRegion<2> AbstractChasteRegion2; -typedef AbstractChasteRegion<3> AbstractChasteRegion3; -typedef ChastePoint<2> ChastePoint2; -typedef ChastePoint<3> ChastePoint3; -typedef ChasteCuboid<2> ChasteCuboid2; -typedef ChasteCuboid<3> ChasteCuboid3; -typedef ChasteEllipsoid<2> ChasteEllipsoid2; -typedef ChasteEllipsoid<3> ChasteEllipsoid3; -typedef AbstractCellBasedWriter<2,2> AbstractCellBasedWriter2_2; -typedef AbstractCellBasedWriter<3,3> AbstractCellBasedWriter3_3; -typedef AbstractCellWriter<2,2> AbstractCellWriter2_2; -typedef AbstractCellWriter<3,3> AbstractCellWriter3_3; -typedef AbstractCellPopulationWriter<2,2> AbstractCellPopulationWriter2_2; -typedef AbstractCellPopulationWriter<3,3> AbstractCellPopulationWriter3_3; -typedef AbstractCellPopulationCountWriter<2,2> AbstractCellPopulationCountWriter2_2; -typedef AbstractCellPopulationCountWriter<3,3> AbstractCellPopulationCountWriter3_3; -typedef AbstractCellPopulationEventWriter<2,2> AbstractCellPopulationEventWriter2_2; -typedef AbstractCellPopulationEventWriter<3,3> AbstractCellPopulationEventWriter3_3; -typedef BoundaryNodeWriter<2,2> BoundaryNodeWriter2_2; -typedef BoundaryNodeWriter<3,3> BoundaryNodeWriter3_3; -typedef CellAgesWriter<2,2> CellAgesWriter2_2; -typedef CellAgesWriter<3,3> CellAgesWriter3_3; -typedef CellAncestorWriter<2,2> CellAncestorWriter2_2; -typedef CellAncestorWriter<3,3> CellAncestorWriter3_3; -typedef CellAppliedForceWriter<2,2> CellAppliedForceWriter2_2; -typedef CellAppliedForceWriter<3,3> CellAppliedForceWriter3_3; -typedef CellCycleModelProteinConcentrationsWriter<2,2> CellCycleModelProteinConcentrationsWriter2_2; -typedef CellCycleModelProteinConcentrationsWriter<3,3> CellCycleModelProteinConcentrationsWriter3_3; -typedef CellDataItemWriter<2,2> CellDataItemWriter2_2; -typedef CellDataItemWriter<3,3> CellDataItemWriter3_3; -typedef CellDeltaNotchWriter<2,2> CellDeltaNotchWriter2_2; -typedef CellDeltaNotchWriter<3,3> CellDeltaNotchWriter3_3; -typedef CellDivisionLocationsWriter<2,2> CellDivisionLocationsWriter2_2; -typedef CellDivisionLocationsWriter<3,3> CellDivisionLocationsWriter3_3; -typedef CellIdWriter<2,2> CellIdWriter2_2; -typedef CellIdWriter<3,3> CellIdWriter3_3; -typedef CellLocationIndexWriter<2,2> CellLocationIndexWriter2_2; -typedef CellLocationIndexWriter<3,3> CellLocationIndexWriter3_3; -typedef CellMutationStatesCountWriter<2,2> CellMutationStatesCountWriter2_2; -typedef CellMutationStatesCountWriter<3,3> CellMutationStatesCountWriter3_3; -typedef CellMutationStatesWriter<2,2> CellMutationStatesWriter2_2; -typedef CellMutationStatesWriter<3,3> CellMutationStatesWriter3_3; -typedef CellPopulationAdjacencyMatrixWriter<2,2> CellPopulationAdjacencyMatrixWriter2_2; -typedef CellPopulationAdjacencyMatrixWriter<3,3> CellPopulationAdjacencyMatrixWriter3_3; -typedef CellPopulationAreaWriter<2,2> CellPopulationAreaWriter2_2; -typedef CellPopulationAreaWriter<3,3> CellPopulationAreaWriter3_3; -typedef CellPopulationElementWriter<2,2> CellPopulationElementWriter2_2; -typedef CellPopulationElementWriter<3,3> CellPopulationElementWriter3_3; -typedef CellProliferativePhasesCountWriter<2,2> CellProliferativePhasesCountWriter2_2; -typedef CellProliferativePhasesCountWriter<3,3> CellProliferativePhasesCountWriter3_3; -typedef CellProliferativePhasesWriter<2,2> CellProliferativePhasesWriter2_2; -typedef CellProliferativePhasesWriter<3,3> CellProliferativePhasesWriter3_3; -typedef CellProliferativeTypesCountWriter<2,2> CellProliferativeTypesCountWriter2_2; -typedef CellProliferativeTypesCountWriter<3,3> CellProliferativeTypesCountWriter3_3; -typedef CellProliferativeTypesWriter<2,2> CellProliferativeTypesWriter2_2; -typedef CellProliferativeTypesWriter<3,3> CellProliferativeTypesWriter3_3; -typedef CellRadiusWriter<2,2> CellRadiusWriter2_2; -typedef CellRadiusWriter<3,3> CellRadiusWriter3_3; -typedef CellRemovalLocationsWriter<2,2> CellRemovalLocationsWriter2_2; -typedef CellRemovalLocationsWriter<3,3> CellRemovalLocationsWriter3_3; -typedef CellRosetteRankWriter<2,2> CellRosetteRankWriter2_2; -typedef CellRosetteRankWriter<3,3> CellRosetteRankWriter3_3; -typedef CellVolumesWriter<2,2> CellVolumesWriter2_2; -typedef CellVolumesWriter<3,3> CellVolumesWriter3_3; -typedef HeterotypicBoundaryLengthWriter<2,2> HeterotypicBoundaryLengthWriter2_2; -typedef HeterotypicBoundaryLengthWriter<3,3> HeterotypicBoundaryLengthWriter3_3; -typedef LegacyCellProliferativeTypesWriter<2,2> LegacyCellProliferativeTypesWriter2_2; -typedef LegacyCellProliferativeTypesWriter<3,3> LegacyCellProliferativeTypesWriter3_3; -typedef NodeLocationWriter<2,2> NodeLocationWriter2_2; -typedef NodeLocationWriter<3,3> NodeLocationWriter3_3; -typedef NodeVelocityWriter<2,2> NodeVelocityWriter2_2; -typedef NodeVelocityWriter<3,3> NodeVelocityWriter3_3; -typedef PottsMeshWriter<2> PottsMeshWriter2; -typedef PottsMeshWriter<3> PottsMeshWriter3; -typedef RadialCellDataDistributionWriter<2,2> RadialCellDataDistributionWriter2_2; -typedef RadialCellDataDistributionWriter<3,3> RadialCellDataDistributionWriter3_3; -typedef VertexIntersectionSwapLocationsWriter<2,2> VertexIntersectionSwapLocationsWriter2_2; -typedef VertexIntersectionSwapLocationsWriter<3,3> VertexIntersectionSwapLocationsWriter3_3; -typedef VertexT1SwapLocationsWriter<2,2> VertexT1SwapLocationsWriter2_2; -typedef VertexT1SwapLocationsWriter<3,3> VertexT1SwapLocationsWriter3_3; -typedef VertexT2SwapLocationsWriter<2,2> VertexT2SwapLocationsWriter2_2; -typedef VertexT2SwapLocationsWriter<3,3> VertexT2SwapLocationsWriter3_3; -typedef VertexT3SwapLocationsWriter<2,2> VertexT3SwapLocationsWriter2_2; -typedef VertexT3SwapLocationsWriter<3,3> VertexT3SwapLocationsWriter3_3; -} +} // namespace cppwg #endif // chaste_project_PyChaste_HEADERS_HPP_ diff --git a/src/visualization/AbstractPyChasteActorGenerator.cpp b/src/visualization/AbstractPyChasteActorGenerator.cpp index 2499401b..7ab1f423 100644 --- a/src/visualization/AbstractPyChasteActorGenerator.cpp +++ b/src/visualization/AbstractPyChasteActorGenerator.cpp @@ -33,52 +33,14 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - -Copyright (c) 2005-2024, University of Oxford. - All rights reserved. - - University of Oxford means the Chancellor, Masters and Scholars of the - University of Oxford, having an administrative office at Wellington - Square, Oxford OX1 2JD, UK. - - This file is Abstract of Chaste. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the University of Oxford nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A AbstractICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - #include -#define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the vtk deprecated warning #include #include #include #include #include #include -#if VTK_MAJOR_VERSION > 5 - #include -#endif +#include #include #include #include diff --git a/src/visualization/AbstractPyChasteActorGenerator.hpp b/src/visualization/AbstractPyChasteActorGenerator.hpp index 8dd1e85c..24ad122d 100644 --- a/src/visualization/AbstractPyChasteActorGenerator.hpp +++ b/src/visualization/AbstractPyChasteActorGenerator.hpp @@ -38,7 +38,6 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "SmartPointers.hpp" -#define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the vtk deprecated warning #include #include #include diff --git a/src/visualization/CellPopulationPyChasteActorGenerator.cpp b/src/visualization/CellPopulationPyChasteActorGenerator.cpp index 7e946757..acebae1c 100644 --- a/src/visualization/CellPopulationPyChasteActorGenerator.cpp +++ b/src/visualization/CellPopulationPyChasteActorGenerator.cpp @@ -70,7 +70,6 @@ Copyright (c) 2005-2024, University of Oxford. #include #include -#define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the vtk deprecated warning #include #include #include @@ -106,6 +105,7 @@ Copyright (c) 2005-2024, University of Oxford. #include "Exception.hpp" #include "CellLabel.hpp" #include "CaBasedCellPopulation.hpp" +#include "ImmersedBoundaryCellPopulation.hpp" #include "PottsBasedCellPopulation.hpp" #include "NodeBasedCellPopulation.hpp" #include "VertexBasedCellPopulation.hpp" @@ -147,7 +147,7 @@ void CellPopulationPyChasteActorGenerator::AddCaBasedCellPopulationActor(vt boost::shared_ptr > p_ca_population = boost::dynamic_pointer_cast >(mpCellPopulation); - if(p_ca_population and mShowPottsMeshEdges) + if(p_ca_population && mShowPottsMeshEdges) { vtkSmartPointer p_points = vtkSmartPointer::New(); p_points->GetData()->SetName("Vertex positions"); @@ -221,7 +221,7 @@ void CellPopulationPyChasteActorGenerator::AddPottsBasedCellPopulationActor boost::shared_ptr > p_potts_population = boost::dynamic_pointer_cast >(mpCellPopulation); - if(p_potts_population and mShowPottsMeshEdges) + if(p_potts_population && mShowPottsMeshEdges) { vtkSmartPointer p_points = vtkSmartPointer::New(); p_points->GetData()->SetName("Vertex positions"); @@ -297,7 +297,7 @@ void CellPopulationPyChasteActorGenerator::AddPottsBasedCellPopulationActor { p_element_ids->InsertNextTuple1((*cell_iter)->GetCellProliferativeType()->GetColour()); } - else if(mColorByCellData and !this->mDataLabel.empty()) + else if(mColorByCellData && !this->mDataLabel.empty()) { std::vector keys = (*cell_iter)->GetCellData()->GetKeys(); if (std::find(keys.begin(), keys.end(), this->mDataLabel) != keys.end()) @@ -455,7 +455,7 @@ void CellPopulationPyChasteActorGenerator::AddActor(vtkSmartPointer >(mpCellPopulation) or + if(mShowCellCentres || boost::dynamic_pointer_cast >(mpCellPopulation) || boost::dynamic_pointer_cast >(mpCellPopulation)) { vtkSmartPointer p_points = vtkSmartPointer::New(); @@ -480,7 +480,7 @@ void CellPopulationPyChasteActorGenerator::AddActor(vtkSmartPointerInsertNextTuple1((*cell_iter)->GetCellProliferativeType()->GetColour()); } - else if(mColorByCellData and !this->mDataLabel.empty()) + else if(mColorByCellData && !this->mDataLabel.empty()) { std::vector keys = (*cell_iter)->GetCellData()->GetKeys(); if (std::find(keys.begin(), keys.end(), this->mDataLabel) != keys.end()) @@ -588,7 +588,7 @@ void CellPopulationPyChasteActorGenerator::AddActor(vtkSmartPointerAddActor(p_actor); - if(!this->mDataLabel.empty() and this->mShowScaleBar) + if(!this->mDataLabel.empty() && this->mShowScaleBar) { this->mpScaleBar->SetLookupTable(p_scaled_ctf); this->mpScaleBar->SetTitle(this->mDataLabel.c_str()); @@ -596,22 +596,26 @@ void CellPopulationPyChasteActorGenerator::AddActor(vtkSmartPointer >(mpCellPopulation) and (mShowMutableMeshEdges or mShowVoronoiMeshEdges)) + if(boost::dynamic_pointer_cast >(mpCellPopulation) && (mShowMutableMeshEdges || mShowVoronoiMeshEdges)) { AddMeshBasedCellPopulationActor(pRenderer); } - else if (boost::dynamic_pointer_cast >(mpCellPopulation) and mShowVoronoiMeshEdges) + else if (boost::dynamic_pointer_cast >(mpCellPopulation) && mShowVoronoiMeshEdges) { AddVertexBasedCellPopulationActor(pRenderer); } - else if (boost::dynamic_pointer_cast >(mpCellPopulation) and (mShowPottsMeshEdges or mShowPottsMeshOutlines)) + else if (boost::dynamic_pointer_cast >(mpCellPopulation) && (mShowPottsMeshEdges || mShowPottsMeshOutlines)) { AddPottsBasedCellPopulationActor(pRenderer); } - else if (boost::dynamic_pointer_cast >(mpCellPopulation) and mShowPottsMeshEdges) + else if (boost::dynamic_pointer_cast >(mpCellPopulation) && mShowPottsMeshEdges) { AddCaBasedCellPopulationActor(pRenderer); } + else if (boost::dynamic_pointer_cast >(mpCellPopulation)) + { + AddImmersedBoundaryCellPopulationActor(pRenderer); + } } template @@ -674,7 +678,193 @@ void CellPopulationPyChasteActorGenerator::AddVertexBasedCellPopulationActo p_cell_color_reference_data->InsertNextTuple1(p_biological_cell->GetCellProliferativeType()->GetColour()); } - else if(mColorByCellData and !this->mDataLabel.empty()) + else if(mColorByCellData && !this->mDataLabel.empty()) + { + std::vector keys = p_biological_cell->GetCellData()->GetKeys(); + if (std::find(keys.begin(), keys.end(), this->mDataLabel) != keys.end()) + { + p_cell_color_reference_data->InsertNextTuple1(p_biological_cell->GetCellData()->GetItem(this->mDataLabel)); + } + else + { + p_cell_color_reference_data->InsertNextTuple1(0.0); + } + } + + else if(mColorByCellMutationState) + { + double mutation_state = p_biological_cell->GetMutationState()->GetColour(); + + CellPropertyCollection collection = p_biological_cell->rGetCellPropertyCollection(); + CellPropertyCollection label_collection = collection.GetProperties(); + + if (label_collection.GetSize() == 1) + { + boost::shared_ptr p_label = boost::static_pointer_cast(label_collection.GetProperty()); + mutation_state = p_label->GetColour(); + } + p_cell_color_reference_data->InsertNextTuple1(mutation_state); + } + else if(mColorByCellLabel) + { + double label = 0.0; + if (p_biological_cell->HasCellProperty()) + { + CellPropertyCollection collection = p_biological_cell->rGetCellPropertyCollection().GetProperties(); + boost::shared_ptr p_label = boost::static_pointer_cast(collection.GetProperty()); + label = p_label->GetColour(); + } + p_cell_color_reference_data->InsertNextTuple1(label); + } + else + { + p_cell_color_reference_data->InsertNextTuple1(p_biological_cell->GetCellId()); + } + } + + p_voronoi_grid->GetCellData()->AddArray(p_cell_color_reference_data); + p_voronoi_grid->GetCellData()->SetScalars(p_cell_color_reference_data); + + vtkSmartPointer p_scaled_ctf = vtkSmartPointer::New(); + if(!mColorByCellData) + { + double range[2]; + p_voronoi_grid->GetCellData()->GetArray("CellColors")->GetRange(range); + for(unsigned idx=0; idx<255; idx++) + { + double color[3]; + this->mpDiscreteColorTransferFunction->GetColor((255.0-double(idx))/255.0, color); + p_scaled_ctf->AddRGBPoint(range[0] + double(idx)*(range[1]-range[0])/255.0, color[0], color[1], color[2]); + } + } + else + { + double range[2]; + p_voronoi_grid->GetCellData()->GetArray("CellColors")->GetRange(range); + for(unsigned idx=0; idx<255; idx++) + { + double color[3]; + this->mpColorTransferFunction->GetColor(double(idx)/255.0, color); + p_scaled_ctf->AddRGBPoint(range[0] + double(idx)*(range[1]-range[0])/255.0, color[0], color[1], color[2]); + } + } + p_scaled_ctf->Build(); + + vtkSmartPointer p_geom_filter = vtkSmartPointer::New(); + #if VTK_MAJOR_VERSION <= 5 + p_geom_filter->SetInput(p_voronoi_grid); + #else + p_geom_filter->SetInputData(p_voronoi_grid); + #endif + + vtkSmartPointer p_mapper = vtkSmartPointer::New(); + p_mapper->SetInputConnection(p_geom_filter->GetOutputPort()); + p_mapper->SetLookupTable(p_scaled_ctf); + p_mapper->ScalarVisibilityOn(); + p_mapper->SelectColorArray("CellColors"); + p_mapper->SetScalarModeToUseCellData(); + p_mapper->SetColorModeToMapScalars(); + + vtkSmartPointer p_actor = vtkSmartPointer::New(); + p_actor->SetMapper(p_mapper); + p_actor->GetProperty()->SetOpacity(this->mVolumeOpacity); + if(mColorCellByUserDefined) + { + p_actor->GetProperty()->SetColor(this->mPointColor[0], this->mPointColor[1], this->mPointColor[2]); + } + pRenderer->AddActor(p_actor); + + vtkSmartPointer p_voronoi_extract_edges = vtkSmartPointer::New(); + p_voronoi_extract_edges->SetInputConnection(p_geom_filter->GetOutputPort()); + p_voronoi_extract_edges->SetFeatureEdges(false); + p_voronoi_extract_edges->SetBoundaryEdges(true); + p_voronoi_extract_edges->SetManifoldEdges(true); + p_voronoi_extract_edges->SetNonManifoldEdges(false); + + vtkSmartPointer p_voronoi_tubes = vtkSmartPointer::New(); + p_voronoi_tubes->SetInputConnection(p_voronoi_extract_edges->GetOutputPort()); + p_voronoi_tubes->SetRadius(this->mEdgeSize); + p_voronoi_tubes->SetNumberOfSides(12); + + vtkSmartPointer p_voronoi_tube_mapper = vtkSmartPointer::New(); + p_voronoi_tube_mapper->SetInputConnection(p_voronoi_tubes->GetOutputPort()); + p_voronoi_tube_mapper->ScalarVisibilityOff(); + + vtkSmartPointer p_voronoi_tube_actor = vtkSmartPointer::New(); + p_voronoi_tube_actor->SetMapper(p_voronoi_tube_mapper); + p_voronoi_tube_actor->GetProperty()->SetColor(this->mEdgeColor[0], this->mEdgeColor[1], this->mEdgeColor[2]); + pRenderer->AddActor(p_voronoi_tube_actor); + + if(!this->mDataLabel.empty() && this->mShowScaleBar) + { + this->mpScaleBar->SetLookupTable(p_scaled_ctf); + this->mpScaleBar->SetTitle(this->mDataLabel.c_str()); + pRenderer->AddActor(this->mpScaleBar); + } + } +} + +template +void CellPopulationPyChasteActorGenerator::AddImmersedBoundaryCellPopulationActor(vtkSmartPointer pRenderer) +{ + boost::shared_ptr > p_cell_population = boost::dynamic_pointer_cast >(mpCellPopulation); + + if(!p_cell_population) + { + EXCEPTION("Could not cast mesh to Immersed Boundary type."); + } + + if(mShowVoronoiMeshEdges) + { + vtkSmartPointer p_voronoi_grid = vtkSmartPointer::New(); + vtkSmartPointer p_cell_color_reference_data = vtkSmartPointer::New(); + p_cell_color_reference_data->SetName("CellColors"); + + vtkSmartPointer p_points = vtkSmartPointer::New(); + p_points->GetData()->SetName("Vertex positions"); + for (unsigned node_num=0; node_numrGetMesh().GetNumNodes(); node_num++) + { + c_vector position = p_cell_population->rGetMesh().GetNode(node_num)->rGetLocation(); + if (DIM==2) + { + p_points->InsertPoint(node_num, position[0], position[1], 0.0); + } + else + { + p_points->InsertPoint(node_num, position[0], position[1], position[2]); + } + } + p_voronoi_grid->SetPoints(p_points); + + for (typename ImmersedBoundaryMesh::ImmersedBoundaryElementIterator iter = p_cell_population->rGetMesh().GetElementIteratorBegin(); + iter != p_cell_population->rGetMesh().GetElementIteratorEnd(); ++iter) + { + vtkSmartPointer p_cell; + if (DIM == 2) + { + p_cell = vtkSmartPointer::New(); + } + else + { + p_cell = vtkSmartPointer::New(); + } + vtkSmartPointer p_cell_id_list = p_cell->GetPointIds(); + p_cell_id_list->SetNumberOfIds(iter->GetNumNodes()); + for (unsigned j=0; jGetNumNodes(); ++j) + { + p_cell_id_list->SetId(j, iter->GetNodeGlobalIndex(j)); + } + p_voronoi_grid->InsertNextCell(p_cell->GetCellType(), p_cell_id_list); + + unsigned element_index = iter->GetIndex(); + CellPtr p_biological_cell = p_cell_population->GetCellUsingLocationIndex(element_index); + + if(mColorByCellType) + { + p_cell_color_reference_data->InsertNextTuple1(p_biological_cell->GetCellProliferativeType()->GetColour()); + } + + else if(mColorByCellData && !this->mDataLabel.empty()) { std::vector keys = p_biological_cell->GetCellData()->GetKeys(); if (std::find(keys.begin(), keys.end(), this->mDataLabel) != keys.end()) @@ -791,7 +981,7 @@ void CellPopulationPyChasteActorGenerator::AddVertexBasedCellPopulationActo p_voronoi_tube_actor->GetProperty()->SetColor(this->mEdgeColor[0], this->mEdgeColor[1], this->mEdgeColor[2]); pRenderer->AddActor(p_voronoi_tube_actor); - if(!this->mDataLabel.empty() and this->mShowScaleBar) + if(!this->mDataLabel.empty() && this->mShowScaleBar) { this->mpScaleBar->SetLookupTable(p_scaled_ctf); this->mpScaleBar->SetTitle(this->mDataLabel.c_str()); @@ -877,7 +1067,7 @@ void CellPopulationPyChasteActorGenerator::AddMeshBasedCellPopulationActor( p_cell_color_reference_data->InsertNextTuple1(p_biological_cell->GetCellProliferativeType()->GetColour()); } - else if(mColorByCellData and !this->mDataLabel.empty()) + else if(mColorByCellData && !this->mDataLabel.empty()) { std::vector keys = p_biological_cell->GetCellData()->GetKeys(); if (std::find(keys.begin(), keys.end(), this->mDataLabel) != keys.end()) @@ -1005,7 +1195,7 @@ void CellPopulationPyChasteActorGenerator::AddMeshBasedCellPopulationActor( p_voronoi_tube_actor->GetProperty()->SetColor(this->mEdgeColor[0], this->mEdgeColor[1], this->mEdgeColor[2]); pRenderer->AddActor(p_voronoi_tube_actor); - if(!this->mDataLabel.empty() and this->mShowScaleBar) + if(!this->mDataLabel.empty() && this->mShowScaleBar) { this->mpScaleBar->SetLookupTable(p_scaled_ctf); this->mpScaleBar->SetTitle(this->mDataLabel.c_str()); diff --git a/src/visualization/CellPopulationPyChasteActorGenerator.hpp b/src/visualization/CellPopulationPyChasteActorGenerator.hpp index db288294..57f0ef8e 100644 --- a/src/visualization/CellPopulationPyChasteActorGenerator.hpp +++ b/src/visualization/CellPopulationPyChasteActorGenerator.hpp @@ -73,7 +73,6 @@ Copyright (c) 2005-2024, University of Oxford. #include #include "SmartPointers.hpp" -#define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the vtk deprecated warning #include #include #include @@ -173,6 +172,12 @@ class CellPopulationPyChasteActorGenerator : public AbstractPyChasteActorGenerat */ void AddVertexBasedCellPopulationActor(vtkSmartPointer pRenderer); + /** + * Specialized class for adding Immersed boundary population + * @param pRenderer the current renderer + */ + void AddImmersedBoundaryCellPopulationActor(vtkSmartPointer pRenderer); + /** * Specialized class for adding Ca based population * @param pRenderer the current renderer diff --git a/src/visualization/VtkScene.cpp b/src/visualization/VtkScene.cpp index af957708..478a9c52 100644 --- a/src/visualization/VtkScene.cpp +++ b/src/visualization/VtkScene.cpp @@ -34,7 +34,6 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include -#define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the vtk deprecated warning #include #include #include @@ -43,9 +42,7 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include -#if VTK_MAJOR_VERSION > 5 - #include -#endif +#include #include #include #include @@ -110,9 +107,7 @@ VtkScene::VtkScene() mpRenderWindow(vtkSmartPointer::New()), mpRenderWindowInteractor(vtkSmartPointer::New()), mOutputFilePath(), - #if VTK_MAJOR_VERSION > 5 mAnimationWriter(vtkSmartPointer::New()), - #endif mWindowToImageFilter(vtkSmartPointer::New()), mIsInteractive(false), mSaveAsAnimation(false), @@ -214,7 +209,7 @@ void VtkScene::ResetRenderer(unsigned time_step) p_writer->Write(); } } - #if VTK_MAJOR_VERSION > 5 + if(mSaveAsAnimation) { if(!mSaveAsImages) @@ -225,7 +220,7 @@ void VtkScene::ResetRenderer(unsigned time_step) } mAnimationWriter->Write(); } - #endif // VTK_MAJOR_VERSION > 5 + if(mIsInteractive) { mpRenderWindow->SetOffScreenRendering(0); @@ -254,12 +249,10 @@ void VtkScene::SetCellPopulation(boost::shared_ptr void VtkScene::End() { - #if VTK_MAJOR_VERSION > 5 if(mSaveAsAnimation and mHasStarted) { mAnimationWriter->End(); } - #endif } template @@ -285,12 +278,10 @@ void VtkScene::Start() if(mSaveAsAnimation) { - #if VTK_MAJOR_VERSION > 5 mAnimationWriter->SetInputConnection(mWindowToImageFilter->GetOutputPort()); mAnimationWriter->SetFileName((mOutputFilePath+".ogg").c_str()); mAnimationWriter->SetRate(1.0); mAnimationWriter->Start(); - #endif } mHasStarted = true; diff --git a/src/visualization/VtkScene.hpp b/src/visualization/VtkScene.hpp index 5833c848..82d64eaa 100644 --- a/src/visualization/VtkScene.hpp +++ b/src/visualization/VtkScene.hpp @@ -38,23 +38,11 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "SmartPointers.hpp" -#define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the vtk deprecated warning #include -#if VTK_MAJOR_VERSION > 5 - #include - #if VTK_MINOR_VERSION > 0 - #include - #if VTK_MAJOR_VERSION > 6 - VTK_MODULE_INIT(vtkRenderingOpenGL2); - #else - VTK_MODULE_INIT(vtkRenderingOpenGL); - #endif - VTK_MODULE_INIT(vtkRenderingFreeType); - #else - #define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL) - #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL) - #endif -#endif +#include +#include +VTK_MODULE_INIT(vtkRenderingOpenGL2); +VTK_MODULE_INIT(vtkRenderingFreeType); #include #include #include @@ -92,12 +80,10 @@ class VtkScene */ std::string mOutputFilePath; - #if VTK_MAJOR_VERSION > 5 /** * The animation writer */ vtkSmartPointer mAnimationWriter; - #endif /** * The image to window filter @@ -157,7 +143,7 @@ class VtkScene void End(); /** - * Render the current scene and return is as a char array, can be passed + * Render the current scene and return it as a char array that can be passed * into a Python buffer for display. * @return the scene as a char array */ diff --git a/test/ContinuousTestPack.txt b/test/ContinuousTestPack.txt index 392698a0..7e6e9680 100644 --- a/test/ContinuousTestPack.txt +++ b/test/ContinuousTestPack.txt @@ -14,6 +14,7 @@ python/cell_based/TestCaBasedCellPopulationPython.py python/cell_based/TestMeshBasedCellPopulationPython.py python/cell_based/TestVertexBasedCellPopulationPython.py python/cell_based/TestNodeBasedCellPopulationPython.py +python/cell_based/tutorials/TestImmersedBoundaryTutorial.py python/cell_based/tutorials/TestMeshBasedCellSimulationsPythonTutorial.py python/cell_based/tutorials/TestNodeBasedCellSimulationsPythonTutorial.py python/cell_based/tutorials/TestPottsBasedCellSimulationsPythonTutorial.py diff --git a/test/python/cell_based/tutorials/TestImmersedBoundaryTutorial.py b/test/python/cell_based/tutorials/TestImmersedBoundaryTutorial.py new file mode 100644 index 00000000..0469e81a --- /dev/null +++ b/test/python/cell_based/tutorials/TestImmersedBoundaryTutorial.py @@ -0,0 +1,473 @@ +"""Copyright (c) 2005-2024, University of Oxford. +All rights reserved. + +University of Oxford means the Chancellor, Masters and Scholars of the +University of Oxford, having an administrative office at Wellington +Square, Oxford OX1 2JD, UK. + +This file is part of Chaste. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the University of Oxford nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" + +#ifndef +#define TRIGGER_WIKI + +## ## Introduction +## This tutorial is a demonstration of the immersed boundary method, a technique +## for simulating fluid-structure interactions. We can use the immersed boundary +## method to simulate a cell as a structure with its outer **boundary immersed** +## in a fluid. There is a two-way coupling between the fluid and the structure: +## the flow of the fluid exerts a force on the structure, and the structure +## influences the flow of the fluid. +## +## In this tutorial, we demonstrate: +## 1. Building single-cell immersed boundary capable simulations. +## 2. Building multi-cellular immersed boundary simulations. +## 3. Adding and manipulating immersed boundary fluid sources. +## +## ## Imports + +import unittest + +import chaste + +chaste.init() # setup MPI + +from chaste.cell_based import ( + AbstractCellBasedTestSuite, + CellsGeneratorUniformCellCycleModel_2, + DifferentiatedCellProliferativeType, + ForwardEulerNumericalMethod2_2, + ImmersedBoundaryCellPopulation2, + ImmersedBoundaryLinearInteractionForce2, + ImmersedBoundaryLinearMembraneForce2, + ImmersedBoundarySimulationModifier2, + OffLatticeSimulation2_2, + SetupNotebookTest, + SimulationTime, + TearDownNotebookTest, +) + +from chaste.mesh import FluidSource2, ImmersedBoundaryPalisadeMeshGenerator + +from chaste.visualization import ( + JupyterNotebookManager, + JupyterSceneModifier2, + VtkScene2 +) + +class TestImmersedBoundaryTutorial(AbstractCellBasedTestSuite): + + ## ### 1. Simple Immersed Boundary Simulations + ## We begin by exploring simulations containing a single cell. This will + ## familiarise you with how to generate immersed boundary cells, the steps + ## involved in setting up an immersed boundary simulation, and the options + ## available for controlling how the cells are generated and behave. + ## + + ## Immersed boundary simulations operate over a square domain, with `x` and `y` + ## coordinates lying in the range `0` to `1`. The domain wraps on both axes - + ## this means that if a cell moves off the right hand edge of the domain, + ## the segment will appear on the left hand side. This is not purely visual; + ## forces are also transmitted across these boundaries. + ## + + ## **Tip** Make sure all your coordinates are between `0` and `1`. + + def test_simple_immersed_boundary_simulation(self): + + ## Setup the simulation environment in the notebook + + SetupNotebookTest() + + ## Set the start time for the simulation + + SimulationTime.Instance().SetStartTime(0.0) + + ## Next, we define the necessary geometry by generating a mesh to + ## contain a single cell. + + gen = ImmersedBoundaryPalisadeMeshGenerator(1, 128, 0.1, 2.0, 0.0, False) + mesh = gen.GetMesh() + + ## The first line of code defines an `ImmersedBoundaryPalisadeMeshGenerator` + ## called `gen`. The 3rd parameter controls the exponent of the superellipse(`0.1`) + ## and the 4th parameter controls the aspect ratio of the cell(`2.0`). You can + ## experiment with modifying these to change the initial shape of the cell. + ## + + ## The second line of code instructs the mesh generator to generate a mesh. + ## Checking the type of mesh with `type(mesh)` will show it as + ## `ImmersedBoundaryMesh2_2`. The `2_2` suffix denotes that we are using + ## a 2-dimensional space, and 2-dimensional elements to define the mesh. + ## + + ## We now set the fluid grid resolution. The following code specifies + ## that we are using a 64x64 grid to simulate our fluid over. + + mesh.SetNumGridPtsXAndY(64) + + ## Next, we generate the cells. We specify a cell type and cell cycle model. + ## These can be changed to modify the life cycle of the cells. The + ## cell generator then constructs the necessary information for each + ## of the elements in the mesh. + + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + + ## Finally, we construct the cell population. We then specify whether the + ## population has active fluid sources or not. For now, we are not + ## using any fluid sources, so we set this to `False` + + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + cell_population.SetIfPopulationHasActiveSources(False) + + ## We can make a quick visualization of the cell population + + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + + ## Next, we create an `OffLatticeSimulation` simulator to control the + ## simulation. Although the fluid is simulated on a lattice (grid), + ## the nodes/cells are not bound to a lattice. + + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + + ## As we have an off-lattice simulation, we need a way to model the + ## fluid. This is handled by the `ImmersedBoundarySimulationModifier`. + ## Modifiers in Chaste are classes that can be attached to simulations + ## to perform some additional custom functionality each timestep. + ## In this case, the modifier is responsible for solving the + ## Navier-Stokes equations and propagating forces between the nodes and + ## the fluid. + + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + + ## We must also provide the modifier with a force model to govern + ## interactions between the nodes forming the cell membrane. + ## Note that these forces only act between nodes in the same cell; + ## they do not control interactions between cells. + + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + + ## The `ImmersedBoundaryLinearMembraneForce` models forces between + ## membrane nodes using linear springs i.e, the force applied is + ## proportional to the deviation of the distance between nodes + ## from a rest length. The spring constant(`1.0 * 1e7`) defines how + ## stiff the cell boundary is. + ## + + ## **Practice** Experiment with adjusting the spring constant to + ## change the force behaviour between nodes of the cell boundary. + ## + + ## Next, we set the simulation properties + + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_1") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(1000 * dt) + + ## We can add a modifier to visualize the cell population while the + ## simulation is in progress + + scene_modifier = JupyterSceneModifier2(nb_manager) + scene_modifier.SetVtkScene(scene) + scene_modifier.SetUpdateFrequency(1000) + simulator.AddSimulationModifier(scene_modifier) + + ## Finally, to run the simulation we call the `Solve()` method. + + simulator.Solve() + + ## Reset the simulation environment in the notebook + + TearDownNotebookTest() + + ## ### 2. Adding More Cells + + def test_multicell_immersed_boundary_simulation(self): + + ## #### Multiple Cells + + ## Setup the simulation environment in the notebook + + SetupNotebookTest() + + ## Set the start time for the simulation + + SimulationTime.Instance().SetStartTime(0.0) + + ## We can use the mesh generator to generate multiple cells. The first + ## parameter of the mesh generator constructor controls the number of + ## cells. + ## + + ## **Practice** Try increasing the number of cells by adjusting the + ## parameter value. A sensible range for this tutorial is 4-10 cells. + + gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False) + + ## #### Laminas + ## In addition to the cells we have seen so far, we can introduce + ## laminas to the simulation. Laminas are surfaces with reduced + ## dimensionality. For 3D elements, a lamina is a 2D surface. For the + ## 2D elements we are currently working with, laminas are lines. + ## Changing the last parameter of the mesh generator constructor from `False` + ## to `True` will generate a basal lamina spanning the palisade cells. + ## Laminas can also interact with the fluid field, and can be made + ## "leaky" to allow some flow across their boundary. This can be used + ## to model a permeable boundary. + ## + + ## **Practice** Try changing the 6th constructor parameter to create a lamina. + ## + + + ## #### Cell Variations + ## Apart from using the 3rd and 4th constructor parameters to modify + ## the cell shapes, we can also introduce variation between cells by + ## modifying the 5th parameter. + ## + + ## **Practice** Try adjusting the 3rd and 4th constructor parameters to + ## introduce cell variations. + ## + + ## Next, we generate the mesh and set the fluid grid resolution + + mesh = gen.GetMesh() + mesh.SetNumGridPtsXAndY(64) + + ## Below, we generate the cells + + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + + ## Then we set up the cell population with no active fluid sources + + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + cell_population.SetIfPopulationHasActiveSources(False) + + ## We can visualize the cell population below + + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + + ## Now we create a simulator to manage the simulation + + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + + ## We add an immersed boundary simulation modifier to the simulator + + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + + ## We then add a force law to the simulation modifier to model the + ## behaviour of the cell membrane + + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + + ## #### Inter-cellular Interactions + ## So far, we have encountered forces that act to maintain the shape + ## of the cell membrane. We can also introduce an inter-cellular + ## force law using `ImmersedBoundaryLinearInteractionForce`. + ## This has a `SetSpringConst` method instead of a `SetElementSpringConst` + ## method. It also has a `SetRestLength` method that we can use to + ## modify the rest length. + + interaction_force = ImmersedBoundaryLinearInteractionForce2() + interaction_force.SetSpringConst(1.0 * 1e6) + ib_modifier.AddImmersedBoundaryForce(interaction_force) + + ## Next, we set the simulation properties + + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_2") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(1000 * dt) + + ## Finally, we run the simulation + + simulator.Solve() + + ## We can visualize the end state of the cell population + + nb_manager.vtk_show(scene, height=300) + + ## Reset the simulation environment in the notebook + + TearDownNotebookTest() + + ## ### 3. Adding Fluid Sources + ## Now that we are familiar with how to generate the cells, we will + ## introduce fluid sources. + + def test_fluid_source_immersed_boundary_simulation(self): + + ## #### Adding a Fluid Source + + ## Setup the simulation environment in the notebook + + SetupNotebookTest() + + ## Set the start time for the simulation + + SimulationTime.Instance().SetStartTime(0.0) + + ## We begin by constructing a fluid source object: + + source = FluidSource2(0, 0.5, 0.7) + + ## This constructs a `FluidSource` object in 2 dimensions. The first + ## parameter supplies the index of the fluid source. Each source we + ## create must have a unique index. The next two parameters are the + ## `x` and `y` coordinates of the source. Fluid sources in Chaste are + ## point-like, that is to say they do not have any area/volume. + ## + ## Having created the fluid source, we set its strength: + + source.SetStrength(0.012) + + ## Next, we create the mesh + + gen = ImmersedBoundaryPalisadeMeshGenerator(5, 128, 0.1, 2.0, 0.0, False) + mesh = gen.GetMesh() + mesh.SetNumGridPtsXAndY(64) + + ## We must associate the source with an element in the simulation + ## so that the simulation is aware of the source. + + mesh.GetElement(0).SetFluidSource(source) + + ## We now generate the cells + + cell_type = DifferentiatedCellProliferativeType() + cell_generator = CellsGeneratorUniformCellCycleModel_2() + cells = cell_generator.GenerateBasicRandom(mesh.GetNumElements(), cell_type) + + ## Then we set up the cell population + + cell_population = ImmersedBoundaryCellPopulation2(mesh, cells) + + ## Finally, we must tell the cell population that fluid sources are present. + + cell_population.SetIfPopulationHasActiveSources(True) + + ## #### Varying the Source Location and Strength + ## **Practice** You can experiment with the source location. Try moving it + ## closer to and further away from the cells. + ## + + ## **Practice** Try modifying the source strength to see what impact this + ## has on the cell shapes. + ## + + ## Below, we visualize the cell population + + scene = VtkScene2() + scene.SetCellPopulation(cell_population) + nb_manager = JupyterNotebookManager() + nb_manager.vtk_show(scene, height=300) + + ## Create a simulator to manage the simulation + + simulator = OffLatticeSimulation2_2(cell_population) + simulator.SetNumericalMethod(ForwardEulerNumericalMethod2_2()) + simulator.GetNumericalMethod().SetUseUpdateNodeLocation(True) + + ## Add an immersed boundary simulation modifier + + ib_modifier = ImmersedBoundarySimulationModifier2() + simulator.AddSimulationModifier(ib_modifier) + + ## #### Fluid-Cell Interaction + ## **Practice** Try modifying the spring constant of the + ## `ImmersedBoundaryLinearMembraneForce` to see how this changes the + ## effect of the fluid source on the cells. + + membrane_force = ImmersedBoundaryLinearMembraneForce2() + membrane_force.SetElementSpringConst(1.0 * 1e7) + ib_modifier.AddImmersedBoundaryForce(membrane_force) + + ## Add an inter-cellular force law + + interaction_force = ImmersedBoundaryLinearInteractionForce2() + interaction_force.SetSpringConst(1.0 * 1e6) + ib_modifier.AddImmersedBoundaryForce(interaction_force) + + ## #### Adding More Sources + ## **Practice** Try adding a second fluid source. You will need to + ## use a unique index, and attach it to a different element as + ## each element can only manage a single fluid source. + ## + + ## Next, we set the simulation properties + + dt = 0.05 + simulator.SetOutputDirectory("Python/TestImmersedBoundary_3") + simulator.SetDt(dt) + simulator.SetSamplingTimestepMultiple(4) + simulator.SetEndTime(300 * dt) + + ## Finally, we run the simulation + + simulator.Solve() + + ## Then we visualize the end state + + nb_manager.vtk_show(scene, height=300) + + ## Reset the simulation environment in the notebook + + TearDownNotebookTest() + + ## #### Further Exercises + ## * Try integrating a different cell cycle model to introduce cell + ## division. See how the presence of a fluid source impacts the + ## structure that is formed. + ## * Use one of the cell writers to collect some statistics + + +if __name__ == "__main__": + unittest.main(verbosity=2) + +#endif END_WIKI