fdsreader 1.10.2__tar.gz → 1.10.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fdsreader-1.10.3/.gitattributes +1 -0
- fdsreader-1.10.3/.github/workflows/joss.yml +36 -0
- fdsreader-1.10.3/.github/workflows/testsuite.yml +42 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/PKG-INFO +2 -2
- {fdsreader-1.10.2 → fdsreader-1.10.3}/README.md +1 -1
- {fdsreader-1.10.2 → fdsreader-1.10.3}/RELEASE.md +3 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/bndf/bndf_example_anim.py +0 -2
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/bndf/fds_data/wall_005.fds +4 -4
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/devc/devc_example.py +1 -1
- fdsreader-1.10.3/examples/devc/fds_steckler/steckler.fds +43 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/geom/fds_data/sphere_radiate.fds +1 -1
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/geom/geom_example.py +2 -0
- fdsreader-1.10.3/examples/isof/fds_steckler/input_steckler.fds +40 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/isof/isof_example.py +2 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/part/part_example.py +7 -10
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/slcf/fds_steckler/input_steckler.fds +1 -1
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/_version.py +1 -1
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/evac/evac_collection.py +2 -1
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/evac/evacuation.py +1 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/part/particle_collection.py +5 -7
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader.egg-info/PKG-INFO +2 -2
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader.egg-info/SOURCES.txt +21 -3
- fdsreader-1.10.3/paper.bib +18 -0
- fdsreader-1.10.3/paper.md +64 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_bndf.py +9 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_devc.py +6 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_geom.py +9 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_isof.py +10 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_part.py +11 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_pl3d.py +10 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_slcf.py +8 -0
- fdsreader-1.10.3/tests/acceptance_tests/test_smoke3d.py +10 -0
- fdsreader-1.10.3/tests/cases/bndf_data.tgz +0 -0
- fdsreader-1.10.3/tests/cases/devc_data.tgz +0 -0
- fdsreader-1.10.3/tests/cases/geom_data.tgz +0 -0
- fdsreader-1.10.3/tests/cases/part_data.tgz +0 -0
- fdsreader-1.10.3/tests/cases/pl3d_data.tgz +0 -0
- fdsreader-1.10.3/tests/cases/steckler_data.tgz +0 -0
- fdsreader-1.10.2/examples/devc/fds_steckler/steckler.fds +0 -40
- fdsreader-1.10.2/examples/isof/fds_steckler/input_steckler.fds +0 -122
- fdsreader-1.10.2/examples/part/fds_data/impact.fds +0 -29
- {fdsreader-1.10.2 → fdsreader-1.10.3}/.gitignore +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/.travis.yml +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/Dockerfile +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/LICENSE +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/MANIFEST.in +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docker_deployment.sh +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/bndf.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/conf.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/devc.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/evac.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/export.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/fds_classes.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/geom.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/img/data-structure.drawio +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/img/data-structure.svg +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/index.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/isof.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/part.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/pl3d.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/quantity.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/simulation.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/slcf.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/smoke3d.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/docs/utils.rst +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/evac/evac_example.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/evac/fds_fed/fed_verification_multi_mesh.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/evac/fds_no_fed/stairs_evss_meshes.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/export/export_all.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/export/obst_export.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/export/slcf_export.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/export/smoke3d_export.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/geom/fds_geomslices/PWB01_GEOM.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/geom/geom_slices.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/pl3d/fds_data/vort3d_80.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/pl3d/pl3d_example.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/slcf/fds_data/vort2d_80.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/slcf/fds_multimesh/multimesh.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/slcf/slcf_example_global.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/slcf/slcf_example_mask.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/smoke3d/fds_steckler/input_steckler.fds +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/examples/smoke3d/smoke3d_example.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/bndf/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/bndf/obstruction.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/bndf/obstruction_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/bndf/utils.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/devc/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/devc/device.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/devc/device_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/evac/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/export/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/export/obst_exporter.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/export/sim_exporter.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/export/slcf_exporter.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/export/smoke3d_exporter.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/fds_classes/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/fds_classes/mesh.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/fds_classes/mesh_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/fds_classes/surface.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/fds_classes/ventilation.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/geom/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/geom/geometry.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/geom/geometry_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/isof/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/isof/isosurface.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/isof/isosurface_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/part/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/part/particle.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/pl3d/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/pl3d/pl3d.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/pl3d/plot3D_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/settings.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/simulation.py +1 -1
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/slcf/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/slcf/geomslice.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/slcf/geomslice_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/slcf/slice.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/slcf/slice_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/smoke3d/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/smoke3d/smoke3D_collection.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/smoke3d/smoke3d.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/utils/__init__.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/utils/data.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/utils/dimension.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/utils/extent.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/utils/fortran_data.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader/utils/misc.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader.egg-info/dependency_links.txt +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader.egg-info/requires.txt +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/fdsreader.egg-info/top_level.txt +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/requirements.txt +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/setup.cfg +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/setup.py +0 -0
- {fdsreader-1.10.2 → fdsreader-1.10.3}/tests/test.smv +0 -0
- /fdsreader-1.10.2/tests/test.py → /fdsreader-1.10.3/tests/test_version_compatibility.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: FDSreader JOSS submission paper
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch: {}
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- master
|
|
8
|
+
paths:
|
|
9
|
+
- 'paper.md'
|
|
10
|
+
- 'paper.bib'
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- 'paper.md'
|
|
14
|
+
- 'paper.bib'
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
paper:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
name: Paper Draft
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
- name: Build draft PDF
|
|
27
|
+
uses: openjournals/openjournals-draft-action@master
|
|
28
|
+
with:
|
|
29
|
+
journal: joss
|
|
30
|
+
# This should be the path to the paper within your repo.
|
|
31
|
+
paper-path: paper.md
|
|
32
|
+
- name: Upload
|
|
33
|
+
uses: actions/upload-artifact@v1
|
|
34
|
+
with:
|
|
35
|
+
name: paper
|
|
36
|
+
path: paper.pdf
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# This workflow will install Python dependencies, run tests and lint with a single version of Python
|
|
2
|
+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
|
3
|
+
|
|
4
|
+
name: FDSreader testsuite
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
workflow_dispatch: {}
|
|
8
|
+
push:
|
|
9
|
+
branches:
|
|
10
|
+
- master
|
|
11
|
+
paths:
|
|
12
|
+
- 'fdsreader/**'
|
|
13
|
+
pull_request:
|
|
14
|
+
paths:
|
|
15
|
+
- 'fdsreader/**'
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
run-tests:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
lfs: true
|
|
27
|
+
- uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version: '3.10'
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: |
|
|
32
|
+
python -m pip install --upgrade pip
|
|
33
|
+
pip install pytest numpy
|
|
34
|
+
pip install ${{ github.workspace }}
|
|
35
|
+
- name: Prepare test cases
|
|
36
|
+
run: |
|
|
37
|
+
cd ${{ github.workspace }}/tests/cases/
|
|
38
|
+
for f in *.tgz; do tar -xzvf "$f"; done
|
|
39
|
+
- name: Test with pytest
|
|
40
|
+
run: |
|
|
41
|
+
cd ${{ github.workspace }}/tests/cases
|
|
42
|
+
pytest ../acceptance_tests/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fdsreader
|
|
3
|
-
Version: 1.10.
|
|
3
|
+
Version: 1.10.3
|
|
4
4
|
Summary: Python reader for data generated by FDS.
|
|
5
5
|
Home-page: https://github.com/FireDynamics/fdsreader
|
|
6
6
|
Author: FZJ IAS-7 (Jan Vogelsang, Prof. Dr. Lukas Arnold, Tristan Hehnen)
|
|
@@ -89,7 +89,7 @@ It is also possible to deploy to PyPI and Github pages manually using the follow
|
|
|
89
89
|
3. sphinx-build -b html docs docs/build
|
|
90
90
|
4. cd .. && mkdir gh-pages && cd gh-pages
|
|
91
91
|
5. git init && git remote add origin git@github.com:FireDynamics/fdsreader.git
|
|
92
|
-
6. git fetch
|
|
92
|
+
6. git fetch origin gh-pages:gh-pages
|
|
93
93
|
7. git checkout gh-pages
|
|
94
94
|
8. cp -r ../fdsreader/docs/build/* .
|
|
95
95
|
9. git add . && git commit -m "..." && git push origin HEAD:gh-pages
|
|
@@ -72,7 +72,7 @@ It is also possible to deploy to PyPI and Github pages manually using the follow
|
|
|
72
72
|
3. sphinx-build -b html docs docs/build
|
|
73
73
|
4. cd .. && mkdir gh-pages && cd gh-pages
|
|
74
74
|
5. git init && git remote add origin git@github.com:FireDynamics/fdsreader.git
|
|
75
|
-
6. git fetch
|
|
75
|
+
6. git fetch origin gh-pages:gh-pages
|
|
76
76
|
7. git checkout gh-pages
|
|
77
77
|
8. cp -r ../fdsreader/docs/build/* .
|
|
78
78
|
9. git add . && git commit -m "..." && git push origin HEAD:gh-pages
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
## Release History
|
|
2
|
+
* 1.10.3
|
|
3
|
+
* Fixed particle documentation
|
|
4
|
+
* Fixed bug for particles when using more than one quantity
|
|
2
5
|
* 1.10.2
|
|
3
6
|
* Fixed to_global function for Plot3D data with obstruction masks
|
|
4
7
|
* Fixed to_global function for Smoke3D data with obstruction masks
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
&HEAD CHID='wall_test'
|
|
2
|
-
|
|
3
|
-
&TIME T_END=20.0
|
|
1
|
+
&HEAD CHID='wall_test' /
|
|
2
|
+
|
|
3
|
+
&TIME T_END=20.0, TIME_SHRINK_FACTOR=10./
|
|
4
4
|
|
|
5
5
|
&MULT ID='mesh', DX=1, DY=0.8, I_UPPER=3, J_UPPER=5,/
|
|
6
6
|
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
&VENT XB=-0.3,1.1,0.4,1.7,0.45,0.45 SURF_ID='Brandfläche'/
|
|
89
|
-
&REAC ID='Brandfläche', FUEL='PUR', SPEC_ID_NU = 'PUR','AIR','PRODUCTS', NU= -1,-4.043567,1
|
|
89
|
+
&REAC ID='Brandfläche', FUEL='PUR', SPEC_ID_NU = 'PUR','AIR','PRODUCTS', NU= -1,-4.043567,1., HEAT_OF_COMBUSTION=40000 /
|
|
90
90
|
&SURF ID='Brandfläche',SPEC_ID='PUR', HRRPUA=2823.129, COLOR='RED', RAMP_Q='fire_ramp'/
|
|
91
91
|
|
|
92
92
|
/Vorgabe der Brandkurve
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
&HEAD CHID='Steckler', TITLE='Steckler Compartment'/
|
|
2
|
+
|
|
3
|
+
&MESH IJK=36,28,22, XB=0.00,3.60,-1.40,1.40,0.00,2.13 /
|
|
4
|
+
|
|
5
|
+
&TIME T_END=100.0, TIME_SHRINK_FACTOR=10. /
|
|
6
|
+
&DUMP NFRAMES=100, DT_DEVC=10., DT_HRR=10., SIG_FIGS=4, SIG_FIGS_EXP=2 /
|
|
7
|
+
|
|
8
|
+
&MISC TMPA=22. /
|
|
9
|
+
|
|
10
|
+
&SURF ID='BURNER',HRRPUA=1048.3,TMP_FRONT=100.,COLOR='ORANGE' / 62.9 kW
|
|
11
|
+
|
|
12
|
+
&HOLE XB=2.75,2.95,-0.10,0.15,0.00,1.83 / 2/6 Door
|
|
13
|
+
|
|
14
|
+
&VENT XB=1.30,1.50,-0.10,0.10,0.00,0.00, SURF_ID='BURNER' / Position A
|
|
15
|
+
&VENT XB=1.25,1.30,-0.05,0.05,0.00,0.00, SURF_ID='BURNER' /
|
|
16
|
+
&VENT XB=1.50,1.55,-0.05,0.05,0.00,0.00, SURF_ID='BURNER' /
|
|
17
|
+
&VENT XB=1.35,1.45,-0.15,-.10,0.00,0.00, SURF_ID='BURNER' /
|
|
18
|
+
&VENT XB=1.35,1.45, 0.10,0.15,0.00,0.00, SURF_ID='BURNER' /
|
|
19
|
+
|
|
20
|
+
&SURF ID='FIBER BOARD', DEFAULT=.TRUE., MATL_ID='INSULATION', THICKNESS=0.013, COLOR='BEIGE' /
|
|
21
|
+
|
|
22
|
+
&REAC FUEL='METHANE',SOOT_YIELD=0. /
|
|
23
|
+
|
|
24
|
+
&OBST XB=2.80,2.90,-1.40,1.40,0.00,2.13 / Wall with door or window
|
|
25
|
+
|
|
26
|
+
&VENT MB='XMAX',SURF_ID='OPEN'/
|
|
27
|
+
&VENT XB= 2.90,3.60,-1.40,-1.40,0.00,2.13, SURF_ID='OPEN'/
|
|
28
|
+
&VENT XB= 2.90,3.60, 1.40, 1.40,0.00,2.13, SURF_ID='OPEN'/
|
|
29
|
+
&VENT XB= 2.90,3.60,-1.40, 1.40,2.13,2.13, SURF_ID='OPEN'/
|
|
30
|
+
|
|
31
|
+
&MATL ID = 'INSULATION'
|
|
32
|
+
DENSITY = 200.
|
|
33
|
+
CONDUCTIVITY = 0.1
|
|
34
|
+
SPECIFIC_HEAT = 1. /
|
|
35
|
+
|
|
36
|
+
&DEVC ID='TC_Room', POINTS=44, XB=2.50,2.50,1.10,1.10,0.02,2.11, QUANTITY='TEMPERATURE', Z_ID='Room_z' /
|
|
37
|
+
&DEVC ID='TC_Door', POINTS=38, XB=2.85,2.85,0.00,0.00,0.02,1.82, QUANTITY='TEMPERATURE', Z_ID='Door_z' /
|
|
38
|
+
&DEVC ID='BP_Door', POINTS=38, XB=2.85,2.85,0.00,0.00,0.02,1.82, QUANTITY='VELOCITY', VELO_INDEX=1, HIDE_COORDINATES=.TRUE. /
|
|
39
|
+
|
|
40
|
+
&DEVC ID='HGL Temp', XB=2.50,2.50,1.10,1.10,0.00,2.13, QUANTITY='UPPER TEMPERATURE' /
|
|
41
|
+
&DEVC ID='HGL Height', XB=2.50,2.50,1.10,1.10,0.00,2.13, QUANTITY='LAYER HEIGHT' /
|
|
42
|
+
|
|
43
|
+
&TAIL /
|
|
@@ -9,6 +9,8 @@ def main():
|
|
|
9
9
|
sim = Simulation("./fds_data")
|
|
10
10
|
|
|
11
11
|
geom = sim.geom_data.filter_by_quantity("Radiative Heat Flux")[0]
|
|
12
|
+
print(len(geom.data[-1]))
|
|
13
|
+
exit()
|
|
12
14
|
|
|
13
15
|
faces = np.hstack(np.append(np.full((geom.faces.shape[0], 1), 3), geom.faces, axis=1))
|
|
14
16
|
pv.PolyData(geom.vertices, faces).plot(scalars=geom.data[0])
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
&HEAD CHID='Steckler_010', TITLE='Steckler Compartment, Test 10'/
|
|
2
|
+
|
|
3
|
+
&MESH IJK=36,28,22, XB=0.00,3.60,-1.40,1.40,0.00,2.13 /
|
|
4
|
+
|
|
5
|
+
&TIME T_END=100.0, TIME_SHRINK_FACTOR=10. /
|
|
6
|
+
&DUMP NFRAMES=100, DT_DEVC=10., DT_HRR=10., SIG_FIGS=4, SIG_FIGS_EXP=2 /
|
|
7
|
+
|
|
8
|
+
&MISC TMPA=22. /
|
|
9
|
+
|
|
10
|
+
&SURF ID='BURNER',HRRPUA=1048.3,TMP_FRONT=100.,COLOR='ORANGE' / 62.9 kW
|
|
11
|
+
|
|
12
|
+
&HOLE XB=2.75,2.95,-0.10,0.15,0.00,1.83 / 2/6 Door
|
|
13
|
+
|
|
14
|
+
&VENT XB=1.30,1.50,-0.10,0.10,0.00,0.00, SURF_ID='BURNER' / Position A
|
|
15
|
+
&VENT XB=1.25,1.30,-0.05,0.05,0.00,0.00, SURF_ID='BURNER' /
|
|
16
|
+
&VENT XB=1.50,1.55,-0.05,0.05,0.00,0.00, SURF_ID='BURNER' /
|
|
17
|
+
&VENT XB=1.35,1.45,-0.15,-.10,0.00,0.00, SURF_ID='BURNER' /
|
|
18
|
+
&VENT XB=1.35,1.45, 0.10,0.15,0.00,0.00, SURF_ID='BURNER' /
|
|
19
|
+
|
|
20
|
+
&SURF ID='FIBER BOARD', DEFAULT=.TRUE., MATL_ID='INSULATION', THICKNESS=0.013, COLOR='BEIGE' /
|
|
21
|
+
|
|
22
|
+
&REAC FUEL='METHANE',SOOT_YIELD=0. /
|
|
23
|
+
|
|
24
|
+
&OBST XB=2.80,2.90,-1.40,1.40,0.00,2.13 / Wall with door or window
|
|
25
|
+
|
|
26
|
+
&VENT MB='XMAX',SURF_ID='OPEN'/
|
|
27
|
+
&VENT XB= 2.90,3.60,-1.40,-1.40,0.00,2.13, SURF_ID='OPEN'/
|
|
28
|
+
&VENT XB= 2.90,3.60, 1.40, 1.40,0.00,2.13, SURF_ID='OPEN'/
|
|
29
|
+
&VENT XB= 2.90,3.60,-1.40, 1.40,2.13,2.13, SURF_ID='OPEN'/
|
|
30
|
+
|
|
31
|
+
&MATL ID = 'INSULATION'
|
|
32
|
+
DENSITY = 200.
|
|
33
|
+
CONDUCTIVITY = 0.1
|
|
34
|
+
SPECIFIC_HEAT = 1. /
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
&ISOF QUANTITY='TEMPERATURE', VALUE(1)=10., VALUE(2)=30., VALUE(3)=60. /
|
|
38
|
+
&ISOF QUANTITY='U-VELOCITY' , VALUE(1)=0.08, QUANTITY2='TEMPERATURE' /
|
|
39
|
+
|
|
40
|
+
&TAIL /
|
|
@@ -9,6 +9,8 @@ def main():
|
|
|
9
9
|
|
|
10
10
|
vertices, triangles, _ = isosurface.to_global(len(isosurface.times) - 1)
|
|
11
11
|
|
|
12
|
+
print(triangles[-1][-1])
|
|
13
|
+
exit()
|
|
12
14
|
# We ignore level 1 as it does not contain any vertices
|
|
13
15
|
# level1 = isosurface.get_pyvista_mesh(vertices, triangles[0])
|
|
14
16
|
level2 = isosurface.get_pyvista_mesh(vertices, triangles[1])
|
|
@@ -6,35 +6,32 @@ def main():
|
|
|
6
6
|
sim = fds.Simulation("./fds_data")
|
|
7
7
|
|
|
8
8
|
# Get all particles with specified id
|
|
9
|
-
particles = sim.particles["
|
|
9
|
+
particles = sim.particles["WATER PARTICLES"]
|
|
10
10
|
|
|
11
11
|
# Get all data for the specified quantity
|
|
12
|
-
# quantity = "PARTICLE
|
|
12
|
+
# quantity = "PARTICLE VELOCITY"
|
|
13
13
|
quantity = "PARTICLE DIAMETER"
|
|
14
14
|
color_data = particles.data[quantity]
|
|
15
|
-
|
|
16
15
|
t_0 = next(i for i, pos in enumerate(particles.positions) if pos.shape[0] != 0)
|
|
17
16
|
|
|
18
17
|
# Create PyVista animation
|
|
19
|
-
plotter = pv.Plotter()
|
|
18
|
+
plotter = pv.Plotter(notebook=False, off_screen=True)
|
|
20
19
|
plotter.open_movie("anim.mp4")
|
|
21
20
|
|
|
22
21
|
actor = plotter.add_mesh(pv.PolyData(particles.positions[t_0]), scalars=color_data[t_0],
|
|
23
22
|
render_points_as_spheres=True, point_size=15)
|
|
24
23
|
plotter.add_scalar_bar(title=quantity)
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
|
|
25
|
+
# Open a gif
|
|
26
|
+
plotter.open_gif("particles.gif")
|
|
27
27
|
|
|
28
28
|
for t in range(t_0 + 1, len(color_data)):
|
|
29
|
-
if particles.positions[t].shape[0] == 0:
|
|
30
|
-
continue
|
|
31
29
|
plotter.remove_actor(actor)
|
|
32
30
|
actor = plotter.add_mesh(pv.PolyData(particles.positions[t]), scalars=color_data[t],
|
|
33
31
|
render_points_as_spheres=True, point_size=15)
|
|
34
|
-
plotter.remove_scalar_bar()
|
|
35
|
-
plotter.add_scalar_bar(title=quantity)
|
|
36
32
|
plotter.write_frame()
|
|
37
33
|
|
|
34
|
+
# Closes and finalizes movie
|
|
38
35
|
plotter.close()
|
|
39
36
|
|
|
40
37
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
&MESH IJK=36,28,22, XB=0.00,3.60,-1.40,1.40,0.00,2.13 /
|
|
4
4
|
|
|
5
5
|
&TIME T_END=100.0, TIME_SHRINK_FACTOR=10. /
|
|
6
|
-
&DUMP NFRAMES=100, DT_DEVC=10.,
|
|
6
|
+
&DUMP NFRAMES=100, DT_DEVC=10., DT_HRR=10., SIG_FIGS=4, SIG_FIGS_EXP=2 /
|
|
7
7
|
|
|
8
8
|
&MISC TMPA=22. /
|
|
9
9
|
|
|
@@ -12,7 +12,8 @@ from fdsreader import settings
|
|
|
12
12
|
|
|
13
13
|
class EvacCollection(FDSDataCollection):
|
|
14
14
|
"""Collection of :class:`Evacuation` objects. Next to agent-class specific data (such as
|
|
15
|
-
trajectories) lots of other data such as FED-data is provided via this class.
|
|
15
|
+
trajectories) lots of other data such as FED-data is provided via this class.
|
|
16
|
+
Note: Evac support was removed from FDS in all versions after 6.7.7!
|
|
16
17
|
|
|
17
18
|
:ivar times: List of all time steps of the simulation.
|
|
18
19
|
:ivar z_offsets: The offset in z-direction for each mesh where the evac plane lays.
|
|
@@ -39,6 +39,7 @@ from fdsreader.utils import Quantity
|
|
|
39
39
|
|
|
40
40
|
class Evacuation:
|
|
41
41
|
"""Container to store evac data from evac simulations with FDS.
|
|
42
|
+
Note: Evac support was removed from FDS in all versions after 6.7.7!
|
|
42
43
|
|
|
43
44
|
:ivar class_name: Name of the evac class defined in the FDS input-file.
|
|
44
45
|
:ivar quantities: List of all quantities for which data has been written out.
|
|
@@ -9,8 +9,7 @@ from fdsreader import settings
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ParticleCollection(FDSDataCollection):
|
|
12
|
-
"""Collection of :class:`
|
|
13
|
-
using plot3Ds as well as its subclasses such as :class:`SubPlot3D`.
|
|
12
|
+
"""Collection of :class:`Particle` objects.
|
|
14
13
|
"""
|
|
15
14
|
|
|
16
15
|
def __init__(self, times: Iterable[float], particles: Iterable[Particle]):
|
|
@@ -83,19 +82,18 @@ class ParticleCollection(FDSDataCollection):
|
|
|
83
82
|
|
|
84
83
|
# Read tags
|
|
85
84
|
dtype_tags = fdtype.new((('i', n_particles),))
|
|
86
|
-
particle._tags[t][offset: offset + n_particles] =
|
|
87
|
-
fdtype.read(infile, dtype_tags, 1)[0][0]
|
|
85
|
+
particle._tags[t][offset: offset + n_particles] = fdtype.read(infile, dtype_tags, 1)[0][0]
|
|
88
86
|
|
|
89
87
|
# Read actual quantity values
|
|
90
88
|
if len(particle.quantities) > 0:
|
|
91
89
|
dtype_data = fdtype.new(
|
|
92
|
-
(('f', str((
|
|
90
|
+
(('f', str((len(particle.quantities), n_particles))),))
|
|
93
91
|
data_raw = fdtype.read(infile, dtype_data, 1)[0][0].reshape(
|
|
94
|
-
(
|
|
92
|
+
(len(particle.quantities), n_particles), order='F')
|
|
95
93
|
|
|
96
94
|
for q, quantity in enumerate(particle.quantities):
|
|
97
95
|
particle._data[quantity.name][t][
|
|
98
|
-
offset:offset + n_particles] = data_raw[
|
|
96
|
+
offset:offset + n_particles] = data_raw[q, :].astype(float)
|
|
99
97
|
|
|
100
98
|
pointer_location[particle][t] += particle.n_particles[mesh][t]
|
|
101
99
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fdsreader
|
|
3
|
-
Version: 1.10.
|
|
3
|
+
Version: 1.10.3
|
|
4
4
|
Summary: Python reader for data generated by FDS.
|
|
5
5
|
Home-page: https://github.com/FireDynamics/fdsreader
|
|
6
6
|
Author: FZJ IAS-7 (Jan Vogelsang, Prof. Dr. Lukas Arnold, Tristan Hehnen)
|
|
@@ -89,7 +89,7 @@ It is also possible to deploy to PyPI and Github pages manually using the follow
|
|
|
89
89
|
3. sphinx-build -b html docs docs/build
|
|
90
90
|
4. cd .. && mkdir gh-pages && cd gh-pages
|
|
91
91
|
5. git init && git remote add origin git@github.com:FireDynamics/fdsreader.git
|
|
92
|
-
6. git fetch
|
|
92
|
+
6. git fetch origin gh-pages:gh-pages
|
|
93
93
|
7. git checkout gh-pages
|
|
94
94
|
8. cp -r ../fdsreader/docs/build/* .
|
|
95
95
|
9. git add . && git commit -m "..." && git push origin HEAD:gh-pages
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
.gitattributes
|
|
1
2
|
.gitignore
|
|
2
3
|
.travis.yml
|
|
3
4
|
Dockerfile
|
|
@@ -6,8 +7,12 @@ MANIFEST.in
|
|
|
6
7
|
README.md
|
|
7
8
|
RELEASE.md
|
|
8
9
|
docker_deployment.sh
|
|
10
|
+
paper.bib
|
|
11
|
+
paper.md
|
|
9
12
|
requirements.txt
|
|
10
13
|
setup.py
|
|
14
|
+
.github/workflows/joss.yml
|
|
15
|
+
.github/workflows/testsuite.yml
|
|
11
16
|
docs/bndf.rst
|
|
12
17
|
docs/conf.py
|
|
13
18
|
docs/devc.rst
|
|
@@ -44,7 +49,6 @@ examples/geom/fds_geomslices/PWB01_GEOM.fds
|
|
|
44
49
|
examples/isof/isof_example.py
|
|
45
50
|
examples/isof/fds_steckler/input_steckler.fds
|
|
46
51
|
examples/part/part_example.py
|
|
47
|
-
examples/part/fds_data/impact.fds
|
|
48
52
|
examples/pl3d/pl3d_example.py
|
|
49
53
|
examples/pl3d/fds_data/vort3d_80.fds
|
|
50
54
|
examples/slcf/slcf_example_global.py
|
|
@@ -109,5 +113,19 @@ fdsreader/utils/dimension.py
|
|
|
109
113
|
fdsreader/utils/extent.py
|
|
110
114
|
fdsreader/utils/fortran_data.py
|
|
111
115
|
fdsreader/utils/misc.py
|
|
112
|
-
tests/test.
|
|
113
|
-
tests/
|
|
116
|
+
tests/test.smv
|
|
117
|
+
tests/test_version_compatibility.py
|
|
118
|
+
tests/acceptance_tests/test_bndf.py
|
|
119
|
+
tests/acceptance_tests/test_devc.py
|
|
120
|
+
tests/acceptance_tests/test_geom.py
|
|
121
|
+
tests/acceptance_tests/test_isof.py
|
|
122
|
+
tests/acceptance_tests/test_part.py
|
|
123
|
+
tests/acceptance_tests/test_pl3d.py
|
|
124
|
+
tests/acceptance_tests/test_slcf.py
|
|
125
|
+
tests/acceptance_tests/test_smoke3d.py
|
|
126
|
+
tests/cases/bndf_data.tgz
|
|
127
|
+
tests/cases/devc_data.tgz
|
|
128
|
+
tests/cases/geom_data.tgz
|
|
129
|
+
tests/cases/part_data.tgz
|
|
130
|
+
tests/cases/pl3d_data.tgz
|
|
131
|
+
tests/cases/steckler_data.tgz
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@misc{FDS,
|
|
2
|
+
author = {Kevin McGrattan and Randall McDermott and Craig Weinschenk and Glenn Forney},
|
|
3
|
+
title = {Fire Dynamics Simulator Users Guide, Sixth Edition},
|
|
4
|
+
year = {2013},
|
|
5
|
+
month = {2013-11-04},
|
|
6
|
+
publisher = {Special Publication (NIST SP), National Institute of Standards and Technology, Gaithersburg, MD},
|
|
7
|
+
doi = {https://doi.org/10.6028/NIST.sp.1019},
|
|
8
|
+
language = {en},
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@misc{SMV,
|
|
12
|
+
author = {Glenn Forney},
|
|
13
|
+
title = {Smokeview (Version 5) - A Tool for Visualizing Fire Dynamics Simulation Data, Volume I: User's Guide},
|
|
14
|
+
year = {2017},
|
|
15
|
+
month = {2017-02-19 20:02:57},
|
|
16
|
+
publisher = {Special Publication (NIST SP), National Institute of Standards and Technology, Gaithersburg, MD},
|
|
17
|
+
language = {en},
|
|
18
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'FDSReader'
|
|
3
|
+
tags:
|
|
4
|
+
- Python
|
|
5
|
+
- TODO
|
|
6
|
+
authors:
|
|
7
|
+
- name: Jan Niklas Vogelsang
|
|
8
|
+
orcid: 0000-0003-2336-6630
|
|
9
|
+
affiliation: 1
|
|
10
|
+
- name: Prof. Dr. Lukas Arnold
|
|
11
|
+
orcid: TODO
|
|
12
|
+
affiliation: 2
|
|
13
|
+
affiliations:
|
|
14
|
+
- name: PGI-15, Forschungszentrum Jülich, Germany
|
|
15
|
+
index: 1
|
|
16
|
+
- name: IAS-7, Forschungszentrum Jülich, Germany
|
|
17
|
+
index: 2
|
|
18
|
+
date: 15 March 2024
|
|
19
|
+
bibliography: paper.bib
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Summary
|
|
23
|
+
|
|
24
|
+
In recent years, Python has become the most popular programming language in the scientific community. It offers
|
|
25
|
+
extensive functionality for preparing, post-processing and visualising data of all types and origins. By
|
|
26
|
+
a large number of freely available packages, the programming environment can be flexibly adapted to your own
|
|
27
|
+
needs. However, until now it was not possible to automatically import and process fire simulation data as
|
|
28
|
+
produced by the fire dynamics simulator (FDS) [@FDS] for example. Using SmokeView [@SMV], it was
|
|
29
|
+
already possible to visualize generated data, but it was not possible to process it directly or perform detailed
|
|
30
|
+
analysis on the data itself. The introduction of the fdsreader made this possible in an uncomplicated and efficient way.
|
|
31
|
+
|
|
32
|
+
# Statement of need
|
|
33
|
+
|
|
34
|
+
Up until now, most working groups in both industry and research have had no solution for efficiently and
|
|
35
|
+
automatically reading the binary data output by FDS to process it further. One would either have to use Fds2Ascii, a
|
|
36
|
+
Fortran program to manually convert the binary output of FDS into a text file and read in the text file with their
|
|
37
|
+
preferred language or write their own scripts to read the binary data output of FDS and further process the data. Many
|
|
38
|
+
groups did end up with their own set of, typically Python-based, scripts to read the various types of data an FDS
|
|
39
|
+
simulation can produce, e.g. slices, boundary data, etc.
|
|
40
|
+
As the internal data structures of FDS are non-trivial and the source code is not trivial to understand for an outsider,
|
|
41
|
+
the scripts usually require lots of time to write, ended up having strict limitations to the simulation parameters,
|
|
42
|
+
e.g. only single mesh based simulations, and could not process all types of data. In addition, new versions of FDS
|
|
43
|
+
often meant that some scripts no longer worked as expected, requiring even more time investment to maintain these scripts.
|
|
44
|
+
The fdsreader Python package provides functionality to automatically import the full set of FDS outputs for both old and
|
|
45
|
+
new versions of FDS.
|
|
46
|
+
When first loading a simulation, all metadata is collected and cached to reduce subsequent load times. The actual
|
|
47
|
+
data produced during the simulation such as the slice data for each time step, is not loaded until the data is accessed by the
|
|
48
|
+
user via Python, which then triggers loading the data into memory in the background and converting it to equivalent
|
|
49
|
+
Python datastructures. This method minimizes initial loading time without sacrificing the ability to easily filter and
|
|
50
|
+
select the desired data. The fdsreader collects all data of the same type into one collection and offers its own set
|
|
51
|
+
functions for each type to easily select the data which should be further processed. These functions can even be called
|
|
52
|
+
in an automated fashion, to run some predefined postprocessing routines on simulation data without having to manually
|
|
53
|
+
interact with the data, as one would have to do when using SmokeView or Fds2Ascii.
|
|
54
|
+
The fdsreader is able to read all data types available in FDS including most of the additional metadata. To be concrete,
|
|
55
|
+
the package contains modules for slices (slcf), boundary data (bndf), volumes (plot3d, smoke3d) particles (part),
|
|
56
|
+
isosurfaces (isof), evacuations (evac), complex geometry boundary data (geom), devices (devc) and meshes. Slices,
|
|
57
|
+
boundary data, isosurfaces and volumes are each respectively seperated into multiple parts, one for each mesh. While FDS
|
|
58
|
+
outputs the data separately for each mesh, the fdsreader provides methods to combine all these parts automatically and
|
|
59
|
+
operate on data across meshes.
|
|
60
|
+
|
|
61
|
+
# Acknowledgements
|
|
62
|
+
TODO
|
|
63
|
+
|
|
64
|
+
# References
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from fdsreader import Simulation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_isof():
|
|
5
|
+
sim = Simulation("./steckler_data")
|
|
6
|
+
isosurface = sim.isosurfaces.filter_by_quantity("TEMP")[0]
|
|
7
|
+
vertices, triangles, _ = isosurface.to_global(len(isosurface.times) - 1)
|
|
8
|
+
|
|
9
|
+
assert abs(vertices[-1][0] - 2.80595016) < 1e-6 and abs(vertices[-1][1] - 0.1) < 1e-6 and abs(vertices[-1][2] - 1.83954549) < 1e-6
|
|
10
|
+
assert abs(triangles[-1][-1][0] - 4625) < 1e-6 and abs(triangles[-1][-1][1] - 4627) < 1e-6 and abs(triangles[-1][-1][2] - 4708) < 1e-6
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from fdsreader import Simulation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_part():
|
|
5
|
+
sim = Simulation("./part_data")
|
|
6
|
+
particles = sim.particles["WATER PARTICLES"]
|
|
7
|
+
position = particles.positions[-1][-1]
|
|
8
|
+
color_data = particles.data["PARTICLE DIAMETER"]
|
|
9
|
+
|
|
10
|
+
assert abs(position[0] + 0.04036335) < 1e-6 and abs(position[1] - 0.05389348) < 1e-6 and abs(position[2] - 13.596354) < 1e-6
|
|
11
|
+
assert abs(color_data[-1][-1] - 321.1149902) < 1e-6
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from fdsreader import Simulation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_pl3d():
|
|
5
|
+
sim = Simulation("./pl3d_data")
|
|
6
|
+
pl_t1 = sim.data_3d.get_by_quantity("Temperature")
|
|
7
|
+
data, coordinates = pl_t1.to_global(masked=True, return_coordinates=True)
|
|
8
|
+
|
|
9
|
+
assert abs(data[-1, 41, 27, 0] - 55.85966110229492) < 1e-6
|
|
10
|
+
assert abs(coordinates['x'][41] - 9.25) < 1e-6
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from fdsreader import Simulation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_slcf():
|
|
5
|
+
sim = Simulation("./steckler_data")
|
|
6
|
+
data, coordinates = sim.slices[0].to_global(masked=True, return_coordinates=True)
|
|
7
|
+
assert abs(data[-1, -1, -1] - 33.311744689941406) < 1e-6
|
|
8
|
+
assert abs(coordinates['x'][0] - 0.) < 1e-6 and abs(coordinates['x'][-1] - 3.6) < 1e-6
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from fdsreader import Simulation
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_smoke3d():
|
|
5
|
+
sim = Simulation("./steckler_data")
|
|
6
|
+
smoke = sim.smoke_3d.get_by_quantity("Temperature")
|
|
7
|
+
data, coordinates = smoke.to_global(masked=True, return_coordinates=True)
|
|
8
|
+
|
|
9
|
+
assert abs(data[-1, 13, 13, 1] - 77.) < 1e-6
|
|
10
|
+
assert abs(coordinates['x'][13] - 1.3) < 1e-6
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|