Focus Konstruksjon - File Based System
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Properties | List of all members
CfemPlugin.CfemPlugin Class Reference

Main class for the CFem plugin. More...

Inheritance diagram for CfemPlugin.CfemPlugin:
Inheritance graph
Collaboration diagram for CfemPlugin.CfemPlugin:
Collaboration graph

Classes

class  AnalysisThreadInfoLinear
 
struct  SIntWithDouble
 Struct containing an integer and a double value. More...
 

Public Types

enum  CONTROLTYPE { CONTROLTYPE.LOAD, CONTROLTYPE.DISPLACEMENT, CONTROLTYPE.ARC }
 

Public Member Functions

 CfemPlugin ()
 Default constructor. More...
 
void Dispose ()
 
void ClearModel ()
 Clear all the lists of the model. More...
 
int AddNodes (IUListG< BNode > nodes)
 Add a list of nodes to the model. More...
 
int AddElements (IUListG< BElement > elems)
 Add a list of elements to the model. More...
 
int AddLoadGroups (IUList loadGroups)
 Add a list of load groups to the cfem plugin. More...
 
int AddLoadGroup (IMLoadGroup loadGroup)
 Add a group of loads that are to be applied to the model. More...
 
IAInformation DoLinear (double lambda, bool checkForSingularity, bool bRelativeSingularityEps, double singularityEps, CfemWrapper.CfemInputLinear.RESULTSHANDLING resultsFlag)
 Performs a linear analysis based on the current model. More...
 
IAInformation DoLinearizedBuckling (bool checkForSingularity, double shift, int numEigenValues)
 Perform a linearized buckling analysis based on the current model. More...
 
IAInformation DoVibrationModes (int stiffType, double elementMassFactor, double shift, int numEigenValues)
 Perform a vibration mode analysis based on the current model. More...
 
IAInformation DoNonLinear (double epsDisplacement, double epsResidual, double epsEnergy, double lambdaMax, int stepsMax, int iterMax, CONTROLTYPE controlType, SIntWithDouble[] arcLengths)
 Perform a nonlinear analysis based on the current model. More...
 
IAInformation DoResponseSpectrum (int summationType, int rsType, int stiffType, double elementMassFactor, double T_B_X, double T_C_X, double T_D_X, double T_cutoff_X, double T_B_Y, double T_C_Y, double T_D_Y, double T_cutoff_Y, double T_B_Z, double T_C_Z, double T_D_Z, double T_cutoff_Z, double a_g_X, double a_g_Y, double a_g_Z, double factorX, double factorY, double factorZ, double xsi, double eta, double q, double beta, double S, int loadGroupId, double shift, int numEigenValues)
 Perform a response spectrum analysis based on the current model. More...
 
void Initialize (IApplication app)
 Initialize the application. More...
 
UMatrix3x3 GetTransformation (IBElement element, bool bLinear, IMLoadGroup loadGroup, IMWithCompLoads loadContainer)
 Returns the transformation matrix of the element. More...
 
UMatrix3x3 GetTransformation (IBElement element, bool bLinear, IMLoadGroup loadGroup, int displSetID)
 Returns the transformation matrix of the element. More...
 

Protected Member Functions

bool AddModel (bool bIsDynamicAnalysis)
 Add the model of the cfem plugin to Cfem. More...
 
bool InitializeHashtables (int numberOfNodes, int numberOfElements, int numberOfLoadContainers, out CfemWrapper cfemWrapper)
 Initializes and sets the capacities of the hashtables. More...
 
bool CfemAddNodes (IUListG< BNode > nodes, out CfemWrapper cfemWrapper)
 Add nodes to the Cfem model. More...
 
bool CfemAddElements (IUListG< BElement > elements, out CfemWrapper cfemWrapper)
 Add a list of elements to the Cfem model. More...
 
bool CfemAddLoadGroups (UList loadGroups, out CfemWrapper cfemWrapper)
 Add a list of load groups to the Cfem model. More...
 

Protected Attributes

UListG< BNode > m_Nodes = new UListG<BNode>()
 Accumulated list of nodes. More...
 
UListG< BElement > m_Elements = new UListG<BElement>()
 Accumulated list of elements. More...
 
UList m_ElementIDs = new UList()
 Accumulated list of elements IDs. More...
 
