IcanCompute
Class Impact

java.lang.Object
  extended by IcanCompute.Impact

public class Impact
extends java.lang.Object

Computes the effects of the impact of a spherical projectile on a laminate. Implements: "Approximate Micromechanics Treatise of Composite Impact". Also see my analysis.

Since:
1.0;
Version:
1.1.14;
Updated by Louis Handler on Dec 19, 2006, 10:38 EST (1.1.14).
Updated by Louis Handler on Jan 25, 2006, 08:44 EST (1.1.8).
Updated by Louis Handler on Oct 21, 2004, 08:37 EDT (1.0.8).
Updated by Louis Handler on Apr 26, 2004, 15:31 EDT (1.0.6).
Updated by Louis Handler on Apr 15, 2004, 08:06 EDT.
Updated by Louis Handler on Apr 14, 2004, 14:02 EDT.
Updated by Louis Handler on Apr 14, 2004, 09:53 EDT.
Updated by Louis Handler on Apr 14, 2004, 09:24 EDT.
Updated by Louis Handler on Apr 13, 2004, 15:39 EDT.
Updated by Louis Handler on Apr 13, 2004, 15:38 EDT.
Updated by Louis Handler on Apr 13, 2004, 15:35 EDT.
Updated by Louis Handler on Apr 13, 2004, 15:23 EDT.
Updated by Louis Handler on Apr 13, 2004, 14:49 EDT.
Updated by Louis Handler on Sep 17, 2003, 15:50 EDT.
Updated by Louis Handler on Sep 8, 2003, 08:08 EDT.
Updated by Louis Handler on Dec 6, 2002, 15:56 EST.
Updated by Louis Handler on Dec 6, 2002, 10:05 EST.
Updated by Louis Handler on Oct 17, 2002, 10:14 EDT.
Updated by Louis Handler on Dec 18, 2000, 09:40 EST.
Updated by Louis Handler on Oct 3, 2000, 11:51 EDT.
Updated by Louis Handler on Aug 16, 2000, 14:26 EDT.
Updated by Louis Handler on Mar 28, 2000, 10:49 EST.
Updated by Louis Handler on Mar 9, 2000, 09:09 EST.
Updated by Louis Handler on Feb 25, 2000, 14:17 EST.
Updated by Louis Handler on Feb 25, 2000, 13:51 EST.
Updated by Louis Handler on Oct 13, 1999, 14:11 EDT.
Updated by Louis Handler on Aug 11, 1998, 09:03 EDT.
Updated by Louis Handler on Jun 23, 1998, 12:23:19 EDT.
Author:
Louis Handler

Field Summary
private static ComputeIcanLayer[] cil
          A reference to an array of Layer/Slice/Ply data is set/used.
private static boolean debug
          Reset to true to get extra print for debugging when executing as an application using main method below.
private static double DTOR
          The conversion factor to convert degrees to radians.
private static double Ec33
          Transverse modulus.
private static double epsZero
          Small number used to test the relative difference between two numbers.
private static java.lang.String eventContact
          Named event for Contact output at time = 0 and z = -Rp.
private static java.lang.String eventCrushing
          Named event for Crushing output at end of crushing because projectile either stops or starts pushing out material as a plug.
private static java.lang.String eventDelamination
          Named event for Suspected Delamination output.
private static java.lang.String eventDelaminationBS
          Named event for Delamination based on bending strength output.
private static java.lang.String eventDelaminationIS
          Named event for Delamination based on interply strength output.
private static java.lang.String eventFiberBreak
          Named event for Longitudinal fiber breakage based on bending strength output.
private static java.lang.String eventHeader
          Header for event data: event, time, location, force(s), energy, r, x.
private static java.lang.String eventIndentation
          Named event for Indentation output at z = 0.
private static java.lang.String eventNothing
          Named event for other output.
private static java.lang.String eventSliding
          Named event for Sliding output at end of projectile pushing out material as a plug.
private static java.lang.String eventSlidingStart
          Named event for Sliding Start output at place where Fc = Fp, material breaks, and projectile starts pushing out material as a plug.
