Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simulation of flexible fibers. #276

Open
wants to merge 34 commits into
base: master
Choose a base branch
from

Conversation

meyer-nils
Copy link

Hi,

thank you for developing PySPH. It is a nice SPH implementation and good starting point for implementing own ideas. We used PySPH in our research to model flexible fibers and finally published a paper [1] and the code [2].

I am wondering, wether you would be interested in incorporating this feature to the PySPH main repository?

Cheers,
Nils

[1] https://doi.org/10.3390/jcs4020077
[2] https://github.com/nilsmeyerkit/pysph

Meyer and others added 22 commits March 15, 2018 17:50
* Modified scale factor for high asect ratios.

* Updated Forgacs batch.

* Reduced number of samples in statistical batch.

* Reduced batch size.

* Updated adaptive mass scaling.

* Draft for file with dummy force.
Not working yet.

* Fixes in RVE code.

* Updated batches.

* Updated options for collision.

* Fixed contact model.
- contact force direction in z was inverse
- included lim parameter in scheme
- made mini RVE cubic

* Improved random sampling for RVE.

* Fixed limitation of reaction force.

* Dynamic memory aquisition for batch.

* Adapted batch for Graham.

* Fixed Graham script.

* Set proper account for SBATCH.

* Fixed OpenMP call in batch.

* Trying MPI.

* Adjusted memory.

* Fixed generatation of samples and MPI submission for large jobs.

* Changed default aspect ratio for RVE and added guess for 3D damping.

* Trying more CPUs.

* Trying a different damping again.

* Updated runtime.

* Increased time limit.

* Allowed for parallel computation of fibers.

* Prepared Forgasc batch for Graham.

* Removed OpenMP flags for MPI jobs.

* Fixed typo in channel.

* Allowed for parallel evaluation of accelerations.

* Used openmp flags again.

* Removed explicit mode in acceleration eval.

* Random fiber generation creates unique samples now.

* Improved plots.

* Setup batch for ar=11 again + requesting more memory and less cpus.

* Went back to longer fibers with more CPUs.

* Commented Contact force in outer loop.

* Using one long broken fiber instead of multiple fibers.
- This saves massive amounts of memory.

* Different setup for Batch.

* Reduced ar.

* Increased default time.

* Increased sampling.

* OpenMP setup

* Simplified handling of nodes.

* Fixed periodicity in z bug.

* Added some more output arrays for fibers.

* Removed old dummy example.

* Included fiber directions in default output.

* Export *.pdf figures instead of *.eps.

* Export *.pdf images instead of *.eps.

* Added marker for color.

* Improved beam example.
- Used particle arrays with predefined properties
- Better clamp boundary condition
- Introduced mirror option for clamp

* Removed unnecessary requested properties from tension model.
This was an issue with openmp compilation.

* Simplified particle creation, removed unnecessary imports + gz.

* Removed periodic conditions.
These were just applied for testing.

* Replaced hard coded periodicity in FiberIntegrator with a copy of domain

* Removed some commented old equations.

* Modified RVE scripts

* Removed VTK flag.

* Made FiberIntegrator call a bit more compact.

* Major changes in Mini RVE
- All default 3D
- Fiber length equal to Cube size
- Moved back to intial and orientations like 'Channel'
- Introduced '-rot' option
- Added color property
- Periodicity in z-direction
- RSC model for comparison
- PDF images

* Added wall force to properties.

* Set wall force at no-slip condition.

* Improved postprocessing
- Added computation of viscosity
- updated computation of orientation vectors.

* Improved and fixed postprocessing.

* Modified batches on Graham.

* Optimized RVE batches on Graham.

* Handeled vol_frac=0 and removed old tensor plot.

* Introduced option to move solid wall in Bead chain model.

* Introduced nozzle model without fibers for now.

* Minor optimizations for nozzle.

* Removed SolidSpeed equation.
This was not necessary and can be implemented mch easier.

* Imrpoved velocity estimation.

* Removed commented scale factor.

* Removed mass scaling from nozzle.

* Made domain manager an option in FiberIntegrator.

* Added comments, fibers and cleaner geometry.

* Improved EBG plots.

* Example should run without arguments.

* Making sure that examples run.

* Made some nicer plots.

* Testing alternative no slip.

* Modified SPH batch for Graham.

* Removed mail notification.

* Changed default stiffness for channel example.

* General auto-scale factor.

* Updated no-slip again.

* Reverted back to old damping and stiffness.

