Search in sources :

Example 6 with OutsideVariable

use of cbit.vcell.math.OutsideVariable in project vcell by virtualcell.

the class MathTestingUtilities method substituteWithExactSolution.

/**
 * Insert the method's description here.
 * Creation date: (1/24/2003 10:18:14 AM)
 * @return cbit.vcell.parser.Expression
 * @param origExp cbit.vcell.parser.Expression
 * @param subDomain cbit.vcell.math.SubDomain
 */
private static Expression substituteWithExactSolution(Expression origExp, MembraneSubDomain subDomain, MathDescription exactMathDesc) throws ExpressionException {
    Expression substitutedExp = new Expression(origExp);
    substitutedExp.bindExpression(exactMathDesc);
    substitutedExp = MathUtilities.substituteFunctions(substitutedExp, exactMathDesc);
    substitutedExp.bindExpression(null);
    substitutedExp = substitutedExp.flatten();
    substitutedExp.bindExpression(exactMathDesc);
    String[] symbols = substitutedExp.getSymbols();
    for (int i = 0; symbols != null && i < symbols.length; i++) {
        Variable var = (Variable) substitutedExp.getSymbolBinding(symbols[i]);
        if (var instanceof MemVariable) {
            String exactVarName = var.getName() + "_" + subDomain.getName() + "_exact";
            substitutedExp.substituteInPlace(new Expression(var.getName()), new Expression(exactVarName));
        } else if (var instanceof InsideVariable) {
            String exactVarName = var.getName() + "_" + subDomain.getInsideCompartment().getName() + "_exact";
            substitutedExp.substituteInPlace(new Expression(var.getName()), new Expression(exactVarName));
        } else if (var instanceof OutsideVariable) {
            String exactVarName = var.getName() + "_" + subDomain.getOutsideCompartment().getName() + "_exact";
            substitutedExp.substituteInPlace(new Expression(var.getName()), new Expression(exactVarName));
        } else if (var instanceof VolumeRegionVariable || var instanceof MemVariable || var instanceof MembraneRegionVariable || var instanceof FilamentVariable || var instanceof FilamentRegionVariable) {
            throw new RuntimeException("variable substitution not yet implemented for Variable type " + var.getClass().getName() + "(" + var.getName() + ")");
        }
    }
    substitutedExp.bindExpression(null);
    return substitutedExp;
}
Also used : MembraneRegionVariable(cbit.vcell.math.MembraneRegionVariable) InsideVariable(cbit.vcell.math.InsideVariable) SensVariable(cbit.vcell.solver.ode.SensVariable) FilamentVariable(cbit.vcell.math.FilamentVariable) VolVariable(cbit.vcell.math.VolVariable) VolumeRegionVariable(cbit.vcell.math.VolumeRegionVariable) ReservedVariable(cbit.vcell.math.ReservedVariable) MemVariable(cbit.vcell.math.MemVariable) OutsideVariable(cbit.vcell.math.OutsideVariable) FilamentRegionVariable(cbit.vcell.math.FilamentRegionVariable) Variable(cbit.vcell.math.Variable) MembraneRegionVariable(cbit.vcell.math.MembraneRegionVariable) FilamentRegionVariable(cbit.vcell.math.FilamentRegionVariable) InsideVariable(cbit.vcell.math.InsideVariable) VolumeRegionVariable(cbit.vcell.math.VolumeRegionVariable) MemVariable(cbit.vcell.math.MemVariable) Expression(cbit.vcell.parser.Expression) FilamentVariable(cbit.vcell.math.FilamentVariable) OutsideVariable(cbit.vcell.math.OutsideVariable)

Aggregations

OutsideVariable (cbit.vcell.math.OutsideVariable)6 InsideVariable (cbit.vcell.math.InsideVariable)5 Variable (cbit.vcell.math.Variable)5 MemVariable (cbit.vcell.math.MemVariable)4 ReservedVariable (cbit.vcell.math.ReservedVariable)4 VolVariable (cbit.vcell.math.VolVariable)4 Constant (cbit.vcell.math.Constant)3 FilamentRegionVariable (cbit.vcell.math.FilamentRegionVariable)3 FilamentVariable (cbit.vcell.math.FilamentVariable)3 Function (cbit.vcell.math.Function)3 MembraneRegionVariable (cbit.vcell.math.MembraneRegionVariable)3 VolumeRegionVariable (cbit.vcell.math.VolumeRegionVariable)3 CompartmentSubDomain (cbit.vcell.math.CompartmentSubDomain)2 FilamentSubDomain (cbit.vcell.math.FilamentSubDomain)2 MathException (cbit.vcell.math.MathException)2 MembraneSubDomain (cbit.vcell.math.MembraneSubDomain)2 ParticleVariable (cbit.vcell.math.ParticleVariable)2 PointSubDomain (cbit.vcell.math.PointSubDomain)2 PointVariable (cbit.vcell.math.PointVariable)2 SubDomain (cbit.vcell.math.SubDomain)2