private static java.lang.String eventSpallation
          Named event for Spallation output.
private static java.lang.String eventTranSplit
          Named event for Transverse splitting based on interply strength output.
private static java.lang.String forceSpacer
          Spacer for no pushing force or no crushing force.
private static double Gcxy
          Shear modulus.
private static double Gczx
          Shear modulus.
private static double Gczy
          Shear modulus.
private static double HALF
          The number one half.
private static int iE33
          E33 = Normal Moduli.
private static int iS11F
          Sc11F = Flexural strength.
private static int iS22F
          Sc22F = Flexural strength.
private static int iS33C
          Sc33C = Compressive strength.
private static int iS33T
          Sc33T = Tensile strength.
private static int iSRZF
          ScrzsF = Flexural strength.
private static int iSRZS
          Scrzs = Shear strength.
private static int iSZX
          Sczx = Shear strength.
private static int iSZY
          Sczy = Shear strength.
private static int iVRZ
          nuvRZ = Poisson's ratio.
private static int kEnergy
          Subscript for Impact output data: Energy.
private static int kForce
          Subscript for Impact output data: Force.
private static int kLocz
          Subscript for Impact output data: Location (z).
private static int kSpeed
          Subscript for Impact output data: Velocity.
private static int kStress
          Subscript for Impact output data: Stress (Z).
private static int kTime
          Subscript for Impact output data: Time.
private static int lineCount
          Number of lines printed on the page so far.
private static int MAX_ERRORS_PRINTED
          Maximum number of errors displayed of a single type.
private static int maxLineCount
          Maximum number of lines per page.
private static int nImpactVariables
          Number of subscripts for Impact output data.
private static int nLayr
          Number of layers/slices/plies.
private static int nPrintErrorStrength
          Number of errors computing strength.
private static double nuvM
          Poisson's ratio.
private static double ONE
          The number one.
private static double PI
          The number pi.
private static boolean printFull
          Full or summary print switch.
private static double rhoc
          Composite average material density.
private static double Sc11F
          Flexural strength.
private static double Sc22F
          Flexural strength.
private static double Sc33C
          Shear strength.
private static double Sc33T
          Tensile strength.
private static double Scrzs
          Shear strength.
private static double ScrzsF
          Flexural strength.
private static double Sczx
          Shear strength.
private static double Sczy
          Shear strength.
private static double thick
          Composite thickness.
private static double TWO
          The number two.
private static double[] zEdge
          Array of z locations for edges of Layer/Slice/Ply.
 
Constructor Summary
Impact()
           
 
Method Summary
private static void bumpLines()
          Increment line count and, if necessary, add form-feed.
private static void bumpLines(int nl)
          Increment line count and, if necessary, add form-feed.
private static void bumpLinesWithHeader()
          Increment line count and, if necessary, add form-feed and header.
private static double computeBreakingForce(double z, double Dp)
          Compute breaking force using equation Fzp = PI * Dp * (thickness - z) * SRZS.
private static double computeCrushingForce(double z, double Rp)
          Compute crushing force using equation Fz = Azc * S33C; where Azc is the cross-sectional area to be crushed.
static java.lang.String getName()
          Get class name.
private static double getStoppingPoint(double dz, double zLst, double Fz, double FzLst, double Ez, double EzLst)
          Get stopping point where the velocity and residual energy goes to zero, assuming that the force, Fz, is linear with z.
static double getVar(int iwh, int iLayr)
          Get Strength variable.
static double[][] impact(double rhoP, double Dp, double frictionC, double vo, ComputeIcanLayer[] inCil, double inRhoc, double inThick, double inGczx, double inGczy, double inGcxy, double inEc33, double[] outSlidingZ, boolean inPrintFull)
          Approximate Micromechanics equations for Composite Impact.
static double[][] impact(double rhoP, double Dp, double frictionC, double vo, double[] outSlidingZ)
          Approximate Micromechanics equations for Composite Impact.
static void main(java.lang.String[] args)
          Main for testing.
