Coder Social home page Coder Social logo

fdsreader's People

Contributors

ianshaw93 avatar janvogelsang avatar lu-kas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fdsreader's Issues

Package version dependencies

Are the explicitly required package versions necessary?

E.g.:

fdsreader 0.9.12 requires docutils==0.16, but you'll have docutils 0.17 which is incompatible.
fdsreader 0.9.12 requires Pillow==8.1.0, but you'll have pillow 8.2.0 which is incompatible.
fdsreader 0.9.12 requires Pygments==2.8.0, but you'll have pygments 2.8.1 which is incompatible.
fdsreader 0.9.12 requires Sphinx==3.5.1, but you'll have sphinx 3.5.3 which is incompatible.

Fails to install in a newly setup environment.

Get obstruction mask for all meshes

Hi,

I'm wondering if it is possible to get obst mask for silce in multimesh case?
I also get error for single mesh (in multimesh case). Below I tried to use your code but without success:

def main():
    sim = fds.Simulation("my_path_to_sim_dir")

    # Get the first mesh defined in fds file
    mesh = sim.meshes[0]
    # Get the slice
    slc = sim.slices[1]

    # Get subslice that cuts through our mesh
    subslice = slc[mesh]

    # Mask the data
    mask = mesh.get_obstruction_mask_slice(subslice) # <---------- here I get error - details below
    
    # Timestep
    t = -1
    # Fill value for mask
    fill = 0
    sslc_data = np.where(mask[t], subslice.data[t], fill)

    # Plot the slice
    plt.imshow(sslc_data.T, origin="lower")
    plt.colorbar()
    plt.show()

And the error details:

Traceback (most recent call last):
  File "C:/Users/fliszer/PycharmProjects/PMV-PPD/fds_read_tests.py", line 40, in <module>
    main()
  File "C:/Users/fliszer/PycharmProjects/PMV-PPD/fds_read_tests.py", line 24, in main
    mask = mesh.get_obstruction_mask_slice(subslice)
  File "C:\Users\fliszer\PycharmProjects\PMV-PPD\venv\lib\site-packages\fdsreader\fds_classes\mesh.py", line 80, in get_obstruction_mask_slice
    return np.squeeze(self.get_obstruction_mask(subslice.times, cell_centered=cell_centered)[mask_indices])
  File "C:\Users\fliszer\PycharmProjects\PMV-PPD\venv\lib\site-packages\fdsreader\fds_classes\mesh.py", line 60, in get_obstruction_mask
    for t, _ in enumerate(subobst.visible_times(times)):
  File "C:\Users\fliszer\PycharmProjects\PMV-PPD\venv\lib\site-packages\fdsreader\bndf\obstruction.py", line 292, in visible_times
    for time in self.times:
  File "C:\Users\fliszer\PycharmProjects\PMV-PPD\venv\lib\site-packages\fdsreader\bndf\obstruction.py", line 283, in times
    return next(iter(self._boundary_data.values())).times
StopIteration

Global slice example redefine

Hi,

I think it's worth to extend global slice example to better show obsts mask (examples/slcf)/slcf_example_global.py).
For less experienced users it can be helpful:

def main():
    sim = fds.Simulation("./fds_multimesh")

    # Get the first slice
    slc = sim.slices[1]
    # Set fill value larger than vmax below
    data = slc.to_global(masked=True, fill=50)

    # Set colormap
    cmap = cm.get_cmap('rainbow')
    # Set obsts color
    cmap.set_over('white')

    # Plot the slice
    plt.imshow(data[-1].T,
               vmin=0,
               vmax=2,
               cmap=cmap,
               origin="lower")
    plt.colorbar()
    plt.show()


if __name__ == "__main__":
    main()

Extra faces at geom objects

geom_example.ipynb.txt
Example_1.fds.txt
Screenshot 2021-05-14 132046