UList m_LoadGroups = new UList()
 Accumulated list of load groups. More...
 
UList m_CfemWrappers = new UList()
 List of the analysis engine instances (wrapped in <CfemWrapper> objects). There is exactly one entry for each load group in the model. More...
 
CfemAnalysisInformation m_LastAnalysisInformation = null
 Information about the last performed analysis. More...
 
CfemResultsFileSystem cfemFileSystem
 
string inputFileCfem = "inputFileCfem_fromCfemWrapper.usf"
 

Properties

IAInformation LastAnalysisInformation [get]
 Get information about the most recently performed analysis. More...
 
int OutOfPlaneDirection2D [get, set]
 Get or sets the out of plane direction. More...
 

Detailed Description

Main class for the CFem plugin.

Main class for the Cfem plugin. This is the class that processes the input provided by the model, and reorders it before turning it over to the <CFemDLL> dynamic link library. It provides methods for adding the different building blocks of the computation model, as well as methods for carrying out the available analyses and gathering results

Member Enumeration Documentation

◆ CONTROLTYPE

Enumerator
LOAD 

Load controlled nonlinear analysis algorithm.

DISPLACEMENT 

Displacement controlled nonlinear analysis algorithm.

ARC 

Arc-length controlled nonlinear analysis algorithm.

Constructor & Destructor Documentation

◆ CfemPlugin()

CfemPlugin.CfemPlugin.CfemPlugin ( )

Default constructor.

Default constructor

Member Function Documentation

◆ AddElements()

int CfemPlugin.CfemPlugin.AddElements ( IUListG< BElement >  elems)

Add a list of elements to the model.

Add a list of elements to the model. Return the number of elements in the model after the elements have been added

◆ AddLoadGroup()

int CfemPlugin.CfemPlugin.AddLoadGroup ( IMLoadGroup  loadGroup)

Add a group of loads that are to be applied to the model.

Add a group of loads that are to be applied to the model. The load group contains a list of load containers that in some respect form a logical entity. The elements can have different material properties for different load groups

Input: <loadGroup> : The load group that is to be added

Return: The number of load groups in the model after adding the load group

◆ AddLoadGroups()

int CfemPlugin.CfemPlugin.AddLoadGroups ( IUList  loadGroups)

Add a list of load groups to the cfem plugin.

Add a list of load groups to the cfem plugin

Input: <loadGroups> : The load groups that are to be added

◆ AddModel()

bool CfemPlugin.CfemPlugin.AddModel ( bool  bIsDynamicAnalysis)
protected

Add the model of the cfem plugin to Cfem.

Add the model of the cfem plugin to Cfem. Any existing models will be cleared, and a new set of <Cfem> objects will be created, one for each load group in the model

Input:

  • <bIsDynamicAnalysis> : Flag indicating if we are running a dynamic analysis
Here is the call graph for this function:

◆ AddNodes()

int CfemPlugin.CfemPlugin.AddNodes ( IUListG< BNode >  nodes)

Add a list of nodes to the model.

Add a list of nodes to the model. Return the number of nodes in the model after the nodes have been added

◆ CfemAddElements()

bool CfemPlugin.CfemPlugin.CfemAddElements ( IUListG< BElement >  elements,
out CfemWrapper  cfemWrapper 
)
protected

Add a list of elements to the Cfem model.

Add a list of elements to the Cfem model. This includes adding materials and property sets

Input: <elements> : List of all the elements ( objects that implement the <IBElement> interface) that are to be added to the Cfem model

Output: <cfemWrapper> : If, for some reason, something went wrong, this is a reference to the <Cfem> instance (if any) where the problem arose. <cfem.GetErrorString()> can then be used to find out what went wrong

Return: <true> : The elements were successfully added to all the <Cfem> instances in <m_CfemTable> <false> : Something went wrong when trying to add the elements

Here is the call graph for this function:

◆ CfemAddLoadGroups()

bool CfemPlugin.CfemPlugin.CfemAddLoadGroups ( UList  loadGroups,
out CfemWrapper  cfemWrapper 
)
protected

Add a list of load groups to the Cfem model.

Add list of load groups to the <Cfem> model. It is, actually, the contents of the load group that is added. Each load groups has already been assigned a <CfemWrapper>, and the contents are added to this and only this object

Input: <loadGroups> : The load groups whose contents are to be added

