Commit Graph

640 Commits

Author SHA1 Message Date
Martin Diehl 7093647af5 clearly show intention 2020-03-19 09:04:36 +01:00
Martin Diehl 0871111c11 consistent and correct number of leading zeros 2020-03-19 08:45:25 +01:00
Martin Diehl b5899b51e1 do not show tk window on start(python) or exit(Ipython) 2020-03-19 08:31:24 +01:00
Martin Diehl d6f74daf53 cleaning
no DADF5 anymore
2020-03-19 08:13:13 +01:00
Martin Diehl fbd92599e8 also accept vtkRectilinearGrid etc as type 2020-03-19 08:04:15 +01:00
Martin Diehl 6d0c4b9765 typo 2020-03-19 08:00:13 +01:00
Martin Diehl d28df815f0 Merge branch 'development' into MiscImprovements 2020-03-19 07:30:03 +01:00
Martin Diehl 7d47418381 migrating to new Table class ...
... and stripping old ASCIItable down
2020-03-19 07:27:11 +01:00
Martin Diehl f7a6ac4a0e migrating to new table class 2020-03-19 07:27:11 +01:00
Martin Diehl cbe5944390 cleaning deprecated modules 2020-03-19 07:27:11 +01:00
Martin Diehl 2b777bbbea use "None" to indicate missing data
True/False are user based decisions
2020-03-18 14:29:59 +01:00
Martin Diehl ee0d80ce2a following python standard + polishing 2020-03-18 13:49:53 +01:00
Martin Diehl 45e3b8f7c6 no brackets for reshape required 2020-03-17 12:25:44 +01:00
Martin Diehl 25b3fa4427 image data seems to work in general with python3 ...
... after fix for colormaps
imageDataDeformed is based on the core module, i.e. it has not been used
for years. Either update soon or remove
2020-03-17 11:53:59 +01:00
Martin Diehl 794d7e485e bugfix: report again correctly 2020-03-16 22:50:09 +01:00
Martin Diehl 941a9fbff4 fixing prospector complaints 2020-03-14 22:56:13 +01:00
Martin Diehl 554631d554 whitespace adjustments 2020-03-14 22:31:36 +01:00
Martin Diehl f9aea736cb there is a function for that 2020-03-14 22:26:47 +01:00
Martin Diehl 6dcb5b0d0d vectorize 2020-03-14 22:24:45 +01:00
Martin Diehl 0becd8c20b not needed 2020-03-14 22:21:31 +01:00
Martin Diehl b4679fabfc whitespace cleaning and other polishing 2020-03-14 22:17:59 +01:00
Martin Diehl 5c4ddf5138 Merge branch 'development' into MiscImprovements 2020-03-14 12:52:30 +01:00
Martin Diehl 3d8e8cfe7a tkinter might not work 2020-03-14 00:07:49 +01:00
Martin Diehl 771663c944 polishing 2020-03-13 00:30:49 +01:00
Martin Diehl 81e98055dd polishing 2020-03-12 19:52:33 +01:00
Martin Diehl 6fbace8220 stub: show rendered geometry 2020-03-12 15:10:44 +01:00
Martin Diehl 827f354435 only store points, no vertices
visualize via 'Points Gaussian', not 'Points' in paraview.
+ adding displacements for points
2020-03-12 12:28:28 +01:00
Martin Diehl 4c915eddbc inform the user 2020-03-12 08:30:33 +01:00
Martin Diehl dafc48dcc7 polishing 2020-03-12 08:22:37 +01:00
Martin Diehl a6a73cdc0f polishing
grid is interpreted again in the DAMASK meaning, i.e it specifies the
number of cells, not the number of nodes
2020-03-12 06:54:40 +01:00
Martin Diehl bb2019810a centralizing functionality 2020-03-12 00:00:47 +01:00
Martin Diehl 575da581a9 support for point cloud 2020-03-11 22:35:58 +01:00
Martin Diehl 744e3bb50b vectorized cell assignment + bugfix for writing out 2020-03-11 21:29:24 +01:00
Martin Diehl f324e67f7b fix: nodes need to be converted to vtk type
some stub definitions
2020-03-11 18:08:58 +01:00
Martin Diehl c92a6ad459 simpler
and system independent
2020-03-11 07:50:11 +01:00
Martin Diehl 32734e7dce using central functionality 2020-03-11 07:42:32 +01:00
Martin Diehl b3e8a4405e better use centralized functionality 2020-03-11 06:50:13 +01:00
Martin Diehl a024ec378a new class should be accesible as damask.VTK 2020-03-11 06:49:14 +01:00
Martin Diehl 9878ddc550 easier way to show data.
needs information on geometry (structured/unstructured) and probably we
should list not more than 5 incs
2020-03-11 06:28:13 +01:00
Martin Diehl 8a4bc3dda4 separating vtk from results
we should discuss the naming!
2020-03-10 23:53:37 +01:00
Martin Diehl c43af6aac3 Merge branch 'development' into HDF5-results 2020-03-10 23:32:41 +01:00
Philip Eisenlohr a7f5e42c2e condensed if-else 2020-03-10 22:13:21 +01:00
Philip Eisenlohr bffce1ab9c use "nan" to represent np.nan in ASCIItable output 2020-03-09 18:50:27 -04:00
Philip Eisenlohr b2abaef0b3 added placing of data within geometry 2020-03-09 18:31:00 -04:00
Martin Diehl 9bfaf4fbfb it is RodriGues, not RodriQues 2020-03-09 13:58:10 +01:00
Martin Diehl 32378fa609 simpler use of progress bar
now written as class (avoids the managing of function attributes) which
is used as a small wrapper around a loop.
ETA is shown, based on datetime class which hast nice formatting
2020-03-09 13:44:08 +01:00
Philip Eisenlohr 20caa29b5d corrected "Rodrigues" 2020-03-06 00:53:11 +01:00
Martin Diehl 7a0c20b6de Merge branch 'development' into python-style 2020-03-05 22:00:58 +01:00
Martin Diehl c06ef00fe2 [skip ci] N_threads is not correct, we use processes 2020-03-03 14:57:48 +01:00
Martin Diehl 16b4a63c58 clearly separating deprecated functions
still there since some test rely on them
2020-03-03 14:38:32 +01:00
Martin Diehl 946231cda5 indentation adjustment 2020-03-03 14:24:27 +01:00
Martin Diehl 903af10aa7 allow to iterate over times/increments 2020-03-03 14:07:02 +01:00
Martin Diehl c33cca3351 polishing, takeover from dadf5-usability branch 2020-03-03 12:50:10 +01:00
Martin Diehl 1f3d5099cf quote still needed 2020-03-03 12:32:38 +01:00
Martin Diehl b1f21b189b removing unused functionality
should simplify transition to new table class
2020-03-03 08:28:57 +01:00
Martin Diehl edd143b423 bugfix for copy and paste error
introduced in 8798dd1af3
2020-03-03 07:00:14 +01:00
Martin Diehl 192f21df37 4 space indentation 2020-03-03 06:49:46 +01:00
Martin Diehl 88e8907031 deprecated and not used by any test 2020-03-02 23:52:40 +01:00
Martin Diehl 8798dd1af3 new names consistently used 2020-03-02 23:47:29 +01:00
Martin Diehl 00028724b8 type is float for empty element in prod, should always be int 2020-03-02 23:20:36 +01:00
Martin Diehl 0034289b1b S is 2. PK stress, T_sym is clearer 2020-03-02 23:14:59 +01:00
Martin Diehl 15c3cab549 clearer names 2020-03-02 23:11:05 +01:00
Martin Diehl 4970f22e13 better name
damask.Result is more appropriate then damask.DADF5
2020-03-02 23:05:35 +01:00
Martin Diehl 08aef5531c Merge remote-tracking branch 'origin/development' into MiscImprovements 2020-03-01 07:32:00 +01:00
Martin Diehl ed2489de9a not needed anymore 2020-02-29 19:57:37 +01:00
Martin Diehl f431dd2092 geom class is better suited than asciitable class
removing unused functionality from deprecated asciitable
2020-02-29 19:31:27 +01:00
Martin Diehl 334eb93421 infere data type automatically
need for IPF color autput
2020-02-27 21:19:56 +01:00
Martin Diehl 75528064e9 Merge branch 'development' into DADF5-multiprocessing 2020-02-25 17:58:07 +01:00
Martin Diehl 1683e18c1f keep order
mainly relevant for increments
2020-02-25 11:53:02 +01:00
Martin Diehl f256493e79 fixed indentation 2020-02-22 01:05:02 +01:00
Martin Diehl 9d4cbe5168 4 space indentation 2020-02-22 00:19:27 +01:00
Martin Diehl fd11f073f0 fixing prospector complaints 2020-02-22 00:11:00 +01:00
Martin Diehl be45d62f53 polishing 2020-02-21 23:59:33 +01:00
Martin Diehl dc9bfd1849 Merge branch 'DADF5_point_calculations-2' into DADF5-multiprocessing 2020-02-21 23:57:22 +01:00
Martin Diehl 12c69ed3ca Merge branch 'DADF5_point_calculations-2' of magit1.mpie.de:/damask/DAMASK into DADF5_point_calculations-2 2020-02-21 23:56:56 +01:00
Martin Diehl f20a82ce6d migrate name: damask.Result better than damask.DADF5 2020-02-21 23:56:18 +01:00
Martin Diehl 1dddfa040e adjusting indents
should be always 4 spaces
2020-02-21 23:25:22 +01:00
Martin Diehl f604314207 polishing 2020-02-21 23:16:25 +01:00
Martin Diehl e9bf02a52c one underscore commonly denotes internal functions 2020-02-21 21:37:02 +01:00
Martin Diehl 0774e12169 report progress 2020-02-21 21:27:08 +01:00
Martin Diehl c2ae657f5b arguments should be documented 2020-02-21 21:04:23 +01:00
Martin Diehl 0358e7343b polishing 2020-02-21 19:39:17 +01:00
Martin Diehl 05476ff85c parallelize addition of datasets
threads does not work, muliprocessing shows good performance: Overhead
is small compared to the performance gain.
Especially useful for long running functions of the orientation class
2020-02-21 19:25:37 +01:00
Martin Diehl b9966b95e0 consistently use small letters 2020-02-21 18:52:58 +01:00
Martin Diehl ffb80981b1 use central functionality 2020-02-21 17:49:17 +01:00
Martin Diehl 6a0760a13c documentation polishing 2020-02-21 17:42:01 +01:00
Martin Diehl a433f7ef54 style unification
backport from dadf5-usability branch
2020-02-21 13:03:50 +01:00
Martin Diehl 16ddd9c5b2 better name
backport from dadf5-usability branch
2020-02-21 12:20:42 +01:00
Martin Diehl 58610e23a7 use 4 space for indentation 2020-02-21 10:53:44 +01:00
Martin Diehl c84a6e90c9 no 'dangling' functions
@staticmethod is what we need here
2020-02-21 10:45:14 +01:00
Martin Diehl c1caef4bc9 fixing prospector complaints 2020-02-21 08:13:10 +01:00
Martin Diehl 98f5c601a3 line too long 2020-02-21 07:58:10 +01:00
Martin Diehl f6c921e811 Merge branch 'development' into DADF5_point_calculations-2 2020-02-21 07:56:19 +01:00
Martin Diehl 8ae3346bd4 constituents/components are not handled by "view" (active) 2020-02-21 07:46:55 +01:00
Martin Diehl c3740b4ba0 follow 4 space indentation convention 2020-02-21 07:45:05 +01:00
Martin Diehl effaef46db simplified interface 2020-02-21 07:39:53 +01:00
Martin Diehl 9beca6488c more verbose description 2020-02-21 07:21:45 +01:00
Martin Diehl 1e1cb3f151 avoid long modules 2020-02-20 23:29:12 +01:00
Martin Diehl 5ce143e36e numpy is already imported 2020-02-20 23:17:54 +01:00
Martin Diehl 898c696ef7 avoid long modules 2020-02-20 23:16:35 +01:00
Martin Diehl 16ed0623af 4 space indentation (as suggested by PEP) 2020-02-20 23:10:38 +01:00
Martin Diehl a670ab269f proper spacing 2020-02-20 22:50:54 +01:00
Martin Diehl a608310920 correct printing of error messages
'{}'.format(np.ones(3)) gives only '1', but we want to see '[1 1 1]'
2020-02-20 18:59:57 +01:00
Martin Diehl 251d55fe09 current thread pool is useless for performance
https://stackoverflow.com/questions/33969151
https://stackoverflow.com/questions/10789042
2020-02-16 11:00:09 +01:00
Martin Diehl 065fc9ffde using DAMASK_NUM_THREADS controls # workers for add_XXX 2020-02-16 09:49:55 +01:00
Martin Diehl a70721df53 write out proper Miller indices 2020-02-15 20:09:24 +01:00
Martin Diehl 5235c27ad0 making new mechanics functions available for DADF5
+ testing them
2020-02-15 17:56:20 +01:00
Martin Diehl 118c03c485 tests for new functionality 2020-02-15 16:59:30 +01:00
Martin Diehl ad062ada6b option (as in addSpectralDecomposition) 2020-02-15 16:26:56 +01:00
Martin Diehl 5822ad8b05 new functions (takeover from old branch) 2020-02-15 15:13:56 +01:00
Martin Diehl e46395be41 sorted alphabetically 2020-02-15 14:21:23 +01:00
Martin Diehl 79533b075e eigenvalues is more specific name than principal components 2020-02-15 13:56:15 +01:00
Martin Diehl c2c84d698f Merge remote-tracking branch 'origin/development' into MiscImprovements 2020-02-11 17:11:43 +01:00
Martin Diehl 57c70cd5d5 preparing removal 2020-02-04 00:12:08 +01:00
Martin Diehl 4999f5aa4d first steps of removing deprecated
use faster, pandas-based alternative 'table'
2020-02-03 21:40:10 +01:00
Martin Diehl 4c28e7f626 better have tests 2020-02-01 09:44:21 +01:00
Martin Diehl 4d07ab7519 prospector complained 2020-01-29 16:31:05 +01:00
Martin Diehl fa39a7423b preparing for actual use 2020-01-29 13:20:16 +01:00
Martin Diehl 5d1f68bf93 Merge branch 'fix-elem-7-57' into noAbaqus 2020-01-27 19:27:53 +01:00
Martin Diehl ed9347e9bd more robust:
* split(maxsplit=1) will raise ValueError if split into two strings is not
  possible
