187 lines
8.0 KiB
C#
187 lines
8.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using CaeMesh;
|
|
using DynamicTypeDescriptor;
|
|
using CaeGlobals;
|
|
using System.Drawing;
|
|
|
|
namespace CaeModel
|
|
{
|
|
[Serializable]
|
|
public enum ContactPairMethod
|
|
{
|
|
[StandardValue("Node to surface", "Node to surface", Description =
|
|
"Use node-to-face penalty contact method. All contact pairs in the model must use the same contact type.")]
|
|
NodeToSurface,
|
|
[StandardValue("Surface to surface", "Surface to surface", Description =
|
|
"Use face-to-face penalty contact method. All contact pairs in the model must use the same contact type.")]
|
|
SurfaceToSurface,
|
|
[StandardValue("Mortar", "Mortar", Description =
|
|
"Use mortar contact method. All contact pairs in the model must use the same contact type.")]
|
|
Mortar,
|
|
[StandardValue("Massless", "Massless", Description =
|
|
"Use massless contact method. All contact pairs in the model must use the same contact type.")]
|
|
Massless,
|
|
|
|
}
|
|
|
|
[Serializable]
|
|
public class ContactPair : NamedClass, IMasterSlaveMultiRegion
|
|
{
|
|
// Static variables
|
|
public static readonly double InitialAdjustmentSize = 0.01;
|
|
|
|
|
|
// Variables
|
|
private static string _positive = "The value must be larger than 0.";
|
|
//
|
|
private string _surfaceInteractionName;
|
|
private ContactPairMethod _method;
|
|
private bool _smallSliding;
|
|
private bool _adjust;
|
|
private double _adjustmentSize;
|
|
//
|
|
private RegionTypeEnum _slaveRegionType;
|
|
private string _slaveSurfaceName;
|
|
private RegionTypeEnum _masterRegionType;
|
|
private string _masterSurfaceName;
|
|
//
|
|
private int[] _slaveCreationIds;
|
|
private Selection _slaveCreationData;
|
|
private int[] _masterCreationIds;
|
|
private Selection _masterCreationData;
|
|
//
|
|
protected Color _masterColor;
|
|
protected Color _slaveColor;
|
|
|
|
|
|
// Properties
|
|
public string SurfaceInteractionName { get { return _surfaceInteractionName; } set { _surfaceInteractionName = value; } }
|
|
public ContactPairMethod Method
|
|
{
|
|
get { return _method; }
|
|
set
|
|
{
|
|
_method = value;
|
|
if (_method == ContactPairMethod.SurfaceToSurface) _smallSliding = false;
|
|
}
|
|
}
|
|
public bool SmallSliding
|
|
{
|
|
get { return _smallSliding; }
|
|
set
|
|
{
|
|
_smallSliding = value;
|
|
Method = _method; // check the compatibility
|
|
}
|
|
}
|
|
public bool Adjust { get { return _adjust; } set { _adjust = value; } }
|
|
public double AdjustmentSize
|
|
{
|
|
get { return _adjustmentSize; }
|
|
set { if (double.IsNaN(value) || value >= 0) _adjustmentSize = value; else throw new CaeException(_positive); }
|
|
}
|
|
//
|
|
public RegionTypeEnum MasterRegionType { get { return _masterRegionType; } set { _masterRegionType = value; } }
|
|
public string MasterRegionName { get { return _masterSurfaceName; } set { _masterSurfaceName = value; } }
|
|
public RegionTypeEnum SlaveRegionType { get { return _slaveRegionType; } set { _slaveRegionType = value; } }
|
|
public string SlaveRegionName { get { return _slaveSurfaceName; } set { _slaveSurfaceName = value; } }
|
|
//
|
|
public int[] SlaveCreationIds { get { return _slaveCreationIds; } set { _slaveCreationIds = value; } }
|
|
public Selection SlaveCreationData { get { return _slaveCreationData; } set { _slaveCreationData = value; } }
|
|
public int[] MasterCreationIds { get { return _masterCreationIds; } set { _masterCreationIds = value; } }
|
|
public Selection MasterCreationData { get { return _masterCreationData; } set { _masterCreationData = value; } }
|
|
//
|
|
public Color MasterColor
|
|
{
|
|
get
|
|
{
|
|
// Compatibility for version v0.6.0
|
|
if (_masterColor == Color.Empty) _masterColor = Color.Yellow;
|
|
//
|
|
return _masterColor;
|
|
}
|
|
set { _masterColor = value; }
|
|
}
|
|
public Color SlaveColor
|
|
{
|
|
get
|
|
{
|
|
// Compatibility for version v0.6.0
|
|
if (_slaveColor == Color.Empty) _slaveColor = Color.Yellow;
|
|
//
|
|
return _slaveColor;
|
|
}
|
|
set { _slaveColor = value; }
|
|
}
|
|
|
|
|
|
// Constructors
|
|
public ContactPair(string name, string surfaceInteractionName, string masterSurfaceName, RegionTypeEnum masterRegionType,
|
|
string slaveSurfaceName, RegionTypeEnum slaveRegionType)
|
|
: this(name, surfaceInteractionName, ContactPairMethod.SurfaceToSurface, false, false, double.NaN,
|
|
masterSurfaceName, masterRegionType, slaveSurfaceName, slaveRegionType)
|
|
{
|
|
}
|
|
public ContactPair(string name, string surfaceInteractionName, ContactPairMethod method, bool smallSliding, bool adjust,
|
|
double adjustmentSize, string masterSurfaceName, RegionTypeEnum masterRegionType,
|
|
string slaveSurfaceName, RegionTypeEnum slaveRegionType)
|
|
: base(name)
|
|
{
|
|
// Same name can be used for single surface contact
|
|
//if (masterRegionType == RegionTypeEnum.SurfaceName && slaveRegionType == RegionTypeEnum.SurfaceName &&
|
|
// slaveSurfaceName == masterSurfaceName) throw new CaeException("The master and slave surface names must be different.");
|
|
//
|
|
_surfaceInteractionName = surfaceInteractionName;
|
|
Method = method;
|
|
SmallSliding = smallSliding;
|
|
_adjust = adjust;
|
|
AdjustmentSize = adjustmentSize;
|
|
//
|
|
_masterRegionType = masterRegionType;
|
|
_masterSurfaceName = masterSurfaceName;
|
|
_slaveRegionType = slaveRegionType;
|
|
_slaveSurfaceName = slaveSurfaceName;
|
|
//
|
|
_slaveCreationIds = null;
|
|
_slaveCreationData = null;
|
|
_masterCreationIds = null;
|
|
_masterCreationData = null;
|
|
//
|
|
_masterColor = Color.Yellow;
|
|
_slaveColor = Color.Yellow;
|
|
}
|
|
|
|
|
|
// Methods
|
|
public void SwapMasterSlave()
|
|
{
|
|
if (_name.Contains(Globals.MasterSlaveSeparator))
|
|
{
|
|
string[] tmp = _name.Split(new string[] { Globals.MasterSlaveSeparator }, StringSplitOptions.None);
|
|
if (tmp.Length == 2) _name = tmp[1] + Globals.MasterSlaveSeparator + tmp[0];
|
|
}
|
|
//
|
|
RegionTypeEnum tmpRegionType = _masterRegionType;
|
|
_masterRegionType = _slaveRegionType;
|
|
_slaveRegionType = tmpRegionType;
|
|
//
|
|
string tmpSurfaceName = _masterSurfaceName;
|
|
_masterSurfaceName = _slaveSurfaceName;
|
|
_slaveSurfaceName = tmpSurfaceName;
|
|
//
|
|
int[] tmpCreationIds = _masterCreationIds;
|
|
_masterCreationIds = _slaveCreationIds;
|
|
_slaveCreationIds = tmpCreationIds;
|
|
//
|
|
Selection tmpCreationData = _masterCreationData;
|
|
_masterCreationData = _slaveCreationData;
|
|
_slaveCreationData = tmpCreationData;
|
|
}
|
|
|
|
}
|
|
}
|