Analysis Solution

Analysis Modeler

Frequently Asked Questions

Quick Reference

Abstract

Here is a quick-access list of all the F.A.Q.'s we have received from CAA partners as well as DS internal developers. In answers, links to the relevant documents or use cases are provided for a more detailed information.

 


Some debug variables.

In order to help the programming, we provide some debug variables. It is recommended to use them for programming but not to deliver them with your applicative product. Also, do not use them during performances tests.

What can I do with a CATSamExplicitPtr?

When programming with the CATAnalysisExplicitObjects,  we work with Object and no pointers. In order to manage several objects, the ExplicitList or ExplicitListUsr can be used. If an ExplicitCharac may receive as values another object, the SetValue/GetValue methods use CATSamExplicitPtr. Any Field model object derive from the CATAnalysisExplicitData Class. To get the pointer use the GetPointer method, to build and object use LinkWithPointer method. 

...

Here is the sample of code I use to obtain the CATSamExplicitPtr :

//-----------------------------------------------------------
CATSamExplicitPtr AxisPtr = NULL;
CATAnalysisExplicitAxis Axis;

CATAnalysisExplicitChild Child = *(ChildrenList.First());
while(Child!=NULL_exp)
{
  if (Child.GetType() == CATSamDataTypeCharac) 
  {
    CATAnalysisExplicitCharac CharacAxis = Child ;
    CATSamValue ValueType;
    hr = CharacAxis.GetValueType(ValueType);
    if (SUCCEDDED(hr) && ValueType == CATSamValueAxis)
    {
      hr = CharacAxis.GetValues(AxisPtr);
      if (SUCCEDDED(hr)) { Axis.LinkWithPointer (AxisPtr,pExplicitModel); break}
    }
  }
  Child = *(ChildrenList.Next());
}
...
Note that the pointer on the CATAnalysisExplicitModel, if you do not have it from previous lines is retrieved with:
CATAnalysisExplicitModel *pExplicitModel = ChildrenList.GetModel();

[Top]

How to store values for a tensor in a CATAnalysisCharacCollector ?

The chapter describes also the way values must be stored in CATAnalysisExplicitCharac object.

As long as your tensor dimension is lesser or equal to three, the figure shows the way the values have to be put in the values of the CATAnalysisCharacCollector or the CATAnalysisExplicitCharac.

The same order needs to  be used for Principal or symmetrical tensors.

For tensor with highest dimension, see the associated figure that illustrates a 6x6 tensor.

Three cases are illustrated here:

  • Full tensor
  • Symmetric tensor
  • Principal (Eigen Value) tensor.

[Top]

I don't find SAMHeaderGenerateImage anymore !

Before R11 this header was exported by the "SAMWorkshop", so you just had to insert it in your toolbar. It is no more the case. Now, you have to create your own header for accessing the generic command as follow:

 new MyCommandHeader ("xxxxxxxxxxxx","CATAV0UI" ,"CATSPMGenerateImageCmd",(void *) NULL );

 Some changes allows now to be completely independent of DASSAULT SYSTEMES libraries and commands names. For this, refer to the associated reference.

[Top]

How to work with CATSamDimension Object.

This functionality impacts also the collect of the data that use the CATAnalysisCharacCollector object. The impacts are located in the CATSamDimention class. This object have to manage the "repeat" information not only per position and SMI (as before Release 15), but also per Position, per Lamina and per SMI. It means, for one physical type of characteristics, that you can retrieve several values for each combining of Position, Lamina and SMI.

New preprocessing capabilities.

Before V5 Release 11, it was possible to define in the field model a physical characteristic on an Finite Element Face. But, for thermal loading applied on shell elements (for example), it makes sense to define such a temperature at on three intermediate positions: Superior face, Middle of the thickness and Inferior face. If not specified, the solver may assume that the temperature is constant inside the element.

To support this at the level of the processing data, the ApplyTo methods of the CATAnalysisExplicitEntity have been completed with some arguments.

CATAnalysisExplicitEntity::ApplyTo( int iNumber,
const CATSamExplicitPtr* iApplyTo,
CATSamPosition iApplyPosition,
const int* iApplyNumber,
const CATSamApplyQualifier* iApplyQualifier= NULL)