Output: <cfemWrapper> : If, for some reason, something went wrong, this is a reference to the <Cfem> instance (if any) where the problem arose. <cfem.GetErrorString()> can then be used to find out what went wrong

Return: <true> : The load groups were successfully added to the cfem model <false> : Something went wrong when trying to add the load groups

Here is the call graph for this function:

◆ CfemAddNodes()

bool CfemPlugin.CfemPlugin.CfemAddNodes ( IUListG< BNode >  nodes,
out CfemWrapper  cfemWrapper 
)
protected

Add nodes to the Cfem model.

Add a list of nodes to the Cfem model. The nodes will be added to all the <Cfem> instances in <m_CfemTable>, which holds one <Cfem> instance for each load group in the model

Input: <nodes> : List of all the nodes ( objects that implement the <IBNode> interface) that are to be added to the Cfem model

Output: <cfemWrapper> : If, for some reason, something went wrong, this is a reference to the <CfemWrapper> instance (if any) where the problem arose. <cfem.GetErrorString()> can then be used to find out what went wrong

Return: <true> : The nodes were successfully added to all the <Cfem> instances in <m_CfemTable> <false> : Something went wrong when trying to add the nodes

Here is the call graph for this function:

◆ ClearModel()

void CfemPlugin.CfemPlugin.ClearModel ( )

Clear all the lists of the model.

Clear all the lists of the model

◆ Dispose()

void CfemPlugin.CfemPlugin.Dispose ( )
Here is the call graph for this function:

◆ DoLinear()

IAInformation CfemPlugin.CfemPlugin.DoLinear ( double  lambda,
bool  checkForSingularity,
bool  bRelativeSingularityEps,
double  singularityEps,
CfemWrapper.CfemInputLinear.RESULTSHANDLING  resultsFlag 
)

Performs a linear analysis based on the current model.

Performs a linear analysis based on the current model. Actually, there may be more than one analysis that is performed. The <CfemPlugin> provides a functionality when it comes to load groups, that allows for different sets of material properties for different sets of loads. Therefore, one analysis will be performed for each load group. This can be useful when analysing structures with loads that have different duration. Some design codes, like Eurocode 5, demand that a deflection analysis is done with different stiffness parameters for different load durations. By grouping the loads so that all the loads with a given load duration is in one load group, and pairing the load group with a set of materials, this can be done

Input:

  • <lambda> : The virtual time parameter at which to terminate the analysis
  • <checkForSingularity> : If <true>, a test will be performed to check whether or not there are any non-positive eigenvalues of the stiffness matrix. If there are, the analysis will return with the message that the analysis could not be performed. The node and degree of freedom associated with the eigenvalue are stored in the returned analysis information object
    • <bRelativeSingularityEps> : Flag that tells if the tolerance for singularity is absolute or relative to the greatest stiffness
    • <singularityEps> : Tolerance for singularity. If a value on the diagonal of the stiffness matrix is smaller than this value, the stiffness matrix is regarded as singular
  • <bDisplAnalysis> : Flag that tells if this analysis which will keep the displacements from the previous analysis (assuming that a previous analysis has been done). If this flag is <false>, all results will be overwritten by this analysis

Return: Information about the analysis

Here is the call graph for this function:

◆ DoLinearizedBuckling()

IAInformation CfemPlugin.CfemPlugin.DoLinearizedBuckling ( bool  checkForSingularity,
double  shift,
int  numEigenValues 
)

Perform a linearized buckling analysis based on the current model.

Perform a linearized buckling analysis on the current model. The return value is <true> if all went well; otherwise <false>. <numEigenValues> is the number of eigen values ( and hence buckling shapes ) to find

Input:

  • <checkForSingularity> : If <true>, a test will be performed to check whether or not there are any non-positive eigenvalues of the stiffness matrix. If there are, the analysis will return with the message that the analysis could not be performed. The node and degree of freedom associated with the eigenvalue are stored in the returned analysis information object <shift> : A number that specifies a part of the geometric stiffness that is to be considered as material stiffness in the eigen value analysis <numEigenValues> : The number of eigenvalues that are to be found. Depending on the nature of the model, the actual number of eigen values that are found can be less than <numEigenValues>
Here is the call graph for this function:

◆ DoNonLinear()

