Edit me

Create and edit ModelParts

Here we introduce the basics to create and access to model parts and submodelparts.

Starting

First of all we need to create a python file with following code to import the KratosMultiphysics.

import KratosMultiphysics

Create Model

Then we need to create the Model, which will be the resposible to manage the different ModelParts that we will create.

this_model = KratosMultiphysics.Model()

Create ModelPart

Now we can create a ModelPart. The ModelPart is the object containing Element, Conditions, Nodes and Properties. For now we create the Main model part, which will store the successive submodelparts.

main_model_part = this_model.CreateModelPart("Main")

We can create a new model part with a certain buffer size using the following (we need to delete the model part to avoid errors):

this_model.DeleteModelPart("Main")
main_model_part = this_model.CreateModelPart("Main", 2)

We can now execute different operations with the Model:

print(this_model.HasModelPart("Main")) # It will return True
print(this_model.GetModelPartNames()) # It will return ['Main']
main_model_part_again = this_model.GetModelPart("Main") # Getting again

Let’s output what is there:

print(main_model_part)
-Main- model part
    Buffer Size : 2
    Number of tables : 0
    Number of sub model parts : 0
    Current solution step index : 0

    Mesh 0 :
        Number of Nodes       : 0
        Number of Properties  : 0
        Number of Elements    : 0
        Number of Conditions  : 0
        Number of Constraints : 0

Some other operations we can do are:

print(main_model_part.NumberOfNodes()) # It will return 0
print(main_model_part.NumberOfElements()) # It will return 0
print(main_model_part.NumberOfConditions()) # It will return 0
print(main_model_part.NumberOfMasterSlaveConstraints()) # It will return 0
print(main_model_part.NumberOfProperties()) # It will return 0
print(main_model_part.NumberOfMeshes()) # It will return 1
print(main_model_part.GetBufferSize()) # It will return 2
main_model_part.SetBufferSize(3) # Set the buffer size to 3 instead of 2

Create sub ModelPart

A fundamental feature is that it can also hierarchically contain SubModelParts intended as other ModelParts which belong to the same parent. This relation can be repeated recursively, so that each “root” ModelPart can actually own a tree of SubModelParts. We can create a submodelpart with the following:

bc_model_part = main_model_part.CreateSubModelPart("BC")

Let’s output what is there:

print(main_model_part)
-Main- model part
    Buffer Size : 3
    Number of tables : 0
    Number of sub model parts : 1
    Current solution step index : 0

    Mesh 0 :
        Number of Nodes       : 0
        Number of Properties  : 0
        Number of Elements    : 0
        Number of Conditions  : 0
        Number of Constraints : 0

    -BC- model part
        Number of tables : 0
        Number of sub model parts : 0

        Mesh 0 :
            Number of Nodes       : 0
            Number of Properties  : 0
            Number of Elements    : 0
            Number of Conditions  : 0
            Number of Constraints : 0

Now we can do several operations with this:

print(main_model_part.HasSubModelPart("BC")) #returns True
print(main_model_part.NumberOfSubModelParts()) #returns 1
print(main_model_part.GetSubModelPart("BC").Name) #returns the name --> BC

Data Ownership

The parent-son relation is such that anything that belongs to a given SubModelPart also belongs to the parent ModelPart.

This implies that the ultimate owner of any Node, Element, etc, will be the root ModelPart. The consistency of the tree is ensured by the ModelPart API, which provides the tools needed for creating or removing anything any of the contained objects.