Files
solver/OndselSolver/DistIeqcJeqc.cpp
2023-11-03 13:57:11 -05:00

178 lines
4.6 KiB
C++

/***************************************************************************
* Copyright (c) 2023 Ondsel, Inc. *
* *
* This file is part of OndselSolver. *
* *
* See LICENSE file for details about copyright. *
***************************************************************************/
#include "DistIeqcJeqc.h"
#include "EndFrameqc.h"
using namespace MbD;
MbD::DistIeqcJeqc::DistIeqcJeqc()
{
}
MbD::DistIeqcJeqc::DistIeqcJeqc(EndFrmsptr frmi, EndFrmsptr frmj) : DistIeqcJec(frmi, frmj)
{
}
void MbD::DistIeqcJeqc::calcPrivate()
{
DistIeqcJec::calcPrivate();
if (rIeJe == 0.0) return;
auto frmJeqc = std::static_pointer_cast<EndFrameqc>(frmJ);
auto& prIeJeOpEJ = frmJeqc->prOeOpE;
auto prIeJeOpEJT = prIeJeOpEJ->transpose();
auto& pprIeJeOpEJpEJ = frmJeqc->pprOeOpEpE;
auto uIeJeOT = uIeJeO->transpose();
prIeJepXJ = uIeJeOT;
prIeJepEJ = uIeJeOT->timesFullMatrix(prIeJeOpEJ);
for (int i = 0; i < 3; i++)
{
auto& pprIeJepXIipXJ = pprIeJepXIpXJ->at(i);
auto& prIeJepXIi = prIeJepXI->at(i);
for (int j = 0; j < 3; j++)
{
auto element = (i == j) ? -1.0 : 0.0;
element -= prIeJepXIi * prIeJepXJ->at(j);
pprIeJepXIipXJ->atiput(j, element / rIeJe);
}
}
for (int i = 0; i < 4; i++)
{
auto& pprIeJepEIipXJ = pprIeJepEIpXJ->at(i);
auto& prIeJepEIi = prIeJepEI->at(i);
auto& mprIeJeOpEIiT = mprIeJeOpEIT->at(i);
for (int j = 0; j < 3; j++)
{
auto element = 0.0 - mprIeJeOpEIiT->at(j) - prIeJepEIi * prIeJepXJ->at(j);
pprIeJepEIipXJ->atiput(j, element / rIeJe);
}
}
for (int i = 0; i < 3; i++)
{
auto& pprIeJepXJipXJ = pprIeJepXJpXJ->at(i);
auto& prIeJepXJi = prIeJepXJ->at(i);
for (int j = 0; j < 3; j++)
{
auto element = (i == j) ? 1.0 : 0.0;
element -= prIeJepXJi * prIeJepXJ->at(j);
pprIeJepXJipXJ->atiput(j, element / rIeJe);
}
}
for (int i = 0; i < 3; i++)
{
auto& pprIeJepXIipEJ = pprIeJepXIpEJ->at(i);
auto& prIeJepXIi = prIeJepXI->at(i);
auto& prIeJeOipEJ = prIeJeOpEJ->at(i);
for (int j = 0; j < 4; j++)
{
auto element = 0.0 - prIeJeOipEJ->at(j) - prIeJepXIi * prIeJepEJ->at(j);
pprIeJepXIipEJ->atiput(j, element / rIeJe);
}
}
for (int i = 0; i < 4; i++)
{
auto& pprIeJepEIipEJ = pprIeJepEIpEJ->at(i);
auto& prIeJepEIi = prIeJepEI->at(i);
auto& mprIeJeOpEIiT = mprIeJeOpEIT->at(i);
for (int j = 0; j < 4; j++)
{
auto element = 0.0 - mprIeJeOpEIiT->dot(prIeJeOpEJT->at(j)) - prIeJepEIi * prIeJepEJ->at(j);
pprIeJepEIipEJ->atiput(j, element / rIeJe);
}
}
for (int i = 0; i < 3; i++)
{
auto& pprIeJepXJipEJ = pprIeJepXJpEJ->at(i);
auto& prIeJepXJi = prIeJepXJ->at(i);
auto& prIeJeOipEJ = prIeJeOpEJ->at(i);
for (int j = 0; j < 4; j++)
{
auto element = prIeJeOipEJ->at(j) - prIeJepXJi * prIeJepEJ->at(j);
pprIeJepXJipEJ->atiput(j, element / rIeJe);
}
}
for (int i = 0; i < 4; i++)
{
auto& pprIeJepEJipEJ = pprIeJepEJpEJ->at(i);
auto& prIeJepEJi = prIeJepEJ->at(i);
auto& pprIeJeOpEJipEJ = pprIeJeOpEJpEJ->at(i);
auto& prIeJeOpEJiT = prIeJeOpEJT->at(i);
for (int j = 0; j < 4; j++)
{
auto element = prIeJeOpEJiT->dot(prIeJeOpEJT->at(j))
+ pprIeJeOpEJipEJ->at(j)->dot(rIeJeO) - prIeJepEJi * prIeJepEJ->at(j);
pprIeJepEJipEJ->atiput(j, element / rIeJe);
}
}
}
void MbD::DistIeqcJeqc::initialize()
{
DistIeqcJec::initialize();
prIeJepXJ = std::make_shared<FullRow<double>>(3);
prIeJepEJ = std::make_shared<FullRow<double>>(4);
pprIeJepXIpXJ = std::make_shared<FullMatrixDouble>(3, 3);
pprIeJepEIpXJ = std::make_shared<FullMatrixDouble>(4, 3);
pprIeJepXJpXJ = std::make_shared<FullMatrixDouble>(3, 3);
pprIeJepXIpEJ = std::make_shared<FullMatrixDouble>(3, 4);
pprIeJepEIpEJ = std::make_shared<FullMatrixDouble>(4, 4);
pprIeJepXJpEJ = std::make_shared<FullMatrixDouble>(3, 4);
pprIeJepEJpEJ = std::make_shared<FullMatrixDouble>(4, 4);
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepEIpEJ()
{
return pprIeJepEIpEJ;
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepEIpXJ()
{
return pprIeJepEIpXJ;
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepEJpEJ()
{
return pprIeJepEJpEJ;
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepXIpEJ()
{
return pprIeJepXIpEJ;
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepXIpXJ()
{
return pprIeJepXIpXJ;
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepXJpEJ()
{
return pprIeJepXJpEJ;
}
FMatDsptr MbD::DistIeqcJeqc::ppvaluepXJpXJ()
{
return pprIeJepXJpXJ;
}
FRowDsptr MbD::DistIeqcJeqc::pvaluepEJ()
{
return prIeJepEJ;
}
FRowDsptr MbD::DistIeqcJeqc::pvaluepXJ()
{
return prIeJepXJ;
}