* Fixed computation of viscous force.

* Added viscous force in plot.

* Fixed plot distribution in total and viscous force.

* Some plot tweaks...

* Major fix in scheme.

* Corrected use of dim.

* Fixed computation of wall force.

* Introduced viscosity batch mode.

* Small fix for single fiber in RVE example.

* Small fix in channel example.

* Created flag to use old and new version of scheme.

* More rotations for RVE.

* Introduced capillary example.

* Corrected contact force.

* Modified geometry to pseudo-fit the aparatus.

* Adapted DSM batch for Graham.

* Split DSM batch command.

* Included optional velocity correction and flag for no-slip.

* Using local DSM batch again.

* Added z-direction.

* Made more consistent plots.

* Fixed a small bug in TVF Scheme.

* Added missed file from merge.

* Solved a minor issue with VTK export.

* Added option for explicit inner steps.

* Test Batch.

* Time update

* Removed time sbatch argument.

* Reverted forgacs batch and using sph_batch for general submissions.

* Small fix in VTK Export.

* Extended DSM Batch

* Changed defaults to DSM and introduced Cox formula for equiv. ratio

* Created explicit shearflow example.

* Based mass scaling on Reynolds number.

* Improved Angleplot.

* Increased damping.

* Length dependend damping.

* Modified damping - again.

* Turned sph_batch into shearflow batch for paper.

* Fixed order in angle-plot.

* Added fracture angle as option.

* Passed dimensionality to contact instead of scaling factor.

* Introduced workaround for contact force in 2D case.

* Reduced rotations in shearflow batch.

* Increased damping for high aspect ratios.

* Modified defaults for 3D interaction.

* Changed FEM results to comply with DSM parameters.

* Excluded Nearfield model from channel base model.

* Updated FEM solution for reaction force.

* Tweaked plots.

* Some fixes to handle chnages in cpy.

* Improved some plots.

* Applied linter fixes.

* Improved plots.

* Adjusting output variables for succesfull restarts.

* PEP-8 fixes.

* Removed unused clutter.

* Preping for lubrication forces.

* Added csv export for rve.

* Added script for statistical evaluations

* Integer Fixes for Python 2

* Adaption to upstream changes.

* Small fixes.

* example for generated RVE.

* Removed output that became unnecessary with last update.

* Replaced ambiguous variable names.

* Fixed some linter errors.

* Introduced Lees-Edwards BCs.

* Fixed scheme in case of no precśence of solids.

* Properly improved and tested Lees-Edwards.

* Teared down Particle arrays for bead chain scheme.
-Large arrays slow down periodicity because all of it has to be copied 
quite a bit.

* Limit allowed shear directions.
The order of periodic conditions limits the applicability.

* Build new RVE model with random placement in all directions.

* Some small linter fixes.

* Switched batch type.

* Fixed proper timing in Lees-Edwards BCs.

* Removed specific defintions in vtk export that do not generally apply.

* Linter stuff.

* Proper timing in updates for Lees-Edwards.
Updates during inner loop are necessary!

* Particle shifting in near field.

* Updated evaluation of 3D Shearflow.

* 3D Shearflow update.

* Velocity gradient only for real particles.

* Version for revision of paper.

* Implemented continuation option.

* Implemented Single Particle Model
- resulting force on particle is too small.

* Added changes of single_particle example to master branch.

* Removed artefacts from multi-resolution version.

* extended plots.

* Cleaned example.

* Fixed some more artefacts.

* Defined the same kernel for postprocessing.

* Added analytical initial configuration.

* Completed analytical initial configuration.

* Removed old dim artefakt.

* Simplified shearflow example.

* Corrected some mistakes. - fiber spins, but a bit too slow.

* Scheme adaption for fiber like solid.

* Corrected analytical solution.
Now in z-direction.

* Switched to proper volume term in velocity gradient.

* Correct mistake in flow velocity of shearflow walls.

* Fixed most severe linter errors.

* Cleaned up some older examples.

* Cleaned one more example.

* Consistent solid-like implementation.

* Fixed a problem that causes initial overlaps.

* Fixed positioning of artificial stress.

* Properly synchronized time in inner and outer loop.
Now, everythings looks pretty neat and consistent.

* Declaring a new standard with fibers like solid.

* Updated particle property lists.

* Introduced direct simulation option in scheme. 
This options uses fiber equations directly without an inner loop.

* Corrected Reynolds number - again.