static void reset()
          Reinitialize first time switch so it prints a limited number of equivalent error messages.
static void setVar(double inRhoc, double inThick, double inGczx, double inGczy, double inGcxy, double inSczx, double inSczy, double inSc33C, double inEc33, double inSc33T, double inSc22F, double inSc11F, double inScrzs, double inScrzsF, double innuvM)
          Set variables for Impact computation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

cil

private static ComputeIcanLayer[] cil
A reference to an array of Layer/Slice/Ply data is set/used.


zEdge

private static double[] zEdge
Array of z locations for edges of Layer/Slice/Ply.


nLayr

private static int nLayr
Number of layers/slices/plies.


rhoc

private static double rhoc
Composite average material density.


thick

private static double thick
Composite thickness.


Gczx

private static double Gczx
Shear modulus.


Gczy

private static double Gczy
Shear modulus.


Gcxy

private static double Gcxy
Shear modulus.


Sczx

private static double Sczx
Shear strength.


Sczy

private static double Sczy
Shear strength.


Sc33C

private static double Sc33C
Shear strength.


Ec33

private static double Ec33
Transverse modulus.


Sc33T

private static double Sc33T
Tensile strength.


Sc22F

private static double Sc22F
Flexural strength.


Sc11F

private static double Sc11F
Flexural strength.


Scrzs

private static double Scrzs
Shear strength.


ScrzsF

private static double ScrzsF
Flexural strength.


nuvM

private static double nuvM
Poisson's ratio.


printFull

private static boolean printFull
Full or summary print switch. True, if print intermediate data as well as summary data; false, if print summary data only.


debug

private static boolean debug
Reset to true to get extra print for debugging when executing as an application using main method below.


iSZX

private static final int iSZX
Sczx = Shear strength.

See Also:
Constant Field Values

iSZY

private static final int iSZY
Sczy = Shear strength.

See Also:
Constant Field Values

iS33T

private static final int iS33T
Sc33T = Tensile strength.

See Also:
Constant Field Values

iS33C

private static final int iS33C
Sc33C = Compressive strength.

See Also:
Constant Field Values

iS22F

private static final int iS22F
Sc22F = Flexural strength.

See Also:
Constant Field Values

iS11F

private static final int iS11F
Sc11F = Flexural strength.

See Also:
Constant Field Values

iSRZS

private static final int iSRZS
Scrzs = Shear strength.

See Also:
Constant Field Values

iSRZF

private static final int iSRZF
ScrzsF = Flexural strength.

See Also:
Constant Field Values

iE33

private static final int iE33
E33 = Normal Moduli.

See Also:
Constant Field Values

iVRZ

private static final int iVRZ
nuvRZ = Poisson's ratio.

See Also:
Constant Field Values

ONE

private static final double ONE
The number one.

See Also:
Constant Field Values

TWO

private static final double TWO
The number two.

See Also:
Constant Field Values

HALF

private static final double HALF
The number one half.

See Also:
Constant Field Values

PI

private static final double PI
The number pi.

See Also:
Constant Field Values

DTOR

private static final double DTOR
The conversion factor to convert degrees to radians.

See Also:
Constant Field Values

epsZero

private static final double epsZero
Small number used to test the relative difference between two numbers. If the relative difference between two numbers is less than this constant, the numbers are considered to be the same, differing only by round-off.

See Also:
Constant Field Values

eventHeader

private static final java.lang.String eventHeader
Header for event data: event, time, location, force(s), energy, r, x.

See Also:
Constant Field Values

maxLineCount

private static final int maxLineCount
Maximum number of lines per page.

See Also:
Constant Field Values

lineCount

private static int lineCount
Number of lines printed on the page so far. Incremented before printing so a header may be added if needed.


eventContact

private static final java.lang.String eventContact
Named event for Contact output at time = 0 and z = -Rp.

See Also:
Constant Field Values

eventIndentation

private static final java.lang.String eventIndentation
Named event for Indentation output at z = 0.

See Also:
Constant Field Values

eventCrushing

private static final java.lang.String eventCrushing
Named event for Crushing output at end of crushing because projectile either stops or starts pushing out material as a plug.

