Line data Source code
1 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3 : !!!! !!!!
4 : !!!! ParaMonte: Parallel Monte Carlo and Machine Learning Library. !!!!
5 : !!!! !!!!
6 : !!!! Copyright (C) 2012-present, The Computational Data Science Lab !!!!
7 : !!!! !!!!
8 : !!!! This file is part of the ParaMonte library. !!!!
9 : !!!! !!!!
10 : !!!! LICENSE !!!!
11 : !!!! !!!!
12 : !!!! https://github.com/cdslaborg/paramonte/blob/main/LICENSE.md !!!!
13 : !!!! !!!!
14 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
15 : !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16 :
17 : !> \brief
18 : !> This file contains procedure implementations of [pm_mathFactorial](@ref pm_mathFactorial).
19 : !>
20 : !> \finmain
21 : !>
22 : !> \author
23 : !> \AmirShahmoradi, April 23, 2017, 1:36 AM, Institute for Computational Engineering and Sciences (ICES), University of Texas at Austin
24 :
25 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26 :
27 : submodule (pm_mathFactorial) routines ! LCOV_EXCL_LINE
28 :
29 : #if CHECK_ENABLED
30 : use pm_err, only: getFine
31 : use pm_val2str, only: getStr
32 : use pm_err, only: setAsserted
33 : #define CHECK_ASSERTION(LINE,ASSERTION,MSG) \
34 : call setAsserted(ASSERTION,getFine(__FILE__,LINE)//MODULE_NAME//MSG);
35 : #else
36 : #define CHECK_ASSERTION(LINE,ASSERTION,MSG) continue;
37 : #endif
38 :
39 : use pm_kind, only: SK
40 :
41 : implicit none
42 :
43 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
44 :
45 : contains
46 :
47 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48 :
49 : #define getFactorial_ENABLED 1
50 :
51 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52 :
53 : #define IK_ENABLED 1
54 :
55 : #if IK5_ENABLED
56 5 : module procedure getFactorial_IK5
57 : use pm_kind, only: IKC => IK5
58 : #include "pm_mathFactorial@routines.inc.F90"
59 5 : end procedure
60 : #endif
61 :
62 : #if IK4_ENABLED
63 16 : module procedure getFactorial_IK4
64 : use pm_kind, only: IKC => IK4
65 : #include "pm_mathFactorial@routines.inc.F90"
66 16 : end procedure
67 : #endif
68 :
69 : #if IK3_ENABLED
70 13 : module procedure getFactorial_IK3
71 : use pm_kind, only: IKC => IK3
72 : #include "pm_mathFactorial@routines.inc.F90"
73 13 : end procedure
74 : #endif
75 :
76 : #if IK2_ENABLED
77 5 : module procedure getFactorial_IK2
78 : use pm_kind, only: IKC => IK2
79 : #include "pm_mathFactorial@routines.inc.F90"
80 5 : end procedure
81 : #endif
82 :
83 : #if IK1_ENABLED
84 5 : module procedure getFactorial_IK1
85 : use pm_kind, only: IKC => IK1
86 : #include "pm_mathFactorial@routines.inc.F90"
87 5 : end procedure
88 : #endif
89 :
90 : #undef IK_ENABLED
91 :
92 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
93 :
94 : #undef getFactorial_ENABLED
95 :
96 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
97 :
98 : #define getLogFactorial_ENABLED 1
99 :
100 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
101 :
102 : #define RK_ENABLED 1
103 :
104 : #if RK5_ENABLED
105 : module procedure getLogFactorial_RK5
106 : use pm_kind, only: RKC => RK5
107 : #include "pm_mathFactorial@routines.inc.F90"
108 : end procedure
109 : #endif
110 :
111 : #if RK4_ENABLED
112 6 : module procedure getLogFactorial_RK4
113 : use pm_kind, only: RKC => RK4
114 : #include "pm_mathFactorial@routines.inc.F90"
115 6 : end procedure
116 : #endif
117 :
118 : #if RK3_ENABLED
119 5 : module procedure getLogFactorial_RK3
120 : use pm_kind, only: RKC => RK3
121 : #include "pm_mathFactorial@routines.inc.F90"
122 5 : end procedure
123 : #endif
124 :
125 : #if RK2_ENABLED
126 6 : module procedure getLogFactorial_RK2
127 : use pm_kind, only: RKC => RK2
128 : #include "pm_mathFactorial@routines.inc.F90"
129 6 : end procedure
130 : #endif
131 :
132 : #if RK1_ENABLED
133 17 : module procedure getLogFactorial_RK1
134 : use pm_kind, only: RKC => RK1
135 : #include "pm_mathFactorial@routines.inc.F90"
136 17 : end procedure
137 : #endif
138 :
139 : #undef RK_ENABLED
140 :
141 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
142 :
143 : #undef getLogFactorial_ENABLED
144 :
145 : !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
146 :
147 : #undef CHECK_ASSERTION
148 :
149 : end submodule routines
|