v0.16.0
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
SimpleArcLengthControl Struct Reference

#include "tutorials/cor-12_cohesive_interface/src/ArcLengthTools.hpp"

Inheritance diagram for SimpleArcLengthControl:
[legend]
Collaboration diagram for SimpleArcLengthControl:
[legend]

Public Member Functions

 SimpleArcLengthControl (boost::shared_ptr< ArcLengthCtx > &arc_ptr, const bool assemble=false)
 
 ~SimpleArcLengthControl ()
 
MoFEMErrorCode preProcess ()
 
MoFEMErrorCode operator() ()
 
MoFEMErrorCode postProcess ()
 
double calculateLambdaInt ()
 Calculate internal lambda.
 
MoFEMErrorCode calculateDb ()
 Calculate db.
 
MoFEMErrorCode calculateDxAndDlambda (Vec x)
 
 SimpleArcLengthControl (boost::shared_ptr< ArcLengthCtx > &arc_ptr, const bool assemble=false)
 
 ~SimpleArcLengthControl ()
 
MoFEMErrorCode preProcess ()
 
MoFEMErrorCode operator() ()
 
MoFEMErrorCode postProcess ()
 
double calculateLambdaInt ()
 Calculate internal lambda.
 
MoFEMErrorCode calculateDb ()
 Calculate db.
 
MoFEMErrorCode calculateDxAndDlambda (Vec x)
 

Public Attributes

boost::shared_ptr< ArcLengthCtxarcPtr
 
const bool aSsemble
 

Detailed Description

|brief Simple arc-length control of force

This is added for testing, it simply control force, i.e.

\[ \lambda = s \]

Constructor takes one argument,

Parameters
arc_ptrPointer to arc-length CTX.

|brief Simple arc-length control of force

This is added for testing, it simply control force, i.e.

\[ \lambda = s \]

Constructor takes one argument,

Parameters
arc_ptrPointer to arc-length CTX.

Definition at line 332 of file ArcLengthTools.hpp.

Constructor & Destructor Documentation

◆ SimpleArcLengthControl() [1/2]

SimpleArcLengthControl::SimpleArcLengthControl ( boost::shared_ptr< ArcLengthCtx > &  arc_ptr,
const bool  assemble = false 
)

Definition at line 516 of file ArcLengthTools.cpp.

518 : FEMethod(), arcPtr(arc_ptr), aSsemble(assemble) {}
Structure for user loop methods on finite elements.
boost::shared_ptr< ArcLengthCtx > arcPtr

◆ ~SimpleArcLengthControl() [1/2]

SimpleArcLengthControl::~SimpleArcLengthControl ( )

Definition at line 520 of file ArcLengthTools.cpp.

520{}

◆ SimpleArcLengthControl() [2/2]

SimpleArcLengthControl::SimpleArcLengthControl ( boost::shared_ptr< ArcLengthCtx > &  arc_ptr,
const bool  assemble = false 
)

◆ ~SimpleArcLengthControl() [2/2]

SimpleArcLengthControl::~SimpleArcLengthControl ( )

Member Function Documentation

◆ calculateDb() [1/2]

MoFEMErrorCode SimpleArcLengthControl::calculateDb ( )

Calculate db.

Definition at line 592 of file ArcLengthTools.cpp.

592 {
594 CHKERR VecZeroEntries(arcPtr->db);
595 CHKERR VecGhostUpdateBegin(arcPtr->db, INSERT_VALUES, SCATTER_FORWARD);
596 CHKERR VecGhostUpdateEnd(arcPtr->db, INSERT_VALUES, SCATTER_FORWARD);
598}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.

◆ calculateDb() [2/2]

MoFEMErrorCode SimpleArcLengthControl::calculateDb ( )

Calculate db.

◆ calculateDxAndDlambda() [1/2]

MoFEMErrorCode SimpleArcLengthControl::calculateDxAndDlambda ( Vec  x)

Definition at line 600 of file ArcLengthTools.cpp.

600 {
602 // Calculate dx
603 CHKERR VecGhostUpdateBegin(arcPtr->x0, INSERT_VALUES, SCATTER_FORWARD);
604 CHKERR VecGhostUpdateEnd(arcPtr->x0, INSERT_VALUES, SCATTER_FORWARD);
605
606 Vec l_x, l_x0, l_dx;
607 CHKERR VecGhostGetLocalForm(x, &l_x);
608 CHKERR VecGhostGetLocalForm(arcPtr->x0, &l_x0);
609 CHKERR VecGhostGetLocalForm(arcPtr->dx, &l_dx);
610 {
611 double *x_array, *x0_array, *dx_array;
612 CHKERR VecGetArray(l_x, &x_array);
613 CHKERR VecGetArray(l_x0, &x0_array);
614 CHKERR VecGetArray(l_dx, &dx_array);
615 int size =
616 problemPtr->getNbLocalDofsRow() + problemPtr->getNbGhostDofsRow();
617 for (int i = 0; i != size; ++i) {
618 dx_array[i] = x_array[i] - x0_array[i];
619 }
620 CHKERR VecRestoreArray(l_x, &x_array);
621 CHKERR VecRestoreArray(l_x0, &x0_array);
622 CHKERR VecRestoreArray(l_dx, &dx_array);
623 }
624 CHKERR VecGhostRestoreLocalForm(x, &l_x);
625 CHKERR VecGhostRestoreLocalForm(arcPtr->x0, &l_x0);
626 CHKERR VecGhostRestoreLocalForm(arcPtr->dx, &l_dx);
627
628 // Calculate dlambda
629 if (arcPtr->getPetscLocalDofIdx() != -1) {
630 double *array;
631 CHKERR VecGetArray(arcPtr->dx, &array);
632 arcPtr->dLambda = array[arcPtr->getPetscLocalDofIdx()];
633 array[arcPtr->getPetscLocalDofIdx()] = 0;
634 CHKERR VecRestoreArray(arcPtr->dx, &array);
635 }
636 CHKERR VecGhostUpdateBegin(arcPtr->ghosTdLambda, INSERT_VALUES,
637 SCATTER_FORWARD);
638 CHKERR VecGhostUpdateEnd(arcPtr->ghosTdLambda, INSERT_VALUES,
639 SCATTER_FORWARD);
640
641 // Calculate dx2
642 double x_nrm, x0_nrm;
643 CHKERR VecNorm(x, NORM_2, &x_nrm);
644 CHKERR VecNorm(arcPtr->x0, NORM_2, &x0_nrm);
645 CHKERR VecDot(arcPtr->dx, arcPtr->dx, &arcPtr->dx2);
646
647 MOFEM_LOG_C("ARC_LENGTH", Sev::verbose,
648 "\tx norm = %6.4e x0 norm = %6.4e dx2 = %6.4e", x_nrm, x0_nrm,
649 arcPtr->dx2);
651}
#define MOFEM_LOG_C(channel, severity, format,...)
FTensor::Index< 'i', SPACE_DIM > i
const FTensor::Tensor2< T, Dim, Dim > Vec
#define ArcFunctionBegin