See Also:
Constant Field Values

eventSlidingStart

private static final java.lang.String eventSlidingStart
Named event for Sliding Start output at place where Fc = Fp, material breaks, and projectile starts pushing out material as a plug.

See Also:
Constant Field Values

eventSliding

private static final java.lang.String eventSliding
Named event for Sliding output at end of projectile pushing out material as a plug.

See Also:
Constant Field Values

eventNothing

private static final java.lang.String eventNothing
Named event for other output.

See Also:
Constant Field Values

eventDelamination

private static final java.lang.String eventDelamination
Named event for Suspected Delamination output.

See Also:
Constant Field Values

eventDelaminationIS

private static final java.lang.String eventDelaminationIS
Named event for Delamination based on interply strength output.

See Also:
Constant Field Values

eventDelaminationBS

private static final java.lang.String eventDelaminationBS
Named event for Delamination based on bending strength output.

See Also:
Constant Field Values

eventSpallation

private static final java.lang.String eventSpallation
Named event for Spallation output.

See Also:
Constant Field Values

eventTranSplit

private static final java.lang.String eventTranSplit
Named event for Transverse splitting based on interply strength output.

See Also:
Constant Field Values

eventFiberBreak

private static final java.lang.String eventFiberBreak
Named event for Longitudinal fiber breakage based on bending strength output.

See Also:
Constant Field Values

forceSpacer

private static final java.lang.String forceSpacer
Spacer for no pushing force or no crushing force.

See Also:
Constant Field Values

kTime

private static final int kTime
Subscript for Impact output data: Time. Impact output data is used for plotting.

See Also:
Constant Field Values

kLocz

private static final int kLocz
Subscript for Impact output data: Location (z). Impact output data is used for plotting.

See Also:
Constant Field Values

kForce

private static final int kForce
Subscript for Impact output data: Force. Impact output data is used for plotting.

See Also:
Constant Field Values

kEnergy

private static final int kEnergy
Subscript for Impact output data: Energy. Impact output data is used for plotting.

See Also:
Constant Field Values

kSpeed

private static final int kSpeed
Subscript for Impact output data: Velocity. Impact output data is used for plotting.

See Also:
Constant Field Values

kStress

private static final int kStress
Subscript for Impact output data: Stress (Z). Impact output data is used for plotting.

See Also:
Constant Field Values

nImpactVariables

private static final int nImpactVariables
Number of subscripts for Impact output data. Impact output data is used for plotting.

See Also:
Constant Field Values

nPrintErrorStrength

private static int nPrintErrorStrength
Number of errors computing strength. Used to limit number of errors displayed of this type.

See Also:
MAX_ERRORS_PRINTED

MAX_ERRORS_PRINTED

private static final int MAX_ERRORS_PRINTED
Maximum number of errors displayed of a single type.

See Also:
Constant Field Values
Constructor Detail

Impact

public Impact()
Method Detail

impact

public static double[][] impact(double rhoP,
                                double Dp,
                                double frictionC,
                                double vo,
                                ComputeIcanLayer[] inCil,
                                double inRhoc,
                                double inThick,
                                double inGczx,
                                double inGczy,
                                double inGcxy,
                                double inEc33,
                                double[] outSlidingZ,
                                boolean inPrintFull)
                         throws java.lang.IllegalArgumentException
Approximate Micromechanics equations for Composite Impact.

Parameters:
rhoP - Projectile density.
Dp - Projectile diameter.
frictionC - Coefficient of sliding friction of cylindrical plug and hole.
vo - Projectile initial velocity.
inCil - A reference to an array of Layer/Slice/Ply ComputeIcanLayer data.
inRhoc - Composite material density.
inThick - Composite thickness.
inGczx - Shear modulus.
inGczy - Shear modulus.
inGcxy - Shear modulus.
inEc33 - Transverse modulus.
inPrintFull - True, if print intermediate data as well as summary data; false, if print summary data only.
Returns:
Impact data[nImpactVariables][nDataPoints].
Throws:
java.lang.IllegalArgumentException - Invalid input data.