IAInformation CfemPlugin.CfemPlugin.DoNonLinear ( double  epsDisplacement,
double  epsResidual,
double  epsEnergy,
double  lambdaMax,
int  stepsMax,
int  iterMax,
CONTROLTYPE  controlType,
SIntWithDouble []  arcLengths 
)

Perform a nonlinear analysis based on the current model.

Perform a nonlinear analysis of the current model. The analysis will be performed for each of the load groups that are currently defined in this object

Input: <epsDisplacement> : The convergence criterion for displacement <epsResidual> : The convergence criterion for residual <epsEnergy> : The convergence criterion for energy <lambdaMax> : The virtual time parameter at which the analysis should be terminated <stepsMax> : The maximum number of time steps to perform <iterMax> : The maximum number of iterations to perform at each time step in order to obtain equilibrium <controlType> : The control type to use for the nonlinear analysis <arcLengths> : Array of <SIntWithDouble> structs. Given that the first entry has integer value <n1> and double value <d1>, it will set the arc-length of the first <n1> steps to <d1>. The next entry will set the arc-length of the next <n2> steps to <d2> and so on If the total number of time steps given in <arcLengths> are less than <stepsMax>, the arc-length given by the last entry in <arcLengths> will be used for the remaining steps

Return: Information about the analysis that was performed. There is a list of analysis results; one set for each of the load groups that were analyzed

Here is the call graph for this function:

◆ DoResponseSpectrum()

IAInformation CfemPlugin.CfemPlugin.DoResponseSpectrum ( int  summationType,
int  rsType,
int  stiffType,
double  elementMassFactor,
double  T_B_X,
double  T_C_X,
double  T_D_X,
double  T_cutoff_X,
double  T_B_Y,
double  T_C_Y,
double  T_D_Y,
double  T_cutoff_Y,
double  T_B_Z,
double  T_C_Z,
double  T_D_Z,
double  T_cutoff_Z,
double  a_g_X,
double  a_g_Y,
double  a_g_Z,
double  factorX,
double  factorY,
double  factorZ,
double  xsi,
double  eta,
double  q,
double  beta,
double  S,
int  loadGroupId,
double  shift,
int  numEigenValues 
)

Perform a response spectrum analysis based on the current model.

Perform a response spectrum analysis on the current model. The return value is <true> if all went well; otherwise <false>.

Input: <shift> : A number that specifies a part of the geometric stiffness that is to be considered as material stiffness in the eigen value analysis <numEigenValues> : The number of eigenvalues that are to be found. Depending on the nature of the model, the actual number of eigen values that are found can be less than <numEigenValues> ........

Here is the call graph for this function:

◆ DoVibrationModes()

IAInformation CfemPlugin.CfemPlugin.DoVibrationModes ( int  stiffType,
double  elementMassFactor,
double  shift,
int  numEigenValues 
)

Perform a vibration mode analysis based on the current model.

Perform a vibration mode analysis on the current model. The return value is <true> if all went well; otherwise <false>. <numEigenValues> is the number of eigen values ( and hence vibration modes ) to find

Input: <stiffType> : The stiffness type in the model. 0 = material stiffness, 1 = material and geometric stiffenss <shift> : A number that specifies a part of the geometric stiffness that is to be considered as material stiffness in the eigen value analysis <numEigenValues> : The number of eigenvalues that are to be found. Depending on the nature of the model, the actual number of eigen values that are found can be less than <numEigenValues>

Here is the call graph for this function:

◆ GetTransformation() [1/2]

UMatrix3x3 CfemPlugin.CfemPlugin.GetTransformation ( IBElement  element,
bool  bLinear,
IMLoadGroup  loadGroup,
IMWithCompLoads  loadContainer 
)

Returns the transformation matrix of the element.

Returns the transformation matrix of the element, including the effects of deformation. In nonlinear analysis, the element's coordinate system may be altered. The end forces in the element is therefore not given in the element's original coordinate system, but rather the deformed coordinate system of the element. This method returns the transformation (orientation) matrix of that coordinate system.

Input:

  • <element> : The element for which we want to find the transformation matrix.
  • <bLinear> : <true> for linear, <false> for nonlinear transformation matrix to be returned.
  • <loadGroup> : The load group that contains <loadContainer>. The load group will be used to find the correct cfem instance that was used to analyze the structure for the loads contained in <loadContainer>.
  • <loadContainer> : The load container that contains the loads that should be imposed on the model when computing the transformation matrix. Returns:
  • The transformation matrix of the element, or <UMatrix3x3.NULL> if something went wrong.
