本文整理汇总了C++中TimeStep::giveTargetTime方法的典型用法代码示例。如果您正苦于以下问题:C++ TimeStep::giveTargetTime方法的具体用法?C++ TimeStep::giveTargetTime怎么用?C++ TimeStep::giveTargetTime使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TimeStep
的用法示例。
在下文中一共展示了TimeStep::giveTargetTime方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: giveUnknownComponent
double NLTransientTransportProblem :: giveUnknownComponent(ValueModeType mode, TimeStep *tStep, Domain *d, Dof *dof)
// returns unknown quantity like displacement, velocity of equation
// This function translates this request to numerical method language
{
if ( this->requiresUnknownsDictionaryUpdate() ) {
if ( mode == VM_Incremental ) { //get difference between current and previous time variable
return dof->giveUnknowns()->at(0) - dof->giveUnknowns()->at(1);
}
int hash = this->giveUnknownDictHashIndx(mode, tStep);
if ( dof->giveUnknowns()->includes(hash) ) {
return dof->giveUnknowns()->at(hash);
} else {
OOFEM_ERROR("Dof unknowns dictionary does not contain unknown of value mode (%s)", __ValueModeTypeToString(mode) );
}
}
double t = tStep->giveTargetTime();
TimeStep *previousStep = this->givePreviousStep(), *currentStep = this->giveCurrentStep();
if ( dof->__giveEquationNumber() == 0 ) {
OOFEM_ERROR("invalid equation number on DoF %d", dof->giveDofID() );
}
if ( ( t >= previousStep->giveTargetTime() ) && ( t <= currentStep->giveTargetTime() ) ) {
///@todo Shouldn't it be enough to just run this?
//UnknownsField->giveUnknownValue(dof, mode, currentStep);
double rtdt = UnknownsField->giveUnknownValue(dof, VM_Total, currentStep);
double rt = UnknownsField->giveUnknownValue(dof, VM_Total, previousStep);
double psi = ( t - previousStep->giveTargetTime() ) / currentStep->giveTimeIncrement();
if ( mode == VM_Velocity ) {
return ( rtdt - rt ) / currentStep->giveTimeIncrement();
} else if ( mode == VM_Total ) {
return psi * rtdt + ( 1. - psi ) * rt;
} else if ( mode == VM_Incremental ) {
if ( previousStep->isIcApply() ) {
return 0;
} else {
return ( rtdt - rt );
}
} else {
OOFEM_ERROR("Unknown mode %s is undefined for this problem", __ValueModeTypeToString(mode) );
}
} else {
OOFEM_ERROR("time value %f not within bounds %f and %f", t, previousStep->giveTargetTime(), currentStep->giveTargetTime() );
}
return 0.; // to make compiler happy;
}
示例2: outputBoundaryCondition
void GnuplotExportModule::outputBoundaryCondition(PrescribedGradientBCNeumann &iBC, TimeStep *tStep)
{
FloatArray stress;
iBC.computeField(stress, tStep);
printf("Mean stress computed in Gnuplot export module: "); stress.printYourself();
double time = 0.0;
TimeStep *ts = emodel->giveCurrentStep();
if ( ts != NULL ) {
time = ts->giveTargetTime();
}
int bcIndex = iBC.giveNumber();
std :: stringstream strMeanStress;
strMeanStress << "PrescribedGradientGnuplotMeanStress" << bcIndex << "Time" << time << ".dat";
std :: string nameMeanStress = strMeanStress.str();
std::vector<double> componentArray, stressArray;
for(int i = 1; i <= stress.giveSize(); i++) {
componentArray.push_back(i);
stressArray.push_back(stress.at(i));
}
XFEMDebugTools::WriteArrayToGnuplot(nameMeanStress, componentArray, stressArray);
// Homogenized strain
FloatArray grad;
iBC.giveGradientVoigt(grad);
outputGradient(iBC.giveNumber(), *iBC.giveDomain(), grad, tStep);
}
示例3: outputXFEMGeometry
void GnuplotExportModule::outputXFEMGeometry(const std::vector< std::vector<FloatArray> > &iEnrItemPoints)
{
double time = 0.0;
TimeStep *ts = emodel->giveCurrentStep();
if ( ts != NULL ) {
time = ts->giveTargetTime();
}
std :: stringstream strCracks;
strCracks << "CracksTime" << time << ".dat";
std :: string nameCracks = strCracks.str();
WritePointsToGnuplot(nameCracks, iEnrItemPoints);
}
示例4: outputMesh
void GnuplotExportModule::outputMesh(Domain &iDomain)
{
std::vector< std::vector<FloatArray> > pointArray;
if(iDomain.giveNumberOfSpatialDimensions() == 2) {
// Write all element edges to gnuplot
for ( auto &el : iDomain.giveElements() ) {
int numEdges = el->giveNumberOfNodes();
for ( int edgeIndex = 1; edgeIndex <= numEdges; edgeIndex++ ) {
std::vector<FloatArray> points;
IntArray bNodes;
el->giveInterpolation()->boundaryGiveNodes(bNodes, edgeIndex);
int niLoc = bNodes.at(1);
const FloatArray &xS = *(el->giveNode(niLoc)->giveCoordinates() );
points.push_back(xS);
int njLoc = bNodes.at( bNodes.giveSize() );
const FloatArray &xE = *(el->giveNode(njLoc)->giveCoordinates() );
points.push_back(xE);
pointArray.push_back(points);
}
}
double time = 0.0;
TimeStep *ts = emodel->giveCurrentStep();
if ( ts != NULL ) {
time = ts->giveTargetTime();
}
std :: stringstream strMesh;
strMesh << "MeshGnuplotTime" << time << ".dat";
std :: string nameMesh = strMesh.str();
WritePointsToGnuplot(nameMesh, pointArray);
}
}
示例5: assembleAlgorithmicPartOfRhs
void
NLTransientTransportProblem :: assembleAlgorithmicPartOfRhs(FloatArray &answer,
const UnknownNumberingScheme &ns, TimeStep *tStep)
{
//
// Computes right hand side on all nodes
//
double t = tStep->giveTargetTime();
IntArray loc;
FloatMatrix charMtrxCond, charMtrxCap;
FloatArray r, drdt, contrib, help;
Element *element;
TimeStep *previousStep = this->givePreviousStep(); //r_t
TimeStep *currentStep = this->giveCurrentStep(); //r_{t+\Delta t}. Note that *tStep is a Tau step between r_t and r_{t+\Delta t}
Domain *domain = this->giveDomain(1);
int nelem = domain->giveNumberOfElements();
for ( int i = 1; i <= nelem; i++ ) {
element = domain->giveElement(i);
// skip remote elements (these are used as mirrors of remote elements on other domains
// when nonlocal constitutive models are used. They introduction is necessary to
// allow local averaging on domains without fine grain communication between domains).
if ( element->giveParallelMode() == Element_remote ) {
continue;
}
if ( !element->isActivated(tStep) ) {
continue;
}
element->giveLocationArray(loc, ns);
element->giveCharacteristicMatrix(charMtrxCond, TangentStiffnessMatrix, tStep);
element->giveCharacteristicMatrix(charMtrxCap, CapacityMatrix, tStep);
/*
* element -> computeVectorOf (VM_Total, tStep, r);
* element -> computeVectorOf (VM_Velocity, tStep, drdt);
*/
if ( ( t >= previousStep->giveTargetTime() ) && ( t <= currentStep->giveTargetTime() ) ) {
FloatArray rp, rc;
element->computeVectorOf(VM_Total, currentStep, rc);
element->computeVectorOf(VM_Total, previousStep, rp);
//approximate derivative with a difference
drdt.beDifferenceOf(rc, rp);
drdt.times( 1. / currentStep->giveTimeIncrement() );
//approximate current solution from linear interpolation
rp.times(1 - alpha);
rc.times(alpha);
r = rc;
r.add(rp);
} else {
OOFEM_ERROR("unsupported time value");
}
if ( lumpedCapacityStab ) {
int size = charMtrxCap.giveNumberOfRows();
double s;
for ( int j = 1; j <= size; j++ ) {
s = 0.0;
for ( int k = 1; k <= size; k++ ) {
s += charMtrxCap.at(j, k);
charMtrxCap.at(j, k) = 0.0;
}
charMtrxCap.at(j, j) = s;
}
}
help.beProductOf(charMtrxCap, drdt);
contrib.beProductOf(charMtrxCond, r);
contrib.add(help);
contrib.negated();
answer.assemble(contrib, loc);
}
}
示例6: outputXFEM
void GnuplotExportModule::outputXFEM(Crack &iCrack, TimeStep *tStep)
{
const std::vector<GaussPoint*> &czGaussPoints = iCrack.giveCohesiveZoneGaussPoints();
std::vector<double> arcLengthPositions, normalJumps, tangJumps, normalTractions;
const BasicGeometry *bg = iCrack.giveGeometry();
for( GaussPoint *gp: czGaussPoints ) {
StructuralInterfaceMaterialStatus *matStat = dynamic_cast<StructuralInterfaceMaterialStatus*> ( gp->giveMaterialStatus() );
if(matStat != NULL) {
// Compute arc length position of the Gauss point
const FloatArray &coord = (gp->giveGlobalCoordinates());
double tangDist = 0.0, arcPos = 0.0;
bg->computeTangentialSignDist(tangDist, coord, arcPos);
arcLengthPositions.push_back(arcPos);
// Compute displacement jump in normal and tangential direction
// Local numbering: (tang_z, tang, normal)
const FloatArray &jumpLoc = matStat->giveJump();
double normalJump = jumpLoc.at(3);
normalJumps.push_back(normalJump);
tangJumps.push_back( jumpLoc.at(2) );
const FloatArray &trac = matStat->giveFirstPKTraction();
normalTractions.push_back(trac.at(3));
}
}
Domain *domain = emodel->giveDomain(1);
XfemManager *xMan = domain->giveXfemManager();
if ( xMan != NULL ) {
double time = 0.0;
TimeStep *ts = emodel->giveCurrentStep();
if ( ts != NULL ) {
time = ts->giveTargetTime();
}
int eiIndex = iCrack.giveNumber();
std :: stringstream strNormalJump;
strNormalJump << "NormalJumpGnuplotEI" << eiIndex << "Time" << time << ".dat";
std :: string nameNormalJump = strNormalJump.str();
XFEMDebugTools::WriteArrayToGnuplot(nameNormalJump, arcLengthPositions, normalJumps);
std :: stringstream strTangJump;
strTangJump << "TangJumpGnuplotEI" << eiIndex << "Time" << time << ".dat";
std :: string nameTangJump = strTangJump.str();
XFEMDebugTools::WriteArrayToGnuplot(nameTangJump, arcLengthPositions, tangJumps);
std :: stringstream strNormalTrac;
strNormalTrac << "NormalTracGnuplotEI" << eiIndex << "Time" << time << ".dat";
std :: string nameNormalTrac = strNormalTrac.str();
XFEMDebugTools::WriteArrayToGnuplot(nameNormalTrac, arcLengthPositions, normalTractions);
std::vector<FloatArray> matForcesStart, matForcesEnd;
std::vector<double> radii;
// Material forces
for(double matForceRadius : mMatForceRadii) {
radii.push_back(matForceRadius);
EnrichmentFront *efStart = iCrack.giveEnrichmentFrontStart();
const TipInfo &tipInfoStart = efStart->giveTipInfo();
FloatArray matForceStart;
mpMatForceEvaluator->computeMaterialForce(matForceStart, *domain, tipInfoStart, tStep, matForceRadius);
if(matForceStart.giveSize() > 0) {
matForcesStart.push_back(matForceStart);
}
else {
matForcesStart.push_back({0.0,0.0});
}
EnrichmentFront *efEnd = iCrack.giveEnrichmentFrontEnd();
const TipInfo &tipInfoEnd = efEnd->giveTipInfo();
FloatArray matForceEnd;
mpMatForceEvaluator->computeMaterialForce(matForceEnd, *domain, tipInfoEnd, tStep, matForceRadius);
if(matForceEnd.giveSize() > 0) {
matForcesEnd.push_back(matForceEnd);
}
else {
matForcesEnd.push_back({0.0,0.0});
}
//.........这里部分代码省略.........
示例7: SetUpPointsOnTriangle
//.........这里部分代码省略.........
for(size_t i = 0; i < mTriangles.size(); i++) {
if( mTriangles[i].getArea() > triTol ) {
triToKeep.push_back(i);
}
}
int nPointsTot = nPoints * triToKeep.size();
FloatArray coords_xi1, coords_xi2, weights;
this->giveTriCoordsAndWeights(nPoints, coords_xi1, coords_xi2, weights);
this->gaussPointArray = new GaussPoint * [ nPointsTot ];
////////////////////////////////////////////
std :: vector< FloatArray >newGPCoord;
double parentArea = this->elem->computeArea();
// Loop over triangles
for ( int i = 0; i < int( triToKeep.size() ); i++ ) {
// TODO: Probably unnecessary to allocate here
const FloatArray **coords = new const FloatArray * [ mTriangles [ triToKeep[i] ].giveNrVertices() ];
// this we should put into the function before
for ( int k = 0; k < mTriangles [ triToKeep[i] ].giveNrVertices(); k++ ) {
coords [ k ] = new FloatArray( ( mTriangles [ triToKeep[i] ].giveVertex(k + 1) ) );
}
// Can not be used because it writes to the start of the array instead of appending.
// int nPointsTri = GaussIntegrationRule :: SetUpPointsOnTriangle(nPoints, mode);
for ( int j = 0; j < nPoints; j++ ) {
FloatArray global;
GaussPoint * &gp = this->gaussPointArray [ pointsPassed ];
FloatArray *coord = new FloatArray(2);
coord->at(1) = coords_xi1.at(j + 1);
coord->at(2) = coords_xi2.at(j + 1);
gp = new GaussPoint(this, pointsPassed + 1, coord, weights.at(j + 1), mode);
mTriInterp.local2global( global, * gp->giveCoordinates(),
FEIVertexListGeometryWrapper(mTriangles [ triToKeep[i] ].giveNrVertices(), coords) );
newGPCoord.push_back(global);
FloatArray local;
this->elem->computeLocalCoordinates(local, global);
gp->setCoordinates(local);
double refElArea = this->elem->giveParentElSize();
gp->setWeight(2.0 * refElArea * gp->giveWeight() * mTriangles [ triToKeep[i] ].getArea() / parentArea); // update integration weight
pointsPassed++;
}
for ( int k = 0; k < mTriangles [ triToKeep[i] ].giveNrVertices(); k++ ) {
delete coords [ k ];
}
delete [] coords;
}
#if PATCH_INT_DEBUG > 0
double time = 0.0;
Element *el = this->elem;
if(el != NULL) {
Domain *dom = el->giveDomain();
if(dom != NULL) {
EngngModel *em = dom->giveEngngModel();
if(em != NULL) {
TimeStep *ts = em->giveCurrentStep();
if(ts != NULL) {
time = ts->giveTargetTime();
}
}
}
}
int elIndex = this->elem->giveGlobalNumber();
std :: stringstream str;
str << "GaussPointsTime" << time << "El" << elIndex << ".vtk";
std :: string name = str.str();
XFEMDebugTools :: WritePointsToVTK(name, newGPCoord);
#endif
numberOfIntegrationPoints = pointsPassed;
return numberOfIntegrationPoints;
}