* int('a') will raise ValueError if 'a' cannot be interpreted as an
  integer
2020-01-26 10:34:30 +01:00
Martin Diehl 6fed655500 fix for new style and test 2020-01-26 10:17:27 +01:00
Martin Diehl 13107abd39 not working and significat efforts needed to test it 2020-01-26 07:44:22 +01:00
Martin Diehl bfe8585903 Merge branch 'development' into MiscImprovements 2020-01-24 20:08:14 +01:00
Martin Diehl 54d1c35c45 Merge branch 'development' into python-module 2020-01-24 08:42:28 +01:00
Martin Diehl ce03d9f30a play it safe 2020-01-21 17:38:08 +01:00
Martin Diehl 5b63779e5c bugfix:
Wrong order of arguments resulted in wrong visualization
2020-01-21 14:37:42 +01:00
Martin Diehl 9f61b0d34a not needed,
pd.DataFrame can handle that
2020-01-21 07:14:43 +01:00
Martin Diehl 74927d9622 np.prod(()) is 1.0 (float), casting is therefore needed 2020-01-20 16:05:07 +01:00
Martin Diehl e3d35b41b4 bugfixes: invalid python code 2020-01-20 13:06:32 +01:00
Martin Diehl b23479bfc9 Merge remote-tracking branch 'origin/development' into MiscImprovements 2020-01-20 12:51:41 +01:00
Martin Diehl 757dc4e234 new style table
no header, comments given by '#': Very standard format, we just take
care of multidimensional columns via special label notation
2020-01-20 12:51:09 +01:00
Franz Roters 701a9b18cc Merge remote-tracking branch 'remotes/origin/marc-improvements' into development 2020-01-18 12:21:24 +01:00
Philip Eisenlohr 87767f0cc2 Merge branch 'no-python-quaternion' into 'development'
No python quaternion