Here is the call graph for this function:

◆ GetTransformation() [2/2]

UMatrix3x3 CfemPlugin.CfemPlugin.GetTransformation ( IBElement  element,
bool  bLinear,
IMLoadGroup  loadGroup,
int  displSetID 
)

Returns the transformation matrix of the element.

Returns the transformation matrix of the element, including the effects of deformation. In nonlinear analysis, the element's coordinate system may be altered. The end forces in the element is therefore not given in the element's original coordinate system, but rather the deformed coordinate system of the element. This method returns the transformation (orientation) matrix of that coordinate system.

Input:

  • <element> : The element for which we want to find the transformation matrix.
  • <bLinear> : <true> for linear, <false> for nonlinear transformation matrix to be returned.
  • <loadGroup> : The load group that contains <loadContainer>. The load group will be used to find the correct cfem instance that was used to analyze the structure for the loads contained in <loadContainer>.
  • <displSetID> : The integer ID of the displacement set that is to be used when computing the transformation matrix. Returns:
  • The transformation matrix of the element, or <UMatrix3x3.NULL> if something went wrong.
Here is the call graph for this function:

◆ Initialize()

void CfemPlugin.CfemPlugin.Initialize ( IApplication  app)

Initialize the application.

Initialize the application by adding the new analysis plugin

◆ InitializeHashtables()

bool CfemPlugin.CfemPlugin.InitializeHashtables ( int  numberOfNodes,
int  numberOfElements,
int  numberOfLoadContainers,
out CfemWrapper  cfemWrapper 
)
protected

Initializes and sets the capacities of the hashtables.

Initializes and sets the capacities of the hashtables. This is so we don't have dynamicly sizable hashtables, which are very slow at adding or deleting objects.

Input:

  • <numberOfNodes> : The number of nodes
  • <numberOfElements> : The number of elements
  • <numberOfLoadContainers> : The number of load containers

Output: <cfemWrapper> : If, for some reason, something went wrong, this is a reference to the <CfemWrapper> instance (if any) where the problem arose. <cfem.GetErrorString()> can then be used to find out what went wrong

Return: <true> : The hashtables were successfully initialized and capacities was set <false> : Something went wrong when trying to initialized and capacities of the hashtables

Here is the call graph for this function:

Member Data Documentation

◆ cfemFileSystem

CfemResultsFileSystem CfemPlugin.CfemPlugin.cfemFileSystem
protected

◆ inputFileCfem

string CfemPlugin.CfemPlugin.inputFileCfem = "inputFileCfem_fromCfemWrapper.usf"
protected

◆ m_CfemWrappers

UList CfemPlugin.CfemPlugin.m_CfemWrappers = new UList()
protected

List of the analysis engine instances (wrapped in <CfemWrapper> objects). There is exactly one entry for each load group in the model.

◆ m_ElementIDs

UList CfemPlugin.CfemPlugin.m_ElementIDs = new UList()
protected

Accumulated list of elements IDs.

◆ m_Elements

UListG<BElement> CfemPlugin.CfemPlugin.m_Elements = new UListG<BElement>()
protected

Accumulated list of elements.

◆ m_LastAnalysisInformation

CfemAnalysisInformation CfemPlugin.CfemPlugin.m_LastAnalysisInformation = null
protected

Information about the last performed analysis.

◆ m_LoadGroups

UList CfemPlugin.CfemPlugin.m_LoadGroups = new UList()
protected

Accumulated list of load groups.

◆ m_Nodes

UListG<BNode> CfemPlugin.CfemPlugin.m_Nodes = new UListG<BNode>()
protected

Accumulated list of nodes.

Property Documentation

◆ LastAnalysisInformation

IAInformation CfemPlugin.CfemPlugin.LastAnalysisInformation
get

Get information about the most recently performed analysis.

Get information about the most recently performed analysis. If no analysis has been performed, or the static model in <CfemPlugin> has been changed since the last analysis, <null> is returned

◆ OutOfPlaneDirection2D

int CfemPlugin.CfemPlugin.OutOfPlaneDirection2D
getset

Get or sets the out of plane direction.

Get or sets the out of plane direction


The documentation for this class was generated from the following file: