Analysis Solution |
Analysis Modeler |
Preprocessing data overviewSome concepts about preprocessing |
Technical Article |
AbstractThis article present some general concepts on the preprocessing features. |
The main intent is to explain some general concept for defining preprocessing data. So it explains the concepts related to:
For a more complete presentation about the analysis features, see reference[1].
All preprocessing sets are defined by derivation of the Analysis Set startup. They can be referenced by the analysis model or any analysis case by using the CATISamAnalysisScan Interface, this interface allow also o defined them as input or output features regarding to the update mechanism. They are identified by their physical type attribute. Some preprocessing sets are already defined for the structural analysis applications and can be used as defined for all existing interface (specially the collect of physical data):
Model Feature Late Type | NLS Name | Physical Type |
AnalysisManager | Analysis Manager | ANALYSIS |
AnalysisModel | Finite Element Model | ANALYSIS_MODEL |
AnalysisCase | AnalysisCase | ANALYSIS_CASE |
Sets Feature Late Type | NLS Name | Physical Type |
MSHMeshSet | Nodes and Elements | MESH |
PropertySet | Properties | PROPERTIES |
MaterialSet | Materials | MATERIALS |
AxisSet | Axes | AXES |
GroupSet | Groups | GROUPS |
ModulationSet | Modulation | FUNCTIONS |
RestraintSet | Restraints | RESTRAINTS |
LoadSet | Loads | LOADS |
MassSet | Masses | MASSES |
SensorSet | Sensors | SENSORS |
If new Analysis Sets may be defined. You need to create a CATFct file with the PPR tools, as described in references [2] and [3]. In short, to customize your new feature:
Both files are located for developing in InstallRootDirectory\NameOftheFW\CNext\resources\msgcatalog\.
and will be copied by the "mkcreateruntimeview" command.
All preprocessing entities are defined by derivation of the Analysis entity startup. They are identified by their physical type attribute. Some preprocessing entities are already defined for the structural analysis applications as follow.
Feature Set | Preprocessing entity derivation |
LoadSet | |
RestraintSet |
The physical type of an analysis entity is the one of the explicit entity
that will be generated when building the field model by implementing the
CATISamExplicitation interface. For example, the SAMDistributedForce vector is
converted as Nodal forces, so associated physical type is "LOAD_POINT_FORCE".
For SAMClamp, the Physical type is "RESTRAINT_DISPLACEMENT". The same kind of
philosophy can be retrieved for all the preprocessing entities. The existing
Analysis Entities for preprocessing entities are defined in the Reference [4].
The scheme of derivation for analysis entities is always the same. The father
feature type is AnalysisEntity, then a derivation for AnalysisXXX
.
XXX
represent the set in which the entity will be created, then
the physics for which the entity is designed (For example XXX
is
Load for the SAMDistributed Force).
The implementation provided by Dassault Systèmes to collect physical data (CATICharacollector interface) is defined at the level of each analysis entity and each preprocessing set defined in the previous chapter. The implementation of the collect for a set is based on combining the collected data as returned by the collector of analysis entities.
They are summarized in the following array:
Interface to implement:
Default Implementation
|
Implemented by Dassault Systèmes:
The links to the pointed objects are stored in features that implement CATISamAnalysisConnector interface. Such a link returns two pointers:
- The pointed object is the objects with the SAMSupport_ID as defined on the entity.
- The positioning Object (CATIProduct Object) manages the instance of the pointed object in the product structure and its position.
- In the case of pointed objects that are in the same CATAnalysis document, no positioning object returns also the pointed object.
The only interfaces that can be overloaded safely are CATIEdit and CATICharacCollector.
To be implemented by you:
The analysis entities are defined with two main kind of objects the basic component and the analysis connector that will be presented next. The basic components are used to define the physics (all the parameters). They can be defined at the level of the startup catalog, in this case, they will be considered as mandatory. For more advance use, see the CATISamBasicComponentManager interface. The connectors are created with the CATISamAnaysisModelFactory Interface, as for any other analysis eatures, and accessed on the entity with the CATISamAnalysisSupport Interface.
A standard user interface can be used from the Dassault Systèmes analysis package. The command CATSamCreateEntityCmd exported by the CATAnalysisModelerUI module will assume some default user interface in order to create, modify and edit the analysis entities that are build by using the concepts of basic components and analysis supports. This commands will propose a window definition that includes:
In order to have some additional control on the command, The CATISamValidity interface allows to drive the validation button of this command. You can implement this interface. It also allows to overload the tree visualization if the entity becomes invalid.
This chapter will expose existing basic component startup that can be customized in order to build new analysis entities. Some of them are defined with some generic way in order to be specialized. The interactive customization is defined in a file called "NameOfCATFct"UI.CATNls.
Literal is used to defined a single Value with an unit. (see the magnitude in the literal framework).
To customize the interactive window, the labels are defined
as follow:
|
In this Example, the basic component is an instance of a
pressure:
|
The label is defined by using the name of the instance of the literal:
SAMVector is used to define n dimension vector. The attributes which need to be valuated are:
This Startup is a dummy one that may be customized before to be instanciated. As Example, the following 3D Force vector is defined with ValuesDim set to 3 ;1;1.
SAM3DVector is used to define 3D vectors. It is a kind of SAMVector. The attribute which needs to be valuated is
To customize the interactive window, the labels are defined
as follow:
And similarly for MyLateType_LiteralName1 that customizes "X", MyLateType_LiteralName2 that customizes "Y" and MyLateType_LiteralName3. |
The user interface provides then four fields, one for the
norm and three for the components. The interactive compass can be used to
modify the components while keeping the same norm. For example, a data type
set to FORCE will produce:
|
SAMAxisSystem is used to define in which axis system the data of an entity will be defined in. The attributes which need to be valuated is
The attributes which will be valued by the user interface
are:
You can not change any of the labels. |
|
This Startup is a dummy one that may be customized before being instantiated. Some already configured axis system are defined inside the Dassault Systèmes catalog.
SAMGUAxisSystem: allows global and user axis.
- AvailDefModes = CATSamGlobalAxis + CATSamUserAxis (3)
- AvailMathTypes = CartesianAxis + CylindricalAxis +SphericalAxis (7)
SAMGUIntAxisSystem : allows global and user axis with an intensive behavior
- AvailDefModes = CATSamGlobalAxis + CATSamUserAxis (3)
- AvailMathTypes = CartesianAxis + CylindricalAxis +SphericalAxis (7)
- IntenseStatus = 1
SAMGCartUAxisSystem :allows global and user axis used as Cartesian.
- AvailDefModes = CATSamGlobalAxis + CATSamUserAxis (3)
- AvailMathTypes = 0
SAMGIAxisSystem allows global and implicit axis.
- AvailDefModes = CATSamGlobalAxis + CATSamImplicitAxis (5)
- AvailMathTypes = 0
SAMGUIAxisSystem allows global, implicit and user axis
- AvailDefModes = CATSamGlobalAxis +CATSamUserAxis + CATSamImplicitAxis (7)
- AvailMathTypes = CartesianAxis + CylindricalAxis +SphericalAxis (7)
SAMSingleEntityPtr is used to support a link to another analysis feature. The attributes which need to be valued at the level of the startup are:
At least one of the two first attributes needs to be valuated. The two last attributes are optional and complete the checks made according to the two first one. The Basic Component will be completed by an attribute called "ConnectorList" defined as a tk_component in order to store the pointed object.
To customize the interactive window, the labels are defined
as follow:
To customize the dialogue state of the selection: MyLateType.Message="xxx "; |
In this Example, the basic component have a reference to an analysis restraint entity type:
|
SAMSingleGeomPtr and SAMMultiGeomPtr are used in order to point one or several geometrical elements. The attributes to be valued are:
To customize the interactive window, the labels are defined
as follow:
|
In this Example, the basic component have a reference to a
geometrical cylindrical face in order to keep a line definition (the
cylinder axis) for defining a rotation direction.
|
SAMActivableComponent is used in order to define an optional basic component. The user interface will include a toggle button to set the on/off activity. The attributes to be valuated are:
The attributes which will be valued by the user interface
are:
To customize the interactive window, the labels are defined as follow:
|
In this Example, the basic component is defined with a
DataType LENGTH and is activated.
|
This startup may no more be used since the concept of optional Basic component have been introduced. For this, implement the CATISamBasicComponentManager Interface.
SAMTensor is used to define n,m dimensions tensor. The attributes which need to be valuated are:
To customize the interactive window, the labels are defined
in the following order:
|
Example of 3x3 Symmetrical tensor. The data type is set to
FORCE and the labels are defined from Comment1 to Comment6.
Labels = Comment1, Comment2, Comment3, Comment4, Comment5, Comment6.
|
SAMBindingComponent is used to aggregate other basic components. The attributes which need to be valuated are:
SAMCompositeTensor is used to define a tensor made of several others. Each of the basic tensors can have its own data type and symmetry property.
To customize the interactive window, the labels are defined
in the following order:
To customize the title :
|
Example of a symmetrical composite tensor made of 3 (3x3)
tensors of each type : symmetrical, full and antisymmetrical. The labels
are set from Comment1 to Comment12.
Labels = Comment1, Comment2, Comment3, Comment4, Comment5, Comment6, Comment7, Comment8, Comment9, Comment10, Comment11, Comment12.
|
SAMMultiLayerManager is used to manage a set of several basic components. The user interface is managed with a list that allow to summarize the selected data. A contextual menu allows to add a layer, edit a layer (double-clicking is equivalent ), delete a layer and delete all layers. The attributes which need to be valuated are:
To customize the interactive window, the labels are defined
as follow:
|
In this example, the attributes are defined as follow:
"0.1" may be retrieved by CATISamBasicComponent:: GetDoubleValue() method with (2, 1, 1) as position. "Static Case Solution.2" may be retrieved by CATISamBasicComponent:GetLinkableValue() method with (1, 1, 2) as position. |
SAMBCFileAccess is used to manage a link on a external file. This Basic component:
Keep the link to the file. To access the File use the "ExternDoc" Label. (with the set/get BaseUnknown method of CATISamBasicComponent) The CATBaseUnknown Object implements CATILinkableObject to access the file name.
Manages some update capability (detect is the file is modified).
The Type of file to link is defined by valuating the "LinkType" attribute at the level of the catalog definition, if several file extension need to be specified, separate them with the ; character.
To access the File stored
To customize the interactive window, the labels are defined
as follow:
|
In order be able to define and use new kind of Basic components, the standard user interface of the analysis entity can be customized by implementing the following interfaces on the new basic components types:
If you just need some dialog objects, Implement CATISamEditWithFrame interface on the basic component type. The command that is returned may implement CATISamEditionFrame.
If you need more that dialogs (selections), Implement CATISamEditWithCmd interface on the basic component type. The command that is returned may implement CATISamEditionCmd.
Defined at the level of the startup catalog, a basic component will be considered as mandatory. For more advance use, the CATISamBasicComponentManager interface can be implemented on the analysis entity. With this interface, you can:
Suppose you need to define and analysis entity that define a linear velocity applied in a global or local axis on a 3D body. The first thing to do is to define the startup of the Analysis Entity. The job to to will looks like:
... // Defines a Basic component that is a derivation of 3D vector. //============================================================= CATUnicodeString VecSUType ="SAM3DVector"; CATBaseUnknown *pVecAeroSU = NULL; CATUnicodeString VecType("SAMSpeedVector"); rc = CATSamCatalogFactory::CreateBasicComponent(&VecType,&VecSUType,&pVecAeroSU,&piCatalog); // This vector is a kind of SPEED (unit system). //============================================== CATUnicodeString DType("SPEED"); rc = CATSamCatalogFactory::SetDataType (pVecAeroSU,&DType); // This vector is a kind of TRANSLATIONAL_VELOCITY (Physical Type). //================================================================= CATUnicodeString PTypV("TRANSLATIONAL_VELOCITY"); CATSamCatalogFactory::SetPhysicalType (pVecAeroSU, &PTypV); // Defines an analysis entity that is a derivation of Analysis Load. //================================================================== CATUnicodeString VecSUEntity ="AnalysisLoad"; CATBaseUnknown *pVecEntity = NULL; CATUnicodeString EntiL("SAMSpeedLoad"); rc = CATSamCatalogFactory::CreateAnalysisEntity (&EntiL,&VecSUEntity,&pVecEntity,&piCatalog); // This entity is a kind of LOAD_TRANSLATIONAL_VELOCITY (Physical Type). //====================================================================== CATUnicodeString PTypVE("LOAD_TRANSLATIONAL_VELOCITY"); CATSamCatalogFactory::SetPhysicalType (pVecEntity, &PTypVE); // Associates the Basic component to the entity. //=============================================== CATSamCatalogFactory::SetBasicComponent (&VecType,pVecEntity,&piCatalog); // Defines a body as support. //===================================================================== CATISamAnalysisSupport_var spSupport(pVecEntity); if (!!spSupport) { spSupport -> SetMinAndMaxEntitiesNumber(1,1); spSupport -> SetAuthorizedSupports(SupportId_Body); } //===================================================================== CATUnicodeString AxisType("SAMGUAxisSystem"); CATSamCatalogFactory::SetBasicComponent (&AxisType,pVecEntity,&piCatalog); ... |
Define in your command header a new command that will looks like:
... // Late type of the created Analysis entity static CATUnicodeString Entity_Type = "SAMSpeedLoad"; // new AniCommandHeader("CreateSpeedEntity", // Command Name "CATAnalysisModelerUI", // Exported by "CATSamCreateEntityCmd", // Generic command (void *)&Entity_Type ); // Late type of the Analysis Entity to be Created. ... |
Additional information in order to create or customize commands will be found in the Basics frameworks.
The link from Analysis features and field model entities is managed by both CATISamExplicit and CATISamExplicitation interfaces. CATISamExplicit manages the life cycle of the field model entities associated to a feature and CATISamExplicitation manages the creation of field model entities. This second interface must be overloaded for a specific field model creation. For an Analysis Set, a default behavior is provided that create an ExplicitSet with the physical type as defined on the Startup.
In all cases, Field model entities have to be created inside an implementation of CATISamExplicitation interface. This will ensure that all V5 fundamentals (Copy paste, Update, Undo/Redo...) will be correctly managed for the field model entities.
The most important methods of CATISamExplicit interface are:
GetExplicitObject(s) | Returns the first (or list) of Explicit parent representing the result data inside the field model. |
GetPhysical type | Returns the physical type string as defined in the feature startup. This physical type is required when the create method of the CATISamAnalysisFatory is called in order to create the associated Field model Object. |
GetContainingData | Returns the list of Explicit parent object in which the feature is involved. (For example, the list of parent cases for a set). |
UpdateExplicitList | Must be called at the end of any CATISamExplicitation
implementation. It Associates the new explicit Objects to the previous
containing data and flags the previous version to be deleted.
When CATAnalysisExplicitSet::CreateSet or CATAnalysisExplicitEntity::CreateEntity methods are used, Use the Field model as a parent and let the UpdateExplicitList method manage all the links with the new explicit data. |
Generate a Field model associated to a feature is done by implementing the CATISamExplicitation interface on a late type build as "STRUCTURAL_FeatureLateType". This is not to implement on a feature late type. The first string "STRUCTURAL" is dedicated to manage different kind of field model generation. This functionality is not active today.
... // ::TranslateToFieldModel( CATISpecObject* iFeatToTranslate, CATISamAnalysisModel* iFEMModel, CATAnalysisExplicitListUsr& iOldExplObjects, CATAnalysisExplicitListUsr& oNewExplObjects) ... |
.... // The Analysis feature to "translate" (implement CATISAMExplicit). The Analysis Model in which the feature is define. The previous version of the field model version. The new version of field model objects. ... |
The general scheme for this kind of implementation is described here.
Retrieve the Field model pointer
Retrieve the list of containing data. For an entity, the list of explicit sets in which the entity is involved, for a set this list of analysis cases...
Create a new version of explicit object. The main object is created without parent and is stored in the oNewExplObjects list. Note that we support a list of new objects. Never modify the existing field model by adding or removing children or apply link, those modification will not support undo redo, warm start and associated modification events will not be sent.
Update the lists means update of the model. This method deletes the "iOldExplObjects", create links between oNewExplObjects and the containing data. this may be the last method called for this implementation.
... CATISamExplicit_var spSpecExpli(iFeatToTranslate); if (NULL_var == spSpecExpli) return E_NOINTERFACE; // Retrieve the Field Model CATAnalysisExplicitModel* pExplicitModel = spSpecExpli -> GetExplicitModel(); if (NULL == pExplicitModel) return E_FAIL; // We get the list of current containing data. CATAnalysisExplicitListUsr containingData; containingData.CreateList(pExplicitModel); HR = spSpecExpli -> GetContainingData(iOldExplObjects,containingData); if (FAILED(HR)) return HR; /////////////////////////////////////////////////////////////////////////////////// // Insert the definition of the new version generation. /////////////////////////////////////////////////////////////////////////////////// // Update the list with the new data HR = spSpecExpli ->UpdateExplicitList(iOldExplObjects,containingData,oNewExplObjects); if (containingData!=NULL_exp) containingData.Delete(); ... |
Generate a New Field Model Version for a preprocessing feature:
A preprocessing feature is defined by a physical type as defined in the field model dictionnary. This physical type may have a category corresponding to an entity. Associated to this definition are defined a list of Physical data and the finite element support type. The "oNewExplObjects" list of New Explicit Object created, must includes only the "CATAnalysisExplicitEntity" that are created.
For example, in the example defined before, the translationnal velocity is defined by its value and is apply to the Nodes of a mesh that discretize a geometry. This means that in the field model must be created an entity with the physical type "LOAD_TRANSLATIONAL_VELOCITY" that includes a characteristic with "TRANSLATIONAL_VELOCITY" physical type and this entity is applied to a list of nodes.
To Extract the values of the Basic components, use the CATISamAnalysisEntity interface that is implemented on the "iFeatToTranslate" argument. For example, read a basic component that is build by derivation of "SAM3DVector" and store the values in a CATMathVector.
... CATISamAnalysisEntity* iEntity = NULL; iFeatToTranslate-> QueryInterface(IID_CATISamAnalysisEntity,(void **) &iEntity ); if (NULL == iEntity ) return E_NOINTERFACE; // CATUnicodeString BasicCompName = "NameOfBasiComponent"; CATLISTV(CATBaseUnknown_var) *components = NULL; CATMathVector *vector = NULL; HRESULT hr = iEntity -> GetBasicComponents(components,BasicCompName); if(SUCCEEDED(hr) && components && components->Size()>0) { CATISamBasicComponent * pibasComp = NULL; if(!!(*components)[1]) (*components)[1] -> QueryInterface(IID_CATISamBasicComponent,(void **)&pibasComp); if (pibasComp) { double vectorCoord[3] = {0.0, 0.0, 0.0}; pibasComp->GetDoubleValue(vectorCoord[0],NULL,1,1,1); pibasComp->GetDoubleValue(vectorCoord[1],NULL,2,1,1); pibasComp->GetDoubleValue(vectorCoord[2],NULL,3,1,1); vector = new CATMathVector(vectorCoord); pibasComp->Release(); } } if (components) delete components; components = NULL; ... // Use vector ... // Clean Up iEntity -> Release(); if (vector) delete vector; ... |
To find the Meshing entities associated to a geometrical support, the CATISamAnalysisSupport (implemented by the Analysis Entity as "iFeatToTranslate" argument) and CATIMSHMeshAssociativity interfaces can be used. To retrieve the meshing associativity object use:
... // From the iFEMModel given as argument: //=============================================== CATIMSHMAssociativity piMeshAsso = NULL; CATBaseUnknown* piMesh = NULL; iFEMModel -> GetMesh(piMesh); if (piMesh) { CATIMSHMeshManager* piMeshManager = NULL; piMesh -> QueryInterface(IID_CATIMSHMeshManager,(void **) &piMeshManager); if (piMeshManager ) { piMeshAsso = piMeshManager -> GetAssociativity(); piMeshManager -> Release(); } piMesh -> Release(); } // Extract from associativity object the list of pointers of FE entities. ... if (piMeshAsso) piMeshAsso -> Release(); ... |
Other way of programming is to use the CATISamGroup Interface on the analysis connectors of the entity, as follow:
... // Retrieve the linked FE entities: //=============================================== CATISamGroup_var spGroup ; const CATAnalysisEntityCollector* EntityCollector = NULL; CATSamValue SamValue = CATSamValueNode; const CATSamPhysicalType* oElemTypes = NULL; CATLISTP(CATAnalysisEntityCollector) ListCollectors; for (i=1 ; i <= SupportsList.Size() ; i++) { spGroup = SupportsList[i]; if (!spGroup) return E_FAIL; HR = Group->GetContent(SamValue,Position,EntityCollector); if (FAILED(HR) ) return E_FAIL; if (EntityCollector) { ListCollectors.Append((CATAnalysisEntityCollector*)EntityCollector); EntityCollector=NULL; } else return E_FAIL; } ... |
Then, we have to create the Field model Objects. As example, we will create an entity with one characteristic applied on a list of nodes.
... // From the pExplicitModel as before: //=============================================== const CATAnalysisExplicitRulesData *pRulesData = NULL; pRulesData = pExplicitModel ->GetRulesData(); // Extract the physical type for entity and charac: CATSamPhysicalType PhysicalTypeNumber,CharacPhysicalTypeNumber; if (NULL != pRulesData) { pRulesData->GetPhysicalTypeNumber("ENTITY_PHYSICAL_TYPE", PhysicalTypeNumber); pRulesData->GetPhysicalTypeNumber("CHARAC_PHYSICAL_TYPE", CharacPhysicalTypeNumber); } // Create the entity and store it in the output argument: oNewExplObjects CATAnalysisExplicitCharac Charac = NULL_exp; CATAnalysisExplicitEntity Entity = NULL_exp; float* Values = NULL; CATSamExplicitPtr* TabNodes = NULL ; int NbNodes = 0; Entity.CreateEntity(pExplicitModel,PhysicalTypeNumber); Entity.ApplyTo(NbNodes,&TabNodes[0],CATSamPositionNode,0); Charac.CreateCharac(Entity,CharacPhysicalTypeNumber); Charac.SetValues(&Values[0]); NewExplObjects+= Entity; ... |
As defined previously, the associated commands will be generated for IDL recording:
... ' Get the Load Set from analysis case collection of sets. Dim analysisSet1 As AnalysisSet Set analysisSet1 = analysisSets1.ItemByType("LoadSet") ' Get the collection of an analysis entities defined under the Load Set. Dim analysisEntities1 As AnalysisEntities Set analysisEntities1 = analysisSet1.AnalysisEntities ' Create a new analysis entity. Dim analysisEntity1 As AnalysisEntity Set analysisEntity1 = analysisEntities1.Add("AniSpeedLoad") ' Valuate the Vector Values analysisEntity1.SetValue "AniSpeedVector", "", 1, 1, 1, 0.000000 analysisEntity1.SetValue "AniSpeedVector", "", 2, 1, 1, 10.000000 analysisEntity1.SetValue "AniSpeedVector", "", 3, 1, 1, 0.000000 ' Valuate the Connector for the support selection. ... |
Some general informations about the Analysis Automation interfaces are included in the reference[5].
This article goal is to have a global overview of all the interfaces and behavior as defined about analysis entities for preprocessing data.
[1] | Analysis Modeler Overview |
[2] | Feature Modeler |
[3] | Creating an Analysis feature catalog |
[4] | The physical types for structural analysis |
[5] | See Automation documentation. |
Version: 1 [Mar 2000] | Document created |
[Top] |
Copyright © 2000, Dassault Systèmes. All rights reserved.