This file lists major changes within maiprogs in chronological order. The list will certainly be far from complete. 16.6.2020 a) Created routines sm22setup,sm33setup for light-weight computation of some sparse matrices used in mg-routines and seamat as part of preconditioners. 2.6.2020 a) Resolved an issue with mesh coarsening for multilevel methods. The process of mesh coarsening is again O(N) instead of O(N^2). b) Added an option 'uop' followed by the name of a bilinear form to all MG methods. Using the option the coarse level matrices are re-computed instead of projected from the fine grid matrix. 25.5.2020 a) Created the octime Module for timing measurements. A call to 'wtime' allows the systematic measurement of cpu and wall time, using maiprogs logging-facilities. The explicit use of cpu_time and omp_get_wtime is now discouraged. The new subroutine allows to replace 10-12 lines, using conditional compilation, by just 2 lines. 3.6.2019 a) Parallelisation of BICGSTAB,CGNE,CGNR solvers. 14.12.2017 a) Enabled tiles for 3d. b) compressmat extended to tiles. c) Auto-compression during normal matrix setup. I.e. minimal storage usage throughout. 25.11.2017 a) Created tile-storage system for block-sparse matrices. No compression yet. 14.10.2017 a) Optimisation for dg2lap and dg3lap. 7.10.2017 a) Moved compressmat command to inter0 module. compressmat is now available for all maiprogs mainprogramms. 4.9.2017, MM a) New mpi_all_scatter and mpi_all_gather routines 30.7.2017, MM a) Added 2 new matrxi vector multiplication routines with internal MPI communication. Can be controlled by defmpi with mpimv=0 standing for normal MV with separate communication. mpimv=1 with internal communication using w2pi, mpimv=2 with reschuffeled sparse matrix. mpimv=2 should be the fastest. 22.7.2017, MM a) Changed OpenMP parallelisation for #err. (generr) commands from critical to reduction clause. Previous version lead to increased computation times on many core architectures. 9.7.2017, MM a) Extended the capability to define BCL variables on the command line when invoking one of the maiprogs-programmes. It is now possible to define text parameters. Keep in mind that the shell automatically removes the outer quotes. I.e. you have to use something like VAR="'test'" to define a variable VAR with the value 'test'. 8.7.2017, MM a) Added subroutine mpi_sparse_sendrecv to mpi_sparse.f90 to determine the send and receive list (based on matrix) for the all_to_allv instruction. 28.3.2017, MM a) Finished c13face function in fox/net3dat.f90 for 3d DG methods. 25.3.2017, MM a) Updated inifemprec33dg with proper dense mode. 18.3.2017, MM a) Added a report_bandwidth function for MPI in parallel. 29.1.2017, MM a) Created c12edge,numc12edge subroutines for localiced DG basis functions. 7.12.2016, MM a) Implemented the command scalemesh(mesh,scl) to scale an existing mesh with a global factor scl. 29.11.2016, MM a) Introduced the variables PRETIME and WPRETIME, measuring the total time and wall clock time for the initialization of preconditioners. The variables are set as part of initdta1/2/3. Before only PRETIME was set as part of the individual initialization routines. As before SEC and WSEC after 'solve' measure the time for the total solve, including initialization and iterations. To get the iteration time alone, you need WSEC-WPRETIME 13.10.2016, MM a) Implemented inifemprec33dg and all related subroutines for the 3d DG preconditioner. 5.10.2016, MM a) Unified most of the preconditioners in fox/mldtfbas.f90 Using now regularly the matrix_block data-type. Preconditioners on matrix-level are now independent of specific data type. 13.9.2016, MM a) Introduced new access functions to create pointers to sub-components of spline,splinex and mesh data-structure. sp1=>spxsp1(sp1x); mh1=>spmh1(sp1) will set pointers to the spline-class (sp1) of an spline (sp1x). Analogously, spmh1(sp1) will return a pointer to the mesh part of the spline class(sp1). Direct access to %mh and %sp is not possible any longer, the components have been declared 'private'. b) It is strongly suggested that all add-on programmes are updated to the new structure as soon as possible. 10.8.2016, MM a) Created the 3 modules mesh1dat,mesh2dat,mesh3dat containing all mesh parts of the former net1dat, net2dat and net3dat modules. The net-module now only contain the basis function mappings based on geometry information. 30.7.2016, MM a) Created new module mympibroad containing only the subroutine mympi_broadcast, called by mpi_broadcast for extension. 29.7.2016, MM a) New subroutines destroydt and dtprec are replacing former subroutines finfemprec,finbemprec and femprec,bemprec in new module mldtfbas. 26.7.2016, MM a) Created module mpidmp to contain the init_dmp functions for setting up the mpi data model. 25.7.2016, MM a) Created the file fox/mysolve.f90 containing interfaces for user-defined preconditioners which fit into the existing matrix-based types. 24.7.2016, MM a) Eliminated the prec_* data structures from prec_block. Replaced by linked list bctype to store preconditioner arguments. b) New access functions setprecdat,getprecdat. c) Switching smat,dmat etc to blk(matrix_block) structure where appropriate. Ongoing process (seamat done). 26.6.2016, MM a) Multiple changes again to mesh0 data-type. Quadtrees and Octtrees are now part of all meshes. b) Introduced getrnodes and setrnodes subroutines to remove as much as possible direct access to the %rnodes data structure. Conversion nearly finished for all routine when not impacting performance. c) Ongoing effort to change the function model in funct*.f90. ltyp is used in the future to set a pointer to a single function. The current structure with a select case structure for every function call will disappear. User interface, in particular the myfunct*.f90 files are not effected currently. d) When using the gfortran compiler the minimum requirement is now 4.8.3 or later. The 4.8.1 compiler contains bugs preventing a succesfull compilation. 31.5.2016, MM a) maiprogs is now undergoing the transition to Fortran 2003. As a first step mesh- and spline-datatypes are now extended datatypes using the new Fortran 2003 feature. This allowed a considerable simplification of the code in the meshes*.f90 and splines*.f90 files. b) The interface has not changed, as a consequence the new folder fo95 contains the original Fortran 95 files for splines and meshes. Using depmod.conf it is possible to use only Fortran 95 features for the time being. The current plan is to keep the compatability folder fo95 alive until 2017. c) The change of data structures required the use of access functions everywhere, in particular for the use of polynomial degree etc. The access functions are Fortran 95 features. It is stringly encouraged to use the functions in your own code otherwise you will encounter Compiler errors or other incomptabilities. 11.2.2016, MM a) Created new subroutines 'mpislicereduce', 'mpislicebcast' to be used in all situation where the uniform workload model can be used for MPI. The new functions allow to remove most preprocessor statements from the code. b) Parallelized more error indicators in adap2c.f90 and replaced all occurences of MPI_REDUCE and MPI_BCAST with the new functions. adap2c.f90, adap22.f90, adap3c.f90 and adap33.f90 are now currently free of preprocessor statements. 1.1.2016, MM a) Added C1-capable basis functions in 1d (ptyp=7) 26.12.2015, MM a) Parallelised the internal copy_row subroutine for the setup of sparse-row (CSR) matrices. 12.12.2015, MM a) Added the myform1.f90 file to maifem1 with all possible extensions. b) Added myind3c to myforms3.f90 11.12.2015, MM a) Some bugfixes and optimisations for ads/depmod.f90 to deal with unexpected situations. 9.12.2015, MM a) Added the template myind2c to myforms2.f90. User-defined indicators can now created analogously to bilinear forms and right hand sides. 13.11.2015, MM a) Created command 'defmpi' for setup of mpi data structure before solve. 11.11.2015, MM a) Introduced the mpi_data data type for all mpi related data structures. b) Introduced dmp variable of mpi_data type as part of problem data type for all mpi related data. 8.11.2015, MM a) Added mpi_all_broadcast function to maimpi.f90, using MPI_ALLTOALLV for partial broadcast (mpimode=1). 31.10.2015, MM a) Introduced the wdam data type to describe the data distribution to all processess. init_wda_slice sets up the old slice based splitting. wdam will become a part of the matrix datatype 26.10.2015, MM a) Added a function/command mpimvtest to debug2c, for checking the parallel matrix-vector multiplication. 7.8.2015, MM a) Removed old matrix-datastructure completely, absorbed now in the new matrix. Temporary data type cmatrix is now also removed. Change should be transparent to all normal users. 4.8.2015, MM a) Added mpimode and send,recv data structure to cmatrix for mpi purposes. b) Removed full broadcast from dense and sparse addmul subroutines. c) Added modes ijob=7 and ijob=8 to mpirevcom (mpicgrevcom) for broadcast operations via reverse call. mpi_matrix_revcom contains the actual broadcast code and should be extended to use the send,recv data structures for a more efficient communication. 2.8.2015, MM a) Continued the transformation. type (matrix) is not used anymore outside matrix.f90 and mpimatrix.f90. 1.8.2015, MM a) Created the module elmat to cover basic data structures for (sparse) matrices used as components of larger data structures. This sparse matrices are not intended to be used as container for FEM matrices. b) Renamed the former 'dfine' data type to 'fsdat' to be more inline to pdat and psdat. The components have also be renamed to match psdat. c) Introduced the new data type 'cmatrix', currently contains array of 'matrix' to represent the block structure. New container type, made necessary by mpi parallelisation, need information beyond array of 'matrix'. Warning: Most changes are only transparent/internally, but copies of main programmes have to be changed manually. 27.7.2015, MM a) Change in the config-file. If -mpi=yes then known mpi-enabled compilers are put first in the search list, so that mpi-enabled compilers are choosen automatically. Can still be overridden using -c option of FC= in .configrc. 23.7.2015, MM a) Added option omp_threads to parallel-command to set maximum number of threads available per process. Replaces the old setomp command with the same functionality. export OMP_NUM_THREADS=1 etc does not work due to the internal resource allocation algorithm in the moment. b) Added third option repstr (default: yes) to switch on/off the report function of parallel. 21.7.2015, MM a) New target for make clean_install. Doing make all_clean and make install in one go. 15.7.2015, MM a) Refactoring the code to use access function for geometry descriptions as far as makeing sense. Especially use of gm%nodes,gm%rnodeg,gm%rnodes is minimized. 21.6.2015, MM a) Multiple changes to allow mh%rnodes with an arbitrary number (<=16) of nodes, i.e. generalized elements. 10.6.2015 a) Implemented early code for mpi-support in the solver. b) solve-command extended by mpimode option, default is 'no', in the future mpimode will allow to choose between different parallelisation strategies on solver level. c) helpfile updated. 25.5.2015 a) config now tests for submodules as part of Fortran 2008 support. 25.04.2015 a) Introduced the bilinear forms DGE (edge*grad+grad*edge) and DGC (c*jump*jump) for 2d-Discontinuous Galerkin (was part of DGA) b) Introduced the bilinear forms DGF (face*grad+grad*face) and DGC (c*jump*jump) for 3d-Discontinuous Galerkin (was part of DGA) 12.3.2015 a) Changes #pnod. (in 2d and 3d) to write node numbers in proper columns. 10.3.2015 a) added instructions to load files myproblems,myestimators and mygeometries to ads/mairc if they exist. This new files are not part of the maiprogs distribution and will therefore not be overwritten if an update is installed. You should use this files to collect your own definitions, if you don't want to keep them in your bcl-files. b) Extended stiff3helm to complex wavenumbers (analogue to the 2d version) and added the commands #kwc, #kwc. to maicoup3 to read and write complex wavenumbers, for details see the helpfile or doku.tex c) Updated helpfile and doku.tex (getting the content more in-line). 2.2.2015 a) Started to add support for hdf5. 12.12.2014 a) Updated the kind.f90-code to also print kind values for available character sets (DEFAULT,ASCII,ISO_10646). 21.9.2014 a) Added gmsh as supported data format to import-command. So far only for surface elements (triangles,quadrilaterals). 20.9.2014 a) Created new functions checkbd2x,setsp2b (and 3d-variant). spline components %freebd %nofreebd are now only used directly in the splines and proj modules. %freebd and %nofreebd could be incorporated as bcdat-element but will remain part of splines for the forseeable future due to performance reasons. b) Replaced %rc( etc everywhere bei bdneigh when used to access boundary marking. 14.9.2014 a) Created new commands 'import' and 'export' in formats.f90 in preparation for reading and writing new external data formats. 26.8.2014 a) Created command #dg to set the Discontinuous Galerkin coefficient. 23.8.2014 a) Introduced subroutine rctik (all dimensions), to find the opposite element and edge/face in one call. b) Introduced function bdneigh{1,2,3} to obtain boundary information. 17.8.2014 a) config now tests for MPI-support, and switches off user MPI usage if compiler fails the test. 15.8.2014 a) Updated doku.tex to reflect the changes for CUDA (especially config). 12.8.2014 a) Finished changes to parallel command and report functions. b) Created graphic card allocation for multiple cards/multiple processes. 5.8.2014 a) Interactive mode works now with mpi. 4.8.2014 a) Many changes in maipar.f90, maimpi.f90 and the new maipardb.f90 towards flexible allocation of computing resources, including multiple graphic cards. 6.7.2014 a) Improved depmod.f90 (make depend) to understand C-interface definitions. 24.6.2014 a) Testcode cgcuda for dense matrices is operational. 19.6.2014 a) CUDAPATH determination in config implemented. 15.6.2014 a) Created new folder focuda/ in standard directory structure. b) New option in config '-cuda' (default no) c) First full access of CUDA functions implemented, i.e. in the 'parallel' command. 28.4.2014 a) First steps in config to use CUDA as accelerator. 21.3.2014 a) Added long neglected support for 1d-Helmholtz equation. b) Some test-cases with high wave-numbers. 4.1.2014 a) Finalized the new 'parallel' command to coordinate MPI and OpenMP. Will also give more information about running processes. 2.10.2013 a) Corrected bug in induce2s affecting Trace-meshes with coarsening. 25.9.2013 a) adap is replacing resh for all adaptive algorithms. b) estimator database is ready for use. c) Process of breaking up old indicator functions into smaller reusable parts, which are easier to parallelize is going on. d) Bug fix for problem in dense-addmul function, affecting coupling problems. 10.7.2013 a) Full parallelization with MPI for retarted potentials (femcomp2x22). 8.7.2013 a) Added more usefull options to debug-mode for gfortran in ads/config.sub 15.6.2013 a) Added new Least-Squares problems LS2HD and HEATLS2HD b) Several bug-fixes related to div-terms. 30.9.2012 a) Created Maiprogs Fact Sheet in doku (maf2.tex) b) Suggestions for improvement are welcome. 14.8.2012 a) Removed most direct accesses of %rx, %rh, %rn, %rd1, %rd2 mesh-components. 15.7.2012 a) setimhsp1 (aka setimhsp for splines1) renamed into setibdsp1 (aka setibdsp). All usages have been changed. b) Created new setimhsp1 which is now compatible with getimhsp1, i.e. uses mid-point and difference vector. 11.7.2012 a) Several bug fixes in problem.f90 and proj1x.f90. 21.6.2012 a) Added code for geometrical 3d-meshes towards edges with hanging nodes. 17.6.2012 a) Fixed error in #cx-command for 3d-data files (new format). 3.6.2012 a) Added direct solver for matrices in tridiagonal form. mit='TRI' in solve. 9.5.2012 a) Final improvement for rowcol-operation, from 128s to 8s. Bubble functions in all cases eliminated from compression list. 8.5.2012 a) Further speedup for rowcol-operation, setup for sparse-row matrices, bubble function are identified. 7.5.2012 a) New format for block-matrix definitions ! format: [osgn onum*] op1.omat[(arg1,arg2,...)].op2 ! or ! format: [osgn onum*] op1.Trans(omat[(arg1,arg2,...)]).op2 ! or ! format: [osgn onum*] op1.Herm(omat[(arg1,arg2,...)]).op2 ! or ! format: [osgn onum*] op1.Conj(omat[(arg1,arg2,...)]).op2 Allows the use of transposed, hermitean or conjugated form of Matrix omat. b) Matrix-operator in right-hand side computation and eval-command extended by Conj-option for complex-conjugated matrix. c) Speed-up for rowcol-operation, setup for sparse-row matrices. 27.4.2012 a) Dense-full Matrix-Vector multiplication with MPI parallelization moved to main version. b) Sparse-row Matrix-Vector multiplication with MPI parallelization moved to main version. c) Extended dense and sparse addmul-subroutines with 'C' mode (multiplication with conjugated matrix) to complement set of operations. 15.3.2012 a) Added variable MYLIBPATH to variables which can be set in .configrc Can be used to add unusual locations for searching libraries. 10.3.2012 a) 2d-mesh, 3d-mesh and 3d-boundary mesh output now in OpenGL. 7.3.2012 a) Added cylindrical shell to macro elements. 4.3.2012 a) Removed non-shared directories from module search path (-I). b) config extend for checking and linking to OpenGL via f03gl. c) Added basic replacement code. d) New module fog/glgnodes.f90 for implementing OpenGL interactive functionality. 5.2.2012 a) Extended fix2mp and dp2mp to also generated quadruble precision data type. 28.1.2012 a) config now checks for available kind values and precision (ads/kind) 8.1.2012 a) Extended meshquality and checktrace for 2d-cases. 27.12.2011 a) All femcomp-subroutine parallelized with OpenMP b) Corrected potential problem with lichtkegel-subroutines 1.12.2011 a) Removed all reduction and atomic instructions for OpenMP. maiprogs can now use OpenMP together with arprec in multiprecision mode. Recommended .configrc script in the maiprogs_mp folder is now: # default gfortran FC="gfortran" # OPENMP="no" NOMAKEMODE="yes" MPMODE="yes" NOLIBS="nag sperf imsl dxml acml mkl" 4.11.2011 a) Finished implementation of hanging node meshes/tree meshes for 1d. 22.10.2011 a) Merged modules fo11/nodes11.f90 and fo12/nodes12.f90 into fox/nodes1x.f90 2.10.2011 a) Extended dp2mp, generating multiple precision version of maiprogs will now update only modified files. 25.9.2011 a) Extended relaxc command with additional options, ' ','multi','reord'. The last 2 options apply multi-coloring. 'multi' keeps the original matrix, 'reord' reorders the matrix to achieve greater performance. b) Created new command setomp('threads',2) which allows to set the number of OpenMP threads in BCL. 14.9.2011 a) Added relaxc command to test SOR with projection for 2d-fem obstacle problems. b) Created multicolor routine to identify independent equations in sparse matrices. c) Extended fsorcel to use multicolor information for parallelization. 23.8.2011 a) Added monotone multigrid for 2d-fem. b) Various book-keeping changes for multigrid code. 11.8.2011 a) Created new modules arith.f90 and help.f90 with the respective routines from bcl.f90 10.8.2011 a) Created new module mlcdrv.f90 with driver routines for mlevc. 9.8.2011 a) Moved mgc and other contact solvers to own module mlcbas.f90 16.6.2011 a) maiprogs is now able to work with arprec in higher precision arithmetic. make mp will create a directory maiprogs_mp (parallel to maiprogs) mimiking the existing directory structure. In ads/ there are now scripts which allow with 'make blas' and 'make lapack' to compile blas and lapack libraries in higher precision. Please inform me of any observed inconsistencies or errors occurring. b) There exists new shortcuts, i.e. mpcoup2 instead of coup2 etc. 20.4.2011 a) File .configrc can be used to overwrite default values. If .configrc exists it will be read prior to analysing the argument list, but after setting default values for configuration parameters. Important variables are FC for the compiler, OLEVEL for the optimization level, OPENMP for the use of OpenMP and MPI for the use of MPI. 19.4.2011 a) Created ads/dp2mp for converting double precision data type to multiprecision datatype b) Modified makefile for new target mp, to set up multiprecision version of maiprogs in maiprogs_mp. Multiprecision package arprec has to be compiled separately, mod-file and libraries have to be in search path. List of libraries has to be supplied by hand in the makefile.mai. 9.4.2011 a) Added Newton potentials for Helmholtz 2d. b) Fixed bem2fem2 to only use boundary meshes, when present. Otherwise replaced by boundary of given fem mesh. This will only work, if fem mesh fills domain completly. 6.4.2011 a) Fixed new exact solution for Stokes problems in 2d. 3.1.2011 a) Changed outvec3x in fox/io3.f90 so that only new format output is made. No special behavior for ptyp<=9 anymore. b) Changed invec3x in fox/io3.f90 to read always the standard format. For compatability the routine tries to recognize the old format. 2.1.2011 a) Extended transfer12 in fo12/analys12.f90 with prolongate-mode. 25.11.2010 a) Finished lagevalss b) Extended the Q-Form to Laplace and Helmholtz c) Extended femcomp2bd12 to Hanging Node meshes 4.11.2010 a) Activated fortran preprocessor directives. b) First steps to the (optional) use of MPI. 12.10.2010 a) Fixed transfer routine facex2lx, tetrahedrals, face 3. 10.10.2010 a) Implemented Discontinuous Galerkin in 2d and 3d, routines dg2lap,dg3lap and lftdg2x,lftdg3x. 4.6.2010 a) Added routines femcomp12xg and massl2gen12x in fo12/compfem12.f90 4.4.2010 a) Non-compatible change to yourcomp, additional parameter added. b) In the definition of matrices, linear combinations of forms are now allowed. 22.2.2010 a) stiff2lapnl and stiff3lapnl now use rhotilde instead of rho,rhos. b) Implemented non-linear double-well problem (ADW) for matrix and rhs. 25.1.2010 a) Made multiple changes to the assembling of matrices. b) Non-compatible change to yourcomp-interface. Two additional parameters (factor,addmode) have to be incorporated, which allow much more flexibility in the construction of matrices and are supported by xfcomp and most femcomp-routines. As a fallback 'setmatrixold' exists which still supports the old interface. 8.10.2009 a) Hanging nodes for vector valued continuous basis functions in 3d. 28.9.2009 a) Several bug corrections (especially L2 projection). b) Moved all femcomp-subroutines to their own modules. 24.9.2009 a) Extension for #fk.-mode 'thin'. Works now also for matrices with ktyp>2. 22.9.2009 a) Added additional logic for mymatcomp2c,mymatcomp3c to recognize the extended form_Operator syntax. b) Added additional functions for stokes in funct2c.f90 and myfunct2c.f90. c) Added additional functions for stokes in funct3c.f90 and myfunct3c.f90. 14.9.2009 a) Created femcomp23xg and massl2gen23x for surface mass matrices. 9.9.2009 a) Implemented numerical quadrature for singular integrals on surfaces. 2.9.2009 a) Command defprec extend by argument keep (default value='no'). If keep='yes', preconditioner will be initialized by defprec command and reused by solve command. Warning: If you change mesh/spline or underlying matrices after defprec and before solve, it is possible now that preconditioner and block-matrix do not fit anymore. b) New command destroyprec to free allocated memory of preconditioners. c) The #err. and the norm-command have additional pexp-argument, for L^p norms. 31.8.2009 a) sum-factorization for genid22y,genli23,genid33y. 26.8.2009 a) Added support in config for Sun f95 Compiler on x86. b) Fixed several issues with openmp support in comp22,bcl,rseite2. 22.8.2009 a) Evaluation of the 2d/3d-Helmholtz-hypersingular operator implemented. helmwspotll in lib/libhelm2.f90 and lib/libhelm3.f90. 18.8.2009 a) Extend #time command to write also wall-time. 31.7.2009 a) Start of the development of Graphical Interface to maiprogs: maivis 25.7.2009 a) In all defmatrix, approx and #err. commands the bilinear form or function can now be given in the form: name_operator operator (e.g. Laplace, Lame etc) overrides the otyp in the problem definition. 9.7.2009 a) Residual error indicator for FEM-BEM coupling tested. Most higher derivatives replaced by difference operator. b) Residual error indicator works for coup2/ex1a90rin example. 6.7.2009 a) Residual error indicator for FEM-BEM coupling. (Still some checks needed) b) Gradient Recovery indicator for p-Laplacian 23.6.2009 a) Collected all special (smooth) geometry-commands again as option of the universal geometry-command. (Circle,Half-Circle,Sphere,Half-Sphere) 18.6.2009 a) Introduced spheregeom command. 17.6.2009 a) Interpolation, norm and error computation on curved surfaces (1d, 2d). b) Computation of the identity (genli12,genli23) on curved surfaces. 15.6.2009 a) Removed a12-argument from fpsi2 and all related functions. b) Graphical output on curved surfaces and curved meshes. c) Introduced circlegeom command. 8.6.2009 a) Evaluating x-values and derivatives for curved surfaces (1d and 2d). 5.6.2009 a) Reading smooth surface geometry description files b) Generating (polyhedral) meshes based on smooth surface descriptions 26.5.2009 a) Added function definitions and calls for stokes in front3c,funct3c,myfunct3c. 22.5.2009 a) Changes to galli12,galli23 to allow different test- and ansatz spline-dims. 13.5.2009 a) Moved the subroutines for bem-related right hand side to a dedicated module. b) New hierarchical error-indicator subroutine for linear operators, based directly on right hand side subroutines. 8.5.2009 a) Several changes regarding the error indicators. The middle layer 'reshxxx' is removed. The indicator-subroutines are called directly from frontxx.f90 b) Repaired subroutine localaub22, created extra subroutine for computing energy norm. c) Removed libfem2 and libfem3-subroutines with nodal based interface. 19.4.2009 a) Created new module block_class, containing now all procedures related to the data type 'matrix_block', which is a container for the various matrix data types. b) Extensive changes in env2c, env3c, problem and eval to make use of block_class. 18.4.2009 a) Created a new module lmatrix for low-rank matrices. 5.4.2009 a) setupmatrix now also prints the operator-type, not only the matrix name. 18.3.2009 a) Parallelization of 2d-error and 2d-boundary operators on right hand side. 13.3.2009 a) Parallelisation of 3d-error and volume-rhs. 12.3.2009 a) Parallelisation of 3d-boundary operators on right hand side. b) Parallelisation of sparse-row matrix-vector product. 11.3.2009 a) Implemented the last missing Operators for Fluid-Structure Interaction. 5.3.2009 a) Cleanup for fluid-structure operators (2d and 3d). Operators without n are Helmholtz operators, with left n or right n the corresponding interaction operators between Helmholtz and Lame. 27.2.2009 a) Implemented/optimized in numquad2,numquad3 subroutines for the adjoint double layer potential Galerkin matrix. b) matcomp12 (front12) and matcomp23 (front23) now recognize all combinations with Ks. 15.2.2009 a) Introduced a new check for module dependencies and sequence of use. Output given by make depend b) Moved checkin1 to net1dat, checkin2 to net2dat, checkin3 to net3dat c) Moved checkbd1 to splines1, checkbd2 to splines2, checkbd3 to splines3 d) Moved trace2xmdn to meshes2, trace3xrno and trace3xano to meshes3 e) Eliminated use net2dat from header in netz2x f) Eliminated use net3dat from header in netz3x 26.1.2009 a) Another change in depmod connected with makefile.opts 23.1.2009 a) All makefiles generated by depmod include now an optional local file 'makefile.opts' (for every directory). The variables EXTOBJS and EXTLIBS are included in the linking command. makefile.opts can also be used to include your own makefile targets. EXTOBJS is also part of the dependency list of the executable. By default EXTOBJS and EXTLIBS are empty and can be set in makefile.opts. 20.1.2009 a) Bug fix for jpsi22, no ltyp2c use. 15.1.2009 a) Dual-dual method works, new bilinear forms implemented. 4.1.2009 a) All 2d-bem operators for Stokes implemented. 1.1.2009 a) Radialreturn mapping for 2d-fem (plain stress) and 3d-fem implemented. 31.12.2008 a) Vector-valued fields in 3d now with all boundary conditions possible. 30.12.2008 a) Finished the Cylinder elements in the mesh generator for 3d Stein Benchmark. 20.12.2008 a) Modified inelem33, does not use coordinate transformation for elements with planar surfaces (test incorporated). 19.12.2008 a) Modified inelem22, does not use any longer x2alx. 5.12.2008 a) Change in bcl.f90 to accommodate long lines. 4.12.2008 a) Additional changes in solve.f90, mlbas.f90, mlfbas.f90 to solve problem with multi-block preconditioning. 3.12.2008 a) Change in gmresrevcom to solve problem with multi-block preconditioning for real valued problems. 27.11.2008 a) Accelerated full-numerical quadrature for 3d-bem by 10%. b) Fluid-structure interaction in 3d accepts now the same operator names as in 2d. 26.11.2008 a) Modified Helmholtz double layer potential. 24.11.2008 a) Change in solve.f90 to avoid another compiler bug with NAG 5.2-613. b) Changes in xhelmxsa-routines in singul3.f90. More stable for small wave numbers. 21.11.2008 a) Several changes in ads/config.sub and maiprogs source code to allow compilation with NAG 5.2-613 compiler. b) Extended config to check for availability of procedure pointers. 20.11.2008 a) Several changes to allow compilation and linking of maiprogs, if blas and/or lapack are missing. Linking is now possible, but maiprogs is not fully functional in this case. You still need to install fully functional blas and lapack libraries. 19.11.2008 a) Created command 'readhelmut' to import data for curfed surfaces. 14.11.2008 a) Replaced bubblesort in ctrlindic by quicksort. Huge acceleration for certain types of refinements and large number of elements. b) Added warning messages if character constant ends without final '. 6.11.2008 a) The right hand side in datstr can be a spline, i.e. u=rho means that the spline rho will be tested with u. Currently, only matching grids are allowed. b) Bugfix for setlft_3 caused by change mentioned above. 2.11.2008 a) Change to output format of #pnod., to allow node numbers>=1000000 and to reduce file size. Format not longer fixed, but variable spaced. b) Analogous changes to #cx. 1.11.2008 a) Weak boundary conditions for convection problems. 26.10.2008 a) Cleanup for evaluation of matstr. 17.10.2008 a) Operators (for the computation of matrices) can now be used independent of the value of otyp in the problem definition. E.g. V_Laplace will use the single layer potential of the Laplacian in any context. Another example is W_Helmholtz. 6.10.2008 a) Two-body contact problem is working (2d). 3.10.2008 a) Bugfix for reading expressions in front of Matrix definitions. b) Obstacle with Penalty is working (2d). c) General one body contact problem with penalty is working (2d). 2.10.2008 a) Obstacle problem is working (2d). 21.9.2008 a) Modified matrix_addmul for transposed (T,H) mode. CGNE and CGNR should now work. 18.9.2008 a) Maiprogs can now be compiled with gfortran and openmp. 15.9.2008 a) 3d-dense matrices will be computed in parallel using OpenMP. b) The first 2d-sparse matrices can be computed in parallel. c) Nearly all 2d- and 3d-sparse matrices can be computed in parallel. 14.9.2008 a) Created new subroutine femcomp3x33 in comp33.f90. b) Subroutine femcomp3x22 was renamed to femcomp2x22 and moved to comp22.f90 c) Subroutine femcomp2x11 was renamed to femcomp1x11 and moved to comp11.f90 d) 2d-dense matrices will now be computed in parallel using OpenMP. 13.9.2008 a) Modified config, config.sub for OpenMP use. Added stubs module omp_lib for Compilers without OpenMP support. b) Added directory openmp with examples, analogously to mpi. 8.9.2008 a) Added operators Vn,nV,Kn+In,nK+nI,In,nI for fluid-structure interaction. 5.9.2008 a) Added new solver CGNE for non-symmetric problems. (AA^ty=b, x=A^ty) 1.9.2008 a) 2d-helmholtz accepts now complex wavenumbers (fem and bem). New command #kwc and #kwc. 29.8.2008 a) Added new solver CGNR for non-symmetric problems. ( A^tAx=A^tb) 28.8.2008 a) Added the name Vn in the fluid-structure case. I.e. we have now < V u*n,v> <--> v.Vn.u analogously to the operator In. 21.8.2008 a) Added mydivivmaxf to myfunct3c.f90. b) Added the target 'update' to the makefiles of maiprogs and bone. make update now will retrieve maiprogs.tgz or bone.tgz from my homepage. The installation will be done by make install as before. c) Bugfix for BCL-arithmetic operations with mixed precision. 20.8.2008 a) Changes to config and depmod.f90. Use of f2003 intrinsic modules. 19.8.2008 a) Changed sign of single layer potential for Helmholtz 2d. 12.8.2008 a) Changed femcomp3x22,femcomp2x11 to accept optional ktyp argument. The optional argument overrides ktyp from given splines. 7.8.2008 a) New subroutine add_sparse_ring_matrix for the linear combination of multiple rings. 4.8.2008 a) Added addbcgm to inter3.f90 b) Changed 'S' operator for right hand side, such that inner integration is performed on whole boundary (N). 1.8.2008 a) Change to config to resolve a problem with the linker for maigraf 31.7.2008 a) Changed vlamef in funct2c.f90 such that myvlamef will be used if case is unknown. b) Added subroutine comprhoi22 to compute int_Omega g(|grad u|) with g(t)=int_0^t s*rho(s) ds. Uses new subroutine laprhoi. c) Added command 'Gu' to invoke this subroutine. 27.7.2008 a) Extended addbcdat to set also values of spline-bcdat data, not only global. b) Extended addbcdat command to accept also array-valued arguments. c) Added new command addbcgm. 13.7.2008 a) Moved nextelem2 from fox/nodes2x.f90 to fox/meshes2.f90 b) Finished checkcont for hanging meshes in 3d. 11.7.2008 a) Extended the #bbox command to also cover the 2d case for bounded boxes. 10.7.2008 a) Moved hmax2x from fox/adap2x.f90 to fox/meshes2.f90 b) Moved hmax33 from fo33/adap33.f90 to fox/meshes3.f90 8.7.2008 a) Added the bem-operators WLap and WLap+PP for Fluid-Structure interaction to compute the Hypersingular operator of the Laplacian. 2.7.2008 a) Corrected 0:1 to 0:2 for all vectors in myfunct3c.f90 29.6.2008 a) Modified hypersingular op in liblame2.f90 to take into account different orientation of elements (curve integral). b) Several extensions to the setup of obstacles. 26.6.2008 a) Created markrdn for marking of boundary splines with boundary conditions. b) Imposing Neumann conditions (dat='D=Neu(t0)') only on marked part of the boundary spline. 25.6.2008 a) Extended the template for mylft2c in myforms2.f90 by a call to lftdiri2x using the template subroutine mymatcomploc2c. The same has been done for mylft3c. Here you can add entries for your bilinear forms, which will be evaluated for non-homogenous Dirichlet-data (command 'Dir(..)' in datstr). b) The mesh generator for annular domains in 2d has changed. If the two boundary circle have the same center, then the mesh is generated with constant angular increments. 24.6.2008 a) Added subroutine femcomp1xnl in fo11/comp11.f90 for nonlinear 1d-fem problems. 23.6.2008 a) Created two new modules myforms2 and myform3. The subroutines mymatcomp2c,mylft2c and mymatcomp3c,mylft3c allow to create your own bilinear forms and right hand sides without modification of the main program. 22.6.2008 a) I have changed the routines for SUPG to accomodate the case that beta vanishes, necessary for boundary approximations and out of domain evaluations. b) Circumventing compiler bug for character-valued functions. Use of capital-function in bcl.f90 was causing problems. c) Contact problem for 2d-fem works. 19.6.2008 a) I have moved all the mesh definitions and subroutines from the splinesx-files to the meshesx-files. 15.6.2008 a) Reintroduced myvlamef in myfunct2c.f90 b) Massive source code clean up in mg2c.f90, least2c.f90, mg3c.f90, least3c.f90 and the solve-file. 12.6.2008 a) Introduced rhs (yparse style) as an replacement for lft. 6.6.2008 a) Bugfix for debug mode (-d) in bcl. Lines with leading blanks will now be printed. b) Several changes and corrections for Poincare Steklov Operators (Matrices and right hand side). For Matrices we can now add the name of a previously computed inverse. Avoids the computation of the matrix and its inverse. For the RHS we can now add the name of a previously computed inverse and the name of a matrix with the acompanying double layer potential. 5.6.2008 a) Bugfix for recently introduced MSM-feature, problems with non-associated pointer solved. 4.6.2008 a) Arc-segments are now implemented for 3d geometries. b) Included now Circle (Disc) and Half-Circle examples for 3d in ads/geometries 30.5.2008 a) Bugfixes and changes for matrix and rhs of SUPG method (3d). 29.5.2008 a) make install now holds the last 4 versions: backup.tar (newest), backup1.tar backup2.tar backup3.tar b) Bugfixes for matrix and rhs of SUPG method (2d). 27.5.2008 a) Hcurl-confoming Nedelec elements now using freebd,nofreebd. b) Bugfixes for higher order continuous basis functions. 26.5.2008 a) Bugfix for structured 3d-surface meshes. b) Introduction of lapfeps for 3d-programms. 11.5.2008 a) Matrix-vector multiplications in datstr can now be defined using the same syntax as in eval. I.e. instead of using xKs.dt we can write Matrix(xK,trans)*dt. b) Simplified rconnect3y subroutine. No internal use of pointer structures. 10.5.2008 a) Bugfix and extension of multiplicators in matstr. Now general expressions are allowed as multiplicators in matstr, e.g. 2*ALP*(2+5)*u.A.u 8.5.2008 a) Internal change: all setlft subroutines now use setlft_3, this ensures some standard behaviour. Similar to setmatrix_3. b) Minor modifications in adap2c.f90, maicoup2.f90, mbmix.f90. ifort is now able to compile maiprogs. 24.4.2008 a) Created a new 2d macro element with 2 curved edges (1,6). b) Implemented graded meshes on curved elements in 2d. 20.4.2008 a) Generalized Hanging Node Meshes to p-version (uniform in p) with Lagrange polynomial basis. b) Extended the output of the checkcont2 subroutine. 14.4.2008 a) Implemented Non-linear Least-Squares Methods 11.4.2008 a) Complemented Matrix-Vector multiplication for right hand side. Sparse Matrices are now fully working. 31.3.2008 a) Added command #settime to set pseudo-time for time-dependent algorithms. b) Bug-fix for right-hand sides with matrix times vector, using dot-notation. c) Added BCL-function Iint(), which computes the integer part of any value and returns an integer variable (Int returns a real variable). 29.3.2008 a) Internal optimisation for dense matrices. 26.3.2008 a) Added Fluid-structure definitions in 2d. 24.3.2008 a) Created Non-linear Maxwell form AccNL and corresponding right hand side. b) Modified and fixed Henky-von Mises material in 3d (Laplace). c) Created new right hand side operator NLin(operator,spline) for right hand sides of Newton methods. 21.3.2008 a) Bug fixes for non-linear problems with non-homogenuous boundary data. b) Introduced generic interface for non-linear problems, i.e. laprho etc. 15.3.2008 a) Generalized lftweak2x, lftweak3x. Different orientations for trace mesh and boundary spline mesh (if weak boundary data given by spline) now allowed. 14.3.2008 a) Bug fix. Setting a fixed polynomial degree in splinestr, like, e.g. 'p=0' works again. 1.3.2008 a) Moved lagrangenodes-command to inter2 and inter3. b) Finished command value for evaluation of splines in given coordinates. 'value' returns a BCL-Array containing the values. c) Bug-fix for 'if','do' etc in connection with new comment behaviour. d) Several new/changed commands for Non-linear Hencky-von Mises (Laplace). Use now ANL for matrix and right hand side. ANL for primal formulations, MNL for mixed/dual formulations. 24.2.2008 a) Central configuration file ads/mairc now loads file ads/myrc, if present, with localized configuration data. b) Created new commands setmode and getmode, which allow access to various internal variables (debug,time,blank). c) Default mode in maicoup2,maicoup3,maigraf is now, that leading blanks no longer start comments! You can change this by creating your own ads/myrc file. 21.2.2008 a) Bugfix for depmod.f90, makefiles have not been correctly created for new directories whose name was created by adding characters to an existing name. 19.2.2008 a) Convection definitions in myfunct2c.f90, called by funct2c.f90 17.2.2008 a) Added command lagrangenodes for (ptyp=6). Choice between Gauss-Legendre and Gauss-Lobatto nodes. b) Incorporated several subroutine/commands for elastoplasticity in 2d. 15.2.2008 a) Added new Multilevel Schwarz Preconditioner to solve command (bem-only). 9.2.2008 a) New component %bd in mesh2 and mesh3 for description of boundary marking. b) Necessary changes in mesh command in maicoup2 and maicoup3. Use now #pxbd command for setting boundary marking, #pbd only left for compability reasons. 6.2.2008 a) Removed feature: In several commands it was possible to use a spline name without an trailing _ex. Unfortunately it was not possible then to access, e.g. u is also u_ex existed. This feature is now removed. Some old scripts may be brocken. b) New commands #pxbd, #pxbd. are replacing #pbd, #pbd. for boundary markup. See helpfile for use of this commands. They allow to mark also curved boundary parts. 3.2.2008 a) Some bugs fixed in modified geometry command. b) Removed old #gm, #gm., #rc, #gr, #gr2, #geo commands from maigraf. 29.1.2008 a) Finished changes to geomcmds, show('defgeom') gives now a formatted list of predefined geometries. 28.1.2008 a) Created database of predefined geometries in ads/geometries b) geometry() command uses new database (maicoup2,maicoup3,maigraf) c) geometry-command in maicoup2,maicoup3,maigraf has been disabled. d) maiprogs reads on startup the file ads/mairc which loads ads/problems and ads/geometries. e) subroutine call init_db_prob etc in mainprograms has to be replaced by init_mairc 20.1.2008 a) Finished octtree data structure for managing of 3d-nodes. b) mesh command now uses always tree-structure. 19.1.2008 a) Finished quadtree data structure for managing of nodes. All operations based on findnode and addnode are considerable accelerated. 15.1.2008 a) Generalized subroutine nettrace2 to hanging node meshes. 11.1.2008 a) Corrected bug for meshes with mixed triangles and quadrilaterals and variable polynomial degrees. Conforming geometric mesh in 2d is working again. b) Internal restructuring of preconditioners of DD type is finished. c) Hh domain decomposition method in 2d for FEM is fully implemented. 31.12.2007 a) BCL-command 'write' now works with expressions. b) Corrected bug for number//string in BCL-expressions. 30.12.2007 a) Restructuring of geometry.f90, newly introduced geomcmds.f90 Needs change of main programs. b) Modification of execim. 29.12.2007 a) More user input checking for mesh command. b) Added argument gmbd to geometry command. 25.12.2007 a) Geometric mesh with hanging nodes is fully working. 19.12.2007 a) Extending readpatran to non-consecutive numbered elements. b) Created command simplexsplit, which splits non-simplex elements into simplices, e.g. quadrilaterals into triangles. 17.12.2007 a) Created integrity program, to check for changes of the distribution. 8.12.2007 a) addmul in all variants has an additional optional argument ktypv, which defines whether vector arguments are real or complex. If not given, the vectors inherit the ktyp of the matrix. As a consequence, we can now multiply real matrices and complex vectors. b) Bug fix for deallocation of multigrid matrices. 4.12.2007 a) #plot command now has colmode=2, draws colored mesh lines as mountain-valley plot b) graphic has new option 'box'. If box='off' then the BCL-variables XMIN,XMAX,YMIN,YMAX determine a virtual size of the plot which is used to determine the location of a scale. c) Raviart-Thomas elements are now fully functional for the p-version. 28.11.2007 a) Added subroutine add_matrix (add_sparse_matrix). This routine performes c=s1*a+s2*b for sparse-row matrices a,b. b) More internal changes for preconditioners. 14.11.2007 a) Hierarchical preconditioner is working again. b) Hierarchical preconditioner is usable via solve c) Domain decomposition preconditioner for 2d via solve. 11.11.2007 a) Multigrid accepts sparse-row matrices. 23.10.2007 a) Got Convection (otyp=4) in 2d running. 14.10.2007 a) depmod now only operates on maiprogs directories or directories in depmod.conf, informational message for skipped files. b) depmod gives informational message if a depmod.conf file replaces a standard file. 8.10.2007 a) Some work on hp with variable p for hanging node meshes in 2d. 13.9.2007 a) New operator type 8 for fluid-structure interaction b) Cmplx, Complex function for setting complex values in BCL. c) Mod,Max,Min functions in BCL 2.9.2007 a) hanging nodes are now working for p>1 (uniform distribution) in 2d 15.8.2007 a) splitedge2 works now for arc segments, i.e. boundary approximation for refinements. b) Bugfix for copymesh2 and copymesh3, hanging nodes part. 7.8.2007 a) Bugfix for sparse-row etc matrices for hanging-nodes meshes. b) Fully implementes Lagangre-basis functions on triangles. c) Changes in the initialization of basis functions, tables will be recomputed if there is demand for a higher polynomial degree. 29.7.2007 a) Memory allocation for dense matrices in dense.f90 and lgsrev.f90 changed from n+1-length of columns to n-length columns b) Incorporated new Boundary Condition scheme in hanging-nodes routine (2d). 23.7.2007 a) Implemented/extended transfer command (new mode: prolongate). b) Bug fix for the evaluation of complex valued RT-elements in 2d. c) Bug fix in coarsening of meshes. MG now also works for mixed boundary value problems. d) Parts of setmatrix subroutine moved to problem.f90 for 2d-3d unification and abstraction layer for matrices. 8.7.2007 a) Created new option =Interior(..) in splinestr, for accessing only the interior dofs. Analogously to =T. (2d+3d) b) Bugfixes for Dirichlet_n in netz2x.f90 for higher polynomials. 29.6.2007 a) New module hmat, framework for H-matrices. Integration into maiprogs is going on. 7.6.2007 a) Created uni/unihelmn3.f90, optimized program for Helmholtz. Analogously to unilapn3.f90 10.5.2007 a) New bcl-command for Least Squares Methods (lsqsolve). lsqsolve now makes full use of the new preconditioner scheme via defprec. 22.4.2007 a) Finished new interface for non-block-diagonal preconditioners, see doku. b) A few bug-fixes for hanging-node meshes in 2d and 3d. 16.4.2007 a) Some corrections for Helmholtz 3d (incl helmwdpot). Transmission problem should be ok now. b) bem2fem in 3d without volume data implemented. c) Change for the #kw command in maicoup3, same behaviour as in 2d now. 29.3.2007 a) Correction to #lx. command (output of spline name, not spline-class name). Please change your main program accordingly. b) Introducing the commands 'inverse' (compute the inverse of a dense matrix), mortarprojection (perform the mortar projection). 26.3.2007 a) introducing the construct D