impact

public static double[][] impact(double rhoP,
                                double Dp,
                                double frictionC,
                                double vo,
                                double[] outSlidingZ)
                         throws java.lang.IllegalArgumentException
Approximate Micromechanics equations for Composite Impact. These equations are described in my analysis.

Parameters:
rhoP - Projectile density.
Dp - Projectile diameter.
frictionC - Coefficient of sliding friction of cylindrical plug and hole.
vo - Projectile initial velocity.
Returns:
Impact data[nImpactVariables][nDataPoints].
Throws:
java.lang.IllegalArgumentException - Invalid input data.

bumpLinesWithHeader

private static void bumpLinesWithHeader()
Increment line count and, if necessary, add form-feed and header.


bumpLines

private static void bumpLines()
Increment line count and, if necessary, add form-feed.


bumpLines

private static void bumpLines(int nl)
Increment line count and, if necessary, add form-feed.

Parameters:
nl - number of lines to add for this output.

setVar

public static void setVar(double inRhoc,
                          double inThick,
                          double inGczx,
                          double inGczy,
                          double inGcxy,
                          double inSczx,
                          double inSczy,
                          double inSc33C,
                          double inEc33,
                          double inSc33T,
                          double inSc22F,
                          double inSc11F,
                          double inScrzs,
                          double inScrzsF,
                          double innuvM)
Set variables for Impact computation.

Parameters:
inRhoc - Composite material density.
inThick - Composite thickness.
inGczx - Shear modulus.
inGczy - Shear modulus.
inGcxy - Shear modulus.
inSczx - Shear strength.
inSczy - Shear strength.
inSc33C - Shear strength.
inEc33 - Transverse modulus.
inSc33T - Tensile strength.
inSc22F - Flexural strength.
inSc11F - Flexural strength.
inScrzs - Shear strength.
inScrzsF - Flexural strength.
innuvM - Poisson's ratio.

computeCrushingForce

private static double computeCrushingForce(double z,
                                           double Rp)
Compute crushing force using equation Fz = Azc * S33C; where Azc is the cross-sectional area to be crushed. For greater detail, see: A6.

Parameters:
z - Location in the Z direction of the center of the projectile from the outer surface of the first layer of the laminate.
Rp - Projectile radius.
Returns:
Crushing force.

computeBreakingForce

private static double computeBreakingForce(double z,
                                           double Dp)
Compute breaking force using equation Fzp = PI * Dp * (thickness - z) * SRZS. For greater detail, see: A8.

Parameters:
z - Location in the Z direction of the center of the projectile from the outer surface of the first layer of the laminate.
Dp - Projectile diameter.
Returns:
Breaking force.

getStoppingPoint

private static double getStoppingPoint(double dz,
                                       double zLst,
                                       double Fz,
                                       double FzLst,
                                       double Ez,
                                       double EzLst)
Get stopping point where the velocity and residual energy goes to zero, assuming that the force, Fz, is linear with z. The linear function for force is determined by the two points (zLst,FzLst) and (zLst+dz,Fz). See equation A19 and following. z = zLst + dz;

Parameters:
dz - Increment between z and zLst. The z value is (zLst + dz) at which Fz and Ez are computed. Ez is computed to be less than or equal to zero.
zLst - Previous z value.
Fz - Force at z.
FzLst - Force at zLst.
Ez - Residual energy at z. This value is computed to be less than or equal to zero.
EzLst - Residual energy at zLst.
Returns:
Z value at stopping point between zLst and zLst + dz.

getVar

public static double getVar(int iwh,
                            int iLayr)
Get Strength variable.

Parameters:
iwh - Strength value selected.
iLayr - Layer/Slice/Ply subscript.
Returns:
Desired strength value.

main

public static void main(java.lang.String[] args)
Main for testing.

Parameters:
args - Command line arguments not used.

reset

public static void reset()
Reinitialize first time switch so it prints a limited number of equivalent error messages.


getName

public static java.lang.String getName()
Get class name.

Returns:
Class name.