PROGRESS  master
prg_sp2parser_mod.F90
Go to the documentation of this file.
1 
13 
16  use bml
17 
18  implicit none
19 
20  private
21 
22  integer, parameter :: dp = kind(1.0d0)
23 
26  type, public :: sp2data_type
27  character(20) :: jobname
28  integer :: verbose
29  integer :: minsp2iter
30  integer :: maxsp2iter
31  real(dp) :: sp2tol
32  real(dp) :: threshold
33  real(dp) :: bndfil
34  integer :: mdim
35  integer :: ndim
36  character :: sdim(3)
37  real(dp) :: pdim(3)
38  character(20) :: bml_type
39  character(10) :: sp2conv
40  character(10) :: flavor
41  end type sp2data_type
42 
43  public :: prg_parse_sp2
44 
45 contains
46 
49  subroutine prg_parse_sp2(sp2data,filename)
50 
51  implicit none
52  type(sp2data_type), intent(inout) :: sp2data
53  integer, parameter :: nkey_char = 4, nkey_int = 6, nkey_re = 3, nkey_log = 1
54  character(len=*) :: filename
55 
56  !Library of keywords with the respective defaults.
57  character(len=50), parameter :: keyvector_char(nkey_char) = [character(len=100) :: &
58  'JobName=', 'BMLType=','SP2Conv=','Flavor=' ]
59  character(len=100) :: valvector_char(nkey_char) = [character(len=100) :: &
60  'MyJob' , 'Dense' ,'REL', 'Alg2' ]
61 
62  character(len=50), parameter :: keyvector_int(nkey_int) = [character(len=50) :: &
63  'MDim=', 'VarInt=', 'MinSP2Iter=', 'MaxSP2Iter=','Ndim=','Verbose=']
64  integer :: valvector_int(nkey_int) = (/ &
65  -1 , 0 , 10 , 100 , 1, 0 /)
66 
67  character(len=50), parameter :: keyvector_re(nkey_re) = [character(len=50) :: &
68  'NumThresh=','SP2Tol=','BndFil=' ]
69  real(dp) :: valvector_re(nkey_re) = (/&
70  0.0 , 0.00000001 ,0.0 /)
71 
72  character(len=50), parameter :: keyvector_log(nkey_log) = [character(len=100) :: &
73  'DUMMY=']
74  logical :: valvector_log(nkey_log) = (/&
75  .false./)
76 
77  !Start and stop characters
78  character(len=50), parameter :: startstop(2) = [character(len=50) :: &
79  'SP2{', '}']
80 
81  call prg_parsing_kernel(keyvector_char,valvector_char&
82  ,keyvector_int,valvector_int,keyvector_re,valvector_re,&
83  keyvector_log,valvector_log,trim(filename),startstop)
84 
85  !Characters
86  sp2data%JobName = valvector_char(1)
87 
88  if(valvector_char(2) == "Dense")then
89  sp2data%bml_type = bml_matrix_dense
90  elseif(valvector_char(2) == "Ellpack")then
91  sp2data%bml_type = bml_matrix_ellpack
92  elseif(valvector_char(2) == "Ellblock")then
93  sp2data%bml_type = bml_matrix_ellblock
94  endif
95  sp2data%sp2conv = valvector_char(3)
96  sp2data%flavor = valvector_char(4)
97 
98  !Reals
99  sp2data%threshold = valvector_re(1)
100  sp2data%sp2tol = valvector_re(2)
101  sp2data%BndFil = valvector_re(3)
102 
103  !Logicals
104 
105  !Integers
106  sp2data%mdim = valvector_int(1)
107  sp2data%minsp2iter = valvector_int(3)
108  sp2data%maxsp2iter = valvector_int(4)
109  sp2data%ndim = valvector_int(5)
110  sp2data%verbose = valvector_int(6)
111 
112  end subroutine prg_parse_sp2
113 
114 end module prg_sp2parser_mod
Some general parsing functions.
subroutine, public prg_parsing_kernel(keyvector_char, valvector_char, keyvector_int, valvector_int, keyvector_re, valvector_re, keyvector_log, valvector_log, filename, startstop)
The general parsing function. It is used to vectorize a set of "keywords" "value" pairs as included i...
Module to handle input output files for the PROGRESS lib.
subroutine, public prg_parse_sp2(sp2data, filename)
The parser for SP2 solver.