From 8fe04dc0026fce536cc86cb30c0e79e4b7091fa8 Mon Sep 17 00:00:00 2001 From: Arushi Saxena Date: Tue, 13 Feb 2024 21:58:59 -0500 Subject: [PATCH] Add documentation. --- .../creating_new_plugins.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/sphinx/developer_manual/developing_for_the_GWB/creating_new_plugins.md b/doc/sphinx/developer_manual/developing_for_the_GWB/creating_new_plugins.md index 458aab2d7..b08dde930 100644 --- a/doc/sphinx/developer_manual/developing_for_the_GWB/creating_new_plugins.md +++ b/doc/sphinx/developer_manual/developing_for_the_GWB/creating_new_plugins.md @@ -2,6 +2,17 @@ Creating new plugins ==================== -```{todo} -Explain how to create a new plugin. If possible find one which already nearly does what you want and copy and change it, but also explain how to build one from sratch. -``` \ No newline at end of file +It is possible that the user wants to implement a different distribution of properties (temperature or composition) than the ones available in the GWB. This can be achieved by creating a new plugin with the steps outlined subsequently. We will discuss two ways to write a plugin: one is to base it on an existing plugin, and another is to write the plugin from scratch. + +#### Modify an existing plugin + +Identify an existing implementation that nearly does what you want and copy the contents into another file, say `myplugin.cc`, in the same directory. It is also recommended that you make a copy of the corresponding header file into `myplugin.h`. This allows other plugins to use the declarations in `myplugin`. + +As an example, assume that you want to implement faults in your world that have compositional value that varies according to a hat function. In this case, the closest existing functionality is the `smooth` fault composition that varies following a hyperbolic tangent function. You can then modify the implementation of the relevant function, i.e., `get_composition()`, such that it now returns a compositional value based on the hat function. + +#### Write a plugin from scratch + +Create your plugin file that contains the declarations and implementations of all the members of your class, which must be derived from the relevant `Interface` class. For example, if you are creating a new temperature computation for a `continental_plate_model`, then you would include the function declarations of `features/continental_plate_models/fault_models/interface.h`. This implies that you need to have the functions `declare_entries`, `parse_enteries`, and `get_temperature` and their defintions for your plugin. Similar to above, it is recommended that you split the function declarations into a header file, say `myplugin.h`. + +----- +Register the plugin at the bottom of `myplugin.cc` in `WB_REGISTER_*` that instantiates the plugin, documents it, and makes it available to the parameter file handlers. Finally, compile the plugin, using `cmake .` and then `make` in the top directory.