How to create surface reinforcement

When a non-linear analysis is performed it might be necessary to apply (surface) reinforcement in your model. In the FEM-client (rhdhv_fem) surface reinforcement documentation general information can be found when applying surface reinforcement. This how-to is focussing on the VIIA specifics.

As example case we will use a concrete floor that has reinforcement on both side on the entire shape.

Creating points for reinforcement

If the reinforcement is applied on the whole shape we can use the contour and opening points directly. They only need to be translated in the normal direction of the floor to the center line of the reinforcement.

# Get the floor to which the reinforcement should be added.
floor = project.viia_get(name='N0-VLOEREN-BETON-250-1')

# Get the normal (out-of-plane) vector of floor.
# Note: The normal vector depends on the node ordering of the floor.
# Check this direction!
normal_vector = floor.normal_vector()

# Define the center-to-center distance between the center line of the floor and reinforcement.
top_ctc = 80/1000
bottom_ctc = -80/1000

# Initiate the point lists for the reinforcement with the shifted contour points.
top_points = [
    fem_translate_points(
        point_list=floor.contour.get_points(),
        translations=fem_scalar_vector_multiplication(
            vector=normal_vector,
            scalar=top_ctc))]
bottom_points = [
    fem_translate_points(
        point_list=floor.contour.get_points(),
        translations=fem_scalar_vector_multiplication(
            vector=normal_vector,
            scalar=bottom_ctc))]

# If the floor has openings the opening should also be added to the contour.
if floor.openings:
    bottom_openings = []
    top_openings = []
    for opening in floor.openings:
        top_openings.append(
            fem_translate_points(
                point_list=opening.get_points(),
                translations=fem_scalar_vector_multiplication(
                    vector=normal_vector,
                    scalar=top_ctc)))
        bottom_openings.append(
            fem_translate_points(
                point_list=opening.get_points(),
                translations=fem_scalar_vector_multiplication(
                    vector=normal_vector,
                    scalar=bottom_ctc)))
    top_points.extend(top_openings)
    bottom_points.extend(bottom_openings)

If the reinforcement is only present on a part of the shape the points can be adjusted as needed. Regions do not have to be applied to model reinforcement. The following code shows how to translate points that are only on a part of the shape.

# Initiate the point lists for the reinforcement with the shifted points of a specific area.
# reinforcement_area give as points in the center plane of the floor
reinforcement_area = [[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0]]
top_points = [
    fem_translate_points(
        point_list=reinforcement_area,
        translations=fem_scalar_vector_multiplication(
            vector=normal_vector,
            scalar=top_ctc))]
bottom_points = [
    fem_translate_points(
        point_list=reinforcement_area,
        translations=fem_scalar_vector_multiplication(
            vector=normal_vector,
            scalar=bottom_ctc))]

Material input

The input for the material of the reinforcement is give by the name of the reinforcement, usually this will be ‘WAP-B400’ or ‘WAP-B500’. In this example we will use ‘WAP-B500’.

material='WAP-B500'

Geometry input

For the geometry the type of shape (‘VLOEREN’) together with the dimensions of the reinforcement should be given. In this example we will use reinforcement with a diameter of 7.5 mm with a c.t.c. spacing of 150 mm in local x-direction and a diameter of 5 mm with a c.t.c. spacing of 150 mm in local y-direction.

geometry='VLOEREN-WAP-R7.5_150xR5_150'

Name/layer input

For the name of the surface reinforcement the name of the layer should be given. This can be done manually or can be retrieved from the name of the floor.

# Get layer
layer = floor.layer.name

Creating surface reinforcement shape

Now that we have all the required information we can make the surface reinforcement.

top_surface_reinforcement = project.viia_create_main_surface_reinforcement(
    name=layer,
    material=material,
    geometry=geometry,
    points=top_points,
    host_members=[floor])
bottom_surface_reinforcement = project.viia_create_main_surface_reinforcement(
    name=layer,
    material=material,
    geometry=geometry,
    points=bottom_points,
    host_members=[floor])