.. _parallel_compute_page: ****************** Parallel Computing ****************** .. warning:: This functionality is a work in progress. It is only available for NETGEN. It is only available in TUI. The goal here is to speed up computation by running sub-meshes in parallel (multi-threading). Concept ####### .. image:: ../images/diagram_parallel_mesh.png In order to parallelise the computation of the mesh we split the geometry into: * A 1D+2D compound * A list of 3D solids Then create a sub-mesh for each of those geometry. And associate Hypothesis to the mesh using a hypothesis on the whole geometry We will first compute sequentially the 1D+2D compound with NETGEN_1D2D. Then we will compute all the solids in parallel. Having done the 1D+2D first ensure that all the solids can be computed without any concurrency. How to ###### You follow the same principle as the creation of a sequential Mesh. 1. First you create the mesh: .. code-block:: python par_mesh = smesh.ParallelMesh(my_geom, name="par_mesh") 2. Define the Global Hypothesis that will be split into an hypothesis for the 1D+2D compound and one for each of the 3D solids: .. code-block:: python NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters', 'NETGENEngine', 34.641, 0 ) par_mesh.AddGlobalHypothesis(NETGEN_3D_Parameters_1) 3. Set the method for the parallelisation: You have two methods for parallelisation: * Multihtreading: Will run the computation on your computer using the processors on your computer. .. code-block:: python par_mesh.SetParallelismMethod(smeshBuilder.MULTITHREAD) * MultiNodal: Will run the computation on a remote resource (cluster) that is defined in your salome catalog. .. code-block:: python par_mesh.SetParallelismMethod(smeshBuilder.MULTINODE) 4. Set the parameters for the parallelism: * Multithread: .. code-block:: python param = par_mesh.GetParallelismSettings() param.SetNbThreads(6) * Multinode: .. code-block:: python param = par_mesh.GetParallelismSettings() param.SetResource("cronos") param.SetNbProc(nbox**3) param.SetNbProcPerNode(2) param.SetNbNode(6) param.SetWcKey("P11N0:SALOME_COFEE") 5. Compute the mesh: .. code-block:: python is_done = par_mesh.Compute() if not is_done: raise Exception("Error when computing Mesh") **See Also** a sample script of :ref:`tui_create_parallel_mesh`.