See merge request damask/DAMASK!122
2020-01-15 22:52:55 +01:00
Martin Diehl dd70b38d46 detour via numpy array unified datatype 2020-01-15 14:15:57 +01:00
Martin Diehl ce47e18e5c not needed for integer arrays 2020-01-15 13:45:05 +01:00
Martin Diehl 8a674d0279 2 bugfixes:
- mixed up other and me when removing quaternion class
- 1000 random orientations are enough for testing
2020-01-14 22:30:08 +01:00
Martin Diehl 9d1c1fdb92 enforce Re(q) > 0 2020-01-14 11:33:18 +01:00
Martin Diehl 3afc011a58 fix for untested functionality
thanks to prospector
2020-01-14 10:34:13 +01:00
Martin Diehl 06fc374359 avoid overhead
length of random quaternion is one, no need to go via fromQuaternion but
direct initialization and standardization suffices
2020-01-14 10:22:51 +01:00
Martin Diehl 8e5aa60f34 fixed (and polished) printing 2020-01-14 09:37:59 +01:00
Martin Diehl 9509f1bae1 default abaqus is used if version matches or is undefined
other changes do not alter behavior, just cleaning
2020-01-14 09:15:38 +01:00
Martin Diehl 26c242b997 not needed anymore
conceptually, having the quaternion class is nice but performance-wise
it is a nightmare and prevents vectorization
2020-01-14 09:03:50 +01:00
Martin Diehl 99684c3e86 Merge branch 'vectorized-orientation-conversion' into no-python-quaternion 2020-01-14 09:02:43 +01:00
Martin Diehl 3fc616bc7d Merge branch 'development' into vectorized-orientation-conversion 2020-01-14 09:00:10 +01:00
Martin Diehl af42eae9c1 Merge branch 'development' into python-module 2020-01-14 08:58:19 +01:00
Martin Diehl c7e92c672d avoid code duplication 2020-01-14 07:30:17 +01:00
Martin Diehl ecb8510217 leaner (and hopefully faster) code 2020-01-14 05:32:42 +01:00
Philip Eisenlohr 86f27df0b2 damask.Environment reads from os.environ; python module is packaging-ready 2020-01-13 17:28:28 -05:00
Philip Eisenlohr edbee3a419 Merge branch 'development' into python-module 2020-01-13 15:24:08 -05:00
Martin Diehl 47bcdfc22c [skip sc] vtk output working and tested
need to check syntax check because ifort 17.0 has problems with new
mesh. Works, however, with Intel 17.8
2020-01-13 11:53:37 +01:00
Martin Diehl 76d0383c2f Merge branch 'MoreImprovements' into marc-improvements 2020-01-13 10:04:27 +01:00
Martin Diehl bd4db68a12 support for non QUAD cell type 2020-01-13 10:03:13 +01:00
Martin Diehl f9772a3df8 more descriptive name 2020-01-13 02:51:49 +01:00
Martin Diehl 26442ee783 bugfixes
missing import/outdated test
2020-01-12 19:35:45 +01:00
Martin Diehl 70b73762ed avoid warning due to change in default parameter 2020-01-12 19:21:16 +01:00
Martin Diehl 19e88df571 polishing 2020-01-12 07:53:41 +01:00
Martin Diehl 1315029196 do not clutter comments 2020-01-12 02:06:53 +01:00
Martin Diehl 1bb94f03b8 polishing (prospector was complaining) 2020-01-12 00:21:14 +01:00
Martin Diehl 3938f34978 Merge branch 'MiscImprovements' into MoreImprovements 2020-01-11 22:37:41 +01:00
Martin Diehl 2d9c25f8e5 Merge branch 'development' into MiscImprovements 2020-01-11 20:34:35 +01:00
Philip Eisenlohr 300f1b7015 added options to return "natural" versions of asQ, asRodrig, and asAxisAngle 2020-01-11 11:36:22 -05:00
Martin Diehl 09f42a3991 ang files might have more columns 2020-01-08 15:34:21 +01:00
Martin Diehl 385085de73 correct names for numpy (differ from math) 2020-01-04 01:05:40 +01:00
Martin Diehl e692118ec5 easier to use for single output label 2020-01-03 15:41:15 +01:00
Martin Diehl b5e4e42505 splitext includes leading dot 2020-01-03 14:44:31 +01:00
Martin Diehl 49f3de44b9 limit import statements (numpy already in use) 2020-01-02 18:02:13 +01:00
Martin Diehl 97e7f510e2 wrong time was reported in case of trailing inactive increments 2020-01-02 16:27:42 +01:00
Martin Diehl f5c58517a7 enable one grid point along all directions 2019-12-24 15:59:09 +01:00
Martin Diehl aec9c601d6 some insights from continuum mechanics formulated as test 2019-12-23 15:34:13 +01:00
Martin Diehl 60580cc45a mixed up left/right stretch tensor 2019-12-23 07:16:50 +01:00
Martin Diehl 2cb3213e37 improvements to Table class
- string comparison  should be '!=' not 'is not', latter compares
object, not value
- functions for common operations: append (vstack, growTable) and join
(hstack, addTable)
2019-12-22 22:21:32 +01:00
Martin Diehl 48c21045d7 centralized functionality for ang import 2019-12-22 14:57:57 +01:00
Martin Diehl a7d60dc52a not used anymore
geom class has own report function
2019-12-21 19:10:41 +01:00
Martin Diehl 5b7139dc22 using specialized class 2019-12-21 19:09:28 +01:00
Martin Diehl 6989679d3b using central functionality
- Table class for table data
- grid_filters for grid related functions
2019-12-21 19:03:36 +01:00
Martin Diehl 2cd2d6f506 cell_2_node/node_2_cell work only for periodic data
hence, coordinates and displacements cannot be converted easily
2019-12-21 18:07:04 +01:00
Martin Diehl 3bf9a4deb5 Merge branch 'grid-filters' into MiscImprovements 2019-12-21 17:39:39 +01:00
Martin Diehl 503626473a bugfix: wrong grid order
for x fast, z slow, the shape of the array needs to be reversed
2019-12-21 17:38:16 +01:00
Martin Diehl 0d1ff72c45 Merge branch 'grid-filters' into MiscImprovements 2019-12-21 06:57:38 +01:00
Martin Diehl f0d3b29b82 Merge branch 'development' into MiscImprovements 2019-12-21 06:53:56 +01:00
Martin Diehl 2c5f7d3b5a Merge branch 'development' into grid-filters 2019-12-20 14:32:20 +01:00
Franz Roters 034367fa6a Merge remote-tracking branch 'remotes/origin/noPostResults' into development 2019-12-20 11:40:57 +01:00
Martin Diehl 2fe163be31 Merge branch 'development' into MiscImprovements 2019-12-18 19:57:00 +01:00
Francisco Jose Gallardo Basile 80b559dc00 Merge branch 'no_phase_name_for_genericoutput' into 'development'
No phase name for genericoutput

