code: @Override
  	public double getValue(AnalyticModelInterface model, double maturity, double strike, QuotingConvention quotingConvention) {
  		if(maturity == 0) {
  			return 0;
  		}
  
  		/*
  		 * Integral of the square of the instantaneous volatility function
  		 * ((a + b * T) * Math.exp(- c * T) + d);
  		 */
  		double integratedVariance = 0.0;
  		for(int timeIndex = 0; timeIndex < timeDiscretization.getNumberOfTimeSteps(); timeIndex++) {
  			double time = timeDiscretization.getTime(timeIndex);
  			if(time > maturity) {
  				break;
  			}
  
  			double timeStep = timeDiscretization.getTimeStep(timeIndex);
  			double instantaneousVolatility = (a + b * (maturity-time)) * Math.exp(-c * (maturity-time)) + d;
  
  			integratedVariance += instantaneousVolatility*instantaneousVolatility * Math.min(maturity-time, timeStep);
  		}
  
  		double value = Math.sqrt(integratedVariance/maturity);
  		return convertFromTo(model, maturity, strike, value, this.quotingConvention, quotingConvention);
  	}
docs: /* (non-Javadoc)
  @see net.finmath.marketdata.model.volatilities.VolatilitySurfaceInterface#getValue(net.finmath.marketdata.model.AnalyticModelInterface, double, double, net.finmath.marketdata.model.volatilities.VolatilitySurfaceInterface.QuotingConvention)