/// <summary> /// Initializes m_metric. /// </summary> /// <param name="dim">Dimension of space</param> public void Init(int dim) { // create metric matrix double[] m = new double[dim * dim]; for (int i = 0; i < m_metricValue.Count; i++) { int idx1 = m_metricBasisVectorIdx1[i]; int idx2 = m_metricBasisVectorIdx2[i]; if ((idx1 >= 0) && (idx2 >= 0) && (idx1 < dim) && (idx2 < dim)) { m[idx1 * dim + idx2] = m[idx2 * dim + idx1] = m_metricValue[i]; } } // create RefGA.metric m_metric = new RefGA.Metric(m); // force rounding off when metric is diagonal if (m_metric.IsDiagonal()) m_round = false; // if rounding is enabled, round the eigenvalues of the metric. if (m_round) { m_metric = m_metric.RoundEigenMetric(m_roundingEpsilon); } }
/// <summary> /// Must be called before CompleteFGS(), CheckDepencies() or WriteFunction() is called. /// Subclass can override, but if so, must always call superclass version of Init() /// </summary> /// <param name="S"></param> /// <param name="F"></param> /// <param name="cgd">Where the generate code goes.</param> public virtual void Init(Specification S, G25.fgs F, G25.CG.Shared.CGdata cgd) { m_specification = S; m_fgs = F; m_cgd = cgd; m_gmv = m_specification.m_GMV; m_G25M = m_specification.GetMetric(m_fgs.MetricName); m_M = m_G25M.m_metric; m_sane = true; }