* Fixed a couple of Bugs in contact and added simple lubrication.

* Significant improvement of contact interaction algorithm.

* Increased default Reynolds number.

* Removed optional message, that cant be used with openmp.

* Fixed some things, but lubrication is still unstable.

* Implemented lubrication forces with max force.
Extreme forces are limited such that a the resulting force would never 
invert the velocity. Latter would non-physical, as lubrication acts 
always against the relative motion of fibers, but does not accelerate 
them in any way.

* Added plot to Mini RVE.

* Resized single particle model.

* First implementation of integrated akinici BC.
Background pressure application needs to be checked.

* Moved matplotlib import down to postprocessing.
An import at the beginning caused trouble.

* Removed extra line.

* Ensure Python 2 compatibility.

* Rolled back some Akinici changes fro dev branch.

* Sorted imports and updated tikzlib.

* Remove old batch files.

* Removed obsolete example.

* Updated descriptions in a plot.

* Several small fixes in Lees-Edwards BCs.

* Just a formal update of black codestyle in RVE example.

* Sorted imports properly.

* Removed vtk flag for export.

* Fixed whitespace.

* Restructured contact equation.

* Disable lubrication for now...

* Update batch script.

* Increased default Reynolds number.

* Move instead of copy in batch script.

* Rolled back default Reynolds number.

* Updated batch script.

* Changed default penetration limit.

* Updated some comments.

* Removed shell script for running batches.

Co-authored-by: nils.meyer <nils.meyer@kit.edu>
This ensures that all tests pass.
These were just convenience functions that are removed to ensure 
consistency with tests.
@pep8speaks
Copy link

pep8speaks commented Jul 28, 2020

Hello @nilsmeyerkit! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2020-07-28 17:06:33 UTC

nils.meyer added 7 commits July 28, 2020 10:01
Somehow, "in" was replaced by "Ipn".
Some changes in this version are not required for the fiber feature. 
Hence, they are rolled back to simplify changes during merge.
nils.meyer added 5 commits July 28, 2020 13:20
Some changes are not necessary for fiber tools and just increase the 
number of changed files in the PR.
Lees-Edwards boundary conditions are not implemented for 
GPUDomainManager yet. All examples and tests run with this fix, but if 
one would try to use Lees-Edwards BCs with GPUDomainManager, they would 
be simply ignored as of now.
@prabhuramachandran
Copy link
Contributor

@nilsmeyerkit -- thanks for this! This takes a lot of effort and time so I am grateful that you have taken the time to contribute these changes! I have been completely swamped with other things this week and it looks like it will be this way until end of this week at least. I think I will only be able to take a close look this weekend. On a quick look my current issues are the following:

  • changing nnps_base and the domain manager is not a good idea. A subclass would be better as this is highly specialized and is only used in your example and not by anything else. Perhaps there is a design issue where we need to make it easier to extend some of these things. The periodicity handling is not ideal currently.
  • I see a few indentation issues in the pyx file that I will mark when I do the full review.
  • This is minor but I am not sure we should add more get_particle_array_xxx to the utils. As PySPH grows some of these really need to be cleaned up and initially they were convenient but now as the repository grows there seem to be too many of these.

@meyer-nils
Copy link
Author

@prabhuramachandran - thank you for your feedback. I can certainly make some improvements based on your full review. Though, it might take a while as this is just a side project of mine.

Thanks
Nils

@prabhuramachandran
Copy link
Contributor

Hi @nilsmeyerkit -- I am terribly sorry for completely dropping the ball on this. As I go over the PR again now, I am not sure it makes sense to incorporate all of this directly into pysph because I am not sure I will be able to maintain and fix this feature in the future. For all of our papers in https://gitlab.com/pypr, we only pull in changes into pysph if the functionality is general enough that it warrants inclusion in PySPH or if some basic feature is needed in pysph that is required. Given this, do you think there is any generic functionality that is essential for your research that we should incorporate into pysph? I will be happy to discuss that. What do you think? My apologies again for not getting back on this.

@meyer-nils
Copy link
Author

Dear Prabhu,
I understand that this is a rather niche topic. A general feature that might be interesting for multiple pysph users could be the incorporation of Lees-Edwards boundary conditions. I use them to apply shear to a completely periodic cube and implemented them in a rough way. As these modifications affect the very core of pysph, it would be great to see a general option for Lees-Edwards BCs in pysph. Do you think, that would be of interest for other users?
Cheers, Nils

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants