rsvs3D
0.0.0
Codes for the c++ implementation of the 3D RSVS
|
Class to handle the RSVS calculation. More...
#include <RSVScalc.hpp>
Public Member Functions | |
bool | UseFullMath () const |
Decides wether full or sparse math should be used. More... | |
void | BuildMathArrays (int nDv, int nConstr) |
Builds mathematics arrays. More... | |
void | BuildConstrMap (const triangulation &triangleRSVS) |
Builds the constraint mapping. More... | |
void | BuildConstrMap (const mesh &meshin) |
Builds the constraint mapping. More... | |
int | BuildDVMap (const std::vector< int > &vecin) |
Builds a Design variable map. More... | |
bool | SnakDVcond (const triangulation &triRSVS, int ii) |
Returns wether a snaxel is a design variable or not. More... | |
void | PrepTriangulationCalc (const triangulation &triRSVS) |
Groups actions needed before the calculation of triangular quantities. More... | |
void | CalculateMesh (mesh &meshin) |
Calculates the mesh volumes. More... | |
void | CalculateTriangulation (const triangulation &triRSVS, int derivMethod=0) |
Calculates the triangulation volume and area derivatives. More... | |
void | CalcTriangle (const triangle &triIn, const triangulation &triRSVS, bool isObj=true, bool isConstr=true, bool isDeriv=true) |
Calculates the properties of single triangle. More... | |
void | CalcTriangleFD (const triangle &triIn, const triangulation &triRSVS, bool isObj=true, bool isConstr=true, bool isDeriv=true) |
Calculates the properties of single triangle using Finite difference. More... | |
void | CalcTriangleDirectVolume (const triangle &triIn, const triangulation &triRSVS, bool isObj=true, bool isConstr=true, bool isDeriv=true) |
Calculates the properties of single triangle using direct calculation. More... | |
void | CalcTriangleEdgeLength (const triangle &triIn, const triangulation &triRSVS, bool isObj=true, bool isConstr=true, bool isDeriv=true) |
Calculates the properties of single triangle for 2D RSVS. More... | |
void | ReturnConstrToMesh (triangulation &triRSVS) const |
Returns a constraint to the triangulation::meshDep. More... | |
void | ReturnConstrToMesh (mesh &meshin, double volu::*mp=&volu::volume) const |
Returns a constraint to the mesh. More... | |
void | CheckAndCompute (int calcMethod=0, bool sensCalc=false) |
Prepare the active arrays for SQP calculation and calculate the SQP step. More... | |
void | ComputeSQPstep (int calcMethod, Eigen::MatrixXd &dConstrAct, Eigen::RowVectorXd &dObjAct, Eigen::VectorXd &constrAct, Eigen::VectorXd &lagMultAct) |
Calculates the next SQP step. More... | |
void | ComputeSQPstep (int calcMethod, MatrixXd_sparse &dConstrAct, Eigen::RowVectorXd &dObjAct, Eigen::VectorXd &constrAct, Eigen::VectorXd &lagMultAct) |
void | ComputeSQPsens (int calcMethod, const Eigen::MatrixXd &sensMult, const Eigen::MatrixXd &sensInv, Eigen::MatrixXd &sensRes) |
void | ComputeSQPsens (int calcMethod, Eigen::MatrixXd &sensMult, MatrixXd_sparse &sensInv, Eigen::MatrixXd &sensRes) |
bool | PrepareMatricesForSQP (Eigen::MatrixXd &dConstrAct, Eigen::MatrixXd &HConstrAct, Eigen::MatrixXd &HObjAct, MatrixXd_sparse &dConstrAct_sparse, MatrixXd_sparse &HConstrAct_sparse, MatrixXd_sparse &HObjAct_sparse, Eigen::RowVectorXd &dObjAct, Eigen::VectorXd &constrAct, Eigen::VectorXd &lagMultAct) |
Prepares the matrices needed for the SQP step calculation. More... | |
void | PrepareMatricesForSQPFull (Eigen::MatrixXd &dConstrAct, Eigen::MatrixXd &HConstrAct, Eigen::MatrixXd &HObjAct) |
void | PrepareMatricesForSQPSparse (MatrixXd_sparse &dConstrAct_sparse, MatrixXd_sparse &HConstrAct_sparse, MatrixXd_sparse &HObjAct_sparse) |
bool | PrepareMatricesForSQPSensitivity (const Eigen::MatrixXd &dConstrAct, const Eigen::MatrixXd &HConstrAct, const Eigen::MatrixXd &HObjAct, Eigen::MatrixXd &sensMult, Eigen::MatrixXd &sensInv, Eigen::MatrixXd &sensRes) const |
Prepares the matrices needed for the calculation of the sensitivity of the SQP. More... | |
bool | PrepareMatricesForSQPSensitivity (const MatrixXd_sparse &dConstrAct, const MatrixXd_sparse &HConstrAct, MatrixXd_sparse &HObjAct, Eigen::MatrixXd &sensMult, MatrixXd_sparse &sensInv, Eigen::MatrixXd &sensRes) const |
void | ReturnVelocities (triangulation &triRSVS) |
Returns velocities to the snaxels. More... | |
void | ReturnSensitivities (const triangulation &triRSVS, std::vector< double > &sensVec, int constrNum) const |
void | ReturnGradient (const triangulation &triRSVS, std::vector< double > &sensVec, int constrNum) const |
int | numConstr () const |
Getter for the number of constraints. More... | |
void | Print2Screen (int outType=0) const |
Prints different amounts of RSVScalc owned data to the screen. More... | |
void | ConvergenceLog (std::ofstream &out, int loglvl=3) const |
Print convergence information to file stream. More... | |
void | CalculateVelocities (triangulation &triRSVS, int calculationMethod=0, bool calculateDerivatives=true, int derivativeMethod=1) override |
void | setDevParameters (const param::dev::devparam &devset) override |
Set the Development parameters of the Calculator object. | |
void | SetUseSurfCentreDeriv (int in) |
bool | GetUseSurfCentreDeriv () const |
void | SetUseSurfCentreHessian (int in) |
bool | SetUseSurfCentreHessian () const |
void | SetSparseDVcutoff (int in) |
int | GetSparseDVcutoff () const |
Public Attributes | |
Eigen::MatrixXd | dConstr |
Constraint Jacobian, size: [nConstr, nDv]. | |
SparseMatrixTriplet | dConstr_sparse |
Eigen::MatrixXd | HConstr |
Constraint Hessian, size: [nDv, nDv]. | |
SparseMatrixTriplet | HConstr_sparse |
Eigen::MatrixXd | HObj |
Objective Hessian, size: [nDv, nDv]. | |
SparseMatrixTriplet | HObj_sparse |
Eigen::MatrixXd | HLag |
Lagrangian Hessian, size: [nDv, nDv]. | |
MatrixXd_sparse | HLag_sparse |
Eigen::RowVectorXd | dLag |
Eigen::RowVectorXd | dObj |
Objective Jacobian, size: [1, nDv]. | |
Eigen::VectorXd | constr |
Constraint value vector, size: [nConstr, 1]. | |
Eigen::VectorXd | lagMult |
Lagrangian multiplier, size: [nConstr, 1]. | |
Eigen::VectorXd | deltaDV |
Change in design variable, assigned to snake velocity, size: [nDv, 1]. | |
Eigen::VectorXd | constrTarg |
Constraint target values, size: [nConstr, 1]. | |
Eigen::MatrixXd | dvCallConstr |
Eigen::MatrixXd | sensDv |
Sensitivity of the optimum design variables to the constraint. | |
double | obj = 0.0 |
Objective function value. | |
double | limLag = INFINITY |
Value at which a Lagrangian multiplier is considered problematically large. | |
std::vector< bool > | isConstrAct |
is the corresponding constraint active? | |
std::vector< bool > | isDvAct |
Is the corresponding design variable active? | |
HashedVector< int, int > | subConstrAct |
Vector of subscripts of the active constraints. | |
HashedVector< int, int > | subDvAct |
Vector of subscripts of the active design variables. | |
HashedVector< int, int > | dvMap |
Maps the snake indices to the position in the design variable vector. | |
HashedMap< int, int, int > | constrMap |
maps snakemesh() volu onto constr | |
std::vector< std::pair< int, int > > | constrList |
keeps pairs with parentindex and voluindex | |
Protected Member Functions | |
void | ZeroTimers () |
void | PrintTimers () const |
Protected Attributes | |
int | nDv = 0 |
Number of design variables. | |
int | nConstr = 0 |
Number of constraints. | |
int | falseaccess = 0 |
Number of false access operations. | |
int | sparseDVcutoff = 200 |
Number of design variables to start using sparse mathematics. | |
int | nonZeroPerDV = 10 |
bool | returnDeriv = true |
Return the derivatives (obsolete/unused) | |
bool | useSurfCentreDeriv = true |
Enable or disable surfcentroid derivatives. | |
bool | useSurfCentreHessian = false |
Enable or disable surfcentroid derivatives. | |
int | timer1 = 0 |
int | timer2 = 0 |
int | timer3 = 0 |
Class to handle the RSVS calculation.
This class calculates volume and area metrics in a triangulated snake to update the velocity and volumes. It uses an SQP algorithm to compute the velocities.
Definition at line 129 of file RSVScalc.hpp.
void RSVScalc::BuildConstrMap | ( | const mesh & | meshin | ) |
Builds the constraint mapping.
[in] | meshin | mesh for constraint building. |
Definition at line 505 of file RSVScalc.cpp.
void RSVScalc::BuildConstrMap | ( | const triangulation & | triangleRSVS | ) |
Builds the constraint mapping.
[in] | triangleRSVS | Triangulation containing the RSVS. |
Definition at line 488 of file RSVScalc.cpp.
int RSVScalc::BuildDVMap | ( | const std::vector< int > & | vecin | ) |
Builds a Design variable map.
[in] | vecin | The input vector of design variable indices. |
Definition at line 522 of file RSVScalc.cpp.
void RSVScalc::BuildMathArrays | ( | int | nDv, |
int | nConstr | ||
) |
Builds mathematics arrays.
[in] | nDv | Number of design variables. |
[in] | nConstr | Number of constraints. |
Definition at line 443 of file RSVScalc.cpp.
void RSVScalc::CalcTriangle | ( | const triangle & | triIn, |
const triangulation & | triRSVS, | ||
bool | isObj = true , |
||
bool | isConstr = true , |
||
bool | isDeriv = true |
||
) |
Calculates the properties of single triangle.
These values are returned to the class math arrays.
[in] | triIn | The triangle to measure. |
[in] | triRSVS | The containing triangulation object. |
[in] | isObj | Calculate objective? |
[in] | isConstr | Calculate constraint? |
[in] | isDeriv | Calculate derivatives? |
Definition at line 32 of file RSVScalc_core.cpp.
void RSVScalc::CalcTriangleDirectVolume | ( | const triangle & | triIn, |
const triangulation & | triRSVS, | ||
bool | isObj = true , |
||
bool | isConstr = true , |
||
bool | isDeriv = true |
||
) |
Calculates the properties of single triangle using direct calculation.
These values are returned to the class math arrays.
[in] | triIn | The triangle to measure. |
[in] | triRSVS | The containing triangulation object. |
[in] | isObj | Calculate objective? |
[in] | isConstr | Calculate constraint? |
[in] | isDeriv | Calculate derivatives? |
<--—Change assignement
<--—Change assignement
Definition at line 355 of file RSVScalc_core.cpp.
void RSVScalc::CalcTriangleEdgeLength | ( | const triangle & | triIn, |
const triangulation & | triRSVS, | ||
bool | isObj = true , |
||
bool | isConstr = true , |
||
bool | isDeriv = true |
||
) |
Calculates the properties of single triangle for 2D RSVS.
These values are returned to the class math arrays.
[in] | triIn | The triangle to measure. |
[in] | triRSVS | The containing triangulation object. |
[in] | isObj | Calculate objective? |
[in] | isConstr | Calculate constraint? |
[in] | isDeriv | Calculate derivatives? |
Definition at line 574 of file RSVScalc_core.cpp.
void RSVScalc::CalcTriangleFD | ( | const triangle & | triIn, |
const triangulation & | triRSVS, | ||
bool | isObj = true , |
||
bool | isConstr = true , |
||
bool | isDeriv = true |
||
) |
Calculates the properties of single triangle using Finite difference.
These values are returned to the class math arrays.
[in] | triIn | The triangle to measure. |
[in] | triRSVS | The containing triangulation object. |
[in] | isObj | Calculate objective? |
[in] | isConstr | Calculate constraint? |
[in] | isDeriv | Calculate derivatives? |
Definition at line 199 of file RSVScalc_core.cpp.
void RSVScalc::CalculateMesh | ( | mesh & | meshin | ) |
Calculates the mesh volumes.
meshin | The mesh. |
Definition at line 294 of file RSVScalc.cpp.
void RSVScalc::CalculateTriangulation | ( | const triangulation & | triRSVS, |
int | derivMethod = 0 |
||
) |
Calculates the triangulation volume and area derivatives.
[in] | triRSVS | The triangle rsvs |
[in] | derivMethod | The differentiation method to use. 1 : Finite Difference, 2 : Direct calculation, all others : differentiation. |
Definition at line 95 of file RSVScalc.cpp.
void RSVScalc::CheckAndCompute | ( | int | calcMethod = 0 , |
bool | sensCalc = false |
||
) |
Prepare the active arrays for SQP calculation and calculate the SQP step.
[in] | calcMethod | Calculation method for SQP. Check :meth:RSVScalc::ComputeSQPstep for detail. |
Definition at line 264 of file RSVScalc_SQP.cpp.
void RSVScalc::ComputeSQPstep | ( | int | calcMethod, |
Eigen::MatrixXd & | dConstrAct, | ||
Eigen::RowVectorXd & | dObjAct, | ||
Eigen::VectorXd & | constrAct, | ||
Eigen::VectorXd & | lagMultAct | ||
) |
Calculates the next SQP step.
In normal operation the constraint should be 0 through 4. With 0 the default. By adding 10 to these values the "constraint only" mode is enabled which performs a gradient descent step based on the constraint.
[in] | calcMethod | The calculation method. 10 can be added to all values to enable the "constraint only" mode. Values correspond to the following: Eigen::HouseholderQR (1); * Eigen::ColPivHouseholderQR (2) - Default; Eigen::LLT<Eigen::MatrixXd> (3); Eigen::PartialPivLU (4); |
dConstrAct | The active constraint Jacobian | |
dObjAct | The active objective Jacobian | |
constrAct | The active constraint values | |
lagMultAct | The active lagrangian multipliers. |
|
virtual |
Print convergence information to file stream.
out | The output filestream | |
[in] | loglvl | The logging detail to output. <1 nothing, ==1 Vector statistics, ==2 ...and constraint vectors, >2 ...and snaxel velocity vector. |
Implements rsvs3d::SnakeVelocityCalculator.
Definition at line 531 of file RSVScalc.cpp.
|
inline |
Getter for the number of constraints.
Definition at line 455 of file RSVScalc.hpp.
bool RSVScalc::PrepareMatricesForSQP | ( | Eigen::MatrixXd & | dConstrAct, |
Eigen::MatrixXd & | HConstrAct, | ||
Eigen::MatrixXd & | HObjAct, | ||
MatrixXd_sparse & | dConstrAct_sparse, | ||
MatrixXd_sparse & | HConstrAct_sparse, | ||
MatrixXd_sparse & | HObjAct_sparse, | ||
Eigen::RowVectorXd & | dObjAct, | ||
Eigen::VectorXd & | constrAct, | ||
Eigen::VectorXd & | lagMultAct | ||
) |
Prepares the matrices needed for the SQP step calculation.
dConstrAct | The active constraint Jacobian |
HConstrAct | The active constraint hessian |
HObjAct | The active objective hessian |
dObjAct | The active objective Jacobian |
constrAct | The active constraint values |
lagMultAct | The active lagrangian multipliers. |
Definition at line 28 of file RSVScalc_SQP.cpp.
bool RSVScalc::PrepareMatricesForSQPSensitivity | ( | const Eigen::MatrixXd & | dConstrAct, |
const Eigen::MatrixXd & | HConstrAct, | ||
const Eigen::MatrixXd & | HObjAct, | ||
Eigen::MatrixXd & | sensMult, | ||
Eigen::MatrixXd & | sensInv, | ||
Eigen::MatrixXd & | sensRes | ||
) | const |
Prepares the matrices needed for the calculation of the sensitivity of the SQP.
This is done to then call RSVScalc::ComputeSQPsens which implements the SQP optimality sensitivity giving the change in design variables due to a small change of constraint at the optimal condition.
dConstrAct | The active constraint Jacobian |
HConstrAct | The active constraint hessian |
HObjAct | The active objective hessian |
sensMult | The sensitivity RHS multiplier |
sensInv | The sensitivity RHS Matrix equation |
sensRes | The sensitivity LHS result matrix. |
bool RSVScalc::PrepareMatricesForSQPSensitivity | ( | const MatrixXd_sparse & | dConstrAct, |
const MatrixXd_sparse & | HConstrAct, | ||
MatrixXd_sparse & | HObjAct, | ||
Eigen::MatrixXd & | sensMult, | ||
MatrixXd_sparse & | sensInv, | ||
Eigen::MatrixXd & | sensRes | ||
) | const |
sensitivity requires : [H_d L , J_d constr; J_d constr ^T, 0]^-1 [Dd^TD_v L (=0s) ; D_V constr (=eye(lagMult))]
Definition at line 215 of file RSVScalc_SQP.cpp.
void RSVScalc::PrepTriangulationCalc | ( | const triangulation & | triRSVS | ) |
Groups actions needed before the calculation of triangular quantities.
[in] | triRSVS | The triangulation object. |
Definition at line 35 of file RSVScalc.cpp.
void RSVScalc::Print2Screen | ( | int | outType = 0 | ) | const |
Prints different amounts of RSVScalc
owned data to the screen.
[in] | outType | The output type to print, values [2,3,4]. |
Definition at line 334 of file RSVScalc.cpp.
void RSVScalc::ReturnConstrToMesh | ( | mesh & | meshin, |
double volu::* | mp = &volu::volume |
||
) | const |
Returns a constraint to the mesh.
meshin | The input mesh. | |
[in] | volu | The volumetric field that data needs to be returned to. It is a member point of class volu. |
Definition at line 429 of file RSVScalc.cpp.
void RSVScalc::ReturnConstrToMesh | ( | triangulation & | triRSVS | ) | const |
Returns a constraint to the triangulation::meshDep.
triRSVS | The triangulation object. |
Definition at line 400 of file RSVScalc.cpp.
void RSVScalc::ReturnVelocities | ( | triangulation & | triRSVS | ) |
Returns velocities to the snaxels.
Returns velocities to the snake in the triangulation object.
triRSVS | The triangulation object, affects the triangulation::snakeDep attribute. |
triRSVS | The triangulation object of the RSVS |
Definition at line 143 of file RSVScalc.cpp.
bool RSVScalc::SnakDVcond | ( | const triangulation & | triRSVS, |
int | ii | ||
) |
Returns wether a snaxel is a design variable or not.
If the snaxel is frozen and all its neighbours are frozen, it is not a design variable.
[in] | triRSVS | The triangulation which is being calculated |
[in] | ii | the snaxel subscript. |
Definition at line 73 of file RSVScalc.cpp.
|
inline |
Decides wether full or sparse math should be used.
Definition at line 215 of file RSVScalc.hpp.