anchor.diff:      do i=1,hecMAT%NP*hecMESH%n_dof
         hecMAT%X(i) = hecMAT%B(i)
       end do
  -    call NUSOL0(hecMAT%X,FCT%NEQns,FCT%NDEg,FCT%NSTop,FCT%IPErm,FCT%XLNzr,FCT%COLno,FCT%DIAg,FCT%ZLN,FCT%DSLn,FCT%STAge,ir)
  +    call NUSOL0(hecMAT%X,FCT,ir)
       call PTIME(t5)
       !* Errors 4
       if ( ir/=0 ) then
  
positive.code:   !           r_h_s    on entry     right hand side vector
    !                    on exit      solution vector
    !           iv       communication array
    !======================================================================!
    subroutine NUSOL0(R_h_s,NEQns,NDEg,NSTop,IPErm,XLNzr,COLno,DIAg,ZLN,DSLn,STAge,Ir)
      implicit none
      !------
      integer(kind=kint), intent(in):: NEQns
      integer(kind=kint), intent(in):: NDEg
      integer(kind=kint), intent(in):: NSTop
      integer(kind=kint), intent(in):: IPErm(:)
      integer(kind=kint), intent(in):: XLNzr(:)
      integer(kind=kint), intent(in):: COLno(:)
      real(kind=kreal), intent(in):: DIAg(:)
      real(kind=kreal), intent(in):: ZLN(:)
      real(kind=kreal), intent(in):: DSLn(:)
      integer(kind=kint), intent(inout):: STAge
      integer(kind=kint), intent(out):: Ir
      real(kind=kreal), intent(inout):: R_h_s(:)
      !------
      integer(kind=kint):: ndegl
      integer(kind=kint):: ierror
      real(kind=kreal), pointer :: wk(:)
  
      if ( STAge/=30 .and. STAge/=40 ) then
        Ir = 50
        return
      else
        Ir = 0
      endif
  
      allocate (wk(NDEg*NEQns),stat=IERror)
      if ( IERror/=0 ) then
        write (*,*) "##Error: not enough memory"
        call HECMW_ABORT(HECMW_COMM_GET_COMM())
      endif
      !rmiv
      ndegl = NDEg*(NDEg+1)
      ndegl = ndegl/2
  
      select case( NDEg )
        case (1)
          call NUSOL1(XLNzr,COLno,DSLn,ZLN,DIAg,IPErm,R_h_s,wk,NEQns,NSTop)
        case (2)
          call NUSOL2(XLNzr,COLno,DSLn,ZLN,DIAg,IPErm,R_h_s,wk,NEQns,NSTop)
        case (3)
          call NUSOL3(XLNzr,COLno,DSLn,ZLN,DIAg,IPErm,R_h_s,wk,NEQns,NSTop)
        case (6)
          call NUSOLX(XLNzr,COLno,DSLn,ZLN,DIAg,IPErm,R_h_s,wk,NEQns,NSTop,NDEg,ndegl)
        case default
          call NUSOLX(XLNzr,COLno,DSLn,ZLN,DIAg,IPErm,R_h_s,wk,NEQns,NSTop,NDEg,ndegl)
      endselect
  
      STAge = 40
      deallocate (wk)
    end subroutine NUSOL0
  
  
negative.code:     i98 = hecMAT%IARRAY(98)
      if ( hecMAT%IARRAY(98)==1 ) then
        !* Interface to symbolic factorization
        call SETIJ(hecMESH,hecMAT,FCT)
  
        !* Symbolic factorization
        call MATINI(FCT,ir)
        hecMAT%IARRAY(98) = 0
  
        if ( timelog > 0 .or. iterlog > 0 ) write (*,*) "[DIRECT]: symbolic fct done"
  