OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sini_defaults.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14C
15C**********************************************************************
16C
17 SUBROUTINE smumps_set_type_sizes( K34, K35, K16, K10 )
18 IMPLICIT NONE
19C
20C Purpose:
21C =======
22C
23C Set the size in bytes of an "INTEGER" in K34
24C Set the size of the default arithmetic (REAL, DOUBLE PRECISION,
25C REAL or DOUBLE REAL) in K35
26C Set the size of floating-point types that are real or double
27C precision even for complex versions of MUMPS (REAL for S and
28C C versions, DOUBLE PRECISION for D and Z versions)
29C Assuming that the size of an INTEGER(8) is 8, store the ratio
30C nb_bytes(INTEGER(8)) / nb_bytes(INTEGER) = 8 / K34 into K10.
31C
32C In practice, we have:
33C
34C K35: Arithmetic Value Value for T3E
35C S 4 8
36C D 8 16
37C C 8 16
38C Z 16 32
39C
40C K16 = K35 for S and D arithmetics
41C K16 = K35 / 2 for C and Z arithmetics
42C
43C K34= 4 and K10 = 2, except on CRAY machines or when compilation
44C flag -i8 is used, in which case, K34 = 8 and K10 = 1
45C
46C
47 INTEGER, INTENT(OUT) :: K34, K35, K10, K16
48 INTEGER(8) :: SIZE_INT, SIZE_REAL_OR_DOUBLE ! matches MUMPS_INT8
49 INTEGER I(2)
50 REAL R(2) ! Will be DOUBLE PRECISION if 0
51 CALL mumps_size_c(i(1),i(2),size_int)
52 CALL mumps_size_c(r(1),r(2),size_real_or_double)
53 k34 = int(size_int)
54 k10 = 8 / k34
55 k16 = int(size_real_or_double)
56 k35 = k16
57 RETURN
58 END SUBROUTINE smumps_set_type_sizes
59C
60C**********************************************************************
61C
62 SUBROUTINE smumpsid( NSLAVES, LWK_USER, CNTL, ICNTL,
63 & KEEP,KEEP8,
64 & INFO, INFOG, RINFO, RINFOG, SYM, PAR,
65 & DKEEP, MYID )
66!$ USE OMP_LIB
67 IMPLICIT NONE
68C
69C Purpose
70C =======
71C
72C The elements of the arrays CNTL and ICNTL control the action of
73C SMUMPS, SMUMPS_ANA_DRIVER, SMUMPS_FAC_DRIVER, SMUMPS_SOLVE_DRIVER
74C Default values for the elements are set in this routine.
75C
76 REAL DKEEP(230)
77 REAL CNTL(15), RINFO(40), RINFOG(40)
78 INTEGER ICNTL(60), KEEP(500), SYM, PAR, NSLAVES, MYID
79 INTEGER INFO(80), INFOG(80)
80 INTEGER(8) KEEP8(150)
81 INTEGER LWK_USER
82C
83C Parameters
84C ==========
85C===========================================
86C Arrays for control and information
87C===========================================
88C
89C N Matrix order
90C
91C NELT Number of elements for matrix in ELt format
92C
93C
94C SYM = 0 ... initializes the defaults for unsymmetric code
95C = 1,2 ... initializes the defaults for symmetric code
96C
97C
98C
99C PAR = 0 ... instance where host is not working
100C = 1 ... instance where host is working as a normal node.
101C (host uses more memory than other processors in
102C the latter case)
103C
104C CNTL and the elements of the array ICNTL control the action of
105C SMUMPS Default values
106C are set by SMUMPSID. The elements of the arrays RINFO
107C and INFO provide information on the action of SMUMPS.
108C
109C CNTL(1) threshold for partial pivoting
110C has default value 0.0 when SYM=1 and 0.01 otherwise
111C Values and less than zero as treated as zero.
112C Values greater than 1.0 are treated as 1.0 for
113C SYM=1 and as 0.5 for SYM=2
114C In general, a larger value of CNTL(1) leads to
115C greater fill-in but a more accurate factorization.
116C If CNTL(1) is nonzero, numerical pivoting will be performed.
117C If CNTL(1) is zero, no pivoting will be performed and
118C the subroutine will fail if a zero pivot is encountered.
119C If the matrix A is diagonally dominant, then
120C setting CNTL(1) to zero will decrease the factorization
121C time while still providing a stable decomposition.
122C
123C CNTL(2) must be set to the tolerance for convergence of iterative
124C refinement.
125C Default value is sqrt(macheps).
126C Values less than zero are treated as sqrt(macheps).
127C
128C CNTL(3) is used with null pivot row detection (ICNTL(24) .eq. 1)
129C Default value is 0.0.
130C Let A_{preproc} be the preprocessed matrix to be factored (see
131C equation in the user's guide).
132C A pivot is considered to be null if the infinite norm of its
133C row/column is smaller than a threshold. Let MACHEPS be the
134C machine precision and ||.|| be the infinite norm.
135C The absolute value to detect a null pivot row (when ICNTL(24) .EQ.1)
136C is stored in DKEEP(1).
137C IF CNTL(3) > 0 THEN
138C DKEEP(1) = CNTL(3) ||A_{preproc}||
139C ELSE IF CNTL(3) = 0.0 THEN
140C DKEEP(1) = MACHEPS 10^{-5} ||A_{preproc}||
141C ELSE IF CNTL(3) < 0 THEN
142C DKEEP(1) = abs(CNTL(3))! this was added for EDF
143C ! in the context of SOLSTICE project
144C ENDIF
145C
146C CNTL(4) must be set to value for static pivoting.
147C Default value is -1.0
148C Note that static pivoting is enabled only when
149C Rank-Revealing and null pivot detection
150C are off (KEEP(19).EQ.0).AND.(KEEP(110).EQ.0).
151C If negative, static pivoting will be set OFF (KEEP(97)=0)
152C If positive, static pivoting is ON (KEEP(97=1) with
153C threshold CNTL(4)
154C If = 0, static pivoting is ON with threshold MACHEPS^1/2 || A ||
155C
156C CNTL(5) fixation for null pivots
157C Default value is 0.0
158C Only active if ICNTL(24) = 1
159C If > 0 after finding a null pivot, it is set to CNTL(5) x ||A||
160C (This value is stored in DKEEP(2))
161C If <= 0 then
162C SYM=2:
163C the row/column (except the pivot) is set to zero
164C and the pivot is set to 1
165C SYM=0:
166C the fixation is automatically
167C set to a large potitive value and the pivot row of the
168C U factors is set to zero.
169C Default is 0.
170C
171C CNTL(6) not used yet
172C
173C CNTL(7) tolerance for Low Rank approximation of the Blocks (BLR).
174C Dropping parameter expressed with a double precision,
175C real value, controlling
176C compression and used to truncate the RRQR algorithm
177C default value is 0.0. (i.e. no approximation).
178C The truncated RRQR operation is implemented as
179C as variant of the LAPACK GEQP3 and LAQPS routines.
180C 0.0 : full precision approximation.
181C > 0.0 : the dropping parameter is DKEEP(8).
182C
183C Warning: using negative values is an experimental and
184C non recommended setting.
185C < 0.0 : the dropping parameter is |DKEEP(8)|*|Apre|, Apre
186C as defined in user's guide
187C
188C
189C -----------------------------------------
190C
191C ICNTL(1) has default value 6.
192C It is the output stream for error messages.
193C If it is set to zero, these
194C messages will be suppressed.
195C
196C ICNTL(2) has default value 0.
197C It is the output stream for diagnostic printing and
198C for warning messages that are local to each MPI process.
199C If it is set to zero, these messages are suppressed.
200C
201C ICNTL(3) -- Host only
202C It is the output stream for diagnostic printing
203C and for warning messages. Default value is 6.
204C If it is set to zero, these messages are suppressed.
205C
206C ICNTL(4) is used by SMUMPS to control printing of error,
207C warning, and diagnostic messages. It has default value 2.
208C Possible values are:
209C
210C <1 __No messages output.
211C 1 __Only error messages printed.
212C 2 __Errors and warnings printed.
213C 3 __Errors and warnings and terse diagnostics
214C (only first ten entries
215C of arrays printed).
216C 4 __Errors and warnings and all information
217C on input and output parameters printed.
218C
219C
220C ICNTL(5) is the format of the input matrix and rhs
221C 0: assembled matrix, assembled rhs
222C 1: elemental matrix, assembled rhs
223C Default value is 0.
224C
225C ICNTL(6) has default value 7 for unsymmetric and
226C general symmetric matrices, and 0 for SPD matrices.
227C It is only accessed and operational
228C on a call that includes an analysis phase
229C (JOB = 1, 4, or 6).
230C In these cases, if ICNTL(6)=1, 2, 3, 4, 5, 6 or 7,
231C a column permutation based on algorithms described in
232C Duff and Koster, 1997, *SIMAX <20>, 4, 889-901,
233C is applied to the original matrix. Column permutations are
234C then applied to the original matrix to get a zero-free diagonal.
235C Except for ICNTL(6)=1, the numerical values of the
236C original matrix, id%A(NE), need be provided by the user
237C during the analysis phase.
238C If ICNTL(6)=7, based on the structural symmetry of the
239C input matrix the value of ICNTL(6) is automatically chosen.
240C If the ordering is provided by the user
241C (ICNTL(7)=1) then the value of ICNTL(6) is ignored.
242C
243C ICNTL(7) has default value 7 and must be set by the user to
244C 1 if the pivot order in IS is to be used.
245C Effective value of ordering stored in KEEP(256).
246C Possible values are (depending on the softwares installed)
247C 0 AMD: Approximate minimum degree (included in SMUMPS package)
248C 1 Ordering provided by the user
249C 2 Approximate minimum fill (included in SMUMPS package)
250C 3 SCOTCH (see http://gforge.inria.fr/projects/scotch/)
251C should be downloaded/installed separately.
252C 4 PORD from Juergen Schulze (js@juergenschulze.de)
253C PORD package is extracted from the SPACE-1.0 package developed at the
254C University of Paderborn by Juergen Schulze
255C and is provided as a separate package.
256C 5 Metis ordering should be downloaded/installed separately.
257C 6 Approximate minimum degree with automatic quasi
258C dense row detection (included in SMUMPS package).
259C (to be used when ordering time with AMD is abnormally large)
260C 7 Automatic choice done during analysis phase
261C For any other
262C value of ICNTL(7), a suitable pivot order will be
263C chosen automatically.
264C
265C ICNTL(8) is used to describe the scaling strategy.
266C Default value is 77.
267C Note that scaling is performed only when the numerical
268C factorization step is performed (JOB = 2, 4>, 5>, or 6>).
269C If ICNTL(8) is not equal to
270C any of the values listed below then ICNTL(8) is treated
271C as if it had its default value of 0 (no scaling).
272C If the matrix is known to be very badly scaled,
273C our experience has been that option 6 is the most robust but
274C the best scaling is very problem dependent.
275C If ICNTL(8)=0, COLSCA and ROWSCA are dummy arguments
276C of the subroutine that are not accessed.
277C Possible values of ICNTL(8) are:
278C
279C -2 scaling computed during analysis (and applied during the
280C factorization)
281C
282C -1 the user must provide the scaling in arrays
283C COLSCA and ROWSCA
284C
285C 0 no scaling
286C
287C 1 Diagonal scaling
288C
289C 2 not defined
290C
291C 3 Column scaling
292C
293C 4 Row and column scaling
294C
295C 5,6 not defined
296C 7, 8 Scaling based on Daniel Ruiz and Bora Ucar's work done
297C during the ANR-SOLSTICE project.
298C Reference for this work are:
299C The scaling algorithms are based on those discussed in
300C [1] D. Ruiz, "A scaling algorithm to equilibrate both rows and
301C columns norms in matrices", Tech. Rep. Rutherford
302C Appleton Laboratory, Oxon, UK and ENSEEIHT-IRIT,
303C Toulouse, France, RAL-TR-2001-034 and RT/APO/01/4, 2001.
304C [2] D. Ruiz and B. Ucar, "A symmetry preserving algorithm for
305C matrix scaling", in preparation as of Jan'08.
306C This scaling can work on both centralized and distributed
307C assembled input matrix format. (it works for both symmetric
308C and unsymmetric matrices)
309C Option 8 is similar to 7 but more rigourous and expensive to compute.
310C 77 Automatic choice of scaling value done. Proposed algo:
311C if (sym=1) then
312C option = 0
313C else
314C if distributed matrix entry then
315C option = 7
316C else
317C if (maximum transversal is called
318C and makes use of numerical values) then
319C option=-2 and ordering is computed during analysis
320C else
321C option = 7
322C endif
323C endif
324C endif
325C
326C ICNTL(9) has default value 1. If ICNTL(9)=1
327C the system of equations A * x = b is solved. For other
328C values the system A^T * x = b is solved.
329C When ICNTL(30) (compute selected entries in A-1) is activated
330C ICNTL(9) is ignored.
331C
332C ICNTL(10) has default value 0.
333C If ICNTL(10)=0 : iterative refinement is not performed.
334C Values of ICNTL(10) < 0 : a fix number of steps equal
335C to ICNTL(10) of IR is done.
336C Values of ICNTL(10) > 0 : mean a maximum of ICNTL(10) number
337C of steps of IR is done, and a test of
338C convergence is used
339C
340C ICNTL(11) has default value 0.
341C A value equal to 1 will return a backward error estimate in
342C RINFO(4-11).
343C A value equal to 2 will return a backward error estimate in
344C RINFO(4-8). No LCOND 1, 2 and forward error are computed.
345C If ICNTL(11) is negative, zero or greater than 2 no estimate
346C is returned.
347C
348C
349C ICNTL(12) has default value 0 and defines the strategy for
350C LDLT orderings
351C 0 : automatic choice
352C 1 : usual ordering (nothing done)
353C 2 : ordering on the compressed graph, available with all orderings
354C except with AMD
355C 3 : constraint ordering, only available with AMF,
356C -> reset to 2 with other orderings
357C Other values are treated as 1 (nothing done).
358C On output KEEP(95) holds the internal value used and INFOG(24) gives
359C access to KEEP(95) to the user.
360C in LU facto it is always reset to 1
361C
362C - ICNTL(12) = 3 has a lower priority than ICNTL(7)
363C thus if ICNTL(12) = 3 and the ordering required is not AMF
364C then ICNTL(12) is set to 2
365C
366C - ICNTL(12) = 2 has a higher priority than ICNTL(7)
367C thus if ICNTL(12) = 2 and the ordering required is AMD
368C then the ordering used is QAMD
369C
370C - ICNTL(12) has a higher priority than ICNTL(6) and ICNTL(8)
371C thus if ICNTL(12) = 2 then ICNTL(6) is automatically
372C considered as if it was set to a value between 1-6
373C if ICNTL(12) = 3 then ICNTL(6) is considered as if
374C set to 5 and ICNTL(8) as if set to -2 (we need the scaling
375C factors to define free and constrained variables)
376C
377C ICNTL(13) has default value 0 and allows for selecting Type 3 node.
378C IF ICNTL(13).GT. 0 scalapack is forbidden. Otherwise,
379C scalapack will be activated if the root is large enough.
380C Furthermore
381C IF ((ICNTL(13).GT.0) .AND. (NSLAVES.GT.ICNTL(13),
382C or ICNTL(13)=-1 THEN
383C extra splitting of the root will be activated
384C and is controlled by abs(KEEP(82)).
385C The order of the root node is divided by KEEP(82)
386C ENDIF
387C If ICNTL(13) .EQ. -1 then splitting of the root
388C is done whatever the nb of procs is.
389C
390C To summarize:
391C -1 : root splitting and scalapack on
392C 0 or < -1 : root splitting off and sclalapack on
393C > 0 : scalapack off
394C
395C ICNTL(14) has default value 20 (5 if NSLAVES=1 and SYM=1)
396C and is the value for memory relaxation
397C so called "PERLU" in the following.
398C
399C
400C ICNTL(15) : Describes the compression of the graph of the input matrix
401C The analysis step is then performed on the compressed
402C graph
403C Must be set during analysis on the master
404C 0 : OFF
405C 1 : Compression provided by the user:
406C BLKPTR(1:id%NBLK+1) and
407C BLKVAR(1:N or N_LOC if distributed format)
408C (BLKVAR(BLKPTR(iblk):BLKPTR(iblk+1)-1):
409C dof list for iblk)
410C - If BLKVAR is not provided then BLKVAR is
411C treated as the identity
412C (contiguous variables in blocks)
413C - Distributed format if on MASTER N_LOC#N
414C
415C ICNTL(16) : number of OpenMP threads asked by the user.
416C
417C ICNTL(17) not used in this version
418C
419C ICNTL(18) has default value 0 and is only accessed by the host during
420C the analysis phase if the matrix is assembled (ICNTL(5))= 0).
421C ICNTL(18) defines the strategy for the distributed input matrix.
422C Possible values are:
423C 0: input matrix is centralized on the host. This is the default
424C 1: user provides the structure of the matrix on the host at analysis,
425C SMUMPS returns
426C a mapping and user should provide the matrix distributed according
427C to the mapping
428C 2: user provides the structure of the matrix on the host at analysis,
429C and the
430C distributed matrix on all slave processors at factorization.
431C Any distribution is allowed
432C 3: user directly provides the distributed matrix input both
433C for analysis and factorization
434C
435C For flexibility and performance issues, option 3 is recommended.
436C
437C ICNTL(19) has default value 0 and is only accessed by the host
438C during the analysis phase. If ICNTL(19) \neq 0 then Schur matrix will
439C be returned to the user.
440C The user must set on entry on the host node (before analysis):
441C the integer variable SIZE\_SCHUR to the size fo the Schur matrix,
442C the integer array pointer LISTVAR\_SCHUR to the list of indices
443C of the schur matrix.
444C if = 0 : Schur is off and the root node gets factorized
445C if = 1 : Schur is on and the Schur complement is returned entirely
446C on a memory area provided by the user ONLY on the host node
447C if = 2 or 3 : Schur is on and the Schur complement is returned in a
448C distributed fashion according to a 2D block-cyclic
449C distribution. In the case where the matrix is symmetric
450C the lower part is returned if =2 or the complete
451C matrix if =3.
452C
453C ICNTL(20) has default value 0 and is only accessed by the host
454C during the solve phase. If ICNTL(20)=0, the right-hand side must given
455C in dense form in the structure component RHS.
456C If ICNTL(20)=1,2,3, then the right-hand side must be given in sparse form
457C using the structure components IRHS\_SPARSE, RHS\_SPARSE, IRHS\_PTR and
458C NZ\_RHS.
459C When the right-hand side is provided in sparse form then duplicate entries
460C are summed.
461C
462C 0 : dense RHS
463C 1,2,3 : Sparse RHS
464C 1 The decision of exploiting sparsity of the right-hand side to
465C accelerate the solution phase is done automatically.
466C 2 Sparsity of the right-hand sides is NOT exploited
467C to improve solution phase.
468C 3 Sparsity of the right-hand sides is exploited
469C to improve solution phase.
470C Values different from 0,1, 2,3 are treated as 0.
471C For sparse RHS recommended value is 1.
472C
473C ICNTL(21) has default value 0 and is only accessed by the host
474C during the solve phase. If ICNTL(21)=0, the solution vector will be assembled
475C and stored in the structure component RHS, that must have been allocated by
476C the user. If ICNTL(21)=1, the solution vector is kept distributed at the
477C end of the solve phase, and will be available on each slave processor
478C in the structure components ISOL_loc and SOL_loc. ISOL_loc and SOL_loc
479C must then have been allocated by the user and must be of size at least
480C INFO(23), where INFO(23) has been returned by SMUMPS at the end of the
481C factorization phase.
482C Values of ICNTL(21) different from 0 and 1 are currently treated as 0.
483C
484C ICNTL(22) (saved in KEEP(201) controls the OOC setting (0=incore, 1 =OOC)
485C It has default value 0 (incore).Out-of-range values are treated as 1.
486C If set before analysis then special setting and massage of the tree
487C might be done (so far only extra splitting CUTNODES) is performed.
488C It is then accessed by the host
489C during the factorization phase. If ICNTL(22)=0, then no attempt
490C to use the disks is made. If ICNTL(22)=1, then SMUMPS will store
491C the computed factors on disk for later use during the solution
492C phase.
493C
494C ICNTL(23) has default value 0 and is accessed by ALL processors
495C at the beginning of the factorization phase. If positive
496C it corresponds to the maximum size of the working memory
497C in MegaBytes that MUMPS can allocate per working processor.
498C If only the host
499C value is non zero, then other processors also use the value on
500C the host. Otherwise, each processor uses the local value
501C provided.
502C
503C ICNTL(24) default value is 0
504C if = 0 no null pivot detection (CNTL(5) and CNTL(3) are inactive),
505C = 1 null pivot row detection; CNTL(3) and CNTL(5) are
506C then used to describe the action taken.
507C
508C
509C ICNTL(25) has default value 0 and is only accessed by the
510C host during the solution stage. It is only significant if
511C a null space basis was requested during the factorization
512C phase (INFOG(28) .GT. 0); otherwise a normal solution step
513C is performed.
514C If ICNTL(25)=0, then a normal solution step is performed,
515C on the internal problem (excluding the null space).
516C No special property on the solution (discussion with Serge)
517C If ICNTL(25)=i, 1 <= i <= INFOG(28), then the i-th vector
518C of the null space basis is computed. In that case, note
519C that NRHS should be set to 1.
520C If ICNTL(25)=-1, then all null space is computed. The
521C user should set NRHS=INFOG(28) in that case.
522C Note that centralized or distributed solutions are
523C applicable in that case, but that iterative refinement,
524C error analysis, etc... are excluded. Note also that the
525C option to solve the transpose system (ICNTL(9)) is ignored.
526C
527C
528C ICNTL(26) has default value 0 and is accessed on the host only
529C at the beginning of the solution step.
530C It is only effective if the Schur option is ON.
531C (copy in KEEP(221))
532C
533C
534C During the solution step, a value of 0 will perform a normal
535C solution step on the reduced problem not involving the Schur
536C variables.
537C During the solution step, if ICNTL(26)=1 or 2, then REDRHS
538C should be allocated of size at least LREDRHS*(NRHS-1)+
539C SIZE_SCHUR, where LREDRHS is the leading dimension of
540C LREDRHS (LREDRHS >= SIZE_SCHUR).
541C
542C If ICNTL(26)=1, then only a forward substitution is performed,
543C and a reduced RHS will be computed and made available in
544C REDRHS(i+(k-1)*LREDRHS), i=1, ..., SIZE_SCHUR, k=1, ..., NRHS.
545C If ICNTL(26)=2, then REDRHS(i+(k-1)*LREDRHS),i=1, SIZE_SCHUR,
546C k=1,NRHS is considered to be the solution corresponding to the
547C Schur variables. It is injected in SMUMPS, that computes the
548C solution on the "internal" problem during the backward
549C substitution.
550C
551C ICNTL(27) controls the blocking factor for multiple right-hand-sides
552C during the solution phase.
553C It influences both the memory used (see INFOG(30-31)) and
554C the solution time
555C (Larger values of ICNTL(27) leads to larger memory requirements).
556C Its tuning can be critical when
557C the factors are written on disk (out-of core, ICNTL(22)=1).
558C A negative value indicates that automatic setting is
559C performed by the solver.
560C
561C
562C ICNTL(28) decides whether parallel or sequential analysis should be used. Three
563C values are possible at the moment:
564C 0: automatic. This defaults to sequential analysis
565C 1: sequential. In this case the ordering strategy is defined by ICNTL(7)
566C 2: parallel. In this case the ordering strategy is defined by ICNTL(29)
567C
568C ICNTL(29) defines the ordering too to be used during the parallel analysis. Three
569C values are possible at the moment:
570C 0: automatic. This defaults to PT-SCOTCH
571C 1: PT-SCOTCH.
572C 2: ParMetis.
573C
574C
575C ICNTL(30) controls the activation of functionality A-1.
576C It has default value 0 and is only accessed by the master
577C during the solution phase. It enables the solver to
578C compute entries in the inverse of the original matrix.
579C Possible values are:
580C 0 normal solution
581C other values: compute entries in A-1
582C When ICNTL(30).NE.0 then the user
583C must describe on entry to the solution phase,
584C in the sparse right-hand-side
585C (NZ_RHS, NRHS, RHS_SPARSE, IRHS_SPARSE, IRHS_PTR)
586C the target entries of A-1 that need be computed.
587C Note that RHS_SPARSE must be allocated but need not be
588C initialized.
589C On output RHS_SPARSE then holds the requested
590C computed values of A-1.
591C Note that when ICNTL(30).NE.0 then
592C - sparse right hand side interface is implicitly used
593C functionality (ICNTL(20)= 1) but RHS need not be
594C allocated since computed A-1 entries will be stored
595C in place.
596C - ICNTL(9) option (solve Ax=b or Atx=b) is ignored
597C In case of duplicate entries in the sparse rhs then
598C on output duplicate entries in the solution are provided
599C in the same place.
600C This need not be mentioned in the spec since it is a
601C "natural" extension.
602C
603C -----------
604C Fwd in facto
605C -----------
606C ICNTL(31) Must be set before analysis to control storage
607C of LU factors. Default value is 0. Out of range
608C values considered as 0.
609C (copied in KEEP(251) and broadcast,
610C when setting of ICNTL(31)
611C results in not factors to be stored then
612C KEEP(201) = -1, OOC is "suppressed")
613C 0 Keep factors needed for solution phase
614C (when option forward during facto is used then
615C on unsymmetric matrices L factors are not stored)
616C 1 Solve not needed (solve phase will never be called).
617C When the user is only interested in the inertia or the
618C determinant then
619C all factor matrices need not be stored.
620C This can also be useful for testing :
621C to experiment facto OOC without
622C effective storage of factors on disk.
623C 2 L factors not stored: meaningful when both
624C - matrix is unsymmetric and fwd performed during facto
625C - the user is only interested in the null-space basis
626C and thus only need the U factors to be stored.
627C Currently, L factors are always stored in IC.
628C
629C -----------
630C Fwd in facto
631C -----------
632C ICNTL(32) Must be set before analysis to indicate whether
633C forward is performed during factorization.
634C Default value is 0 (normal factorization without fwd)
635C (copied in KEEP(252) and broadcast)
636C 0 Normal factorization (default value)
637C 1 Forward performed during factorization
638C
639C
640C ICNTL(33) Must be set before the factorization phase to compute
641C the determinant. See also KEEP(258), KEEP(259),
642C DKEEP(6), DKEEP(7), INFOG(34), RINFOG(12)
643C
644C If ICNTL(33)=0 the determinant is not computed
645C For all other values, the determinant is computed. Note that
646C null pivots and static pivots are excluded from the
647C computation of the determinant.
648C
649C ICNTL(34) Must be set before a call to MUMPS with JOB=-2 in case
650C the save/restore feature was used and user wants to clean
651C save/restore files (and possibly OOC files).
652C ICTNL(34)=0 => user wants to be able to restore instance later
653C ICTNL(34)=1 => user will not restore the instance again (clean
654C to be done)
655C
656C ICNTL(35) : Block Low-Rank (BLR) functionality,
657C need be set before analysis
658C Default value is 0
659C 0: FR factorization and FR solve
660C 1: Automatic BLR option setting (=> 2)
661C 2: BLR factorization + BLR Solve
662C => keep BLR factors only
663C 3: BLR factorization + FR Solve
664C Other values are treated as zero
665C Note that this functionality is currently incompatible
666C with elemental matrices (ICNTL(5) = 1) and with
667C forward elimination during factorization (ICNTL(32) = 1)
668C
669C ICNTL(36) : Block Low-Rank variant choice
670C Default value is 0
671C 0: UFSC variant, no recompression: Compress step is
672C performed after the Solve; the low-rank updates are not
673C recompressed
674C 1: UCFS variant, no recompression: Compress step is
675C performed before the Solve; pivoting strategy is adapted
676C to pe performed on low-rank blocks; the low-rank updates are not
677C recompressed
678C
679C
680C ICNTL(38): Compression rate of LU factors, can be set before
681C analysis/factorization
682C Between 0 and 1000; other values ares treated as 0;
683C ICNTL(38)/10 is a percentage representing the typical
684C compressed factors compression of the factor matrices
685C in BLR fronts:
686C ICNTL(38)/10= compressed/uncompressed factors Ă— 100.
687C Default value: 600
688C (when factors of BLR fronts are compressed,
689C their size is 60% of their full- rank size).
690C
691C ICNTL(58): strategy for symbolic factorization used
692C with centralized ordering based on METIS (ICNTL(7)=5)
693C or with given given ordering (ICNTL(7)=1)
694C
695#if defined(__ve__)
696C Default value 2
697#else
698C Default value 1
699#endif
700C 1 => SYMBQAMD based symbolic factorization
701C 2 => Column count based symbolic factorization
702C Symbolic factorization based on
703C [GIMP94] "An efficient algorithm to compute row and column
704C counts for sparse cholesky factorization"
705C John R. Gilbert, Esmond G. Ng, and Barry W. Peyton
706C SIMAX 1994
707C implementation of the algorithm described in figure 3
708C of the [GINP94] article
709C
710C Other values are treated as 1
711C
712C=========================
713C ARRAYS FOR INFORMATION
714C========================
715C
716C-----
717C INFO is an INTEGER array of length 80 that need not be
718C set by the user.
719C-----
720C
721C INFO(1) is zero if the routine is successful, is negative if an
722C error occurred, and is positive for a warning (see SMUMPS for
723C a partial documentation and the userguide for a full documentation
724C of INFO(1)).
725C
726C INFO(2) holds additional information concerning the
727C error (see SMUMPS).
728C
729C ------------------------------------------
730C Statistics produced after analysis phase
731C ------------------------------------------
732C
733C INFO(3) Estimated real space needed for factors.
734C
735C INFO(4) Estimated integer space needed for factors.
736C
737C INFO(5) Estimated maximum frontal size.
738C
739C INFO(6) Number of nodes in the tree.
740C
741C INFO(7) Minimum value of integer working array IS (old MAXIS)
742C estimated by the analysis phase
743C to run the numerical factorization.
744C
745C INFO(8) Minimum value of real/complex array S (old MAXS)
746C estimated by the analysis phase
747C to run the numerical factorization.
748C
749C INFO(15) Estimated size in MBytes of all SMUMPS internal data
750C structures to run factorization
751C
752C INFO(17) provides an estimation (minimum in Megabytes)
753C of the total memory required to run
754C the numerical phases out-of-core.
755C This memory estimation corresponds to
756C the least memory consuming out-of-core strategy and it can be
757C used as a lower bound if the user wishes to provide ICNTL(23).
758C ---------------------------------------
759C Statistics produced after factorization
760C ---------------------------------------
761C INFO(9) Size of the real space used to store the LU factors possibly
762C including BLR compressed factors
763C
764C INFO(10) Size of the integer space used to store the LU factors
765C
766C INFO(11) Order of largest frontal matrix.
767C
768C INFO(12) Number of off-diagonal pivots.
769C
770C INFO(13) Number of uneliminated variables sent to the father.
771C
772C INFO(14) Number of memory compresses.
773C
774C INFO(18) On exit to factorization:
775C Local number of null pivots (ICNTL(24)=1)
776C on the local processor even on master.
777C (local size of array PIVNUL_LIST).
778C
779C INFO(19) - after analysis:
780C Estimated size of the main internal integer workarray IS
781C (old MAXIS) to run the numerical factorization out-of-core.
782C
783C INFO(21) - after factorization: Effective space used in the main
784C real/complex workarray S -- or in the workarray WK_USER,
785C in the case where WK_USER is provided.
786C
787C INFO(22) - after factorization:
788C Size in millions of bytes of memory effectively used during
789C factorization.
790C This includes the memory effectively used in the workarray
791C WK_USER, in the case where WK_user is provided.
792C
793C INFO(23) - after factorization: total number of pivots eliminated
794C on the processor. In the case of a distributed solution (see
795C ICNTL(21)), this should be used by the user to allocate solution
796C vectors ISOL_loc and SOL_loc of appropriate dimensions
797C (ISOL_LOC of size INFO(23), SOL_LOC of size LSOL_LOC * NRHS
798C where LSOL_LOC >= INFO(23)) on that processor, between the
799C factorization and solve steps.
800C
801C INFO(24) - after analysis: estimated number of entries in factors on
802C the processor. If negative, then
803C the absolute value corresponds to {\it millions} of entries
804C in the factors.
805C Note that in the unsymmetric case, INFO(24)=INFO(3).
806C In the symmetric case, however, INFO(24) < INFO(3).
807C INFO(25) - after factorization: number of tiny pivots (number of
808C pivots modified by static pivoting) detected on the processor.
809C INFO(26) - after solution:
810C effective size in Megabytes of all working space
811C to run the solution phase.
812C (The maximum and sum over all processors are returned
813C respectively in INFOG(30) and INFOG(31)).
814C INFO(27) - after factorization: effective number of entries in factors
815C on the processor. If negative, then
816C the absolute value corresponds to {\it millions} of entries
817C in the factors.
818C Note that in the unsymmetric case, INFO(27)=INFO(9).
819C In the symmetric case, however, INFO(27) < INFO(9).
820C The total number of entries over all processors is
821C available in INFOG(29).
822C
823C
824C -------------------------------------------------------------
825C -------------------------------------------------------------
826C RINFO is a REAL/DOUBLE PRECISION array of length 40 that
827C need not be set by the user. This array supplies
828C local information on the execution of SMUMPS.
829C
830C
831C RINFOG is a REAL/DOUBLE PRECISION array of length 40 that
832C need not be set by the user. This array supplies
833C global information on the execution of SMUMPS.
834C RINFOG is only significant on processor 0
835C
836C
837C RINFO(1) hold the estimated number of floating-point operations
838C for the elimination process on the local processor
839C
840C RINFOG(1) hold the estimated number of floating-point operations
841C for the elimination process on all processors
842C
843C RINFO(2) Number of floating-point operations
844C for the assembly process on local processor.
845C
846C RINFOG(2) Number of floating-point operations
847C for the assembly process.
848C
849C RINFO(3) Number of floating-point operations
850C for the elimination process on the local processor.
851C
852C RINFOG(3) Number of floating-point operations
853C for the elimination process on all processors.
854C
855C----------------------------------------------------
856C Statistics produced after solve with error analysis
857C----------------------------------------------------
858C
859C RINFOG(4) Infinite norm of the input matrix.
860C
861C RINFOG(5) Infinite norm of the computed solution, where
862C
863C RINFOG(6) Norm of scaled residuals
864C
865C RINFOG(7), `RINFOG(8) and `RINFOG(9) are used to hold information
866C on the backward error.
867C We calculate an estimate of the sparse backward error using the
868C theory and measure developed
869C by Arioli, Demmel, and Duff (1989). The scaled residual w1
870C is calculated for all equations except those
871C for which numerator is nonzero and the denominator is small.
872C For the exceptional equations, w2, is used instead.
873C The largest scaled residual (w1) is returned in
874C RINFOG(7) and the largest scaled
875C residual (w2) is returned in `RINFOG(8)>. If all equations are
876C non exceptional then zero is returned in `RINFOG(8).
877C The upper bound error is returned in `RINFOG(9).
878C
879C RINFOG(14) Number of floating-point operations
880C for the elimination process (on all fronts, BLR or not)
881C performed when BLR option is activated on all processors.
882C (equal to zero if BLR option not used, ICNTL(35).EQ.1)
883C
884C RINFOG(15) - after analysis: if the user decides to perform an
885C out-of-core factorization (ICNTL(22)=1), then a rough
886C estimation of the total size of the disk space in MegaBytes of
887C the files written by all processors is provided in RINFOG(15).
888C
889C RINFOG(16) - after factorization: in the case of an out-of-core
890C execution (ICNTL(22)=1), the total
891C size in MegaBytes of the disk space used by the files written
892C by all processors is provided.
893C
894C RINFOG(17) - after each job: sum over all processors of the sizes
895C (in MegaBytes) of the files used to save the instance
896C
897C RINFOG(18) - after each job: sum over all processors of the sizes
898C (in MegaBytes) of the MUMPS structures.
899C
900C RINFOG(19) - after factorization: smallest pivot in absolute
901C value selected during factorization of the preprocessed
902C matrix A_pre and considering also
903C small pivots selected as null-pivots (see ICNTL(24))
904C and pivots on which static pivoting was applied
905C
906C RINFOG(20) - after factorization: smallest pivot in absolute
907C value selected during factorization of the preprocessed
908C matrix A_pre and NOT considering
909C small pivots selected as null-pivots (see ICNTL(24))
910C and pivots on which static pivoting was applied
911C
912C RINFOG(21) - after factorization: largest pivot in absolute
913C value selected during factorization of the preprocessed
914C matrix A_pre.
915C===========================
916C DESCRIPTION OF KEEP8 ARRAY
917C===========================
918C
919C KEEP8 is a 64-bit integer array of length 150 that need not
920C be set by the user
921C
922C===========================
923C DESCRIPTION OF KEEP ARRAY
924C===========================
925C
926C KEEP is an INTEGER array of length 500 that need not
927C be set by the user.
928C
929C
930C=============================
931C Description of DKEEP array
932C=============================
933C
934C DKEEP internal control array for REAL parameters
935C of size 30
936C===================================
937C Default values for control arrays
938C==================================
939C uninitialized values should be 0
940 lwk_user = 0
941 keep(1:500) = 0
942 keep8(1:150)= 0_8
943 info(1:80) = 0
944 infog(1:80) = 0
945 icntl(1:60) = 0
946 rinfo(1:40) = 0.0e0
947 rinfog(1:40)= 0.0e0
948 cntl(1:15) = 0.0e0
949 dkeep(1:230) = 0.0e0
950C ----------------
951C Symmetric code ?
952C ----------------
953 keep( 50 ) = sym
954C -------------------------------------
955C Only options 0, 1, or 2 are available
956C -------------------------------------
957 IF ( keep(50).NE.1 .and. keep(50).NE.2 ) keep( 50 ) = 0
958C threshold value for pivoting
959 IF ( keep(50) .NE. 1 ) THEN
960 cntl(1) = 0.01e0
961 ELSE
962 cntl(1) = 0.0e0
963 END IF
964 cntl(2) = sqrt(epsilon(0.0e0))
965 cntl(3) = 0.0e0
966 cntl(4) = -1.0e0
967 cntl(5) = 0.0e0
968C Working host ?
969 keep(46) = par
970 IF ( keep(46) .NE. 0 .AND.
971 & keep(46) .NE. 1 ) THEN
972C ----------------------
973C If out-of-range value,
974C use a working host
975C ----------------------
976 keep(46) = 1
977 END IF
978C control printing
979 icntl(1) = 6
980 icntl(2) = 0
981 icntl(3) = 6
982 icntl(4) = 2
983C format of input matrix
984 icntl(5) = 0
985C maximum transversal (0=NO, 7=automatic)
986 IF (sym.NE.1) THEN
987 icntl(6) = 7
988 ELSE
989 icntl(6) = 0
990 ENDIF
991C Ordering option (icntl(7))
992C Default is automatic choice done during analysis
993 icntl(7) = 7
994C ask for scaling (0=NO, 4=Row and Column)
995C Default value is 77: automatic choice for analysis
996 icntl(8) = 77
997C solve Ax=b (1) or Atx=b (other values)
998 icntl(9) = 1
999C Naximum number of IR (0=NO)
1000 icntl(10) = 0
1001C Error analysis (0=NO)
1002 icntl(11) = 0
1003C Control ordering strategy
1004C automatic choice
1005 IF(sym .EQ. 2) THEN
1006 icntl(12) = 0
1007 ELSE
1008 icntl(12) = 1
1009 ENDIF
1010C Control of the use of ScaLAPACK for root node
1011C If null space options asked, ScaLAPACK is always ignored
1012C and ICNTL(13) is not significant
1013C ICNTL(13) = 0 : Root parallelism on (if size large enough)
1014C ICNTL(13) = 1 : Root parallelism off
1015 icntl(13) = 0
1016C Default value for the memory relaxation
1017 IF (sym.eq.1.AND.nslaves.EQ.1) THEN
1018 icntl(14) = 5 ! it should work with 0
1019 ELSE
1020 icntl(14) = 20
1021 END IF
1022 IF (nslaves.GT.4) icntl(14) = icntl(14) + 5
1023 IF (nslaves.GT.8) icntl(14) = icntl(14) + 5
1024 IF (nslaves.GT.16) icntl(14)= icntl(14) + 5
1025C Distributed matrix entry
1026 icntl(18) = 0
1027C Schur (default is not active)
1028 icntl(19) = 0
1029C dense RHS by default
1030 icntl(20) = 0
1031C solution vector centralized on host
1032 icntl(21) = 0
1033C out-of-core flag
1034 icntl(22) = 0
1035C MEM_ALLOWED (0: not provided)
1036 icntl(23) = 0
1037C null pivots
1038 icntl(24) = 0
1039C blocking factor for multiple RHS during solution phase
1040 icntl(27) = -32
1041C analysis strategy: 0=auto, 1=sequential, 2=parallel
1042 icntl(28) = 1
1043C tool used for parallel ordering computation :
1044C 0 = auto, 1 = PT-SCOTCH, 2 = ParMETIS
1045 icntl(29) = 0
1046C Default BLR compression rate of factors (60%)
1047 icntl(38) = 600
1048 icntl(55) = 0
1049 icntl(56) = 0
1050 icntl(57) = 0
1051#if defined(__ve__)
1052 icntl(58) = 2
1053#else
1054 icntl(58) = 1
1055#endif
1056C===================================
1057C Default values for some components
1058C of KEEP array
1059C===================================
1060 keep(12) = 0
1061 keep(24) = 18
1062 keep(68) = 0
1063 keep(30) = 2000
1064 keep(36) = 1
1065 keep(1) = 5
1066 keep(7) = 150
1067 keep(8) = 120
1068 keep(57) = 2000
1069 keep(58) = 1000
1070 IF ( sym .eq. 0 ) THEN
1071 keep(4) = 32
1072 keep(3) = 96
1073 keep(5) = 16
1074 keep(6) = 32
1075 keep(9) = 700
1076 keep(85) = 300
1077 keep(62) = 50
1078 ELSE
1079 keep(4) = 24
1080 keep(3) = 96
1081 keep(5) = 16
1082 keep(6) = 32
1083 keep(9) = 400
1084 keep(85) = 100
1085 keep(62) = 50
1086 END IF
1087 keep(63) = 60
1088 keep(48) = 5
1089 CALL smumps_set_type_sizes( keep(34), keep(35),
1090 & keep(16), keep(10) )
1091 keep(51) = 70
1092 keep(37) = max(800, int(sqrt(real(nslaves+1))*real(keep(51))))
1093 IF ( nslaves > 256 ) THEN
1094 keep(39) = 10000
1095 ELSEIF ( nslaves > 128 ) THEN
1096 keep(39) = 20000
1097 ELSEIF ( nslaves > 64 ) THEN
1098 keep(39) = 40000
1099 ELSEIF ( nslaves > 16 ) THEN
1100 keep(39) = 80000
1101 ELSE
1102 keep(39) = 160000
1103 END IF
1104 keep(40) = -1 - 456789
1105 keep(45) = 0
1106 keep(47) = 2
1107 keep(64) = 20
1108 keep(69) = 4
1109C To disable SMP management when using new mapping strategy
1110C KEEP(69) = 1
1111C Forcing proportional is ok with strategy 5
1112 keep(75) = 1
1113 keep(76) = 2
1114 keep(77) = 30
1115 keep(79) = 0 ! old splitting
1116 IF (nslaves.GT.4) THEN
1117 keep(78)=max(
1118 & int(log(real(nslaves))/log(real(2))) - 2
1119 & , 0 )
1120 ENDIF
1121 keep(210) = 2
1122 keep8(79) = -10_8
1123 keep(80) = 1
1124 keep(81) = 0
1125 keep(82) = 30
1126 keep(83) = min(8,nslaves/4)
1127 keep(83) = max(min(4,nslaves),max(keep(83),1))
1128 keep(86)=1
1129 keep(87)=0
1130 keep(88)=0
1131 keep(90)=1
1132 keep(91)=min(8, nslaves)
1133 keep(91) = max(min(4,nslaves),min(keep(83),keep(91)))
1134 IF(nslaves.LT.48)THEN
1135 keep(102)=150
1136 ELSEIF(nslaves.LT.128)THEN
1137 keep(102)=150
1138 ELSEIF(nslaves.LT.256)THEN
1139 keep(102)=200
1140 ELSEIF(nslaves.LT.512)THEN
1141 keep(102)=300
1142 ELSEIF(nslaves.GE.512)THEN
1143 keep(102)=400
1144 ENDIF
1145#if defined(OLD_OOC_NOPANEL)
1146 keep(99)=0 ! no panel -> synchronous / no buffer
1147#else
1148 keep(99)=4 ! new OOC -> asynchronous + buffer
1149#endif
1150 keep(100)=0
1151 keep(114) = 1
1152C Threshold value for null pîvot detection during
1153C LU factorization on root in case of RR
1154 keep(118)=41
1155C strategy for MUMPS_BLOC2_GET_NSLAVESMIN
1156 keep(119)=0
1157C Scaling is enabled by default with the Schur complement option
1158 keep(125) = 1
1159 keep(197)=0
1160#if defined(__ve__)
1161C More amalgamation of small fronts to better exploit vector engine
1162 keep(197)=1
1163#endif
1164C KEEP(199) for MUMPS_PROCNODE, MUMPS_TYPENODE, etc
1165C KEEP(199)=NSLAVES + 7
1166 keep(199)=-1
1167 keep(200)=0 ! root pre-assembled in id%S
1168C Pre-assemble type 3 root in id%S if no L0-OMP,
1169C allocate id%S later otherwise.
1170 keep(200) = -1
1171 keep(204)=0
1172 keep(205)=0
1173 keep(209)=-1
1174 keep(104) = 16
1175 keep(107)=0
1176 keep(121)=-999999
1177 keep(122)=15
1178 keep(141)=1 ! min needed
1179 keep(206)=1
1180 keep(207) = 1
1181 keep(211)=2
1182 IF (nslaves .EQ. 2) THEN
1183 keep(213) = 101
1184 ELSE
1185 keep(213) = 201
1186 ENDIF
1187 keep(217)=0
1188 keep(215)=0
1189 keep(216)=1
1190 keep(218)=250
1191 keep(219)=1
1192 IF (keep(50).EQ.2) THEN
1193 keep(227)= max(2,32)
1194 ELSE
1195 keep(227)= max(1,32)
1196 ENDIF
1197 keep(231) = 1
1198 keep(232) = 3
1199 keep(233) = 0
1200 keep(239) = 1
1201 keep(240) = 10
1202 dkeep(4) = -1.0e0
1203 dkeep(5) = -1.0e0
1204 dkeep(10) = -9e0 ! default value is 10E-1 set in fac_driver.F
1205 dkeep(13) = -9e0 ! to define SEUIL for postponing with RR
1206 ! (default value is 10 set in fac_driver.F)
1207 dkeep(24) = 1000.0e0 ! gap should be larger than dkeep(14)
1208 dkeep(25) = 10.0e0 ! gap precision
1209 keep(238)=18
1210 keep(234)= 1
1211 keep(235)=-1
1212 dkeep(3) =-5.0e0
1213 dkeep(18)= 1.0e12
1214 keep(242) = -9
1215 keep(243) = -1
1216 keep(249)=1
1217!$ KEEP(249) = OMP_GET_MAX_THREADS()
1218 keep(250) = 1
1219 keep(261) = 1
1220 keep(262) = 0
1221 keep(263) = 1
1222 keep(266) = 0
1223 keep(267) = 0
1224 keep(268)=77
1225 keep(350) = 1
1226 keep(351) = 0
1227 keep(360) = 256
1228 keep(361) = 2048
1229 keep(362) = 4
1230 keep(363) = 512
1231 keep(364) = 32768
1232 keep(378) = 1
1233C OMP parallelization of arrowheads
1234 keep(399) = 1
1235 keep(397) = -1
1236#if defined(__ve__)
1237 keep(401) = 1
1238#else
1239 keep(401) = 0
1240#endif
1241 keep(402) = 1
1242 keep(405) = 0 ! 1 under L0OMP
1243 keep(406) = 2
1244C 0.9 equilibration
1245 keep(408) = 90
1246 keep(420) = 4*keep(6) ! if KEEP(6)=32 then 128
1247#if defined(GEMMT_AVAILABLE)
1248 keep(421) = -1
1249#endif
1250C Default size of KEEP(424) is defined below.
1251C It does not depend on arithmetic,
1252C it is related to L1 cache size: 250 * 64 bytes
1253C is about half of the cache size (32768 bytes).
1254C This leaves space in cache for the destination,
1255C of size 250*sizeof(arith). (4k bytes for z)
1256C At each new block of size KEEP(424), there is
1257C probably a cache miss on the pivot.
1258 keep(424) = 250
1259 keep(459) = 10 ! max number of panels
1260 keep(460) = 63 ! min panel size
1261 keep(461) = 10
1262 keep(462) = 10
1263 keep(466) = 1
1264 keep(468) = 3
1265 keep(469) = 3
1266 keep(471) = -1
1267 keep(479) = 1
1268 keep(480) = 3
1269 keep(472) = 1
1270 keep(476) = 50
1271 keep(477) = 100
1272 keep(483) = 50
1273 keep(484) = 50
1274 keep(487) = 1
1275 IF (keep(472).EQ.1) THEN
1276 keep(488) = 512
1277 ELSE
1278 keep(488) = 8*keep(6) ! if KEEP(6)=32 then 256
1279 ENDIF
1280 keep(490) = 128
1281 keep(491) = 1000
1282 keep(492) = 1
1283 keep(82) = 30
1284 keep(493) = 0
1285 keep(496) = 1
1286 keep(495) = -1
1287 keep(497) = -1
1288C
1289 RETURN
1290 END SUBROUTINE smumpsid
1291 SUBROUTINE smumps_set_keep72(id, LP)
1293 IMPLICIT NONE
1294 TYPE (SMUMPS_STRUC) :: id
1295 INTEGER LP
1296 IF (id%KEEP(72)==1) THEN
1297 id%KEEP(37) = 2*id%NSLAVES
1298 id%KEEP(3)=3
1299 id%KEEP(4)=2
1300 id%KEEP(5)=1
1301 id%KEEP(6)=2
1302 id%KEEP(9)=3
1303 id%KEEP(39)=300
1304 id%KEEP(7) = 3
1305 id%KEEP(8) = 2
1306 id%KEEP(57)= 3
1307 id%KEEP(58)= 2
1308 id%KEEP(63)=3
1309 id%CNTL(1)=0.1e0
1310 id%KEEP(213) = 101
1311 id%KEEP(85)=2
1312 id%KEEP(85)=-4
1313 id%KEEP(62) = 2
1314 id%KEEP(1) = 1
1315 id%KEEP(51) = 2
1316!$ id%KEEP(360) = 2
1317!$ id%KEEP(361) = 2
1318!$ id%KEEP(362) = 1
1319!$ id%KEEP(363) = 2
1320 id%KEEP(364) = 10
1321 id%KEEP(420) = 4
1322 id%KEEP(488) = 4
1323 id%KEEP(490) = 5
1324 id%KEEP(491) = 5
1325 id%ICNTL(27)=-3
1326 id%KEEP(227)=3
1327 id%KEEP(30) = 1000
1328C Activate L0OMP with test_mumps in case KEEP(72)=1
1329 id%KEEP(401) = 1
1330 ELSE IF (id%KEEP(72)==2) THEN
1331 id%KEEP(85)=2 ! default is
1332 id%KEEP(85)=-10000 ! default is 160
1333 id%KEEP(62) = 10 ! default is 50
1334 id%KEEP(210) = 1 ! defaults is 0 (automatic)
1335 id%KEEP8(79) = 160000_8
1336 id%KEEP(1) = 2 ! default is 8
1337 id%KEEP(102) = 110 ! defaults is 150 up to 48 procs
1338 id%KEEP(213) = 121 ! default is 201
1339 END IF
1340 RETURN
1341 END SUBROUTINE smumps_set_keep72
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine smumps_set_type_sizes(k34, k35, k16, k10)
subroutine smumpsid(nslaves, lwk_user, cntl, icntl, keep, keep8, info, infog, rinfo, rinfog, sym, par, dkeep, myid)
subroutine smumps_set_keep72(id, lp)