void rt_ForwardSubstitutionCR_Dbl(creal_T       *pL,
                                  const real_T  *pb,
                                  creal_T       *x,
                                  int_T          N,
                                  int_T          P,
                                  const int32_T *piv,
                                  boolean_T      unit_lower)
{
  int_T i, k;
  for(k=0; k<P; k++) {
    creal_T *pLcol = pL;
    for(i=0; i<N; i++) {
      creal_T *xj = x + k*N;
      creal_T s = {0.0, 0.0};
      creal_T *pLrow = pLcol++;
      real_T cb;

      {
        int_T j = i;
        while(j-- > 0) {
          /* Compute: s += L * xj, in complex */
          creal_T cL = *pLrow;
          creal_T c;
          rt_ComplexTimes_Dbl(&c, cL, *xj);

          s.re += c.re;
          s.im += c.im;
          xj++;
          pLrow += N;
        }
      }

      cb = pb[piv[i]];
      if (unit_lower) {
        xj->re = cb - s.re;
        xj->im = -s.im;
      } else {
        /* Complex divide: *xj = cdiff / *cL */
        creal_T cL = *pLrow;
        creal_T cdiff;
        cdiff.re = cb - s.re;
        cdiff.im = -s.im;

        rt_ComplexRDivide_Dbl(xj, cdiff, cL);
      }
    }
    pb += N;
  }
}
void rt_BackwardSubstitutionRC_Dbl(real_T          *pU,
                                   const creal_T   *pb,
                                   creal_T         *x,
                                   int_T            N,
                                   int_T            P,
                                   boolean_T        unit_upper)
{
  int_T i,k;
  for(k=P; k>0; k--) {
    real_T *pUcol = pU;
    for(i=0; i<N; i++) {
      creal_T *xj = x + k*N-1;
      creal_T s = {0.0, 0.0};
      real_T *pUrow = pUcol--;          /* access current row of U */
      creal_T cb;

      {
        int_T j = i;
        while(j-- > 0) {
          creal_T c;
          creal_T cUp;
          cUp.re = *pUrow;
          cUp.im = 0.0;
          rt_ComplexTimes_Dbl(&c, cUp, *xj);

          s.re += c.re;
          s.im += c.im;
          xj--;
          pUrow -= N;
        }
      }

      cb = (*pb--);
      if (unit_upper) {
        xj->re = cb.re - s.re;
        xj->im = cb.im - s.im;
      } else {
        creal_T cU;
        creal_T cdiff;
        cU.re = *pUrow;
        cU.im = 0.0;
        cdiff.re = cb.re - s.re;
        cdiff.im = cb.im - s.im;

        rt_ComplexRDivide_Dbl(xj, cdiff, cU);
      }
    }
  }
}
im ) / d ; } } } void rt_ComplexReciprocal_Dbl ( creal_T * Out , const
creal_T In1 ) { creal_T y ; y . re = 1.0 ; y . im = 0.0 ;
rt_ComplexRDivide_Dbl ( Out , y , In1 ) ; }