/* * * Membrane * */ //import gjt.MAssert; import java.lang.Math; public class Membrane { private final int Max_Elem=100; private double[] ProbCross; private double Vm; private int NumElements=0; public Membrane(){ Vm=0.0; ProbCross = new double[Max_Elem]; } public Membrane(int NumElements, double[] PCross, double Vm){ this.Vm=Vm; //MAssert.notFalse(NumElements > 0 && NumElements <= Max_Elem); ProbCross = new double[Max_Elem]; for (int i=0; i= 0.0 && PCross <=1.0 ); //MAssert.notFalse( Number >=0 && Number < NumElements); ProbCross[Number]=PCross; } public void SetVoltage(double Vm){ this.Vm=Vm; } public double GetVoltage(){ return Vm; } public double ElementProb(int Number){ //MAssert.notFalse( Number >=0 && Number < NumElements); return ProbCross[Number]; } public void addElement(double PCross){ //MAssert.notFalse( PCross >= 0.0 && PCross <=1.0 ); ProbCross[NumElements]=PCross; NumElements++; } public boolean Permeate(int Number, int Charge, boolean FromInside){ //MAssert.notFalse( Number >= 0 && Number < NumElements); if (Vm==0.0 || Charge==0) return ( Math.random() <= ProbCross[Number] ); double K,eK,Prob; K=Charge*Vm/25; eK=Math.exp(K); if (FromInside){ Prob=ProbCross[Number]*K*eK/(eK-1.0); }else{ Prob=ProbCross[Number]*K/(eK-1.0); } if (Prob>1.0) Prob=1.0; return ( Math.random() <= Prob ); } }