The optional CATSamApplyQualifier enumerate allow to customize the apply type with specific behavior. By using it your are able to specify a loading on the same face number of an element with two sub positions. The enumerate is also used to define the number of the position on which the data are applied.

[Top]

Impact on CATSamDimension Class usage.

This functionality impacts also the collect of the data that use the CATAnalysisCharacCollector object. The impact are located in the CATSamDimention class. This object have to manage the "repeat" information not only per position and SMI (as before Release 15), but also per Position, per Lamina and per SMI. It means, for one physical type of characteristics, that you can retrieve several values for each combining of Position, Lamina and SMI.

Building a CATSamDimension

Let's take an example:

In the case of a four node shell element on which is applied two loadings defined at the node of the elements. Suppose the first loading (LOAD 0) is apply on the two first nodes and the last one of the upper face and the second one (LOAD 1) is applied on the two first nodes of both upper and lower faces. We will also suppose that this loading have two components and the finite element have only one lamina.

When collecting this physical type, associated dimension will looks like:

  • NbPositions = 3  : (Three nodes are loaded)
  • NbLamina = 1  : (No lamina are defined at the level of this element.
  • NBSMI = 2 : Leading L1 impacts both super and lower face.
  • NbComponent = 2 Due to the characteristic definition.

Assume the loading position are named P0 for Node 1 (N1), P1 for Node2 (N2) and P2 for Node4 (N4) , the single Lamina is called L0, and the SMI loaded are called S0 (For Upper face) and S1 for the lower face. you will retrieve the following repeat values per Position, Lamina and SMI.

  • R0(POS0, LAM0, SMI0) = 2 Due to LOAD0 and LOAD1
  • R1(POS0, LAM0, SMI1) = 1 Due to LOAD1
  • R2(POS1, LAM0, SMI0) = 2 Due to LOAD0 and LOAD1
  • R3(POS1, LAM0, SMI1) = 1 Due to LOAD1
  • R4(POS2, LAM0, SMI0) = 1 Due to LOAD0
  • R5(POS2, LAM0, SMI1) = 0

To create the associated dimension, when implementing the CATICharacCollector interface, the data of the dimension can be setup at the level of the constructor or later with the fill method. For the example:

This dimension is now ready to be stored in a Charac-Collector.

[Top]

Getting access to a CATSamDimension

Two ways can be noted to extract the data.

  1. The goal is to extract all the values without any knowledge about the way they are applied. In this case, you just need to loop on the total number of values get by CATSamDimension::GetNbValues() for a DimensionPointer[iEntite]. The values are in the memory allocation pointed by ValuesPointer[iEntite)
  2. The goal is to extract values for a list of position, lamina, SMI....  It is recommended to use the CATSamDimension::GetValuesAdress() for using DimensionPointer[iEntite]. By Filling the memory allocation pointed by ValuesPointer[iEntite] and the index required of Position, Lamina and SMI location. This method will return the pointer in the memory corresponding to the index of Position, Lamina and SMI location. This method allow to scan all the values with the following sequence of loops:
...
for iLam = 0 -> DimensionPointeur->GetNbLamina() -1
  for iSMI = 0 -> DimensionPointeur->GetNbSMI() -1
    for iPos = 0 -> DimensionPointeur->GetNbPosition() -1
      for iRepeat = 0 -> DimensionPointeur->GetNbRepeat(iPos, iLam , iSMI) Note that Lamina as index is added in R15 Release.
        ValPtr = DimensionPointeur -> ValuesAdress(ValuesPointeur, iPos, iLam, iSMI, iRepeat) 
        FOR iComp = 0 -> DimensionPointeur->GetNbComponents() -1 
           cout <<" my value = " << ValPtr[i];
...

This way of programming is the only stable method because it gives a guaranty to access effectively all the values indexes, whatever the way the data are defined for a charac-collector.

Note that some methods supported until Release 10 are now deprecated and replaced by new ones. They correspond to all methods that were not able to support variable SMI. These methods will remain for two versions, they are programmed by using the new ones with the SMI index set to zero (the first one). The pointer of access is valid but only one SMI information is seen. It is mandatory to migrate on the new set of methods.

[Top]

CATAnalysisExplicitTopology usage.

In order to correct some bugs that may produce crash and extra-memory consumption.

The CATAnalysisExplicitTopology object is the central object that will allow to access all the information's related to the meshing. Before V5 Release 13, it was possible to use the CATAnalysisExplicitTopology constructor. When using this constructor, all the internal data were never released. Also, any changes that may happen on the mesh were not propagated in this new version of the topology.

To avoid those problem, the constructor is now private. To get access to the CATAnalysisExplicitTopology use CATAnalysisExplicitModel::GetExplicitTopology. Preparing new enhancements related to assembly of analysis, the Explicit Topology supports now an AddRef/Release mechanism. So the CATAnalysisExplicitModel::GetExplicitTopology increase the life cycle counter of this object and you have to release it. For assembly of the topologies, some internal data members are shared (for memory consumption reduction), for this an Addref /Release is mandatory.

[Top]

Field Model "MemberList" usage.

A new implementation of the Field model has been delivered in V5R14. Objectives of this action was memory consumption and performances. The previous implementation was based on list of chained objects by physical types. Those list were visible at programming level by using GetMemberList and FindData methods. Because of the new implementation, the lists do not exist anymore. Because of CAA compatibility the API is deprecated for V5R14 but the lists are now allocated on demand by scanning the complete field model. So performances of creation and search will be slower. Try to remove those API from your programming. Field model objects should be retrieved from their parent that is associated by a feature (for this use CATISamExplicit::GetExplicitObjects) and use the CATAnalysisExplicitParent::GetChildrenList to scan the associated children's.

In any case, the methods defined on  the CATAnalysisExplicitModel class will be removed 2 releases after V5R14.

[Top]

Meshing tasks (Update, Remove ....).

Some changes as been introduced in release R14 concerning meshing algorithms. This can impact, from a programming point of view,  the Update and Remove tasks or "Empty Mesh" contextual menu. The following schema will describe the way it's work. It describe the different steps and where you can introduce some applicative software.

Update

In the new additional call of CATISamExplicitation, you can add some applicative software.

Take care, that now an explicitation of an empty meshpart is no more an error, is this case you have to Create the set with physical type MESHSET, out it in the oNewExplicitList and call the UpdateExplicitList method.

MeshPart Life Cycle

In the new additional call of CATISamAnalysisSetInit, you can add some applicative software.

"Empty Mesh"

In the new additional call of CATISamExplicitation, you can add some applicative software.

 

Meshing Model programming rules.

In order to avoid any mismatch between finite element modifications (Elements creation or deletion) and the corresponding features modifications (Mesh Parts and Mesh Operators) we are going to put in place more severe controls when performing some operations. This rule are activated in V5R15.

This rule will impact the following tasks:

As summary, the way of creating, deleting and modifying meshing entities must be limited into:

[Top]

CATAnalysisExplicitCharac Class.

This functionality completes the enhancement related to the dimension class started in V5R11. It impacts also the collect of the data that use the CATAnalysisCharacCollector object. The objective is to provide a generic way to describe that the values of a characteristic are variable. In fact, they can be variable inside an element (for example, on lamina or predefined position) or they can be variable per element. Before release R15, for the second point, you can use a negative repeat to have values per elements. We have enhanced the SetDefinition method of CATAnalysisExplicitCharac . See the appropriate enumerate: CATSamValuesDistributionMode. In order to apply at specific position inside a finite element, you can use:

Note that a negative repeat is supported for 2 releases after V5R15 but must be replaced as soon as possible by a positive repeat and  a distribution mode set to "CATSamValuesDistributionModeDistributed". This means that values are distributed per apply.

[Top]

Mechanism for backup startup.

Suppose you have an analysis document with instances of CAA analysis feature StartUp, and you send this document  to a supplier. In most cases, your suppliers do not have the code (dll) and StartUp's catalog which would enable them to find the behaviors that you defined on your CAA features. Your document is quiet useless in this context.

The proposed (called backup StartUp) allows to provide a minimum of behaviors when the CAA feature is used without its CATfct file. It informs you that installation is partial and some operation like edition or update are secured.

[Top]


History

Version: 1 [June 2002] Document created
Version: 2 [Dec 2004] Release 15.
[Top]

Copyright © 2002, Dassault Systèmes. All rights reserved.