diff --git a/python/swig/solid_mechanics_model.i b/python/swig/solid_mechanics_model.i index 47cf6c9d1..79f988aa5 100644 --- a/python/swig/solid_mechanics_model.i +++ b/python/swig/solid_mechanics_model.i @@ -1,85 +1,122 @@ %{ #include "solid_mechanics_model.hh" #include "sparse_matrix.hh" %} namespace akantu { %ignore SolidMechanicsModel::initFEEngineBoundary; %ignore SolidMechanicsModel::initParallel; %ignore SolidMechanicsModel::initArrays; %ignore SolidMechanicsModel::initMaterials; %ignore SolidMechanicsModel::initModel; %ignore SolidMechanicsModel::initPBC; %ignore SolidMechanicsModel::initExplicit; %ignore SolidMechanicsModel::isExplicit; %ignore SolidMechanicsModel::updateCurrentPosition; %ignore SolidMechanicsModel::updateAcceleration; %ignore SolidMechanicsModel::updateIncrement; %ignore SolidMechanicsModel::updatePreviousDisplacement; %ignore SolidMechanicsModel::saveStressAndStrainBeforeDamage; %ignore SolidMechanicsModel::updateEnergiesAfterDamage; %ignore SolidMechanicsModel::solveLumped; %ignore SolidMechanicsModel::explicitPred; %ignore SolidMechanicsModel::explicitCorr; %ignore SolidMechanicsModel::initSolver; %ignore SolidMechanicsModel::initImplicit; %ignore SolidMechanicsModel::initialAcceleration; %ignore SolidMechanicsModel::testConvergence; %ignore SolidMechanicsModel::testConvergenceIncrement; %ignore SolidMechanicsModel::testConvergenceResidual; %ignore SolidMechanicsModel::initVelocityDampingMatrix; %ignore SolidMechanicsModel::getNbDataForElements; %ignore SolidMechanicsModel::packElementData; %ignore SolidMechanicsModel::unpackElementData; %ignore SolidMechanicsModel::getNbDataToPack; %ignore SolidMechanicsModel::getNbDataToUnpack; %ignore SolidMechanicsModel::packData; %ignore SolidMechanicsModel::unpackData; %ignore SolidMechanicsModel::setMaterialSelector; %ignore SolidMechanicsModel::getSolver; %ignore SolidMechanicsModel::getSynchronizer; %ignore Dumpable::registerExternalDumper; } %template(SolidMechanicsBoundaryCondition) akantu::BoundaryCondition; %include "dumpable.hh" print_self(SolidMechanicsModel) %include "solid_mechanics_model.hh" %template(testConvergenceResidual) akantu::SolidMechanicsModel::testConvergence; %extend akantu::SolidMechanicsModel { void solveStaticDisplacement(Real tolerance, UInt max_iteration) { $self->solveStatic(tolerance, max_iteration); } void solveDisplCorr(bool need_factorize, bool has_profile_changed) { akantu::Array & increment = $self->getIncrement(); $self->solve(increment, 1., need_factorize, has_profile_changed); } void clearDispl() { akantu::Array & displ = $self->getDisplacement(); displ.clear(); } + void solveStep_TgModifIncr(Real tolerance, UInt max_iteration) { + + $self->solveStep(tolerance, max_iteration); + + } + + void clearDisplVeloAcc() { + + akantu::Array & displ = $self->getDisplacement(); + akantu::Array & velo = $self->getVelocity(); + akantu::Array & acc = $self->getAcceleration(); + + displ.clear(); + velo.clear(); + acc.clear(); + } + void applyHydrostaticPressure(Real w_level, Real gamma, + SpacialDirection direction, const std::string surface_name){ + + $self->applyBC(akantu::BC::Neumann::HydrostatPress(w_level, gamma, direction), surface_name); + } + + void applyUniformPressure(Real pressure, const std::string surface_name){ + + UInt spatial_dimension = $self->getSpatialDimension(); + akantu::Matrix surface_stress(spatial_dimension, spatial_dimension, 0.0); + + for(UInt i = 0; i < spatial_dimension; ++i) { + surface_stress(i,i) = -pressure; + } + $self->applyBC(akantu::BC::Neumann::FromStress(surface_stress), surface_name); + } + + void blockDOF(const std::string surface_name, SpacialDirection direction){ + + $self->applyBC(akantu::BC::Dirichlet::FixedValue(0.0, direction), surface_name); + } }