The code in this repository is a library written in Fortran with bindings for C and Python for simulating pulmonary function.
Documentation for this library is available on readthedocs, and the status of the documentation build is: .
Pulmonary simulation library - Aether
License: Apache License 2.0
The code in this repository is a library written in Fortran with bindings for C and Python for simulating pulmonary function.
Documentation for this library is available on readthedocs, and the status of the documentation build is: .
Replace with equivalent integer-based no_type.
Gas transport model needs work and testing to provide expected results from published works
Probably because the aether.dll and aether_c.dll couldn't be found.
I think every Lungsim user would highly benefit from if there was some sort of documentation or at least concise commenting on all the arrays defined in "arrays.f90" with what each index of those arrays is for and includes. A full description of each array with order of indices in each.
i.e. elem_cnct_2d( : , : , : ) which is an allocatable integer defined in arrays.f90. What is each index represents and means (like number of node, connected to other elements or the values that it can take, upstream, downstream elements and etc.)
In " define_node_geometry " subroutine, when reading the 1D *.ipnode file, for identifying the version for nodes (whether is has more than one version or not) the code checks to find N ( a upper case N ) in the header of the file as " No ". Therefore, unless it is written with " capital N " in the file, the Fortran code expects more than one version for some nodes and is going to look for an integer as number of versions for the first node and can not find one.
When growing in all the lobes, the first one to grow from has to be RLL (I suspect because it has the most number of nodes/elems). If you try to do it in another way it will crash because of memory mismatch.
This must be done in a way such that we avoid duplication of code (i.e. resistance calculation routines)
Aim is to ultimately allow for concurrent ventilation/perfusion simulations
The sitepackageslocations script is not working with Python 3 the site-packages directories are not written out to stdout. This means numpy cannot be found.
When done with growing tree using our python bindings, the export (node and element) already available writes out an exnode and exelem file. But, for running perfusion and ventilation codes, defining the geometry of the full tree the ipnode & ipelem is needed, therefore, a python bindings to write these files needs to be made.
gfortran on hpc is version 5, support for %im, and %re are not available until gfortran 9. We need to find a cross-compiler solution for getting the real and imaginary parts of a complex number.
When I tried to run the test on windows I got a fatal exception, probably because the aether.dll could not be loaded by the test application.
Needs to export one or more of the gas exchange field indices
modify the fitting code to be specific to the 2D cubic Hermite meshes used in LungSim; need option to 'import' an exported 2D mesh rather than having to read ipfile formats
I have noticed that there is a numpy.i file at ./bindings/interface/numpy.i. Why is this file still here and why is it not currently in use?
create a subroutine in geometry.f90, named scale_airway_geometry. This new subroutine is for scaling airway tree to match different lung volume.
Need a more generalised structure to the indices module, such that indices are set up based on problem type.
Trying to build on windows with Visual Studio 2017 and Intel Studio 2018 and it is failing because of unresolved symbols.
I have some code on tree wave propagation that has not been merged. Should this be part of the codebase?
This should be the main solve routine for any transport problem, eg. gas exchange, gas mixing, particle transport and any subroutines common to all.
Lungsim does not build when cloning and building from a subfolder whose total char name (from root) is longer than certain character long. It gives the following error:
tests/lib/CMakeFiles/diagnostics_test.dir/build.make:92: recipe for target 'tests/lib/CMakeFiles/diagnostics_test.dir//pFUnit-3.2.9/include/TestUtil.F90.o' failed
make[2]: *** [tests/lib/CMakeFiles/diagnostics_test.dir//pFUnit-3.2.9/include/TestUtil.F90.o] Error 1
make[2]: *** Waiting for unfinished jobs....
These indices are ambiguous, need to be renamed to ne_Vdot, nu_Vdot, ne_Qdot, nu_Qdot etc. to indicate what is ventilation or blood flow results.
Currently there are two places that the version number of the library is hardcoded to. There should only be one location to stop the chance of releasing code with different version numbers present.
At present most species transport models are solved after ventilation and/or perfusion, there needs to be a check that fields are present (not zero everywhere!) for pre-requisites and if missing should default to a linear gradient in V and/or Q
The documentation for setting up Python virtual environments on Windows is (or rather multi-configuration environments) is not correct and this section requires further explanation for this scenario.
Geometry module requires a cleanup.
Some basic functions and subroutines need to be moved to mesh_utilities etc.
Currently there is a directory ./src/bindings/c/src where the C wrapping library source files exist. I think it should probably now be ./src/bindings/c. This has possibly been missed from issue #16.
We need to merge in changes to the previous iteration of this codebase, making sure that the structure of this new code base is retained and that new features are tested
The codebase could be reorganised to make it follow a more standardised structure that should/could make it easier for new people to work with.
Currently, when IPDATA has (x,y,z) and include one or two fields, define_data_geometry is not able to handle this.
For reading back terminal_solution from perfusion model (and time step terminal exports from wave_transmission) and also the flow map intensity and the terminal cluster label, we need to be able to import terminal node values and even an implementation such that the user can read multiple fields from file.
adapting the call to grow_tree to give a list of surface elements to grow into (instead of all elements). adding curved surfaces to the triangularisation that is used for make_data_grid and for checking whether a generated branch is inside the surface element list.
Now, grow_tree subroutine has two additional inputs (to_export & filename) - option to export terminal element mapping to data points - which have been added to this subroutine. Currently, the subroutine is not working to create the desired output. This need to be fixed.
SuperLU solver needs superlu C library to build. Automatic fetching the library needed while building the Aether library. (Satisfying the requirement for the package build)
We may need to add a better FindPython module that the one that currently ships with CMake. This will become more evident if we add Python testing into the codebase.
fortran_src in conf.py for documentation appears to be hard coded to search for legacy locations of src. Need to generalise
fortran_src = ['/people/acla148/lung/NEONlung/Library/src/arrays.f90','/people/acla148/lung/NEONlung/Library/src/geometry.f90']
This includes calculation of unit vectors, scalar products, which are math not mesh operations.
Documentation for installation needs to be updated.
When lung density is available and a mesh of the lung is also available, need a code(and API) to split the density (exdata) into lobes
FRUIT is a Fortran testing framework that should be used to develop the code with a test driven development approach. Adding FRUIT would be the start of enabling this.
After the addition of pFUnit the CMake GUI interface has become overrun with new options. Tidying this up would help.
We need to be able to grow airway trees from 'template' structures extracted from CT. We need to set up the correct subroutines to do this, and create tests
pFUnit is recompiling every time new build files are generated and it takes a long time to do so. We need to change to the build so we only build pFUnit when we have to.
We need to set up tests for the ventilation module (ventilation.f90) so we know that when we make changes our solution is the same, or if it changes we have very good justification that it needs to be changed.
Needs to have extendible parameter types based on the model
Required for species transport modules
For the purpose of 1D-3D coupling for blood vessels, the 1D models need to be able to handle multiple inlets as boundary conditions
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.