| #
ec14d8c8
|
| 27-May-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'master' into knepley/feature-plex-sphere-mesh
* master: (2633 commits) Bib: Added ref SNES ex56: Update test output add a citation to petsc.bib Plex: Initialize variables ini
Merge branch 'master' into knepley/feature-plex-sphere-mesh
* master: (2633 commits) Bib: Added ref SNES ex56: Update test output add a citation to petsc.bib Plex: Initialize variables initialize ap as complained by the nightly tests Plex ex3: Update to new point function API initialize some variables as complained by nightly tests SNES ex12: Mix misnaming Nf --> Nc update tests add tests add MatView_SeqXAIJ_ASCII_structonly(); enable A->structure_only in MatSetValuesBlocked_SeqBAIJ typo fill-in some references Bib: Fixed ref Plex: Added PLY to file support Plex: Adding PLY support PetscDS: Turn off Fortran bindings for Constants Plex tests: Updated to new point function API SNES ex56: Moved tests to new format DM: Allow field projection functions to take an array of scalars - This will allow us to pass in user data to kernels without void *, more efficiency than aux fields ...
Conflicts: config/builder.py include/petscdmplex.h src/dm/impls/plex/examples/tests/ex1.c src/dm/impls/plex/plexcreate.c src/dm/impls/plex/plexgmsh.c src/snes/examples/tutorials/ex63.c
show more ...
|
| #
f09ee9fb
|
| 12-May-2017 |
Stefano Zampini <stefano.zampini@gmail.com> |
Merge branch 'master' into stefano_zampini/feature-fetidp-ex69
|
| #
a0479788
|
| 07-May-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'master' into knepley/feature-plex-boundary-values
* master: (487 commits) Bib: More refs Fixed errors in the manuals and ts_glee source code doc fix bug to enable '-xxx_via [alg]
Merge branch 'master' into knepley/feature-plex-boundary-values
* master: (487 commits) Bib: More refs Fixed errors in the manuals and ts_glee source code doc fix bug to enable '-xxx_via [alg]' to showup in '-help' Reported-by: Mark Adams <mfadams@lbl.gov> Plex: Remove dead code TS tutorials ex11: remove unused functions TSAdapt: Set TSADAPTNONE as default adapt type DMPlex: missed viewer change in synchronized output Revert "Merge branch 'hzhang/ts-ex9busdmnetwork'" TSAdapt: Update changes/dev.html TSAdapt: Set default type for TSGLEE TS tutorials ex11: make work with complex scalars Bib: Added ref TS ex18: Fix initializer TS ex11: Fix M_PI Plex ex1f90: FUCK FORTRAN f2cblaslapack: remove duplicate xerbla.o and xerbla_array.o from lapack [they are already in blas] TSAdapt: Refactor handling of default adapt type TSAdapt: Update changes/dev.html TSAdapt: Update manual TSAdapt: Refactor interface and implementations ...
show more ...
|
| #
46b3086c
|
| 03-May-2017 |
Toby Isaac <tisaac@uchicago.edu> |
Merge branch 'tisaac/feature-plex-tests-new'
This merge changes PetscSpace and PetscQuadrature to have a number of components, so that vector-valued functionals can be defined for non-Lagrange finit
Merge branch 'tisaac/feature-plex-tests-new'
This merge changes PetscSpace and PetscQuadrature to have a number of components, so that vector-valued functionals can be defined for non-Lagrange finite elements. Along the way, this branch also converts the regression tests related to DMPlex that were in config/builder.py to the new test harness, and makes lots of changes necessary for them to be portable tests.
* tisaac/feature-plex-tests-new: (263 commits) TS tutorials ex11: remove unused functions DMPlex: missed viewer change in synchronized output TS tutorials ex11: make work with complex scalars TS ex18: Fix initializer TS ex11: Fix M_PI Plex ex1f90: FUCK FORTRAN TS tutorials ex11: use a union when punning silence compiler warnings SNES tutorials ex56: set partitioner from options Plex: once again, MPI_Barrier() can't be used to synch output windows compile fixes balay@ps4 ~/petsc/src/ts/examples/tutorials $ make PETSC_DIR=$HOME/petsc ex11 /home/balay/petsc/bin/win32fe/win32fe cl -o ex11.o -c -MD -wd4996 -Z7 -I/home/balay/petsc/include -I/home/balay/petsc/arch-mswin-uni/include -I/home/balay/petsc/include/petsc/mpiuni `pwd`/ex11.c ex11.c C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(300): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)' C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(301): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)' C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(370): error C2229: struct '<unnamed-tag>' has an illegal zero-sized array C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(463): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)' C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(505): error C2229: struct '<unnamed-tag>' has an illegal zero-sized array C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(724): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)' C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(728): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)' C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1179): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1184): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1191): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1194): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1383): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1521): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1522): warning C4090: 'function': different 'const' qualifiers C:\cygwin64\home\balay\petsc\src\ts\examples\TUTORI~1\ex11.c(1523): warning C4090: 'function': different 'const' qualifiers PetscMath: check for math functions by function pointer resolvability another windows fix for log2() C:\cygwin64\home\petsc\PETSC~1.CLO\include\petscmath.h(28): warning C4273: 'log2': inconsistent dll linkage C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\../ucrt/math.h(506): note: see previous definition of 'log2' fix log2() compile error on windows /home/petsc/petsc.clone-4/include/petscmath.h:28:8: error: expected ‘)’ before ‘/’ token double log2(double); ^ SNES tutorials ex12: turn off complex for restart test Add empty file to silence warnings TS tutorials ex46: make output match floating point filter TS tutorials ex18: remove unused flags SNES tutorials ex69: use end of line anchor instead of word boundary SNES tutorials ex69: portable word boundary regex ...
show more ...
|
| #
12521bc7
|
| 24-Apr-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-plex-torus
* knepley/feature-plex-tests-new: (40 commits) SNES ex12: Allow more exotic periodicity SNES ex69: Added to makefile
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-plex-torus
* knepley/feature-plex-tests-new: (40 commits) SNES ex12: Allow more exotic periodicity SNES ex69: Added to makefile SNES ex69: Fix for parallelism Plex+HDF5: Output mapping for torus TS ex18: Shut off all these tests until we can figure out why you get NaNs on some builds TS ex11: More fixes to the horrible Riemann code Plex: Fix section creating for random partitioning Plex-ex12: Fix LogStage scope for load balancing TS ex11: Mark, this code is disgusting TS ex18: Shut off all these tests until we can figure out why you get NaNs on some builds TS ex11: Silence IDIOT FUCKING COMPILER that has no idea what it is talking about Plex: I think I fixed random partitioning Plex: Awful fix for partitioner options - I cannot see a better way to solve this right now Plex: Bug fixes for shell partitioning Plex ex12: Fix partitioning - Now give load balancing DM prefix "lb_" so I can change partitioners - Do not force test partition in load balancing Plex: Now set partitioner type from options in GetPartitioner() instead of on creation - Also set it from options with DM, but this is probably useless because most DM are partitioned before SetFromOptions Plex: Add DMPlexSetOptionsPrefix() - This gives the prefix to the partitioner TS ex18: Indicate broken tests TS ex11: Indicate broken test SNES ex62: Added SIMPLE tests ...
show more ...
|
| #
852f401d
|
| 24-Apr-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'master' into knepley/feature-plex-torus
* master: (174 commits) Bib: Another ref Increase patchlevel to 3.7.6 Explicitly listing the LTO library causes difficulties on MacOS so a
Merge branch 'master' into knepley/feature-plex-torus
* master: (174 commits) Bib: Another ref Increase patchlevel to 3.7.6 Explicitly listing the LTO library causes difficulties on MacOS so avoid it TSBDF: Update changes/dev.html Added Fortran TaoType and TaoLineSearchType definitions Add Fortran TaoType and TaoLineSearchType definitions setblocksize for iscol_sub TSBDF: Use standard TS API and options to control adaptivity Bib: More refs and a correction SNESTest: Bug-fix in SNESTest when threshold printing option is turned on. fix warning and valgrind complains reported by the nightly tests Section+Doc: Small doc fix pflotran: switch to using the new upstream git repo DMPlex: Error if attempt to partition a distributed graph with Chaco fix complex build error fix complex build PetscError() did not properly copy over the specific error message when error type was PETSC_ERROR_INITIAL TSAdapt: Refactor handling of the always_accept flag Additional clarification for MatMeshToCellGraph() manual page optimize MatCreateSubMatrix_MPIAIJ() by merging check of sameXXXDist() into one MPI_AllReduce ...
Conflicts: config/BuildSystem/config/packages/med.py
show more ...
|
| #
12c93f75
|
| 20-Apr-2017 |
Lisandro Dalcin <dalcinl@gmail.com> |
Merged in dalcinl/chaco-errcheck (pull request #666)
DMPlex: Error if attempt to partition a distributed graph with Chaco
|
| #
07ed3857
|
| 18-Apr-2017 |
Lisandro Dalcin <dalcinl@gmail.com> |
DMPlex: Error if attempt to partition a distributed graph with Chaco
|
| #
a0058e54
|
| 12-Apr-2017 |
Toby Isaac <tisaac@uchicago.edu> |
DMPlex: partitioner must be set from options explicitly
Yes, it's not nice to have to call this before every DMPlexDistribute(), but it's better than hidden implicit SetFromOptions calls.
|
| #
8bee6947
|
| 30-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'master' into knepley/feature-plex-tests-new
* master: (108 commits) Bib: Added ref Bib: Updated reference Bib: Updated reference Work around problems with Apple Xcode 8.3 and h
Merge branch 'master' into knepley/feature-plex-tests-new
* master: (108 commits) Bib: Added ref Bib: Updated reference Bib: Updated reference Work around problems with Apple Xcode 8.3 and handling of rpath argument with gfortran help menu update for MatCreateSubMatrices() Reported-by: Brad Aagaard <baagaard@usgs.gov> fix flops for PCApply_PBJacobi_1 and PCApply_PBJacobi_7 Reported-by: Pierre Jolivet <pierre.jolivet@enseeiht.fr> TSRK: Fix FSAL optimization to not skip update and check or stages. Travis-CI: Workaround too long TMPDIR in macOS with Open MPI test: Fix type mismatch in KSP test. test: Fix warnings from gfortran -Wconversion (OS X, Homebrew build) MPIUNI: Silence GCC -Wconversion warnings Fortran: Add error checking for incorrect PETSC_NULL_XXX argument when expecting function fix test output per changes in 517c9301b2e9239931bfd644803fd6bb859387ea MUMPS: update to version 5.1.1 with opensolaris compile fixes TSRK: Mention 5BS in the changelog. TSRK: Mention the new 5BS scheme in the manual. fix 'unused variable' warning Remove unused code added hbw_realloc fixed undefined ptr ...
Conflicts: config/BuildSystem/config/packages/med.py
show more ...
|
| #
ac9a96f1
|
| 28-Mar-2017 |
Michael Lange <michael.lange@imperial.ac.uk> |
Plex: Fix section creating for random partitioning
|
| #
aa1d5631
|
| 20-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Plex: I think I fixed random partitioning
|
| #
4e8061f6
|
| 17-Mar-2017 |
Satish Balay <balay@mcs.anl.gov> |
Merge remote-tracking branch 'origin/dalcinl/parmetis-vertex_weights'
|
| #
8083afff
|
| 17-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-plex-pragmatic-parallel
* knepley/feature-plex-tests-new: Plex: Awful fix for partitioner options - I cannot see a better way to
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-plex-pragmatic-parallel
* knepley/feature-plex-tests-new: Plex: Awful fix for partitioner options - I cannot see a better way to solve this right now Plex: Bug fixes for shell partitioning
show more ...
|
| #
13fef8f3
|
| 17-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Plex: Awful fix for partitioner options - I cannot see a better way to solve this right now
|
| #
c717d290
|
| 17-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Plex: Bug fixes for shell partitioning
|
| #
48faa39a
|
| 17-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-plex-pragmatic-parallel
* knepley/feature-plex-tests-new: Plex ex12: Fix partitioning - Now give load balancing DM prefix "lb_" s
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-plex-pragmatic-parallel
* knepley/feature-plex-tests-new: Plex ex12: Fix partitioning - Now give load balancing DM prefix "lb_" so I can change partitioners - Do not force test partition in load balancing Plex: Now set partitioner type from options in GetPartitioner() instead of on creation - Also set it from options with DM, but this is probably useless because most DM are partitioned before SetFromOptions Plex: Add DMPlexSetOptionsPrefix() - This gives the prefix to the partitioner
show more ...
|
| #
4f3833ea
|
| 16-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Plex: Now set partitioner type from options in GetPartitioner() instead of on creation - Also set it from options with DM, but this is probably useless because most DM are partitioned before SetFromO
Plex: Now set partitioner type from options in GetPartitioner() instead of on creation - Also set it from options with DM, but this is probably useless because most DM are partitioned before SetFromOptions
show more ...
|
| #
925b1076
|
| 15-Mar-2017 |
Lisandro Dalcin <dalcinl@gmail.com> |
ParMetis: Skip cells in the overlap region while filling the weights array
|
| #
c90b701e
|
| 14-Mar-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'master' into knepley/feature-plex-pragmatic-parallel
* master: (1379 commits) Minor fixes for tchem examples due to changes in PETSc infrastructure update webpage about API changes
Merge branch 'master' into knepley/feature-plex-pragmatic-parallel
* master: (1379 commits) Minor fixes for tchem examples due to changes in PETSc infrastructure update webpage about API changes add help menu for MatCreateSubMatricesMPI() rename struct Mat_SubMat -> Mat_SubSppt add a little information to the manual about using tchem rename MatCreateSubMatrixComposite -> MatCreateSubMatrixVirtual; Mat_SubMatrix -> Mat_SubVirtual need to protect the \ passed on the makefile on my Mac Bib: Updated ref update src/mat/examples/tests/output/ex23_#.out rename MatGetSubMat -> MatCreateSubMat Mark MatCreateMPIAIJWithSplitArrays() and MatMPIAIJSetPreallocationCSR() with MAT_NO_OFF_PROC_ENTRIES superlu: libray is installed in PREFIX/lib64 - fix this to use PREFIX/lib backport fixes cc105cc3 2b35c90a - required for 3bf428d - that was backported from master - 80c96bb 'echo -n' fails on opensolaris/osx - so avoid using it. fix diffs in nightlybuilds due to options in ~/.petscrc add Kelley03 to src/docs/tex/petsc.bib build: determine moudles, mpi.h used during buildtime and print in 'info' fix analyzer warnings fix build failure on opensolaris - where -lm from flibs is removed due to -lm in cxxlibs. But then - only flib gets used for some configure tests [blaslapack, parms] config: prefer __restrict over C99 restrict keyword ...
show more ...
|
| #
171f813e
|
| 15-Feb-2017 |
Toby Isaac <tisaac@uchicago.edu> |
Merge remote-tracking branch 'origin/knepley/feature-fe-dual-apply' into tisaac/feature-fe-dual-apply
* origin/knepley/feature-fe-dual-apply: (75 commits) Plex: Screwed up last fix Plex: Fix ove
Merge remote-tracking branch 'origin/knepley/feature-fe-dual-apply' into tisaac/feature-fe-dual-apply
* origin/knepley/feature-fe-dual-apply: (75 commits) Plex: Screwed up last fix Plex: Fix overeager protection of function PetscFE: Fixed declaration Travis-CI: Attempt to solve issues with gfortran Travis-CI: Use newer macOS image clarify damping and other issues related to SNESLINESEARCHBASIC change example in new harness to use simple partitioner so gets consistent output on all systems remove unused function from test file cleanup formatting in example, plus myrank not rank all requires need to go on the same line in test definition otherwise they are skipped missing - makes the manual page formatting wrong The developer manual clearly states that MPI_Comm_size() returns size it doesn't return numProcs or other nonsense. Pretty soon you'll start using mype instead of rank? fix typo and cut and paste error in docs bugfix for !HYPRE fix warning for ';;' may switch to scalable only when B->cmap->N > 100000 MatLRC: store in the context the parallel matrices rather than the sequential ones Bib: Add ref set default algorithm based on B->cmap->N for MatMatMult_MPIAIJ_MPIAIJ() Error in VecScatterView_MPI() had the meaning of from and to backwards ...
show more ...
|
| #
c5eaf5f0
|
| 14-Feb-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-fe-dual-apply
* knepley/feature-plex-tests-new: (73 commits) Plex: Fix overeager protection of function Travis-CI: Attempt to s
Merge branch 'knepley/feature-plex-tests-new' into knepley/feature-fe-dual-apply
* knepley/feature-plex-tests-new: (73 commits) Plex: Fix overeager protection of function Travis-CI: Attempt to solve issues with gfortran Travis-CI: Use newer macOS image clarify damping and other issues related to SNESLINESEARCHBASIC change example in new harness to use simple partitioner so gets consistent output on all systems remove unused function from test file cleanup formatting in example, plus myrank not rank all requires need to go on the same line in test definition otherwise they are skipped missing - makes the manual page formatting wrong The developer manual clearly states that MPI_Comm_size() returns size it doesn't return numProcs or other nonsense. Pretty soon you'll start using mype instead of rank? fix typo and cut and paste error in docs bugfix for !HYPRE fix warning for ';;' may switch to scalable only when B->cmap->N > 100000 MatLRC: store in the context the parallel matrices rather than the sequential ones Bib: Add ref set default algorithm based on B->cmap->N for MatMatMult_MPIAIJ_MPIAIJ() Error in VecScatterView_MPI() had the meaning of from and to backwards fix build warning as reported by the nightly tests Update alquimia.py to use Glenn's branch that updates alquimia for pflotran xsdk ...
show more ...
|
| #
cffa9059
|
| 14-Feb-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'master' into knepley/feature-plex-tests-new
* master: (94 commits) Plex: Fix overeager protection of function Travis-CI: Attempt to solve issues with gfortran Travis-CI: Use newe
Merge branch 'master' into knepley/feature-plex-tests-new
* master: (94 commits) Plex: Fix overeager protection of function Travis-CI: Attempt to solve issues with gfortran Travis-CI: Use newer macOS image clarify damping and other issues related to SNESLINESEARCHBASIC change example in new harness to use simple partitioner so gets consistent output on all systems remove unused function from test file cleanup formatting in example, plus myrank not rank missing - makes the manual page formatting wrong The developer manual clearly states that MPI_Comm_size() returns size it doesn't return numProcs or other nonsense. Pretty soon you'll start using mype instead of rank? fix typo and cut and paste error in docs bugfix for !HYPRE fix warning for ';;' may switch to scalable only when B->cmap->N > 100000 MatLRC: store in the context the parallel matrices rather than the sequential ones Bib: Add ref set default algorithm based on B->cmap->N for MatMatMult_MPIAIJ_MPIAIJ() Error in VecScatterView_MPI() had the meaning of from and to backwards fix build warning as reported by the nightly tests Update alquimia.py to use Glenn's branch that updates alquimia for pflotran xsdk fix divide by zero exposed by 8534686b5096cd4c91a8f3895408b386c0628431 - and produced by petsc4py testsuite ...
Conflicts: src/dm/impls/plex/examples/tests/ex13.c src/dm/impls/plex/plexgmsh.c src/snes/examples/tests/ex2.c src/snes/examples/tests/output/ex2_3.out src/snes/examples/tests/output/ex2_4.out src/snes/examples/tests/output/ex2_5.out
show more ...
|
| #
7363b948
|
| 11-Feb-2017 |
Matthew G. Knepley <knepley@gmail.com> |
Merge branch 'knepley/fix-plex-docs'
* knepley/fix-plex-docs: Plex: Fix the fix fix -Wmaybe-uninitialized Doc+Plex: Add PetscUnit to Fortran Doc+Plex: Fix function name Plex: Fix declarati
Merge branch 'knepley/fix-plex-docs'
* knepley/fix-plex-docs: Plex: Fix the fix fix -Wmaybe-uninitialized Doc+Plex: Add PetscUnit to Fortran Doc+Plex: Fix function name Plex: Fix declaration Doc+Plex: Added function docs Doc+Plex: More function docs - Make functions static - Move internal declarations Doc+Plex: More function docs Doc+Plex: Document DMPlexGetOrientedFace() and DMPlexSetSubpointMap() - Make functions static Doc+Plex: Document DMPlexCreateOverlapMigrationSF() - Make functions static Plex: Make functions static - Move internal declarations to private header Plex: Make functions internal Plex+HDF5: Make functions internal Plex: Make functions static Plex: Make functions static Doc+Plex: Document DMPlexCreateNeighborCSR() - Make functions static Doc+Plex: Document DMPlexPreallocateOperator() - Make functions static Plex: Make function static Plex+VTK: Make functions static Plex+VTK: Make DMPlexVTKGetCellType() internal
Conflicts: src/dm/impls/plex/plexvtk.c
show more ...
|
| #
9852e123
|
| 11-Feb-2017 |
Barry Smith <bsmith@mcs.anl.gov> |
The developer manual clearly states that MPI_Comm_size() returns size it doesn't return numProcs or other nonsense. Pretty soon you'll start using mype instead of rank?
Using consistent names for va
The developer manual clearly states that MPI_Comm_size() returns size it doesn't return numProcs or other nonsense. Pretty soon you'll start using mype instead of rank?
Using consistent names for variables makes code simpler to maintain
show more ...
|