masolve.cpp

来自「电力系统稀疏矩阵计算类,用法范例代码,包括三个目录,MALIB(类),MATES」· C++ 代码 · 共 78 行

CPP
78
字号
//===========================================================================
//
//                            EMS高级应用软件
//
//===========================================================================
//  rev    0.0   8-9-2004      initial release   Qwbin
//  版本   0.0   8-9-2004      第一次发布        齐文斌
//---------------------------------------------------------------------------

//************************************************************************
// 
// masolve - solve Ax=y asymmetric matrix equation for x
// 线性方程求解
// 目前,只有OPF调用
//************************************************************************

#include <malib.h>

//***********************************************************************
bool EmsMatrix::masolve(void)
{
   bool rc;               
   int divg_state = 0;          
   int numitm     = 0;          
   int maorder_itm    = 0;          
  
   maorder_vt[0] = malloc(mastate_tb->act_count * sizeof(struct maorderst) );	
   maorder_vt.size( ) = mastate_tb->act_count;	
   maparm.nmastatept = &mastate_tb->act_count;
   divg_state_pt = &divg_state;
   //nmagmtrxpt = &magmtrx_vt.size( );
   //nmaamtrxpt = &maamtrx_vt.size( );
   //maparm.mastatept = (struct mastatest *)mastate_tb->pt;
   //maparm.maorderpt = (struct maorderst *)maorder_vt[0];
   //maparm.maamtrxpt = (struct maamtrxst *)maamtrx_vt[0];

   if ( rc = maoptim() != SUCCESS )
   {
      printf("masolve: optimal ordering fails!!\n");
      return(rc);
   }
 
   macmtrx_vt[0] = malloc(maamtrx_vt.size( ) * sizeof(struct maamtrxst) );	
   macmtrx_vt.size( ) = maamtrx_vt.size( );
   maparm.cmtrxpt = (struct maamtrxst *)macmtrx_vt[0];
	
   if ( rc = mareordr(maparm) != SUCCESS )
   {
      printf("masolve: renumbering fails!!\n");
      return(rc);
   }

   magmtrx_vt[0] = malloc(magmtrx_vt.size( ) * sizeof(struct magmtrxst));
   memset(magmtrx_vt[0],0,magmtrx_vt.size( ) * sizeof(struct magmtrxst));
   maparm.magmtrxpt =(struct magmtrxst *) magmtrx_vt[0];

   if ( rc = matriang() != SUCCESS )
   {
      printf("masolve: triangularization fails!\n");
      return(rc);
   }

//   if ( rc = mafbsub(maparm) != SUCCESS )

   //目前尚未用到函数masolve(),此处只是为了解决函数mafbsub()参数个数的问题  mdn 04-11-10
   if ( rc = mafbsub() != SUCCESS )
   {
      printf("masolve: forward/backward substitution fails!!\n");
      return(rc);
   }

   free(maorder_vt[0]);
   free(magmtrx_vt[0]);
   free(macmtrx_vt[0]);

   return(SUCCESS);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?