Results for Static Analysis Surface Deformations

Hello!

I've discovered an issue with the RFEM6 API (I think) when retrieving surface-related results. While node deformation results work correctly, all surface-related results (global deformations, local deformations, contact stresses) return empty DataFrames with incorrect column structures.

Environment:

  • RFEM6 Version: 6.11.0001
  • Python Version: 3.11.9
  • dlubal-api Version: 2.11.1

Issue Details:

  1. Working Correctly:
# This works as expected, returns proper node deformation results
rfem.results.STATIC_ANALYSIS_NODES_GLOBAL_DEFORMATIONS  # value 1
  1. Not Working (All Return Empty DataFrames):
# All of these return empty DataFrames with incorrect column structure
rfem.results.STATIC_ANALYSIS_SURFACES_GLOBAL_DEFORMATIONS_TABLE    # value 28
rfem.results.STATIC_ANALYSIS_SURFACES_LOCAL_DEFORMATIONS_TABLE     # value 29
rfem.results.STATIC_ANALYSIS_SURFACES_CONTACT_STRESSES_TABLE       # value 55
  1. API Response Issues:
    • When I ran for STATIC_ANALYSIS_SURFACES_GLOBAL_DEFORMATIONS_TABLE I got:
    • Empty DataFrame (0 rows)
    • Incorrect column structure (stress-related instead of deformation-related):
      ['loading', 'envelope', 'direction', 'mode_no', 'solid_no', 'surface_no', 
       'grid_point_no', 'location_x', 'location_y', 'location_z', 'tag', 
       'sigma_x', 'sigma_y', 'sigma_z', 'tau_yz', 'tau_xz', 'tau_xy']
      

Minimal Reproducible Example:

import logging
from dlubal.api import rfem
import dlubal.api

logger = logging.getLogger(__name__)
logger.info(f"dlubal.api version: {dlubal.api.__version__}")

# Initialize RFEM application
rfem_app = rfem.Application(api_key_value=YOUR_API_KEY)
rfem_app.open_model(path=MODEL_PATH)

# Test different surface result types
result_types = [
    rfem.results.STATIC_ANALYSIS_SURFACES_GLOBAL_DEFORMATIONS_TABLE,
    rfem.results.STATIC_ANALYSIS_SURFACES_LOCAL_DEFORMATIONS_TABLE,
    rfem.results.STATIC_ANALYSIS_SURFACES_CONTACT_STRESSES_TABLE
]

for result_type in result_types:
    logger.info(f"\nTesting: {result_type}")
    result_df = rfem_app.get_results(results_type=result_type).data
    logger.info(f"Shape: {result_df.shape}")
    logger.info(f"Columns: {list(result_df.columns)}")
    logger.info(f"Data:\n{result_df.head(1).to_string()}")

Expected Behavior:

  • Surface result types should return populated DataFrames like the node results do
  • Columns should match the result type (deformation columns for deformation results, etc.)
  • Loading cases should match those in the model

Current Status:

  1. Node results work perfectly (STATIC_ANALYSIS_NODES_GLOBAL_DEFORMATIONS)
  2. All surface-related results return empty DataFrames
  3. Column schemas don't match the requested result type (what I see in the RFEM6 UI)
  4. Results are definitely present in the model (visible in RFEM UI)

Questions:

  1. Is there something I am doing wrong and have misinterpreted the issue, or do you get the same thing?
  2. Is this a known issue with surface-related results in the API?
  3. Are there alternative result types we should be using for surface results?
  4. Is there a workaround available to access surface deformation data via the API?

Any assistance would be greatly appreciated. Let me know if you need any additional information or test cases.

Hi Samuel,

In general, the RFEM 6 API provides two distinct ways to retrieve results, depending on what you need:

:one: get_results – Full Raw Results

  • Returns all available data for the selected result type
  • Includes all columns and all data stored in the database, even those not visible in the GUI
  • Use result enums without the _TABLE postfix

:two: get_result_table – GUI-Like Table View

  • Returns the summary tables as shown in the RFEM desktop application
  • Contains only the most relevant values for quick review/export
  • Use result enums with the _TABLE postfix

:toolbox: Example:

# --- Retrieve results from the active model (already calculated) ---

# 1. get_results: Returns full dataset including all possible columns
df_internal_forces = rfem_app.get_results(
    results_type=rfem.results.ResultsType.STATIC_ANALYSIS_MEMBERS_INTERNAL_FORCES
).data
print(f"\nInternal Forces | All:")
print(df_internal_forces)

# 2. get_result_table: Returns GUI-like table (summary view)
df_internal_forces_table = rfem_app.get_result_table(
    table=rfem.results.ResultTable.STATIC_ANALYSIS_MEMBERS_INTERNAL_FORCES_TABLE,
    loading=rfem.ObjectId(
        no=1,
        object_type=rfem.OBJECT_TYPE_LOAD_COMBINATION
    )
).data
print(f"\nInternal Forces | Table:")
print(df_internal_forces_table)

# Both methods return a Table wrapper around pandas.DataFrame.
# Access the data directly via .data

:warning: Current limitation

At the moment, to retrieve surface deformation results, you need to use the get_result_table method together with the corresponding *_TABLE enums, such as:

STATIC_ANALYSIS_SURFACES_LOCAL_DEFORMATIONS_TABLE

Please note:

  • Currently, only grid point results are available via this method.
  • In upcoming releases, there will be a clear distinction between grid point results and mesh node results for surfaces.
  • The get_results method will also be extended soon to support the full set of surface results, similar to how it works for get_result_table.

Thank you for reporting thisβ€”your feedback helps us prioritize the next improvements!

Hi Tomas,

Thank you so much for that detailed and helpful explanation! I was able to adapt the code to the correct method you mentioned and was able to successfully extract the global deformation results. I am now very happy :)

Thanks again,
Samuel