Hi,
I have noticed that the sum of the surfaces of all the faces does not match the surface of the actual object. I have manually calculated an area of 8.8 for the example and the sum of all faces are 10.35.
In the image you can see that there are additional faces inside the tetrahedron that should not be there and are not displayed in Smokeview.

With best regards

Obstruction masks/slices

There seems to be a bug regarding either slices or obstruction masks.
When applying the mask to (cell-centered) slice data, the mask seems to be 1 point off.

_devices variable not available any more

Hi,

I think the load devices function is broken:

def _load_DEVC_data(self):

It references to self._devices, which are not available any more. Renaming _devices to devices seems to solve the problem. Are there any consequences in this fix which I do not see?

Are there any other places in the code which reference to the deleted Simulation class variables?

Not all MULT Obstructions showing

Next one:

I created some obstructions with MULT-Lines, which show perfectly correct in SMV. Sadly, while collecting data with the fdsreader, only some of those seem to be recognized (similiar behavior to another issue of mine, #50).

In the original case 3/5 instances of the multiplied obstructions found their way in the fdsreader-data (the last 3), while in a simplified case (fdsreaderTestcaseMultID.fds.txt) the reader only found 1/5 objects (again the last one created).

Cannot access BNDF data

Hello, thanks for all of your work on this utility. It's been helpful for post-processing slice files thus far.

Currently, I'm working on contouring fire fronts using mass flux at the boundary as a proxy for fire location. I output boundary files throughout my FDS simulation and can view them without a problem in smokeview. However, when I create a fdsreader object with my output directory, the fdsreader object cannot find any obstructions. The ObstructionCollection object is empty when I initialize the simulation, and all of the obstruction methods return None when I try to query for the surface boundary.

In my simulation I don't define any obstructions with the &OBST keyword. Is this why there's nothing in the ObstructionCollection object? If this is the case, is there another way to access the BNDF data which exists for the surface? I've spent some time looking through the API and exploring the fdsreader object, but I don't see any way to read in the BNDF data without and obstruction.

I've included my FDS simulation file and a couple of images for reference.

Thank you,
Anthony

image

image

slc.to_global error: ValueError: negative dimensions are not allowed

Hi, I'm not much of a programmer and want to use the fdsreader to export slice files. A mistake was made. I don't know what's wrong. Could someone help me, please.
Traceback (most recent call last): File "C:\Users\11734\AppData\Roaming\Python\Python39\site-packages\IPython\core\interactiveshell.py", line 3457, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-5-264501c9f462>", line 1, in <module> data = slc.to_global(masked=True, fill=np.nan) File "C:\Anaconda3\envs\pytorch\lib\site-packages\fdsreader\slcf\slice.py", line 531, in to_global grid = np.full((self.n_t, steps['x'], steps['y'], steps['z']), np.nan) File "C:\Users\11734\AppData\Roaming\Python\Python39\site-packages\numpy\core\numeric.py", line 343, in full a = empty(shape, dtype, order) ValueError: negative dimensions are not allowed

Iso to fbx/ply

Convert isosurface data to a common data format like fbx or ply

Parallel reading

It should be possible to read in data for most classes using multiple threads or even processes (processes might use another data bus and therefore be more performant, will have to check if that really is the case).

Device Data Overview dict Should Contain the Unit

When looking at the device data, i.e. fdsreader.Simulation("path").device, a dictionary is provided with an overview on the devices. It should also contain the unit for the quantity that is recorded. So basically cell 0 in the *_devc.csv for the respective device.

Problem with DEVC

Hello,

The console output this error :

ERROR:root:"Module devc: 'complicated'\nThe error can be safely ignored if not requiring the devc module. However, please consider to submit an issue on Github including the error message, the stack trace and your FDS input-file so we can reproduce the error and fix it as soon as possible!"
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\fdsreader\utils\misc.py", line 12, in wrapped
    return f(*args, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\fdsreader\simulation.py", line 930, in _load_DEVC_data
    devc = self.devices[names[k]]
KeyError: 'complicated'

Maybe this is a problem due to the fact that my DEVC name contain comas and maybe this little modification to simulation.py in the function _load_DEVC_data could solve it (split by ", instead of ,):

line 927:
names = [name.replace('"', '').replace('\n', '').strip() for name in infile.readline().split(',')]
->
names = [name.replace('"', '').replace('\n', '').strip() for name in infile.readline().split('",')]

devc_name_string = r'"devc1","complicated, but allowed devc name","devc3"'
names = [name.replace('"', '').replace('\n', '').strip() for name in devc_name_string.split(',')]
names_2 = [name.replace('"', '').replace('\n', '').strip() for name in devc_name_string.split('",')]
names
['devc1', 'complicated', 'but allowed devc name', 'devc3']
names_2
['devc1', 'complicated, but allowed devc name', 'devc3']

This is fully untested in the real code as I do not use fdsreader to read DEVC for now.

Thank you,
Silvio

Distinguish between DEVC ID and quantity

The input line

&DEVC ID='T_1.0', XYZ=0.0, 0.0, 1.0, QUANTITY='TEMPERATURE' /

leads to

'T_1.0': Device(name=T_1.0, position=(0.0, 0.0, 1.0), quantity=Quantity('T_1.0')

Although the quantity is not stored in the _devc.csv file, it is available in the .smv file:

DEVICE
T_1.0 % TEMPERATURE 0.00000 0.00000 1.00000 0.00000 0.00000 -1.00000 0 0 % null

Could you please make the fdsreader devices consistent with the naming of FDS? Thanks!

Add method to clear data

There should be a simulation method to clear all loaded data, which might help when reading different parts of really large simulations where memory size might become a bottleneck.

Read FED slice

Hello, thanks for your work, it is a great help for my postprocessing.

Is there any possibility or workaround to read the FED slice generated from Smokeview?
I tried to add it to the SMV File (with correct path and it works in SMV) but it gives me an an subslice with this error in the data field:

image

Thank you,
Thomas

GetSliceById

Read in slice id if it was set
Could other classes also have optional IDs?

Read FDS+Evac data

Read Evac specific files:

  • converged evacuation flow fields (CHID_evac.eff)
  • smoke and gas concentration information from the FDS fire calculation (CHID_evac.fed)
  • agent trajectories and data (CHID_evac_NM-NFM.prt5)

If you have any questions about the implementation, please do not hesitate to contact me.

to_global has Problem with different cell-sizes

I have multiple meshes in different sizes and cell sizes.

The xy-plane (z-axis) works as desired. But slcf/slices.py:to_global returns a tuple for axis x and y instand of numpy.ndarray.
The first element contains the numpy.ndarray of the finder mesh, while the second element contains the numpy.ndarray of the coarser mesh. It would be nice, if all axis behave same and create only one result.

Problem illustrated:
z|x
y|-

Plots of different slices with a hole where the higher cell size is

wrong name for the last element of the *_hrr.csv file

Hello,

First thank you for this tool, the ability to read slicefiles, bndf, 3D smoke and post-process then easily in python is quite exiting.
I came into this while writing a little parser for the *_hrr.csv file (aborted in favor of fdsreader of course)

I've been testing this a few minutes now and I encountered a little bug : the last element of the *_hrr.csv file should be "ZONE_2" in my use case but is "ZONE_2\n" in sim.hrr

I'm very new at using python so I'd not risk a clone/pull request but the following modification of the function _load_HRR_data in simulation.py seems to be ok:
in line 956: keys = infile.readline().split(',') -> keys = (infile.readline().replace(r'\n', '')).split(',')

Thank you,
Silvio

Slice coordinates

Hi!

I think this difference needs to be an absolute one:

if coords[dim][i] - coords[dim][i+1] < min_delta/2:

I.e. if np.abs(coords[dim][i] - coords[dim][i+1]) < min_delta/2:

Additionally, a numpy Array does not have a remove function, afaik.

coords[dim].remove(val)

Finally, shouldn't a Slice object compute the coordinates to match the data set created with to_global? This could be done by using the extent and the number of grid points in the according directions. What do you think?

Problem with reading obstruction data after cutting with holes

So I observed a problem while reading data of obstructions, which had been cut by a HOLE-line:

The obstructions seem to get cut in multiple pieces (which reflects the behavior of SMV as far as I know), but only one of those pieces actually makes it into the data read by the fds-reader.

A simple example (fds-file attached) yields the following output for bounding_box.as_list() of a wall-obstruction:
[0.0, 1.0, 0.0, 0.1, 0.0, 1.0]
While yielding only a part of the original obstruction when being cut:
[0.3, 0.7, 0.9, 1.0, 0.0, 0.3] (originally 0.0, 1.0, 0.9, 1.0, 0.0, 1.0 with a hole in 0.3, 0.7, 0.9, 1.0, 0.3, 0.7)

The array of the boundary data also has a different shape (199 x 5 x 4 in opposition to 199 x 11 x 11).

Hole-Testcase.fds.txt

Edit:
While further testing i also failed to get obstruction IDs within the reader. All imported obstructions always seem to be named 1, 2, 3 etc., not by their IDs within the sourcefile.

TypeError: unhashable type: 'Mesh'

Hallo again,

i stumbled across a strange error while trying to import a simulation via fdsreader.Simulation('path'):

TypeError: unhashable type: 'Mesh'

... seemingly located within the 370th line of the Simulation class:

subobst = self._subobstructions[mesh][int(obst_index) - 1]

I could reproduce this error when trying to import another, totally different and unrelated simulation file while the import of two other simulations did not produce this error. Yet i was not able to wrap my head around the decisive difference between those cases regarding obstructions or meshs, but i keep looking into this. I'll also keep this post updated if i can find something.

I won't attach any data, for the cases are quite complex and i was'nt yet able to narrow the problem down to a vivid example file.

Meanwhile any ideas where this error could be originated?

Remove mmap

Although using mmap is quite convenient, reading files regularly with built-in Python routines is significantly faster.

To read in the .smv file as efficiently as possible, the file has to be read line by line and call different handlers depending on what data has been read. Instead of following a batch-reading approach (e.g. first read all mesh data, etc.), data will be accumulated while iterating over the file, eventually having read all data.

NoneType for a few data arrays of device

I tried reading the data of a device. A few worked normally, but a few were of NoneType as shown in the picture below.

image

Taking a look at the _devc.csv file the data is displayed normally.

The following FDS file was used:

!! General configuration
&HEAD CHID='Corridor' TITLE='Test Case I ARTSS' /
&TIME T_BEGIN=0 /
&TIME T_END=3600 /

&REAC ID = 'propane reaction', SOOT_YIELD=0.1, CO_YIELD=0.05, FUEL='PROPANE'/
&MISC VISIBILITY_FACTOR=8.0/

!! Computational domain
!! &MESH XB=0, 5, 0, 4, 0, 2.4, IJK=100, 80, 48 /

&MESH ID='1' IJK=20,20,24 XB=0.0000,1.0000,0.0000,1.0000,0.0000,1.2000 /
&MESH ID='2' IJK=20,20,24 XB=0.0000,1.0000,0.0000,1.0000,1.2000,2.4000 /
&MESH ID='3' IJK=20,20,24 XB=0.0000,1.0000,1.0000,2.0000,0.0000,1.2000 /
&MESH ID='4' IJK=20,20,24 XB=0.0000,1.0000,1.0000,2.0000,1.2000,2.4000 /
&MESH ID='5' IJK=20,20,24 XB=0.0000,1.0000,2.0000,3.0000,0.0000,1.2000 /
&MESH ID='6' IJK=20,20,24 XB=0.0000,1.0000,2.0000,3.0000,1.2000,2.4000 /
&MESH ID='7' IJK=20,20,24 XB=0.0000,1.0000,3.0000,4.0000,0.0000,1.2000 /
&MESH ID='8' IJK=20,20,24 XB=0.0000,1.0000,3.0000,4.0000,1.2000,2.4000 /
&MESH ID='9' IJK=20,20,24 XB=1.0000,2.0000,0.0000,1.0000,0.0000,1.2000 /
&MESH ID='10' IJK=20,20,24 XB=1.0000,2.0000,0.0000,1.0000,1.2000,2.4000 /
&MESH ID='11' IJK=20,20,24 XB=1.0000,2.0000,1.0000,2.0000,0.0000,1.2000 /
&MESH ID='12' IJK=20,20,24 XB=1.0000,2.0000,1.0000,2.0000,1.2000,2.4000 /
&MESH ID='13' IJK=20,20,24 XB=1.0000,2.0000,2.0000,3.0000,0.0000,1.2000 /
&MESH ID='14' IJK=20,20,24 XB=1.0000,2.0000,2.0000,3.0000,1.2000,2.4000 /
&MESH ID='15' IJK=20,20,24 XB=1.0000,2.0000,3.0000,4.0000,0.0000,1.2000 /
&MESH ID='16' IJK=20,20,24 XB=1.0000,2.0000,3.0000,4.0000,1.2000,2.4000 /
&MESH ID='17' IJK=20,20,24 XB=2.0000,3.0000,0.0000,1.0000,0.0000,1.2000 /
&MESH ID='18' IJK=20,20,24 XB=2.0000,3.0000,0.0000,1.0000,1.2000,2.4000 /
&MESH ID='19' IJK=20,20,24 XB=2.0000,3.0000,1.0000,2.0000,0.0000,1.2000 /
&MESH ID='20' IJK=20,20,24 XB=2.0000,3.0000,1.0000,2.0000,1.2000,2.4000 /
&MESH ID='21' IJK=20,20,24 XB=2.0000,3.0000,2.0000,3.0000,0.0000,1.2000 /
&MESH ID='22' IJK=20,20,24 XB=2.0000,3.0000,2.0000,3.0000,1.2000,2.4000 /
&MESH ID='23' IJK=20,20,24 XB=2.0000,3.0000,3.0000,4.0000,0.0000,1.2000 /
&MESH ID='24' IJK=20,20,24 XB=2.0000,3.0000,3.0000,4.0000,1.2000,2.4000 /
&MESH ID='25' IJK=20,20,24 XB=3.0000,4.0000,0.0000,1.0000,0.0000,1.2000 /
&MESH ID='26' IJK=20,20,24 XB=3.0000,4.0000,0.0000,1.0000,1.2000,2.4000 /
&MESH ID='27' IJK=20,20,24 XB=3.0000,4.0000,1.0000,2.0000,0.0000,1.2000 /
&MESH ID='28' IJK=20,20,24 XB=3.0000,4.0000,1.0000,2.0000,1.2000,2.4000 /
&MESH ID='29' IJK=20,20,24 XB=3.0000,4.0000,2.0000,3.0000,0.0000,1.2000 /
&MESH ID='30' IJK=20,20,24 XB=3.0000,4.0000,2.0000,3.0000,1.2000,2.4000 /
&MESH ID='31' IJK=20,20,24 XB=3.0000,4.0000,3.0000,4.0000,0.0000,1.2000 /
&MESH ID='32' IJK=20,20,24 XB=3.0000,4.0000,3.0000,4.0000,1.2000,2.4000 /
&MESH ID='33' IJK=20,20,24 XB=4.0000,5.0000,0.0000,1.0000,0.0000,1.2000 /
&MESH ID='34' IJK=20,20,24 XB=4.0000,5.0000,0.0000,1.0000,1.2000,2.4000 /
&MESH ID='35' IJK=20,20,24 XB=4.0000,5.0000,1.0000,2.0000,0.0000,1.2000 /
&MESH ID='36' IJK=20,20,24 XB=4.0000,5.0000,1.0000,2.0000,1.2000,2.4000 /
&MESH ID='37' IJK=20,20,24 XB=4.0000,5.0000,2.0000,3.0000,0.0000,1.2000 /
&MESH ID='38' IJK=20,20,24 XB=4.0000,5.0000,2.0000,3.0000,1.2000,2.4000 /
&MESH ID='39' IJK=20,20,24 XB=4.0000,5.0000,3.0000,4.0000,0.0000,1.2000 /
&MESH ID='40' IJK=20,20,24 XB=4.0000,5.0000,3.0000,4.0000,1.2000,2.4000 /

!! &MESH XB=0, 20, 4, 6, 0, 2.4, IJK=100, 10, 12 /

&MESH ID='101' IJK=20,10,12 XB=0.0000,4.0000,4.0000,6.0000,0.0000,2.4000 /
&MESH ID='102' IJK=20,10,12 XB=4.0000,8.0000,4.0000,6.0000,0.0000,2.4000 /
&MESH ID='103' IJK=20,10,12 XB=8.0000,12.0000,4.0000,6.0000,0.0000,2.4000 /
&MESH ID='104' IJK=20,10,12 XB=12.0000,16.0000,4.0000,6.0000,0.0000,2.4000 /
&MESH ID='105' IJK=20,10,12 XB=16.0000,20.0000,4.0000,6.0000,0.0000,2.4000 /

!! &MESH XB=16, 20, 6, 12, 0, 2.4, IJK=20, 30, 12 /

&MESH ID='201' IJK=10,15,12 XB=16.0000,18.0000,6.0000,9.0000,0.0000,2.4000 /
&MESH ID='202' IJK=10,15,12 XB=16.0000,18.0000,9.0000,12.0000,0.0000,2.4000 /
&MESH ID='203' IJK=10,15,12 XB=18.0000,20.0000,6.0000,9.0000,0.0000,2.4000 /
&MESH ID='204' IJK=10,15,12 XB=18.0000,20.0000,9.0000,12.0000,0.0000,2.4000 /

!! Properties
&MATL ID='CONCRETE', CONDUCTIVITY=1.0, SPECIFIC_HEAT=0.88, DENSITY=2100 /
&MATL ID='CARPET', CONDUCTIVITY=1.0, SPECIFIC_HEAT=0.88, DENSITY=2100 /

&SURF ID='WALL', MATL_ID='CONCRETE', COLOR='GRAY', THICKNESS=0.1 /
&SURF ID='FLOOR', MATL_ID='CARPET', COLOR='BROWN', THICKNESS=0.1 /
&SURF ID='CEILING', MATL_ID='CONCRETE', COLOR='KHAKI', THICKNESS=0.1 /
&SURF ID='OPEN', COLOR='INVISIBLE' /

!! Solid geometry
&OBST XB=0, 5, 0, 0, 0, 2.4, SURF_ID='WALL' /
&OBST XB=5, 5, 0, 4, 0, 2.4, SURF_ID='WALL' /
&OBST XB=0, 0, 0, 6, 0, 2.4, SURF_ID='WALL' /

&OBST XB=20, 20, 4, 11, 0, 2.4, SURF_ID='WALL' /
&OBST XB=16, 16, 6, 11, 0, 2.4, SURF_ID='WALL' /
&OBST XB=16, 20, 11, 11, 0, 2.4, SURF_ID='WALL' /


&OBST XB=0, 20, 4, 4, 0, 2.4, SURF_ID='WALL' /
&OBST XB=0, 20, 6, 6, 0, 2.4, SURF_ID='WALL' /


&OBST XB=0, 20, 0, 11, 0, 0, SURF_ID='FLOOR' /
&OBST XB=0, 20, 0, 11, 2.4, 2.4, SURF_ID='CEILING' /


!! Vents
&VENT XB=20,20,11,12,0,2.4, SURF_ID='OPEN' /
&VENT XB=16,16,11,12,0,2.4, SURF_ID='OPEN' /
&VENT XB=16,20,12,12,0,2.4, SURF_ID='OPEN' /
&VENT XB=16,20,11,12,0,0, SURF_ID='OPEN' /
&VENT XB=16,20,11,12,2.4,2.4, SURF_ID='OPEN' /

!! Holes
&HOLE XB=3,4,3,5,0,2 /
&HOLE XB=18,19,5,7,0,2 /
&HOLE XB=17,17.6,10,12,1,1.8 /

!! Fire
&OBST XB=1, 2, 1.5, 2.5, 0, 0.1, SURF_ID='WALL' /
&VENT XB=1, 2, 1.5, 2.5, 0.1, 0.1, SURF_ID='FIRE', XYZ=2,1.5,0.1, SPREAD_RATE=0.03 /
&SURF ID='FIRE', HRRPUA=500.0/

!! Output
&PROP ID='SP-CORRIENTE', QUANTITY='SPRINKLER LINK TEMPERATURE', RTI=80.0, ACTIVATION_TEMPERATURE=68.0, SMOKEVIEW_ID='sprinkler_pendent' /

! Fire room
&DEVC ID='Temperatur11', XYZ=1,1,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple11', XYZ=1,1,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur21', XYZ=2,1,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple21', XYZ=2,1,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur31', XYZ=3,1,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple31', XYZ=3,1,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur41', XYZ=4,1,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple41', XYZ=4,1,2.2, PROP_ID='SP-CORRIENTE'/


&DEVC ID='Temperatur12', XYZ=1,2,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple12', XYZ=1,2,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur22', XYZ=2,2,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple22', XYZ=2,2,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur32', XYZ=3,2,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple32', XYZ=3,2,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur42', XYZ=4,2,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple42', XYZ=4,2,2.2, PROP_ID='SP-CORRIENTE'/


&DEVC ID='Temperatur13', XYZ=1,3,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple13', XYZ=1,3,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur23', XYZ=2,3,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple22', XYZ=2,3,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur33', XYZ=3,3,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple33', XYZ=3,3,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur43', XYZ=4,3,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple43', XYZ=4,3,2.2, PROP_ID='SP-CORRIENTE'/

! Corridor
&DEVC ID='Temperatur14', XYZ=1,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple14', XYZ=1,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur24', XYZ=3,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple24', XYZ=3,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur34', XYZ=5,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple34', XYZ=5,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur44', XYZ=7,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple44', XYZ=7,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur54', XYZ=9,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple54', XYZ=9,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur64', XYZ=11,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple64', XYZ=11,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur74', XYZ=13,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple74', XYZ=13,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur84', XYZ=15,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple84', XYZ=15,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur94', XYZ=17,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple94', XYZ=17,5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur104', XYZ=19,5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple104', XYZ=19,5,2.2, PROP_ID='SP-CORRIENTE'/

! Fill Room
&DEVC ID='Temperatur15', XYZ=17,7,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple15', XYZ=17,7,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur25', XYZ=19,7,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple25', XYZ=19,7,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur16', XYZ=17,8.5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple16', XYZ=17,8.5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur26', XYZ=19,8.5,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple26', XYZ=19,8.5,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur17', XYZ=17,10,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple17', XYZ=17,10,2.2, PROP_ID='SP-CORRIENTE'/

&DEVC ID='Temperatur27', XYZ=19,10,2.2, QUANTITY='TEMPERATURE'/
&DEVC ID='Thermocouple27', XYZ=19,10,2.2, PROP_ID='SP-CORRIENTE'/

&TAIL /

Provide FDS Version

Hi,

could we keep track of the FDS version that was used to run the simulation results that are to be loaded?
It could be stored in the simulation object directly (fdsreader.Simulation()) as fds_version.

Best,
Tristan

Boundary filters

Convenience functions to filter specific boundaries (for example boundary next to point, at border, etc)

Add __str__ for all classes

To make it easier to work with all custom fdsreader classes (like Slice, Isosurface, etc.) in interactive environments (like jupyter notebooks), a string representation should be added to all classes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.