private BiElasticMaterial2D(double youngModulus1, double equivalentYoungModulus1, double poissonRatio1, double equivalentPoissonRatio1, double thickness1, double youngModulus2, double equivalentYoungModulus2, double poissonRatio2, double equivalentPoissonRatio2, double thickness2, MaterialInterface2D bimaterialInterface) { MaterialUtilities.CheckYoungModulus(youngModulus1); MaterialUtilities.CheckPoissonRatio(poissonRatio1); MaterialUtilities.CheckThickness(thickness1); MaterialUtilities.CheckYoungModulus(youngModulus2); MaterialUtilities.CheckPoissonRatio(poissonRatio2); MaterialUtilities.CheckThickness(thickness2); this.YoungModulus1 = youngModulus1; EquivalentYoungModulus1 = equivalentYoungModulus1; this.PoissonRatio1 = poissonRatio1; this.EquivalentPoissonRatio1 = equivalentPoissonRatio1; this.Thickness1 = thickness1; this.YoungModulus2 = youngModulus2; EquivalentYoungModulus2 = equivalentYoungModulus2; this.PoissonRatio2 = poissonRatio2; this.EquivalentPoissonRatio2 = equivalentPoissonRatio2; this.Thickness2 = thickness2; this.bimaterialInterface = bimaterialInterface; }
/// <summary> /// Material properties for the "positive" subdomain designed by the interface are denoted as 1. /// Material properties for the "negative" subdomain designed by the interface are denoted as 2. /// </summary> /// <param name="youngModulus1"></param> /// <param name="poissonRatio1"></param> /// <param name="youngModulus2"></param> /// <param name="poissonRatio2"></param> /// <param name="bimaterialInterface"></param> public static BiElasticMaterial2D CreateMaterialForPlainStress(double youngModulus1, double poissonRatio1, double thickness1, double youngModulus2, double poissonRatio2, double thickness2, MaterialInterface2D bimaterialInterface) { return(new BiElasticMaterial2D(youngModulus1, youngModulus1, poissonRatio1, poissonRatio1, thickness1, youngModulus2, youngModulus2, poissonRatio2, poissonRatio2, thickness2, bimaterialInterface)); }
private static XContinuumElement2D CreateMaterialInterfaceElement() { XNode[] nodes = new XNode[] { new XNode(0, 20.0, 0.0), new XNode(1, 40.0, 0.0), new XNode(2, 40.0, 20.0), new XNode(3, 20.0, 20.0), }; var point1 = new CartesianPoint(30.0, 0.0); var point2 = new CartesianPoint(30.0, 20.0); PolyLine2D discontinuity = new PolyLine2D(point1, point2); MaterialInterface2D enrichmentItem = new MaterialInterface2D(discontinuity); double E1 = 2E6; double E2 = 0.5 * E1; double v = 0.3; var material = BiElasticMaterial2D.CreateMaterialForPlainStrain(E1, v, E2, v, enrichmentItem); var integrationStrategy = new RectangularSubgridIntegration2D <XContinuumElement2D>( 2, GaussLegendre2D.GetQuadratureWithOrder(2, 2)); //var integrationStrategy = new IntegrationForCrackPropagation2D(GaussLegendre2D.Order2x2, // new RectangularSubgridIntegration2D<XContinuumElement2D>(2, GaussLegendre2D.Order2x2)); var factory = new XContinuumElement2DFactory(integrationStrategy, integrationStrategy, material); var element = factory.CreateElement(0, CellType.Quad4, nodes); //discontinuity.ElementIntersections.Add(element, new CartesianPoint2D[] { point1, point2 }); //OBSOLETE: Elements access their enrichments from nodes now. //enrichmentItem.EnrichElement(element); enrichmentItem.EnrichNode(nodes[0]); enrichmentItem.EnrichNode(nodes[1]); enrichmentItem.EnrichNode(nodes[2]); enrichmentItem.EnrichNode(nodes[3]); return(element); }
/// <summary> /// Material properties for the "positive" subdomain designed by the interface are denoted as 1. /// Material properties for the "negative" subdomain designed by the interface are denoted as 2. /// </summary> /// <param name="youngModulus1"></param> /// <param name="poissonRatio1"></param> /// <param name="youngModulus2"></param> /// <param name="poissonRatio2"></param> /// <param name="bimaterialInterface"></param> /// <returns></returns> public static BiElasticMaterial2D CreateMaterialForPlainStrain(double youngModulus1, double poissonRatio1, double youngModulus2, double poissonRatio2, MaterialInterface2D bimaterialInterface) { double equivalentE1 = youngModulus1 / (1.0 - poissonRatio1 * poissonRatio1); double equivalentV1 = poissonRatio1 / (1.0 - poissonRatio1); double thickness1 = 1.0; double equivalentE2 = youngModulus2 / (1.0 - poissonRatio2 * poissonRatio2); double equivalentV2 = poissonRatio2 / (1.0 - poissonRatio2); double thickness2 = 1.0; return(new BiElasticMaterial2D(youngModulus1, equivalentE1, poissonRatio1, equivalentV1, thickness1, youngModulus2, equivalentE2, poissonRatio2, equivalentV2, thickness2, bimaterialInterface)); }