![]() |
Xfem
The Xfem Plugin
|
Basic class for a XFEM mesh. This is the basic mesh interface for xfem problems adding enrichment capabilities to the standard Gema elememnt mesh. The "real" implementation inherits from either the standard Gema mesh or from a surface mesh. More...
#include <xfemMesh.h>


Public Member Functions | |
| XfemMesh (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger) | |
| Constructor. Will be called by the plugin loading code. | |
| virtual | ~XfemMesh () |
| Destructor. | |
| virtual void | printValues (const GmLogCategory &logger, int options) |
| Overrides printValues to add subelement information. | |
| virtual const XfemElement * | element (int index) const |
| Returns a mesh cell already converted to an XfemElement. | |
| virtual XfemElement * | element (int index) |
| Returns a mesh cell already converted to an XfemElement. Non const version. | |
| virtual bool | enrichElement (XfemElement *e) |
| Marks the given element as enriched. | |
| virtual XfemEnrichedElementData * | enrichedElementData (const XfemElement *e) const |
| Returns the enriched element private data or NULL if the element has not been enriched. | |
| const QMap< int, XfemEnrichedElementData * > & | enrichedElementMap () const |
| Returns the map storing data for every enriched element in the mesh. Use carefully. | |
| virtual int | numRegularSubElements (const XfemElement *e) const |
| Returns the number of regular (non fracture) sub-elements of the given enriched element (0 for non enriched ones) | |
| virtual int | numFractureSubElements (const XfemElement *e) const |
| Returns the number of fracture sub-elements of the given enriched element (0 for non enriched ones) | |
| virtual const XfemSubElement * | subElement (const XfemElement *e, int index) const |
| Returns a subelement of an enriched element. | |
| virtual const XfemSubElement * | fractureSubElement (const XfemElement *e, int index) const |
| Returns a fracture sub-element with an indexing starting from zero for the first fracture sub-element. Equivalent to calling subElement(e, index + numRegularSubElements(e)) | |
| virtual void | clearSubElements () |
| Clears all subelements from the mesh. This will automatically clear element integration rules and data stored by gauss attributes. | |
| virtual void | clearSubElements (XfemElement *e) |
| Clears the list of subelements from the given enriched element. This will automatically clear the element integration rule and the data stored by gauss attributes. | |
| virtual int | addSubElement (XfemElement *e, XfemSubElement *se, int ruleSet=0) |
| Adds a new sub-element to the xfem element. This addition will automatically trigger an update in the element integration rule (for regular sub-elements) and in the data stored by gauss attributes. | |
| virtual void | removeSubElement (XfemElement *e, int index) |
| Removes an existing sub-element from the enriched element. This removal will automatically trigger an update in the element integration rule and in the data stored by gauss attributes. | |
| virtual void | updateSubElementCoordinates (XfemElement *e, int index, const GmMatrix &seNaturalCoords, int ruleSet=0) |
| Updates the set of natural coordinates from a sub-element, provided that the sub-element type remains the same. This update will automatically trigger an update in the element integration rule. IMPORTANT: Values stored in Gauss points are NOT changed to reflect the change in point locations. That should be done externally. | |
| const GmIntegrationRule * | enrichedElementRegularIntegrationRule (const XfemElement *e, int ruleSet) const |
| Returns the elements regular integration rule with support for enriched elements. | |
| const GmIntegrationRule * | enrichedElementFractureIntegrationRule (const XfemSubElement *se, int ruleSet) const |
| Returns the integration rule for the given fracture sub-element. | |
| virtual XfemGaussAccessor * | enrichedGaussAttributeAccessor (QString id, Unit desiredUnit, const GmLogCategory &logger) const |
| Equivalent to call enrichedGaussAttributeAccessor(id, 0, true, desiredUnit, logger) | |
| virtual XfemGaussAccessor * | enrichedGaussAttributeAccessor (QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory &logger) const |
| Similar to GmElementMesh::gaussAttributeAccessor(), this function returns an accessor to data stored in Gauss points for the attribute id. Its different from gaussAttributeAccessor() for enriched elements since the returned accessor grants access to data stored for enriched integration points, while the other function does not, returning data on relgular integration points even for enriched elements. | |
| virtual const QList< XfemFracture * > & | naturalFractures () const |
| Returns the list of mesh natural fractures. | |
| virtual void | addNaturalFracture (XfemFracture *f) |
| Adds a new natural fracture to the mesh. The mesh takes ownership of the fracture object. | |
| virtual void | clearNaturalFractures () |
| Remove all natural fractures from the mesh. | |
| virtual GmVector | getElemCutInfo (int id) const |
| Returns the list with element information {iElem, # of fractures per element}. | |
| virtual void | addElemCutInfo (QList< GmVector > eCI) |
| Adds a vector with element cut information. | |
| virtual void | deleteElemCutInfo () |
| delete element cut information | |
| virtual int | sizeElemCutInfo () |
| Returns the size of elemCutInfo list. | |
| virtual int | getTotalNumDOF (int id) const |
| Returns the list with the total number of DOF at a specific position. | |
| virtual void | addTotalNumDOF (QList< int > eCI) |
| Adds a the list with the total number of DOF. | |
| virtual void | deleteTotalNumDOF () |
| delete element cut information | |
| virtual int | sizeTotalNumDOF () |
| Returns the size of elemCutInfo list. | |
| virtual QString | getNodeStateVarIds (int id) const |
| Returns the list with the state variable ids in the model. | |
| virtual void | addNodeStateVarIds (QStringList eCI) |
| Adds list with the state variable ids in the model. | |
| virtual void | deleteNodeStateVarIds () |
| delete list with the state variable ids in the model | |
| virtual int | sizeNodeStateVarIds () const |
| Returns the size of list with the state variable ids in the model. | |
| void | setCubicLaw (bool cubicLaw) |
| Set the cubic Law Boolean to define whether cubic law or constant fracture permeability is used. | |
| virtual bool | getCubicLaw () const |
| Returns the Boolean to define whether cubic law or constant fracture permeability is used. | |
| void | setMultiPhasic (bool multiPhasic) |
| Set the multiPhasic Boolean to define whether multiPhasic analysis is carried out. | |
| virtual bool | getMultiPhasic () const |
| Returns the Boolean to define whether multiPhasic analysis is carried out. | |
| void | setNonIsoThermal (bool nonIsoThermal) |
| Set the nonIsoThermal Boolean to define whether nonIsoThermal analysis is carried out. | |
| virtual bool | getNonIsoThermal () const |
| Returns the Boolean to define whether nonIsoThermal analysis is carried out. | |
| void | setSaturationRelativePermeabilityModel (char nonIsoThermal) |
| Set the Char defining the Saturation and Relative Permeability Model. | |
| virtual bool | getSaturationRelativePermeabilityModel () const |
| Returns the Char defining the Saturation and Relative Permeability Model. | |
| virtual QList< int > | getNodeTopologicalMap (int i) const |
| Returns the list of element id who contain the node i. | |
| virtual void | addNodeTopologicalMap (QList< int > eCI) |
| Adds the list of element id who contain the node i. | |
| virtual QList< int > | getElemTopologicalMap (int i) const |
| Returns the list of element neighborns of element id who contain the node i. | |
| virtual void | addElemTopologicalMap (QList< int > eCI) |
| Adds the list of element neighborns of element id who contain the node i. | |
| virtual QList< QPair< int, QList< int > > > | getfaceTopologicalMap (int i) const |
| Returns the list of neighborn element for each face of the element i. | |
| virtual void | addFaceTopologicalMap (QList< QPair< int, QList< int > > > eCI) |
| Adds the list of neighborn element for each face of the element i. | |
Public Member Functions inherited from GmElementMesh | |
| GmElementMesh (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger) | |
| const GmIntegrationRule * | elementIntegrationRule (GmCellType type, int ruleSet) const |
| const GmBorderIntegrationRule * | borderIntegrationRule (GmCellType type, int ruleSet, int borderIndex) const |
| const GmBorderIntegrationRule * | faceIntegrationRule (GmCellType type, int ruleSet, int faceIndex) const |
| const GmBorderIntegrationRule * | edgeIntegrationRule (GmCellType type, int ruleSet) const |
| int | maxNumIntPoints (int ruleSet) const |
| void | addIntegrationRuleSet () |
| int | numIntegrationRuleSets () const |
| bool | setElementIntegrationRule (GmCellType type, GmIntegrationRule *rule, int ruleSet) |
| bool | setFaceIntegrationRule (GmCellType type, GmBorderIntegrationRule *rule, int ruleSet, int faceType) |
| bool | setEdgeIntegrationRule (GmCellType type, GmBorderIntegrationRule *rule, int ruleSet) |
| GmMeshGaussIndex * | gaussIndex (int ruleSet) const |
| bool | usesGaussIndex (int ruleSet) const |
| GmGaussValueSetGroup * | gaussValueSetGroup (int ruleSet) const |
| GmGaussValueSet * | gaussValueSet (QString id) const |
| virtual QStringList | gaussAttributeIds () const |
| virtual GmValueInfo * | gaussAttributeInfo (QString id) const |
| virtual GmGaussAccessor * | gaussAttributeAccessor (QString id, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual GmGaussAccessor * | gaussAttributeAccessor (QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual bool | addGaussAttributeSet (GmValueInfo *info) |
| virtual void | removeGaussAttributeSet (QString id) |
| virtual bool | initGaussAttributeSets () |
| virtual void | beginAddingGaussAttributeSets () |
| virtual bool | endAddingGaussAttributeSets () |
| virtual void | clearGaussAttributeSets () |
| virtual void | clearGaussAttributeSetsData () |
| virtual bool | saveState (GmValueSet::SaveStateMode mode, const GmLogCategory &logger) |
| virtual bool | saveGaussAttributeState (QString id, GmValueSet::SaveStateMode mode, const GmLogCategory &logger) |
| virtual int | numGaussAttributeStates (QString id) const |
| virtual QString | gaussAttributeStateTag (QString id, int snum) const |
| virtual double | gaussAttributeStateTime (QString id, int snum) const |
| virtual void | setGaussAttributeStateTag (QString id, int snum, QString tag) |
| virtual void | setGaussAttributeStateTime (QString id, int snum, double time) |
| virtual int | hPOrder () const |
| virtual int | hQOrder () const |
| virtual void | printParameters (const GmLogCategory &logger) |
| virtual size_t | gaussIndicesMemory () const |
Public Member Functions inherited from GmCellMesh | |
| GmCellMesh (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger) | |
| virtual int | numCells () const=0 |
| virtual int | numActiveCells () const=0 |
| virtual int | numGlobalCells () const |
| virtual const GmCell * | cell (int cellIndex) const=0 |
| virtual GmCell * | cell (int cellIndex)=0 |
| virtual const GmCellMeshTopology * | topology (bool create=true) const |
| virtual void | clearTopology () |
| virtual bool | hasSolidElements () const=0 |
| virtual const int * | numCellTypes () const=0 |
| virtual const int * | numActiveCellTypes () const=0 |
| virtual int | maxNumCellNodes () const=0 |
| virtual int | maxNumCellGhostNodes () const |
| virtual int | maxTotalNumCellNodes () const |
| virtual void | ghostNodesUpdated (int nghost, int ntotal) |
| virtual void | activeCellUpdated (GmCellType type, bool active)=0 |
| virtual bool | isValid (QMap< int, int > &nonValidIds, bool valNonPlanar=false, bool print=true, double tol=1e-3) const |
| virtual double | edgeMinLength () |
| virtual double | edgeMaxLength () |
| virtual double | cellBboxMinLength () |
| virtual double | cellBboxMaxLength () |
| void | clearCellStatistics () |
| void | printQualityHistogram (bool activeOnly=true) const |
| virtual QStringList | cellGroupIds () const |
| virtual int | numCellsInGroup (int groupIndex) const |
| virtual const GmCell * | cellInGroup (int groupIndex, int cellIndex) const |
| virtual GmCell * | cellInGroup (int groupIndex, int cellIndex) |
| virtual const QMap< QString, GmCellBoundary * > & | cellBoundaryGroups () const=0 |
| virtual const QList< GmPropertySet * > & | propertySets () const=0 |
| virtual int | propertySetIndex (QString id) const=0 |
| virtual GmValueInfo * | cellPropertyInfo (QString id) const |
| virtual GmCellAccessor * | cellPropertyAccessor (QString id, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual QStringList | cellValueIds (int filter=-1) const |
| virtual GmValueInfo * | cellValueInfo (QString id, int filter=-1) const |
| virtual GmCellAccessor * | cellValueAccessor (QString id, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual GmCellAccessor * | cellValueAccessor (QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual GmCellAccessor * | cellStateVarAccessorFromDof (int dof, Unit desiredUnit, GmStateVar **stateVar) const |
| virtual int | addCells (int *numCellTypes) |
| virtual QList< int > | addedCells () const |
| virtual void | clearAddedCells () |
| virtual int | addCellGroup (QString groupName) |
| virtual bool | addCellsToGroup (int groupId, const QVector< int > &cellIds) |
| virtual bool | addCellsToGroup (int groupId, const QVector< QPair< int, int > > &cellIds) |
| virtual bool | addCellValueSet (GmValueInfo *info) |
| virtual void | removeCellValueSet (QString id) |
| virtual bool | initCellValueSets () |
| virtual void | beginAddingCellValueSets () |
| virtual bool | endAddingCellValueSets () |
| virtual void | clearCellValueSets () |
| virtual void | clearCellValueSetsData () |
| virtual bool | saveCellValueState (QString id, GmValueSet::SaveStateMode mode, const GmLogCategory &logger) |
| virtual int | numCellValueStates (QString id) const |
| virtual QString | cellValueStateTag (QString id, int snum) const |
| virtual double | cellValueStateTime (QString id, int snum) const |
| virtual void | setCellValueStateTag (QString id, int snum, QString tag) |
| virtual void | setCellValueStateTime (QString id, int snum, double time) |
| virtual size_t | cellMemory () const=0 |
| virtual size_t | cellGroupsMemory () const=0 |
| virtual size_t | cellBoundariesMemory () const=0 |
| GmValueSetGroup * | cellValueSetGroup () const |
| GmValueSet * | cellValueSet (QString id) const |
| const GmCellGroupSet * | cellGroupSet (const QList< int > &groupIdList, bool disjoint) |
| const QVector< GmCellGroupSet * > & | cellGroupSets () const |
| void | clearCellGroupSetsData (bool keepMeshSet) |
Public Member Functions inherited from GmMesh | |
| GmMesh (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger) | |
| virtual const char * | pluginCategory () const |
| virtual bool | hasCapability (QString capabilityName) const=0 |
| virtual bool | useDualVectors () const=0 |
| virtual void | pushProxy (lua_State *L, const GmLogCategory &logger)=0 |
| virtual GmValueInfo * | nodeCoordInfo () const=0 |
| virtual GmValueAccessor * | nodeCoordAccessor (Unit desiredUnit, const GmLogCategory &logger) const=0 |
| virtual int | numNodes () const=0 |
| virtual int | numGhostNodes () const |
| int | totalNumNodes () const |
| virtual int | numGlobalNodes () const |
| virtual int | numGlobalGhostNodes () const |
| int | totalNumGlobalNodes () const |
| int | toLinearGhostIndex (int nodeIndex) const |
| int | toLocalGhostIndex (int nodeIndex) const |
| virtual const QMap< QString, GmNodeSet * > & | nodeSets () const=0 |
| QStringList | nodeValueIds (int filter=-1) const |
| virtual GmValueInfo * | nodeValueInfo (QString id, int filter=-1) const |
| virtual GmValueAccessor * | nodeValueAccessor (QString id, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual GmValueAccessor * | nodeValueAccessor (QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory &logger) const |
| virtual GmValueAccessor * | nodeStateVarAccessorFromDof (int dof, Unit desiredUnit, GmStateVar **stateVar) const |
| virtual bool | addNodeValueSet (GmValueInfo *info) |
| virtual void | removeNodeValueSet (QString id) |
| virtual bool | initNodeValueSets () |
| virtual void | beginAddingNodeAttributeSets () |
| virtual bool | endAddingNodeAttributeSets () |
| virtual void | clearNodeValueSets () |
| virtual void | clearNodeValueSetsData () |
| virtual bool | saveNodeValueState (QString id, GmValueSet::SaveStateMode mode, const GmLogCategory &logger) |
| virtual int | numNodeValueStates (QString id) const |
| virtual QString | nodeValueStateTag (QString id, int snum) const |
| virtual double | nodeValueStateTime (QString id, int snum) const |
| virtual void | setNodeValueStateTag (QString id, int snum, QString tag) |
| virtual void | setNodeValueStateTime (QString id, int snum, double time) |
| virtual int | addNodes (int numNodes) |
| virtual int | addGhostNodes (int numNodes) |
| virtual void | clear () |
| QMap< QString, GmPhysicsUserFunctions * > & | userFunctionsObjMap () const |
| virtual size_t | nodeMemory () const=0 |
| virtual size_t | nodeSetsMemory () const=0 |
| virtual GmPCR * | pcrObject () const=0 |
| GmValueSetGroup * | nodeValueSetGroup () const |
| GmValueSet * | nodeValueSet (QString id) const |
| GmValueSetGroup * | ghostNodeValueSetGroup () const |
| GmValueSet * | ghostNodeValueSet (QString id) const |
| virtual void | emitMeshChanged () |
Public Member Functions inherited from GmPluginObject | |
| GmPluginObject (GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger) | |
| QString | id () const |
| QString | description () const |
| QString | pluginTypeName () const |
| virtual const char * | pluginName () const=0 |
| virtual const char * | pluginType () const=0 |
| virtual bool | loadPrivateData (LuaTable &table)=0 |
Public Member Functions inherited from GmGroupDumpItem | |
| virtual bool | stateAboutToBeSaved (GmStateDump *state) |
| virtual bool | stateSaved (GmStateDump *state) |
| virtual bool | stateAboutToBeLoaded (GmStateDump *state) |
| virtual bool | stateLoaded (GmStateDump *state) |
Protected Member Functions | |
| virtual GmGaussValueSetGroup * | createGaussValueSetGroup (GmSimulationData *simulation, GmElementMesh *mesh) |
| Overrides the standard GmElementMesh::createGaussValueSetGroup() implementation to create XfemGaussValueSetGroup instances. | |
| virtual void | clearXfemData () |
| Clears Xfem related data from the mesh. | |
Protected Member Functions inherited from GmElementMesh | |
| T * | getIntegrationRuleWithDCL (QList< QAtomicPointer< T > * > &list, QMutex *mutex, T *(*instance)(GmCellType, int, int, int, GmIntegrationRuleType), GmCellType type, int ruleSet, int faceType) const |
| virtual bool | addStateAccessorData (GmStateDump *state, int groupId) |
| virtual bool | fillDumpControlMapData (QVariantMap *map, const GmLogCategory &logger) |
| virtual bool | dumpControlMapDataLoaded (QVariantMap *map, const GmLogCategory &logger) |
Protected Member Functions inherited from GmCellMesh | |
Protected Member Functions inherited from GmMesh | |
| GmValueSet * | anyVsFromId (QString id) const |
| void | printValueInfo (const GmLogCategory &logger, QString title, const QStringList &idList) |
| virtual bool | addStateItemsToGroup (GmStateDump *state, int groupId) |
| virtual int | controlMapStateItemType () |
| virtual bool | addStateGeometryData (GmStateDump *state, int groupId) |
Protected Member Functions inherited from GmPluginObject | |
| virtual const GmLogCategory & | logger () const |
| GmSimulationData * | simulationData () const |
Private Attributes | |
| QMap< int, XfemEnrichedElementData * > | _elementMap |
| Map storing individual data for enriched elements. | |
| QList< XfemFracture * > | _naturalFractures |
| The set of mesh natural fractures. | |
| QList< GmVector > | _elemCutInfo |
| vector with element information {iElem, # of fractures per element} | |
| QList< int > | _totalDofSet |
| list with the total number of DOF in the model | |
| QStringList | _nodeStateVarIds |
| bool | _cubicLaw |
| bool | _multiPhasic |
| bool | _nonIsoThermal |
| char | _SaRelPer |
| QList< QList< int > > | _nodeTopologicalMap |
| QList< QList< int > > | _elemTopologicalMap |
| QList< QList< QPair< int, QList< int > > > > | _faceTopologicalMap |
Additional Inherited Members | |
Signals inherited from GmMesh | |
| void | meshChanged () |
Static Public Member Functions inherited from GmMesh | |
| static bool | isGhostNode (int nodeIndex) |
| static int | setGhostFlag (int nodeIndex) |
| static int | clearGhostFlag (int nodeIndex) |
Protected Attributes inherited from GmElementMesh | |
| QVector< GmGaussValueSetGroup * > | _gaussAttributesGroupList |
| QMap< QString, int > | _gaussAttributesMap |
Protected Attributes inherited from GmMesh | |
| int | _stateDumpControlMapItem |
Basic class for a XFEM mesh. This is the basic mesh interface for xfem problems adding enrichment capabilities to the standard Gema elememnt mesh. The "real" implementation inherits from either the standard Gema mesh or from a surface mesh.
|
virtual |
Adds a new sub-element to the xfem element. This addition will automatically trigger an update in the element integration rule (for regular sub-elements) and in the data stored by gauss attributes.
If the element 'e' had not been enriched before, it will be enriched by this call.
| e | The element that will have an added sub element |
| se | The sub element added to e. The element will take ownership of the subelement that will be deleted when the element is deleted. |
| ruleSet | The integration rule set (see coments in GmElementMesh::elementIntegrationRule()) that will be used to define the integration rule that will be applied to the subelement. A value of 0 (the default) means that the default rule for the subelement type will be used. |
|
virtual |
Remove all natural fractures from the mesh.
Clears all natural fractures from the mesh.
|
protectedvirtual |
Overrides the standard GmElementMesh::createGaussValueSetGroup() implementation to create XfemGaussValueSetGroup instances.
Reimplemented from GmElementMesh.
| const GmIntegrationRule * XfemMesh::enrichedElementRegularIntegrationRule | ( | const XfemElement * | e, |
| int | ruleSet ) const |
Returns the elements regular integration rule with support for enriched elements.
If the element has been enriched, returns the elements particular integration rule. If not, returns the rule tied to the element type in the given rule set.
|
virtual |
Marks the given element as enriched.
After calling enrichElement(), it should be filled with subelements for adjusting its integration points.
This function returns false (and does nothing) if the element had already been enriched in the past.
|
virtual |
Overrides printValues to add subelement information.
Reimplemented from GmElementMesh.
|
virtual |
Removes an existing sub-element from the enriched element. This removal will automatically trigger an update in the element integration rule and in the data stored by gauss attributes.
The e parameter must reference an enriched element and index must point to a valid sub-element index, as returned by numRegularSubElements() + numFractureSubElements().
|
virtual |
Returns a subelement of an enriched element.
The index parameter should be a valid index between 0 and numRegularSubElements() + numFractureSubElements() - 1, remembering that fracture sub-elements are positioned as the last sub-elements.
This function also expects 'e' to be an enriched element. The returned pointer is const since changes to a sub-element should be done by using the mesh interface.
This guarantees the consistency between sub-elements, integration points and stored data.
|
virtual |
Updates the set of natural coordinates from a sub-element, provided that the sub-element type remains the same. This update will automatically trigger an update in the element integration rule. IMPORTANT: Values stored in Gauss points are NOT changed to reflect the change in point locations. That should be done externally.
| e | The element that contains the sub-element. Must refer to an enriched element |
| index | The sub-element index inside element e. Must point to a valid sub-element index |
| seNaturalCoords | The new sub-element node coordinates, given in the father element natural coordinate system. The matrix is organized as a 'd x n' matrix where d is the number of natural coordinates for element 'e' and n the number of nodes for the sub element type. See XfemSubElement() documentation for an example. |
| ruleSet | The integration rule set (see coments in GmElementMesh::elementIntegrationRule()) that will be used to define the integration rule that will be applied to the subelement. A value of 0 (the default) means that the default rule for the subelement type will be used. IMPORTANT: The given ruleSet MUST be the same used when the subelement was added in a call to addSubElement() |