|
|
|
@ -255,7 +255,10 @@ std::shared_ptr<SatelliteOribtNode[]> RFPCProcessCls::getSatelliteOribtNodes(dou
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void RFPCProcessMain(long num_thread, QString TansformPatternFilePath, QString ReceivePatternFilePath, QString simulationtaskName, QString OutEchoPath, QString GPSXmlPath, QString TaskXmlPath,QString demTiffPath, QString sloperPath, QString LandCoverPath)
|
|
|
|
|
void RFPCProcessMain(long num_thread,
|
|
|
|
|
QString TansformPatternFilePath, QString ReceivePatternFilePath,
|
|
|
|
|
QString simulationtaskName, QString OutEchoPath,
|
|
|
|
|
QString GPSXmlPath, QString TaskXmlPath,QString demTiffPath, QString sloperPath, QString LandCoverPath)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
std::shared_ptr < AbstractSARSatelliteModel> task = ReadSimulationSettingsXML(TaskXmlPath);
|
|
|
|
@ -371,12 +374,63 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
long PlusePoint = this->EchoSimulationData->getPlusePoints();
|
|
|
|
|
POLARTYPEENUM polartype = this->TaskSetting->getPolarType();
|
|
|
|
|
gdalImage echoMaskImg(this->OutEchoMaskPath);
|
|
|
|
|
|
|
|
|
|
long echoblockline = Memory1GB / 8 / 2 / PlusePoint * 2;
|
|
|
|
|
|
|
|
|
|
#ifndef __CUDANVCC___
|
|
|
|
|
QMessageBox::information(this, u8"程序提示", u8"请确定安装了CUDA库");
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double* antpx,*antpy,*antpz,
|
|
|
|
|
*antvx,*antvy,*antvz,
|
|
|
|
|
*antdirectx,*antdirecty,*antdirectz
|
|
|
|
|
,*antXaxisX,*antXaxisY,*antXaxisZ,
|
|
|
|
|
*antYaxisX,*antYaxisY,*antYaxisZ,
|
|
|
|
|
*antZaxisX,*antZaxisY,*antZaxisZ;
|
|
|
|
|
{
|
|
|
|
|
antpx = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antpy = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antpz = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antvx = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antvy = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antvz = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antdirectx = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antdirecty = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antdirectz = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antXaxisX = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antXaxisY = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antXaxisZ = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antYaxisX = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antYaxisY = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antYaxisZ = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antZaxisX = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antZaxisY = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
antZaxisZ = (double*)mallocCUDAHost(sizeof(double) * pluseCount);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (long tempprfid = 0; tempprfid < pluseCount; tempprfid++) {
|
|
|
|
|
long prfid = tempprfid;
|
|
|
|
|
antpx[tempprfid] = sateOirbtNodes[prfid].Px;
|
|
|
|
|
antpy[tempprfid] = sateOirbtNodes[prfid].Py;
|
|
|
|
|
antpz[tempprfid] = sateOirbtNodes[prfid].Pz;
|
|
|
|
|
antvx[tempprfid] = sateOirbtNodes[prfid].Vx;
|
|
|
|
|
antvy[tempprfid] = sateOirbtNodes[prfid].Vy;
|
|
|
|
|
antvz[tempprfid] = sateOirbtNodes[prfid].Vz; //6
|
|
|
|
|
antdirectx[tempprfid] = sateOirbtNodes[prfid].AntDirecX;
|
|
|
|
|
antdirecty[tempprfid] = sateOirbtNodes[prfid].AntDirecY;
|
|
|
|
|
antdirectz[tempprfid] = sateOirbtNodes[prfid].AntDirecZ; // 9 天线指向
|
|
|
|
|
antXaxisX[tempprfid] = sateOirbtNodes[prfid].AntXaxisX;
|
|
|
|
|
antXaxisY[tempprfid] = sateOirbtNodes[prfid].AntXaxisY;
|
|
|
|
|
antXaxisZ[tempprfid] = sateOirbtNodes[prfid].AntXaxisZ;//12 天线坐标系
|
|
|
|
|
antYaxisX[tempprfid] = sateOirbtNodes[prfid].AntYaxisX;
|
|
|
|
|
antYaxisY[tempprfid] = sateOirbtNodes[prfid].AntYaxisY;
|
|
|
|
|
antYaxisZ[tempprfid] = sateOirbtNodes[prfid].AntYaxisZ;//15
|
|
|
|
|
antZaxisX[tempprfid] = sateOirbtNodes[prfid].AntZaxisX;
|
|
|
|
|
antZaxisY[tempprfid] = sateOirbtNodes[prfid].AntZaxisY;
|
|
|
|
|
antZaxisZ[tempprfid] = sateOirbtNodes[prfid].AntZaxisZ;//18
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// RFPC CUDA版本
|
|
|
|
|
if (pluseCount * 4 * 18 > Memory1MB * 100) {
|
|
|
|
|
long max = Memory1MB * 100 / 4 / 20 / PluseCount;
|
|
|
|
@ -389,7 +443,6 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
// 参数与分块计算
|
|
|
|
|
long demRow = demxyz.height;
|
|
|
|
|
long demCol = demxyz.width;
|
|
|
|
|
|
|
|
|
|
long blokline = 100;
|
|
|
|
|
|
|
|
|
|
// 每块 250MB*16 = 4GB
|
|
|
|
@ -441,9 +494,11 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
TantPatternDesc.phinum = Tphinum;
|
|
|
|
|
TantPatternDesc.thetanum = Tthetanum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PatternImageDesc RantPatternDesc = {};
|
|
|
|
|
double* h_RantPattern = nullptr;
|
|
|
|
|
double* d_RantPattern = nullptr;
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
// 处理接收天线方向图
|
|
|
|
|
double Rminphi = ReceivePattern->getMinPhi();
|
|
|
|
@ -488,30 +543,31 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
QMap<long, long> clamap;
|
|
|
|
|
long clamapid = 0;
|
|
|
|
|
long startline = 0;
|
|
|
|
|
|
|
|
|
|
for (startline = 0; startline < demRow; startline = startline + blokline) {
|
|
|
|
|
Eigen::MatrixXd clsland = demlandcls.getData(startline, 0, blokline, demlandcls.width, 1);
|
|
|
|
|
long clsrows = clsland.rows();
|
|
|
|
|
long clscols = clsland.cols();
|
|
|
|
|
long clsid = 0;
|
|
|
|
|
for (long ii = 0; ii < clsrows; ii++) {
|
|
|
|
|
for (long jj = 0; jj < clscols; jj++) {
|
|
|
|
|
clsid = clsland(ii, jj);
|
|
|
|
|
if (clamap.contains(clsid)) {}
|
|
|
|
|
else {
|
|
|
|
|
clamap.insert(clsid, clamapid);
|
|
|
|
|
clamapid = clamapid + 1;
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
for (startline = 0; startline < demRow; startline = startline + blokline) {
|
|
|
|
|
Eigen::MatrixXd clsland = demlandcls.getData(startline, 0, blokline, demlandcls.width, 1);
|
|
|
|
|
long clsrows = clsland.rows();
|
|
|
|
|
long clscols = clsland.cols();
|
|
|
|
|
long clsid = 0;
|
|
|
|
|
for (long ii = 0; ii < clsrows; ii++) {
|
|
|
|
|
for (long jj = 0; jj < clscols; jj++) {
|
|
|
|
|
clsid = clsland(ii, jj);
|
|
|
|
|
if (clamap.contains(clsid)) {}
|
|
|
|
|
else {
|
|
|
|
|
clamap.insert(clsid, clamapid);
|
|
|
|
|
clamapid = clamapid + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::cout << "class id recoding" << std::endl;
|
|
|
|
|
for (long id : clamap.keys()) {
|
|
|
|
|
std::cout << id << " -> " << clamap[id] << std::endl;
|
|
|
|
|
std::cout << "class id recoding" << std::endl;
|
|
|
|
|
for (long id : clamap.keys()) {
|
|
|
|
|
std::cout << id << " -> " << clamap[id] << std::endl;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CUDASigmaParam* h_clsSigmaParam = (CUDASigmaParam*)mallocCUDAHost(sizeof(CUDASigmaParam) * clamapid);
|
|
|
|
|
CUDASigmaParam* d_clsSigmaParam = (CUDASigmaParam*)mallocCUDADevice(sizeof(CUDASigmaParam) * clamapid);
|
|
|
|
|
|
|
|
|
@ -543,7 +599,6 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
|
|
|
|
|
HostToDevice(h_clsSigmaParam, d_clsSigmaParam, sizeof(CUDASigmaParam) * clamapid);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long blockwidth = demxyz.width;
|
|
|
|
|
#ifdef __PRFDEBUG__
|
|
|
|
|
blokline = 1;
|
|
|
|
@ -579,14 +634,8 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
float* d_R = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
|
|
|
|
float* h_amp = (float*)mallocCUDAHost(sizeof(float) * blokline * tempDemCols);
|
|
|
|
|
float* d_amp = (float*)mallocCUDADevice(sizeof(float) * blokline * tempDemCols);
|
|
|
|
|
//double* h_phi = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
|
|
|
|
//double* d_phi = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
|
|
|
|
//double* h_real = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
|
|
|
|
//double* d_real = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
|
|
|
|
//double* h_imag = (double*)mallocCUDAHost(sizeof(double) * blokline * tempDemCols);
|
|
|
|
|
//double* d_imag = (double*)mallocCUDADevice(sizeof(double) * blokline * tempDemCols);
|
|
|
|
|
|
|
|
|
|
long echoblockline = Memory1GB / 8 / 2 / PlusePoint * 2;
|
|
|
|
|
|
|
|
|
|
double* h_PRFEcho_real = (double*)mallocCUDAHost(sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
|
double* h_PRFEcho_imag = (double*)mallocCUDAHost(sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
|
double* d_PRFEcho_real = (double*)mallocCUDADevice(sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
@ -671,13 +720,6 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
d_R = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
|
|
|
|
h_amp = (float*)mallocCUDAHost(sizeof(float) * newblokline * tempDemCols);
|
|
|
|
|
d_amp = (float*)mallocCUDADevice(sizeof(float) * newblokline * tempDemCols);
|
|
|
|
|
//h_phi = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
|
|
|
|
//d_phi = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
|
|
|
|
//h_real = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
|
|
|
|
//d_real = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
|
|
|
|
//h_imag = (double*)mallocCUDAHost(sizeof(double) * newblokline * tempDemCols);
|
|
|
|
|
//d_imag = (double*)mallocCUDADevice(sizeof(double) * newblokline * tempDemCols);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//# pragma omp parallel for
|
|
|
|
@ -737,54 +779,13 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
HostToDevice(h_PRFEcho_real, d_PRFEcho_real, sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
|
HostToDevice(h_PRFEcho_imag, d_PRFEcho_imag, sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
|
|
|
|
|
|
double* antpx = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antpy = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antpz = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antvx = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antvy = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antvz = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antdirectx = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antdirecty = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antdirectz = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antXaxisX = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antXaxisY = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antXaxisZ = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antYaxisX = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antYaxisY = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antYaxisZ = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antZaxisX = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antZaxisY = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
double* antZaxisZ = (double*)mallocCUDAHost(sizeof(double) * templine);
|
|
|
|
|
|
|
|
|
|
for (long tempprfid = 0; tempprfid < templine; tempprfid++) {
|
|
|
|
|
long prfid = tempprfid + startprfid;
|
|
|
|
|
antpx[tempprfid] = sateOirbtNodes[prfid].Px;
|
|
|
|
|
antpy[tempprfid] = sateOirbtNodes[prfid].Py;
|
|
|
|
|
antpz[tempprfid] = sateOirbtNodes[prfid].Pz;
|
|
|
|
|
antvx[tempprfid] = sateOirbtNodes[prfid].Vx;
|
|
|
|
|
antvy[tempprfid] = sateOirbtNodes[prfid].Vy;
|
|
|
|
|
antvz[tempprfid] = sateOirbtNodes[prfid].Vz; //6
|
|
|
|
|
antdirectx[tempprfid] = sateOirbtNodes[prfid].AntDirecX;
|
|
|
|
|
antdirecty[tempprfid] = sateOirbtNodes[prfid].AntDirecY;
|
|
|
|
|
antdirectz[tempprfid] = sateOirbtNodes[prfid].AntDirecZ; // 9 天线指向
|
|
|
|
|
antXaxisX[tempprfid] = sateOirbtNodes[prfid].AntXaxisX;
|
|
|
|
|
antXaxisY[tempprfid] = sateOirbtNodes[prfid].AntXaxisY;
|
|
|
|
|
antXaxisZ[tempprfid] = sateOirbtNodes[prfid].AntXaxisZ;//12 天线坐标系
|
|
|
|
|
antYaxisX[tempprfid] = sateOirbtNodes[prfid].AntYaxisX;
|
|
|
|
|
antYaxisY[tempprfid] = sateOirbtNodes[prfid].AntYaxisY;
|
|
|
|
|
antYaxisZ[tempprfid] = sateOirbtNodes[prfid].AntYaxisZ;//15
|
|
|
|
|
antZaxisX[tempprfid] = sateOirbtNodes[prfid].AntZaxisX;
|
|
|
|
|
antZaxisY[tempprfid] = sateOirbtNodes[prfid].AntZaxisY;
|
|
|
|
|
antZaxisZ[tempprfid] = sateOirbtNodes[prfid].AntZaxisZ;//18
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CUDA_RFPC_MainBlock(
|
|
|
|
|
antpx, antpy, antpz, // 天线的坐标
|
|
|
|
|
antXaxisX, antXaxisY, antXaxisZ, // 天线坐标系的X轴
|
|
|
|
|
antYaxisX, antYaxisY, antYaxisZ,// 天线坐标系的Y轴
|
|
|
|
|
antZaxisX, antZaxisY, antZaxisZ,// 天线坐标系的Z轴
|
|
|
|
|
antdirectx, antdirecty, antdirectz,// 天线的指向
|
|
|
|
|
templine, // 脉冲数
|
|
|
|
|
startprfid,templine, // 脉冲数
|
|
|
|
|
//h_freqlist, h_factorj, PlusePoint,// 频率数
|
|
|
|
|
f0, dfreq, PlusePoint,// 频率数
|
|
|
|
|
d_dem_x, d_dem_y, d_dem_z, pixelcount, // 地面坐标
|
|
|
|
@ -792,8 +793,8 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
d_demsloper_x, d_demsloper_y, d_demsloper_z, // 地表坡度矢量
|
|
|
|
|
Pt,// 增益后发射能量
|
|
|
|
|
refphaseRange,
|
|
|
|
|
d_TantPattern, TstartTheta, TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum, // 发射天线方向图
|
|
|
|
|
d_RantPattern, RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum, Rphinum,//接收天线方向图
|
|
|
|
|
d_TantPattern, TantPatternDesc,// TstartTheta, TstartPhi, Tdtheta, Tdphi, Tthetanum, Tphinum, // 发射天线方向图
|
|
|
|
|
d_RantPattern, RantPatternDesc,// RstartTheta, RstartPhi, Rdtheta, Rdphi, Rthetanum, Rphinum,//接收天线方向图
|
|
|
|
|
NearRange, FarRange,
|
|
|
|
|
d_clsSigmaParam, clamapid,
|
|
|
|
|
d_PRFEcho_real, d_PRFEcho_imag,// 输出回波
|
|
|
|
@ -801,26 +802,6 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
//, d_phi, d_real, d_imag// 临时变量
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FreeCUDAHost(antpx); // 回收局部数据
|
|
|
|
|
FreeCUDAHost(antpy);
|
|
|
|
|
FreeCUDAHost(antpz);
|
|
|
|
|
FreeCUDAHost(antvx);
|
|
|
|
|
FreeCUDAHost(antvy);
|
|
|
|
|
FreeCUDAHost(antvz);
|
|
|
|
|
FreeCUDAHost(antdirectx);
|
|
|
|
|
FreeCUDAHost(antdirecty);
|
|
|
|
|
FreeCUDAHost(antdirectz);
|
|
|
|
|
FreeCUDAHost(antXaxisX);
|
|
|
|
|
FreeCUDAHost(antXaxisY);
|
|
|
|
|
FreeCUDAHost(antXaxisZ);
|
|
|
|
|
FreeCUDAHost(antYaxisX);
|
|
|
|
|
FreeCUDAHost(antYaxisY);
|
|
|
|
|
FreeCUDAHost(antYaxisZ);
|
|
|
|
|
FreeCUDAHost(antZaxisX);
|
|
|
|
|
FreeCUDAHost(antZaxisY);
|
|
|
|
|
FreeCUDAHost(antZaxisZ);
|
|
|
|
|
|
|
|
|
|
DeviceToHost(h_PRFEcho_real, d_PRFEcho_real, sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
|
DeviceToHost(h_PRFEcho_imag, d_PRFEcho_imag, sizeof(double) * echoblockline * PlusePoint);
|
|
|
|
|
for (long tempprfid = 0; tempprfid < templine; tempprfid++) {
|
|
|
|
@ -840,6 +821,12 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
#endif // __PRFDEBUG__
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::cout << std::endl;
|
|
|
|
|
|
|
|
|
|
// 地面数据释放
|
|
|
|
@ -863,6 +850,28 @@ ErrorCode RFPCProcessCls::RFPCMainProcess_GPU()
|
|
|
|
|
//FreeCUDAHost(h_real); FreeCUDADevice(d_real);
|
|
|
|
|
//FreeCUDAHost(h_imag); FreeCUDADevice(d_imag);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FreeCUDAHost(antpx); // 回收局部数据
|
|
|
|
|
FreeCUDAHost(antpy);
|
|
|
|
|
FreeCUDAHost(antpz);
|
|
|
|
|
FreeCUDAHost(antvx);
|
|
|
|
|
FreeCUDAHost(antvy);
|
|
|
|
|
FreeCUDAHost(antvz);
|
|
|
|
|
FreeCUDAHost(antdirectx);
|
|
|
|
|
FreeCUDAHost(antdirecty);
|
|
|
|
|
FreeCUDAHost(antdirectz);
|
|
|
|
|
FreeCUDAHost(antXaxisX);
|
|
|
|
|
FreeCUDAHost(antXaxisY);
|
|
|
|
|
FreeCUDAHost(antXaxisZ);
|
|
|
|
|
FreeCUDAHost(antYaxisX);
|
|
|
|
|
FreeCUDAHost(antYaxisY);
|
|
|
|
|
FreeCUDAHost(antYaxisZ);
|
|
|
|
|
FreeCUDAHost(antZaxisX);
|
|
|
|
|
FreeCUDAHost(antZaxisY);
|
|
|
|
|
FreeCUDAHost(antZaxisZ);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
this->EchoSimulationData->saveToXml();
|
|
|
|
|