/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.finitedifference; /** * boundary condition, i.e. d^2u/dx^2(A,t) = f(t), where A is the boundary level, and f(t) is some specified function of time */ public class FixedSecondDerivativeBoundaryCondition implements BoundaryCondition { private final double _secondDev; private final double _level; private final boolean _isLower; public FixedSecondDerivativeBoundaryCondition(final double secondDev, final double level, final boolean isLower) { _secondDev = secondDev; _level = level; _isLower = isLower; } @Override public double getConstant(final ConvectionDiffusionPDE1DStandardCoefficients data, final double t) { return _secondDev; } @Override public double[] getLeftMatrixCondition(final ConvectionDiffusionPDE1DStandardCoefficients data, PDEGrid1D grid, final double t) { double[] temp; if (_isLower) { temp = grid.getSecondDerivativeCoefficients(0); } else { temp = grid.getSecondDerivativeCoefficients(grid.getNumSpaceNodes() - 1); } return temp; } @Override public double[] getRightMatrixCondition(final ConvectionDiffusionPDE1DStandardCoefficients data, PDEGrid1D grid, final double t) { return new double[0]; } @Override public double getLevel() { return _level; } }