febiosoftware / febio Goto Github PK
View Code? Open in Web Editor NEWFEBio Suite Solver
Home Page: https://febio.org/
License: MIT License
FEBio Suite Solver
Home Page: https://febio.org/
License: MIT License
FEBio v3.6 restarting simulation with mapped material parameter does not work.
Here is a simple example
febio3 -i mapped_material.feb -dump -break 0.1
then quit and restart:
febio3 -r mapped_material.dmp
If the material parameter is not mapped, restarting the example works fine.
Hi,
From the docs it appears to me that the prestrain gradient (for incompressible materials) should have determinant 1. Is this correct?
When this is not the case, I frequently encounter negative Jacobian
. I'm trying to represent a time-dependent growth process in an incompressible material. Is this possible to do via the prestrain gradient with determinant < 1?
The documentation for parameter optimization is out of date with the current version of FEBio.
The documentation in the FEBio manual is for version 2.0.
Other useful features:
The "Fibers" section of the User's Manual (currently 4.2.5) describes fiber constitutive models. It is currently contained in the subsection 4.2, "Continuous Fiber Distribution". This is confusing because it implies that the fiber models can only be used with a continuous fiber distribution. The documentation itself does not provide further clarification. I think the Fibers subsection should be moved under subsection 4.1, Elastic Solids, and the documentation needs to be updated to clarify that the fiber models can be used without a distribution (but should be used with a matrix term).
Hello,
I would like to use FEBio as the main solver for bone mechanics and damage, which requires mapping the scalar field of bone density obtained from CT onto FE space (discontinuous Galerkin). Is similar functionality available in FEBio solver?
I would like to ask if FEBio can define the femur as the movement in global coordinates and the tibia as the movement in the coordinate system (local coordinate system) with reference to the femur.
Would it be possible to implement the Yeoh model in FEBio?
This is a very general question, but I was wondering if the solver developers had considered auto-07p
for bifurcation analysis (for example in the 1D case, link), and if it can be used at all in the 3D case. As I understand, currently solutions cannot be continued in FEBio when they become multivalued. This would be highly useful when it is not known a priori how to break symmetries in the system to favor one solution or another at unknown elastic instabilities.
Currently, only node, element, rigid body and connector data can be stored to the log file.
Need to add option for storing surface data, for instance, for exporting contact pressures etc.
Make it possible to specify log output for specific analysis steps. E.g.
<logfile>
<node_data data="vx;z;y" node_set="Nodeset01" delim=", " file="node_data.txt"/> (only want this for analysis step 2)
<element_data data="x;y;sz;syz;Ez;Eyz" elem_set="Elements01" delim=", " file="element_data.txt"/> (only want this for analysis step 1)
</logfile>
From forum post.
Hey so I'm currently working on a FEBio Plugin which exchanges Mesh data with another simulation and I'm wondering if I understood the data structure correct. I drew my self this image to understand the relationship between the Mesh, Element and nodes.
Mesh contains nodes and elements. n Nodes form an element. An element contains the integration points/material points, that store the actual simulation data values.
So first question would be is that correct or did I miss something?
and my second question is, if I'm trying to access/manipulate the data values in the FEBio simulation, should I access the material points directly or is there a better way?
In one of my GIBBON demos I output principal Cauchy stresses, for a selection of solid elements (tet4), to a log file, i.e. s1;s2;s3
.
Usually the output is in the following form:
430,4.84829e-05,4.72102e-05,4.31673e-05
Where the first number, 430
is the element id and the other 3 numbers would be s1
, s2
, and s3
.
For some elements however I get the following output for Linux:
430,-nan,-nan,-nan
and the following for Windows:
430,-1.#IND,-1.#IND,-1.#IND
I suspect this is this because no reliable eigenvalues are found for that tensor or the outcome is complex? Perhaps you should detect the zero/complex case and replace it by all zeros? Would it make more sense to have 0
instead of -nan
or -1.#IND
? If you do want to export something other than 0, perhaps you can make it consistent across systems e.g. use nan
throughout (handling NaN
is easier/standard and -1.#IND
throws an error or requires special treatment)
Thanks. I attach the .feb file (had to rename it to txt for GitHub) here if you want to run it yourself.
Hi,
I am looking to add a prescribed displacement on the edges of my cylindrical mesh. I would like to a specific displacement vector for each node at every time step and I am unsure how it should be done.
Any guidance would be greatly appreciated. Thanks,
Pete
@SteveMaas1978 The initial state for stretch type data should be 1. However the log files exported by FEBio currently export a 0.
For instance, using:
<logfile file="tempModel.txt">
<element_data data="U1;U2;U3" delim="," file="tempModel_stretch_prin_out.txt"/>
</logfile>
Leads to a log file containing:
*Step = 0
*Time = 0
*Data = U1;U2;U3
1,0,0,0
2,0,0,0
3,0,0,0
...
I would check this for other stretch type data exports too if possible.
could you add a basic ROADMAP.md (example here: https://github.com/gibbonCode/GIBBON/blob/master/ROADMAP.md)
In it you could highlight some short and long term goals and milestones for FEBio. It would be nice to also include a view to adding the discussed topology optimization functionality to FEBio in the roadmap.
Using the roadmap users wanting to contribute gain an understanding in terms of what the grand plan is and where they might be able to help.
You can link to the roadmap in your readme and also the contributing guidelines.
Hi,
This suggestion is further to a discussion on the FEBio forums (https://forums.febio.org/forum/febio-studio-forum/users-forum-ad/18941-method-to-implement-a-sticky-sliding-contact).
Currently there is no easy way to model just one half of a fracture problem (with respect to a central single plane fracture line). A breakable tension option for the sliding elastic contact would allow one to model one half of a symmetrical deformable body up against a meshed rigid wall and use this proposed version of the contact to model the problem.
Kind Regards,
Matt
Request from this forum post.
Implement a way to calculate area coverage as a model output.
Add a log output variable that stores the current element volume.
I am trying to do some multiphasic benchmark test using .feb input files from Repository/Test Suite. However, it tells me "Invalid version for febio_spec" when I open every .feb file in Repository/Test Suite/Multiphasic. Could you advise on how to run the benchmark files in the repository?
Add a COC.md file to the main folder and link to it from the readme:
You can use this template (fill in a valid email address from the group):
https://www.contributor-covenant.org/
In the latest release of Studio (1.7.1), the fiber generator tool causes the program to crash when applying a value to a node.
As mentioned in a couple of past threads in the Users Forum, it would be convenient to have node-to-node discrete dampers, like the node-to-node discrete springs. This would avoid the complications involved in having to use rigid bodies to define dampers.
FEBio Studio 2.1.1 (with FEBio 4.1) suddenly crashed when I am trying to model multi-phasic contact, as guided by the FEBio Studio Webinar Biphasic Materials Part 2. The following steps are my operations:
Step 1: start a new multiphasic analysis model;
Step 2: create a slice at position (0,0,0) with parameters Radius=1.5, Height=1, Angle=180;
Step 3: in the mesh option, set the Mesh Parameters as Slices=16, Segments=8, Stacks=8, Z-bias=1, R-bias=1, then click "Apply";
Step 4: Click "Convert" and then change the mesh to "Editable mesh";
Step 5: Click "Boundary Layer" and set Bias=2, Segments=5, select the outer surface and click "Apply" - then the following dialog box appears and then FEBio Studio automatically closed.
All the operations are the same as guided in Webinar, except I use the Multiphasic Analysis. The same operations in Biphasic Analysis are fine, but it failed in Multiphasic Analysis.
Moreover, the same operations work well in FEBio Studio 1.9 (with FEBio 3.8).
Could you help to solve this issue?
Summary: Usually for time varying parameters controlled by a loadcurve, the value used for a particular time is the result of multiplying the value set by the current loadcurve amplitude. It seems that for the dtmax
parameter the value set is ingnored and the value is instead always solely based on the loadcurve amplitude.
When so-called "must-points" are needed the dtmax parameter can be specified with a load_controller
/ loadcurve
. Below I assign the value 0.01 i.e. a constant dtmax
, but by using the loadcurve I enforce must-points:
Time stepper parts of the control section:
<time_stepper>
<dtmin>1.0000000e-04</dtmin>
<max_retries>5</max_retries>
<opt_iter>12</opt_iter>
<dtmax lc="1">1</dtmax>
</time_stepper>
The load curve specification:
<load_controller id="1" type="loadcurve">
<interpolate>STEP</interpolate>
<points>
<point>0.0000000e+00, 1.0000000e-02</point>
<point>2.5000000e-01, 1.0000000e-02</point>
<point>5.0000000e-01, 1.0000000e-02</point>
<point>7.5000000e-01, 1.0000000e-02</point>
<point>1.0000000e+00, 1.0000000e-02</point>
</points>
</load_controller>
The above works fine. However if I switch to the below the dtmax
parameter appears to be 1 (the loadcurve amplitude), rather than 0.01 * the loadcurve amplitude.
Time stepper parts of the control section:
<time_stepper>
<dtmin>1.0000000e-04</dtmin>
<max_retries>5</max_retries>
<opt_iter>12</opt_iter>
<dtmax lc="1">1.0000000e-02</dtmax>
</time_stepper>
The load curve specification:
<load_controller id="1" type="loadcurve">
<interpolate>STEP</interpolate>
<points>
<point>0.0000000e+00, 1.0000000e+00</point>
<point>2.5000000e-01, 1.0000000e+00</point>
<point>5.0000000e-01, 1.0000000e+00</point>
<point>7.5000000e-01, 1.0000000e+00</point>
<point>1.0000000e+00, 1.0000000e+00</point>
</points>
</load_controller>
When adding or deleting parts to a model (or any mechanism that adds or deletes elements), contact surfaces are lost as the mesh gets renumbered.
It would be a great feature to have the ability to retain contact surfaces, as long as the contact surfaces themselves aren't changing.
This could take the form of having the ability to "disable" parts during export, so the parts don't actually have to be deleted.
@SteveMaas1978 I have a model where this runs fine:
<material id="1" name="Material1" type="neo-Hookean">
<E type="map">MaterialParameterMap1</E>
<v>4.0000000e-01</v>
</material>
But the following fails with an FEBio error saying tag "c1" (line 46) : invalid attribute "type"
:
<material id="1" name="Material1" type="Ogden unconstrained">
<c1 type="map">MaterialParameterMap1</c1>
<m1>2</m1>
<cp>5.0050000e+01</cp>
</material>
Is the material parameter mapping not implemented for all materials? I also tried the Ogden
form but got the same issue.
Hello,
The type=”math” attribute works for E but it makes an error for phi0 (in biphasic). I am wondering to know what's the reason for that since they are both model parameter.
Please see the attached zip file.
Case_A.feb which is type=”math” for E. It works properly.
Case_B.feb which is type=”math” for phi0. I had an error.
tag "phi0" (line 35) : invalid attribute "type"
Thanks!
It would be convenient if there was an option in febio3 to output face quantities such as contact pressure/traction to a logfile (like you can for nodal and element quantities).
I am aware that it may be done using Postview e.g. as mentioned in the thread https://forums.febio.org/showthread....ntact+pressure, but I would like to automate this as I use my model with Monte Carlo sampling and run it many times.
I am working on a python parser for the plot file (.xplt) and it is working correctly for non-compressed files. I have a large dataset that contains compressed plot files and I need to be able to read them and extract all state data. Where can I find the documentation for compressed plot formats?
Thanks.
The attached file runs fine in FEBio2 but produces the following error in FEBio3:
ERROR *
*
*
The issue arises because an object consists of two parts with hex8 and penta6 elements, and boundary conditions are being applied on a face that includes quad4 and tri3 elements. Backward compatibility needs to be enforced for this very basic type of situation.
The contact gap values are always reported as zero in the plot file for node-on-facet contact.
It would be very beneficial for some applications to have an option to use beam elements. The beam profile could just be circular, as that would probably account for most applications (surfaces can already be used for rectangular profiles). Is this somewhere on the roadmap by any chance?
Users cannot map element data to the F0 parameter of the prestrain gradient.
This is due to the changes in FEBio3 related to defining heterogenous parameters. The prestrain material has not been updated to make use of this new framework.
I'm trying to install FEBio 3.8 from source and get:
[ 54%] Building CXX object CMakeFiles/febiomix.dir/FEBioMix/FESBMPointSource.cpp.o
/home/thor/software/FEBio-3.8/FEBioMix/FESBMPointSource.cpp: In member function ‘void FESBMPointSource::FindNodesInRadius(std::vector<FEMaterialPoint*>&, double&)’:
/home/thor/software/FEBio-3.8/FEBioMix/FESBMPointSource.cpp:360:53: error: ‘numeric_limits’ is not a member of ‘std’
360 | double min_d = std::numeric_limits<double>::max();
| ^~~~~~~~~~~~~~
/home/thor/software/FEBio-3.8/FEBioMix/FESBMPointSource.cpp:360:68: error: expected primary-expression before ‘double’
360 | double min_d = std::numeric_limits<double>::max();
| ^~~~~~
make[2]: *** [CMakeFiles/febiomix.dir/build.make:972: CMakeFiles/febiomix.dir/FEBioMix/FESBMPointSource.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:185: CMakeFiles/febiomix.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
System is Pop-OS (Ubuntu 22.04 LTS based), gcc 11.3.
I have installed LEVMAR, MKL, and MMG.
I would like to know if FEBio can define the femur as the movement in global coordinates and the tibia as the movement in the coordinate system (local coordinate system) with reference to the femur? If so, how should I set it?
FEBio 3.1.0 (the Nov 23 release from https://febio.org/downloads/) does not recognize prescribed node-varying boundary conditions in an XML file that conforms to FEBio input specification 2.5. According to the FEBio 3.0 manual, FEBio 3.0 is still supposed to support FEBio input specification 2.5 ("This format is still supported but considered obsolete.").
For example, a file with an <febio_spec version="2.5">
declaration that contains
<Boundary>
<prescribe bc="z" node_set="node_set_bc_x3">
<scale lc="2">1.0</scale>
<value node_data="node_data_bc_x3"/> <!-- this is the line 703 referred to in the subsequent error -->
<relative>0</relative>
</prescribe>
</Boundary>
when run in FEBio 3.1.0 produces the error tag "value" (line 703) : unrecognized tag
.
Based on Issue #18, I gather that lack of support for input specification 2.5 might be considered normal for FEBio 3. If so, please consider this issue as a request to revise the manual to reflect that FEBio 3 only runs input specification 3.0, or otherwise clarify what the limits of backwards compatibility are for FEBio 3.
I have no objection to a clean break in compatibility if that makes development easier. Mostly I just need to know whether I can drop support for input specification 2.5 in my own work. If FEBio 3 can't read it, it's functionally dead, as FEBio 3 has critical bug fixes vs. FEBio 2.
Add contributing guidelines e.g. in the form of a CONTRIBUTING.md file, and link to it in the readme.
Here is an example for GIBBON:
https://github.com/gibbonCode/GIBBON/blob/master/CONTRIBUTING.md
Here is another template:
https://gist.github.com/PurpleBooth/b24679402957c63ec426
Hi
I am getting an error while running an FSI contact problem. I have attached the related files here with this message.
FSI practice2 .zip
When run FEBio 3.1.0 with the -silent flag in Mac it prints:
and in Windows it prints
Is there another way to suppress them?
The current user manual entry for the natural neo-Hookean
material lists the parameters G
and k
. However, the source implements it instead with E
and v
.
13-node pyramid elements would be extremely useful, especially for individual-specific modeling. The ability to transition between 10-node tetrahedral elements and 20-node brick elements without using tied constraints would be great.
I can't find any documentation in the User's Manual or the Theory Manual that describes the representation of rigid bodies in FEBio. Users need to know how rotations are represented, etc.
Given a prescribed displacement boundary condition applied to nodes and "reaction forces" specified as a plotfile variable, FEBio ≥ 3.4 output zero for all 3 reaction force components for all nodes, whereas FEBio ≤ 3.3 output nonzero nodal reaction forces. The FEBio 3.4 release was also when rigid body reaction forces were moved from node state data to object state data, but this issue is not about rigid body forces, just regular node reaction forces. No rigid bodies are involved.
To reproduce, run the attached .feb file (which has been given the .txt extension so Github accepts it as an attachment) with various FEBio versions and check the reaction force output in FEBio Studio, or your tool of choice. The file is a toy example of confined compression.
Expected: All boundary nodes subject to confinement (prescribed displacement = 0) should have nonzero reaction force associated with this constraint.
Actual: All nodes have zero reaction force.
FEBio | Non-rigid node reaction forces |
---|---|
3.2.0 | Nonzero |
3.3.3 | Nonzero |
3.4.0 | Zero |
3.5.1 | Zero |
3.6.0 | Zero |
The practical impact of this is that it is difficult to measure the confinement force in a confined compression simulation. It is often worthwhile to check these reaction forces to see if the simulated confinement switches from compression to tension.
I think it would be useful to define parameters for a callbackplugin in an inputfile like:
'
BEGIN_FECORE_CLASS(MyCallback, FECallBack);
ADD_PARAMETER(m_test, FE_RANGE_GREATER(0.0), "test");
END_FECORE_CLASS();
'
One way could be to add the virtual functions
'
void theClass::BuildParamList()
'
to the FECallBack class but i am not really sure about this.
If there is already way to use this functionality in FEBio, please let me know.
best regards
Steffen
Febio 3.1.0 doesn't recognize "laugon" tag inside the "material" in FEBio files using 2.5 format.
Uniaxial_2_5.txt.
Is it possible to have a birth and death feature for nonlinear spring in FEBio? I mean is there any way to activate and deactivate nonlinear spring during specific time.
Request from FEBio forum:
https://forums.febio.org/forum/febio-studio-forum/users-forum-ad/18358-birth-and-death-feature-for-nonlinear-spring
Using more than 2 rigid connectors in a structural analysis gives a segmentation fault at the beginning of 2nd time step (I have tried both "rigid spring" and "rigid damper").
The error may be reproduced by running the small input file oscillator.feb.txt , which solves in febio2.9 but in febio3 it fails unless I remove 1 or 2 springs (~line 82).
Is it possible to create an option to create output files in vtk format?
The plot_stride parameter allows users to specify how often to write the model's state to the plot file.
A similar feature for log file output would be useful.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.