1
1
import sys
2
+
3
+ import mpmath
2
4
import numpy as np
3
5
from mpmath import *
4
6
import geophires_x .Model as Model
7
+ from .Parameter import intParameter
5
8
from .Reservoir import Reservoir
9
+ from .Units import Units
6
10
7
11
8
12
class MPFReservoir (Reservoir ):
@@ -12,6 +16,7 @@ class MPFReservoir(Reservoir):
12
16
It also has its own methods and attributes that are unique to this class.
13
17
"""
14
18
19
+ # noinspection PyUnresolvedReferences,PyProtectedMember
15
20
def __init__ (self , model : Model ):
16
21
"""
17
22
The __init__ function is called automatically when a class is instantiated.
@@ -31,15 +36,30 @@ def __init__(self, model: Model):
31
36
:type model: :class:`~geophires_x.Model.Model`
32
37
:return: None
33
38
"""
34
- model .logger .info ("Init " + str (__class__ ) + ": " + sys ._getframe ().f_code .co_name )
39
+ model .logger .info (f'Init { str (__class__ )} : { sys ._getframe ().f_code .co_name } ' )
40
+
35
41
super ().__init__ (model ) # initialize the parent parameters and variables
36
42
sclass = str (__class__ ).replace ("<class \' " , "" )
37
43
self .MyClass = sclass .replace ("\' >" , "" )
38
- model .logger .info ("Complete " + str (__class__ ) + ": " + sys ._getframe ().f_code .co_name )
44
+
45
+ max_allowed_precision = 15
46
+ self .gringarten_stehfest_precision = self .ParameterDict [self .gringarten_stehfest_precision .Name ] = intParameter (
47
+ 'Gringarten-Stehfest Precision' ,
48
+ DefaultValue = 15 ,
49
+ AllowableRange = list (range (8 , max_allowed_precision + 1 )),
50
+ UnitType = Units .NONE ,
51
+ Required = False ,
52
+ ToolTipText = 'Sets the numerical precision (decimal places) for the Stehfest '
53
+ 'algorithm used for the inverse Laplace transform.'
54
+ )
55
+
56
+
57
+ model .logger .info (f'Complete { str (__class__ )} : { sys ._getframe ().f_code .co_name } ' )
39
58
40
59
def __str__ (self ):
41
60
return "MPFReservoir"
42
61
62
+ # noinspection PyUnresolvedReferences,PyProtectedMember
43
63
def read_parameters (self , model : Model ) -> None :
44
64
"""
45
65
The read_parameters function reads in the parameters from a dictionary created by reading the user-provided file
@@ -51,15 +71,16 @@ def read_parameters(self, model: Model) -> None:
51
71
:type model: :class:`~geophires_x.Model.Model`
52
72
:return: None
53
73
"""
54
- model .logger .info (" Init " + str (__class__ ) + ": " + sys ._getframe ().f_code .co_name )
74
+ model .logger .info (f' Init { str (__class__ )} : { sys ._getframe ().f_code .co_name } ' )
55
75
# if we call super, we don't need to deal with setting the parameters here,
56
76
# just deal with the special cases for the variables in this class
57
77
# because the call to the super.readparameters will set all the variables,
58
78
# including the ones that are specific to this class
59
79
super ().read_parameters (model ) # read the parameters for the parent.
60
80
61
- model .logger .info (" Complete " + str (__class__ ) + ": " + sys ._getframe ().f_code .co_name )
81
+ model .logger .info (f' Complete { str (__class__ )} : { sys ._getframe ().f_code .co_name } ' )
62
82
83
+ # noinspection SpellCheckingInspection,PyUnresolvedReferences,PyProtectedMember
63
84
def Calculate (self , model : Model ):
64
85
"""
65
86
The Calculate function calculates the values of all the parameters that are calculated by this object.
@@ -87,13 +108,22 @@ def Calculate(self, model: Model):
87
108
# calculate non-dimensional temperature array
88
109
Twnd = []
89
110
try :
111
+ stash_dps = mpmath .dps
112
+ if self .gringarten_stehfest_precision .Provided :
113
+ mpmath .dps = self .gringarten_stehfest_precision .value
114
+
90
115
for t in range (1 , len (model .reserv .timevector .value )):
91
116
Twnd = Twnd + [float (invertlaplace (fp , td [t ], method = 'stehfest' ))]
92
- except :
93
- msg = ('Error: GEOPHIRES could not execute numerical inverse laplace calculation for reservoir model 1. '
117
+ except Exception as e_ :
118
+ mpmath .dps = stash_dps
119
+
120
+ msg = (f'Error: GEOPHIRES could not execute numerical inverse laplace calculation for reservoir model 1 '
121
+ f'({ self .gringarten_stehfest_precision .Name } = { mpmath .dps } ). '
94
122
'Simulation will abort.' )
95
123
print (msg )
96
- raise RuntimeError (msg )
124
+ raise RuntimeError (msg ) from e_
125
+
126
+ mpmath .dps = stash_dps
97
127
98
128
Twnd = np .asarray (Twnd )
99
129
0 commit comments