⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clcgsolver.h

📁 在GPU上实现数值模拟技术(线性方程组)的通用架构
💻 H
字号:
/************************************************************
 *															*
 * decr     : conjugate gradient solver class				*
 * version  : 1.1											*
 * author   : Jens Kr黦er									*
 * date     : 16.09.2003									*
 * modified	: 30.09.2003									*
 * e-mail   : jens.krueger@in.tum.de						*
 *															*
 ************************************************************/
#pragma once

#define CL_PACKED   0
#define CL_UNPACKED 1
#define CL_VERTEX   2

#include "clUnpackedVector.h"
#include "clUnpackedMatrix.h"
#include "clPackedVector.h"
#include "clPackedMatrix.h"

class clCGSolver : public clClass {
public:
	clCGSolver(void) {m_pd3dDevice = NULL; m_iSizeX = NULL; m_iSizeY = NULL;}
	clCGSolver(LPDIRECT3DDEVICE9 pd3dDevice, int iSizeX, int iSizeY, int iRepresentation);
	clCGSolver(clAbstractMatrix *clM, clFragmentVector *clvX, clFragmentVector *clvB, int iRepresentation);
	clCGSolver(clAbstractMatrix *clM, clFragmentVector *clvX, clFragmentVector *clvB, clFragmentVector *clvP, clFragmentVector *clvQ, clFragmentVector *clvR);
	~clCGSolver(void);

	clFragmentVector* getResult() {	return m_clvX;}
	void setResult(clFragmentVector* clvResult);

	clFragmentVector* getRHS() {return m_clvB;}
	void setRHS(clFragmentVector* clvRHS);

	void getTemp(clFragmentVector** clvP, clFragmentVector** clvQ, clFragmentVector** clvR);
	void setTemp(clFragmentVector* clvP, clFragmentVector* clvQ, clFragmentVector* clvR);

	clAbstractMatrix* getMatrix() {return m_clMatrix;}
	void setMatrix(clAbstractMatrix* clM);

	int solve(float rhoTresh=0.001, int iter=1);
	float solveInit();
	float solveIteration(float rho);

	int solveNT(int iter=1);
	void solveInitNT();
	void solveIterationNT();

	static void preOrder(int iSizeX, int iSizeY, int iRepresentation, int iCount, bool bSupplyAllVectors=false) {

		if (!bSupplyAllVectors) {
			if (iRepresentation == CL_PACKED) clPackedVector::preOrder(iSizeX, iSizeY, iCount*3); else
			if (iRepresentation == CL_UNPACKED) clUnpackedVector::preOrder(iSizeX, iSizeY, iCount*3);
		}

		clFloat::preOrder(5);
	}
	
protected:	
	clAbstractMatrix *m_clMatrix;
	clFragmentVector *m_clvX, *m_clvB, *m_clvP, *m_clvQ, *m_clvR;
	clFloat *clfRho, *clfAlpha, *clfBeta, *clfTemp, *clfNewRho;
	int m_iSizeX,m_iSizeY;

	void initClFloats();
};

⌨️ 快捷键说明

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