/* * MigFlow - Copyright (C) <2010-2018> * * * List of the contributors to the development of MigFlow: see AUTHORS file. * Description and complete License: see LICENSE file. * * This program (MigFlow) is free software: * you can redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation, either version * 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program (see COPYING and COPYING.LESSER files). If not, * see . */ #ifndef _SCONTACT_H_ #define _SCONTACT_H_ #include typedef struct _ParticleProblem ParticleProblem; ParticleProblem *particleProblemNew(); void particleProblemDelete(ParticleProblem *p); void particleProblemLoad(ParticleProblem *p, const char *filename); void particleProblemWrite(const ParticleProblem *p, const char *filename); void particleProblemIterate(ParticleProblem *p, double alert, double dt, double tol, int maxit); void particleProblemSolve(ParticleProblem *p, double alert, double dt, double tol, int maxit); double particleProblemMaxDt(const ParticleProblem *p, double alert); void particleProblemAddParticle(ParticleProblem *p, const double x[DIMENSION], double r, double m, const char *material); size_t particleProblemAddBoundaryDisk(ParticleProblem *p, const double x0[DIMENSION], double r, const char *tag, const char *material); size_t particleProblemAddBoundarySegment(ParticleProblem *p, const double x0[DIMENSION], const double x1[DIMENSION], const char *tag, const char *material); size_t particleProblemGetTagId(ParticleProblem *p, const char *tag); size_t particleProblemGetMaterialTagId(ParticleProblem *p, const char *tag); const char* particleProblemGetTagName(ParticleProblem *p, size_t tag); const char* particleProblemGetMaterialTagName(ParticleProblem *p, size_t tag); #if DIMENSION==3 void particleProblemAddBoundaryTriangle(ParticleProblem *p, const double x0[DIMENSION], const double x1[DIMENSION], const double x2[DIMENSION], const char *tag, const char *material); #endif double *particleProblemDisk(ParticleProblem *p); double *particleProblemSegment(ParticleProblem *p); double *particleProblemParticle(ParticleProblem *p); double *particleProblemVelocity(ParticleProblem *p); double *particleProblemPosition(ParticleProblem *p); double *particleProblemExternalForces(ParticleProblem *p); void particleProblemSetUseQueue(ParticleProblem *p, int use_queue); unsigned long int particleProblemNParticle(ParticleProblem *p); double *particleProblemRadius(ParticleProblem *p); int *particleProblemDiskTag(ParticleProblem *p); int *particleProblemSegmentTag(ParticleProblem *p); int *particleProblemDiskMaterial(ParticleProblem *p); int *particleProblemSegmentMaterial(ParticleProblem *p); #if DIMENSION == 3 int *particleProblemTriangleTag(ParticleProblem *p); int *particleProblemTriangleMaterial(ParticleProblem *p); double *particleProblemTriangle(ParticleProblem *p); #endif void ParticleToMesh(size_t nParticles, double *particles, int nElements, double *elements, int *elid, double *xi); #endif #ifdef FRICTION_ENABLED void particleProblemSetFrictionCoefficient(ParticleProblem *p, double mu, const char *mat0, const char *mat1); double *particleProblemOmega(ParticleProblem *p); #endif int particleProblemNTag(const ParticleProblem *p); int particleProblemNMaterial(const ParticleProblem *p);