docs: @Override
  	public double getValue(AnalyticModelInterface model, double maturity, double strike, QuotingConvention quotingConvention) {
  		if(maturity <= 0) {
  			return 0;
  		}
  
  		double T = maturity * timeScaling;
  
  		/*
  		 * Integral of the square of the instantaneous volatility function
  		 * ((a + b * T) * Math.exp(- c * T) + d);
  		 */
  		double integratedVariance;
  		if(c != 0) {
  			/*
  			 * http://www.wolframalpha.com/input/?i=integrate+%28%28a+%2B+b+*+t%29+*+exp%28-+c+*+t%29+%2B+d%29%5E2+from+0+to+T
  			 * integral_0^T ((a+b t) exp(-(c t))+d)^2  dt = 1/4 ((e^(-2 c T) (-2 a^2 c^2-2 a b c (2 c T+1)+b^2 (-(2 c T (c T+1)+1))))/c^3+(2 a^2 c^2+2 a b c+b^2)/c^3-(8 d e^(-c T) (a c+b c T+b))/c^2+(8 d (a c+b))/c^2+4 d^2 T)
  			 */
  			integratedVariance = a*a*T*((1-Math.exp(-2*c*T))/(2*c*T))
  					+ a*b*T*T*(((1 - Math.exp(-2*c*T))/(2*c*T) - Math.exp(-2*c*T))/(c*T))
  					+ 2*a*d*T*((1-Math.exp(-c*T))/(c*T))
  					+ b*b*T*T*T*(((((1-Math.exp(-2*c*T))/(2*c*T)-Math.exp(-2*c*T))/(T*c)-Math.exp(-2*c*T)))/(2*c*T))
  					+ 2*b*d*T*T*(((1-Math.exp(-c*T))-T*c*Math.exp(-c*T))/(c*c*T*T))
  					+ d*d*T;
  		}
  		else {
  			/*
  			 * http://www.wolframalpha.com/input/?i=expand+%28integrate+%28%28a+%2B+b+*+t%29+%2B+d%29%5E2+from+0+to+T%29
  			 */
  			integratedVariance = a*a*T + a*b*T*T + 2*a*d*T + (b*b*T*T*T)/3.0 + b*d*T*T + d*d*T;
  		}
  
  		double value = Math.sqrt(integratedVariance/maturity);
  		return convertFromTo(model, maturity, strike, value, this.quotingConvention, quotingConvention);
  	}