public class AgAtom extends AbstractGrowthAtom
Modifier and Type | Field and Description |
---|---|
static byte |
CORNER |
static byte |
EDGE |
static byte |
EDGE_A |
static byte |
EDGE_B |
static byte |
ISLAND |
static byte |
KINK |
static byte |
KINK_A |
static byte |
KINK_B |
private AgAtom[] |
neighbours |
private int |
nImmobile
Number of immobile neighbours.
|
private int |
nMobile
Number of mobile neighbours.
|
private int |
pos
Position within unit cell.
|
static byte |
TERRACE |
private static AgTypesTable |
typesTable |
ARMCHAIR_EDGE, BULK, SICK, ZIGZAG_EDGE, ZIGZAG_WITH_EXTRA
Constructor and Description |
---|
AgAtom(int id,
int pos)
Constructor for unit cell.
|
AgAtom(int id,
short iHexa,
short jHexa) |
Modifier and Type | Method and Description |
---|---|
void |
addNImmobile(int quantity)
Adds the given number to the number of immobile neighbours.
|
void |
addNMobile(int quantity)
Adds the given number to the number of mobile neighbours.
|
private AgAtom |
ahead2CornersAtom(int cornerPosition)
This should be called when a edge jumps to a corner (instead of
expected edge).
|
private AgAtom |
aheadCornerAtom(int cornerPosition)
When the current atom's destination is a corner, it jumps over it to the different type edge.
|
boolean |
areTwoTerracesTogether()
This method tells if two terraces are going to form a dimer.
|
private int |
calculateEdgeType(int code)
This atom is an edge (it has two neighbours).
|
private int |
calculateKinkType(int code)
This atom is a kink (it has three neighbours).
|
AbstractGrowthAtom |
chooseRandomHop()
It chooses one neighbour atom randomly.
|
void |
clear()
Resets current atom; TERRACE type, no neighbours, no occupied, no outside and no probability.
|
java.util.List |
getAllNeighbours() |
AgAtom |
getNeighbour(int pos) |
byte |
getNewType(int addToImmobile,
int addToMobile)
Calculates the new atom type when adding or removing a neighbour.
|
int |
getNImmobile() |
int |
getNMobile() |
int |
getOrientation()
Computes the orientation with respect to the surface, for edges and kinks.
|
int |
getOrientation(AgAtom atom)
See
getOrientation() . |
Point3D |
getPos()
Returns the position within the unit cell.
|
byte |
getRealType()
Returns the real type of the current atom.
|
byte |
getTypeWithoutNeighbour(int position)
Returns the type of the neighbour atom if current one would not exist.
|
boolean |
isEligible() |
boolean |
isPartOfImmobilSubstrate() |
void |
obtainRateFromNeighbours() |
double |
probJumpToNeighbour(int ignored,
int position) |
void |
setNeighbour(AbstractGrowthAtom a,
int pos) |
void |
setNImmobile(int nImmobile) |
void |
setNMobile(int nMobile) |
double |
updateOneBound(int pos) |
addOccupiedNeighbour, addProbability, addRate, addToSumRate, areTwoTerracesTogetherInPerimeter, compareTo, equalRate, equals, getAngle, getAttributes, getBondsProbability, getBondsProbability, getCartesianPosition, getCartesianSuperCell, getDepositionPosition, getDepositionTime, getEdgeRate, getHops, getId, getiHexa, getIslandNumber, getjHexa, getMultiAtomNumber, getMultiplier, getOccupiedNeighbours, getProbability, getProbability, getProbability, getRate, getSumRate, getType, hashCode, initialiseRates, isInnerPerimeter, isIsolated, isOnList, isOuterPerimeter, isOutside, isVisited, remove, removeMultiAtomNumber, removeMultiAtoms, resetPerimeter, resetProbability, setAngle, setAttributes, setBondsProbability, setBondsProbability, setCartesianPosition, setCartesianSuperCell, setDepositionPosition, setDepositionTime, setHops, setInnerPerimeter, setIslandNumber, setMultiAtomNumber, setMultiplier, setOnList, setOuterPerimeter, setOutside, setProcceses, setRate, setSumRate, setType, setVisited, swapAttributes, toString, updateRate
getNumberOfNeighbours, getProbabilities, isOccupied, isOnList, isRemoved, setList, setNeighbour, setNumberOfNeighbours, setOccupied, setProbabilities, setRemoved, unRemove
public static final byte TERRACE
public static final byte CORNER
public static final byte EDGE_A
public static final byte KINK_A
public static final byte ISLAND
public static final byte EDGE_B
public static final byte KINK_B
public static final byte EDGE
public static final byte KINK
private static AgTypesTable typesTable
private final AgAtom[] neighbours
private int nImmobile
private int nMobile
private final int pos
public AgAtom(int id, short iHexa, short jHexa)
public AgAtom(int id, int pos)
id
- atom identifier.pos
- position within the unit cellpublic Point3D getPos()
getPos
in interface IAtom
getPos
in class AbstractAtom
public void setNeighbour(AbstractGrowthAtom a, int pos)
setNeighbour
in class AbstractGrowthAtom
public AgAtom getNeighbour(int pos)
getNeighbour
in class AbstractGrowthAtom
public java.util.List getAllNeighbours()
getAllNeighbours
in class AbstractGrowthAtom
public boolean isEligible()
public boolean isPartOfImmobilSubstrate()
isPartOfImmobilSubstrate
in class AbstractGrowthAtom
public int getNImmobile()
public int getNMobile()
public void setNImmobile(int nImmobile)
public void setNMobile(int nMobile)
public void addNMobile(int quantity)
quantity
- public void addNImmobile(int quantity)
quantity
- public byte getNewType(int addToImmobile, int addToMobile)
addToImmobile
- variation of the number of immobile neighbours. Must be -1, 0 or 1addToMobile
- variation of the number of mobile neighbours. Must be -1, 0 or 1public void clear()
clear
in interface IElement
clear
in class AbstractGrowthAtom
public int getOrientation()
A type: _ \ / B type: /_\ (central area would be island)
getOrientation
in class AbstractGrowthAtom
public int getOrientation(AgAtom atom)
getOrientation()
.atom
- atom to be excluded to compute the orientation. If null, none is excluded.public AbstractGrowthAtom chooseRandomHop()
chooseRandomHop
in class AbstractGrowthAtom
public boolean areTwoTerracesTogether()
areTwoTerracesTogether
in class AbstractGrowthAtom
public void obtainRateFromNeighbours()
obtainRateFromNeighbours
in class AbstractGrowthAtom
public double updateOneBound(int pos)
updateOneBound
in class AbstractGrowthAtom
pos
- position of the neighbour.public byte getRealType()
getRealType
in interface IAtom
getRealType
in class AbstractAtom
public double probJumpToNeighbour(int ignored, int position)
probJumpToNeighbour
in class AbstractGrowthAtom
public byte getTypeWithoutNeighbour(int position)
getTypeWithoutNeighbour
in class AbstractGrowthAtom
position
- this position is the original one; has to be inverted.private int calculateEdgeType(int code)
0 1 5 [] 2 4 3A proper image of the positions is documented here: https://bitbucket.org/Nesferjo/ekmc-project/wiki/Relationship%20between%20Cartesian%20and%20hexagonal%20representations
code
- binary code with the occupied neighbours.private int calculateKinkType(int code)
0 1 5 [] 2 4 3A proper image of the positions is documented here: https://bitbucket.org/Nesferjo/ekmc-project/wiki/Relationship%20between%20Cartesian%20and%20hexagonal%20representations
code
- binary code with the occupied neighbours.private AgAtom aheadCornerAtom(int cornerPosition)
cornerPosition
- position of the neighbour, from current atomprivate AgAtom ahead2CornersAtom(int cornerPosition)
cornerPosition
- position of the neighbour, from current atom