See merge request damask/DAMASK!113
2019-12-18 18:54:46 +01:00
Martin Diehl 3c42368f66 also use newer regex 2019-12-18 11:29:13 +01:00
Martin Diehl 6a8783bab8 these functions are static
class methods change are allowed to change the attributes of the class.
This is not what we do here
2019-12-13 15:46:40 +01:00
Martin Diehl 5b376712ef bugfix: wrong coordinates 2019-12-13 14:39:10 +01:00
Martin Diehl e5448fc381 avoid code duplication 2019-12-13 14:36:52 +01:00
Vitesh Shah 7d849b639b Point based vtk file in DADF5 class 2019-12-13 14:20:18 +01:00
Martin Diehl b14c15fd9e directly output DADF5 to vtk from python 2019-12-13 12:15:45 +01:00
Martin Diehl 63fc125398 include origin do DADF5
requires updat of file version
2019-12-13 09:12:07 +01:00
Philip Eisenlohr 582f895d18 restored Solver module functionality 2019-12-12 16:58:37 -05:00
Philip Eisenlohr e37daadaff restored environment functionality 2019-12-12 14:57:07 -05:00
Philip Eisenlohr 41ed7ce462 "pip install damask" either locally or from PyPI after upload 2019-12-12 14:32:51 -05:00
Martin Diehl 1d7010778e [skip ci] silence annoying warnings 2019-12-11 19:43:23 +01:00
Martin Diehl 37e52fd81f polishing 2019-12-11 16:51:13 +01:00
Martin Diehl 4c1281b4fc rename changed order in shapes dict.
This resulted in wrong column names when writing to ASCII file

two fixes (one would be enough):
1) keep order (build new directory)
2) write in order of labels in pandas dataframe, not in order in shapes
dict
2019-12-10 20:04:03 +01:00
f.basile ca06c1d3a2 Fix bugs in relatedOperations for NW,GT and GTprime. 2019-12-10 13:49:33 +01:00
Martin Diehl d1fa2a14dc was used only for yield surface fitting 2019-12-09 05:28:00 +01:00
Martin Diehl 53cb59fc47 use pytest instead of hand-written test class 2019-12-08 21:29:26 +01:00