◆ calculateDxAndDlambda() [2/2]

MoFEMErrorCode SimpleArcLengthControl::calculateDxAndDlambda ( Vec  x)

◆ calculateLambdaInt() [1/2]

double SimpleArcLengthControl::calculateLambdaInt ( )

Calculate internal lambda.

Definition at line 588 of file ArcLengthTools.cpp.

588 {
589 return arcPtr->beta * arcPtr->dLambda;
590}

◆ calculateLambdaInt() [2/2]

double SimpleArcLengthControl::calculateLambdaInt ( )

Calculate internal lambda.

◆ operator()() [1/2]

MoFEMErrorCode SimpleArcLengthControl::operator() ( )

Definition at line 545 of file ArcLengthTools.cpp.

545 {
547 switch (snes_ctx) {
548 case CTX_SNESSETFUNCTION: {
549 arcPtr->res_lambda = calculateLambdaInt() - arcPtr->s;
550 CHKERR VecSetValue(snes_f, arcPtr->getPetscGlobalDofIdx(),
551 arcPtr->res_lambda, ADD_VALUES);
552 } break;
553 case CTX_SNESSETJACOBIAN: {
554 arcPtr->dIag = arcPtr->beta;
555 CHKERR MatSetValue(snes_B, arcPtr->getPetscGlobalDofIdx(),
556 arcPtr->getPetscGlobalDofIdx(), 1, ADD_VALUES);
557 } break;
558 default:
559 break;
560 }
562}
double calculateLambdaInt()
Calculate internal lambda.

◆ operator()() [2/2]

MoFEMErrorCode SimpleArcLengthControl::operator() ( )

◆ postProcess() [1/2]

MoFEMErrorCode SimpleArcLengthControl::postProcess ( )

Definition at line 564 of file ArcLengthTools.cpp.

564 {
566 switch (snes_ctx) {
567 case CTX_SNESSETFUNCTION: {
568 if (aSsemble) {
569 CHKERR VecAssemblyBegin(snes_f);
570 CHKERR VecAssemblyEnd(snes_f);
571 }
572 } break;
573 case CTX_SNESSETJACOBIAN: {
574 if (aSsemble) {
575 CHKERR MatAssemblyBegin(snes_B, MAT_FLUSH_ASSEMBLY);
576 CHKERR MatAssemblyEnd(snes_B, MAT_FLUSH_ASSEMBLY);
577 }
578 CHKERR VecGhostUpdateBegin(arcPtr->ghostDiag, INSERT_VALUES,
579 SCATTER_FORWARD);
580 CHKERR VecGhostUpdateEnd(arcPtr->ghostDiag, INSERT_VALUES, SCATTER_FORWARD);
581 } break;
582 default:
583 break;
584 }
586}

◆ postProcess() [2/2]

MoFEMErrorCode SimpleArcLengthControl::postProcess ( )

◆ preProcess() [1/2]

MoFEMErrorCode SimpleArcLengthControl::preProcess ( )

Definition at line 522 of file ArcLengthTools.cpp.

522 {
524 switch (snes_ctx) {
525 case CTX_SNESSETFUNCTION: {
526 if (aSsemble) {
527 CHKERR VecAssemblyBegin(snes_f);
528 CHKERR VecAssemblyEnd(snes_f);
529 }
532 } break;
533 case CTX_SNESSETJACOBIAN: {
534 if (aSsemble) {
535 CHKERR MatAssemblyBegin(snes_B, MAT_FLUSH_ASSEMBLY);
536 CHKERR MatAssemblyEnd(snes_B, MAT_FLUSH_ASSEMBLY);
537 }
538 } break;
539 default:
540 break;
541 }
543}
MoFEMErrorCode calculateDb()
Calculate db.
MoFEMErrorCode calculateDxAndDlambda(Vec x)

◆ preProcess() [2/2]

MoFEMErrorCode SimpleArcLengthControl::preProcess ( )

Member Data Documentation

◆ arcPtr

boost::shared_ptr< ArcLengthCtx > SimpleArcLengthControl::arcPtr

Definition at line 334 of file ArcLengthTools.hpp.

◆ aSsemble

const bool SimpleArcLengthControl::aSsemble

Definition at line 335 of file ArcLengthTools.hpp.


The documentation for this struct was generated from the following files: