MODFLOW 6  version 6.5.0.dev2
MODFLOW 6 Code Documentation
BaseSolution.f90
Go to the documentation of this file.
1 ! -- A solution contains a list of models, packages, and exchanges
3 
4  use kindmodule, only: dp, i4b
8  use listmodule, only: listtype
9  implicit none
10 
11  private
13  private :: castasbasesolutionclass
14 
15  type, abstract :: basesolutiontype
16  character(len=LENSOLUTIONNAME) :: name
17  contains
18  procedure(sln_df), deferred :: sln_df
19  procedure(sln_ar), deferred :: sln_ar
20  procedure(sln_calculate_delt), deferred :: sln_calculate_delt
21  procedure(sln_ad), deferred :: sln_ad
22  procedure(sln_ca), deferred :: sln_ca
23  procedure(sln_ot), deferred :: sln_ot
24  procedure(sln_fp), deferred :: sln_fp
25  procedure(sln_da), deferred :: sln_da
26  procedure(slnsave), deferred :: save
27  procedure(slnaddmodel), deferred :: add_model
28  procedure(slnaddexchange), deferred :: add_exchange
29  procedure(slngetmodels), deferred :: get_models
30  procedure(slngetexchanges), deferred :: get_exchanges
31  end type basesolutiontype
32 
33  abstract interface
34 
35  subroutine sln_df(this)
36  import basesolutiontype
37  class(basesolutiontype) :: this
38  end subroutine
39 
40  subroutine slnaddexchange(this, exchange)
41  import basesolutiontype
42  import baseexchangetype
43  class(basesolutiontype) :: this
44  class(baseexchangetype), pointer, intent(in) :: exchange
45  end subroutine
46 
47  subroutine assignconnectionsiface(this)
48  import basesolutiontype
49  class(basesolutiontype) :: this
50  end subroutine
51 
52  subroutine sln_ar(this)
53  import basesolutiontype
54  class(basesolutiontype) :: this
55  end subroutine
56 
57  subroutine sln_rp(this)
58  import basesolutiontype
59  class(basesolutiontype) :: this
60  end subroutine
61 
62  subroutine sln_calculate_delt(this)
63  import basesolutiontype
64  class(basesolutiontype) :: this
65  end subroutine
66 
67  subroutine sln_ad(this)
68  import basesolutiontype
69  class(basesolutiontype) :: this
70  end subroutine
71 
72  subroutine sln_ot(this)
73  import basesolutiontype
74  class(basesolutiontype) :: this
75  end subroutine
76 
77  subroutine sln_ca(this, isgcnvg, isuppress_output)
78  use kindmodule, only: dp, i4b
79  import basesolutiontype
80  class(basesolutiontype) :: this
81  integer(I4B), intent(in) :: isuppress_output
82  integer(I4B), intent(inout) :: isgcnvg
83  end subroutine
84 
85  subroutine slnsave(this, filename)
86  import basesolutiontype
87  class(basesolutiontype) :: this
88  character(len=*), intent(in) :: filename
89  end subroutine
90 
91  subroutine slnaddmodel(this, mp)
92  import basesolutiontype
93  import basemodeltype
94  class(basesolutiontype) :: this
95  class(basemodeltype), pointer, intent(in) :: mp
96  end subroutine
97 
98  function slngetmodels(this) result(models)
99  import basesolutiontype
100  import listtype
101  class(basesolutiontype) :: this
102  type(listtype), pointer :: models
103  end function
104 
105  function slngetexchanges(this) result(models)
106  import basesolutiontype
107  import listtype
108  class(basesolutiontype) :: this
109  type(listtype), pointer :: models
110  end function
111 
112  subroutine sln_fp(this)
113  import basesolutiontype
114  class(basesolutiontype) :: this
115  end subroutine
116 
117  subroutine sln_da(this)
118  import basesolutiontype
119  class(basesolutiontype) :: this
120  end subroutine
121 
122  end interface
123 
124 contains
125 
126  function castasbasesolutionclass(obj) result(res)
127  implicit none
128  class(*), pointer, intent(inout) :: obj
129  class(basesolutiontype), pointer :: res
130  !
131  res => null()
132  if (.not. associated(obj)) return
133  !
134  select type (obj)
135  class is (basesolutiontype)
136  res => obj
137  end select
138  return
139  end function castasbasesolutionclass
140 
141  subroutine addbasesolutiontolist(list, solution)
142  implicit none
143  ! -- dummy
144  type(listtype), intent(inout) :: list
145  class(basesolutiontype), pointer, intent(in) :: solution
146  ! -- local
147  class(*), pointer :: obj
148  !
149  obj => solution
150  call list%Add(obj)
151  !
152  return
153  end subroutine addbasesolutiontolist
154 
155  function getbasesolutionfromlist(list, idx) result(res)
156  implicit none
157  ! -- dummy
158  type(listtype), intent(inout) :: list
159  integer(I4B), intent(in) :: idx
160  class(basesolutiontype), pointer :: res
161  ! -- local
162  class(*), pointer :: obj
163  !
164  obj => list%GetItem(idx)
165  res => castasbasesolutionclass(obj)
166  !
167  return
168  end function getbasesolutionfromlist
169 
170 end module basesolutionmodule
subroutine, public addbasesolutiontolist(list, solution)
class(basesolutiontype) function, pointer, public getbasesolutionfromlist(list, idx)
class(basesolutiontype) function, pointer, private castasbasesolutionclass(obj)
This module contains simulation constants.
Definition: Constants.f90:9
integer(i4b), parameter lensolutionname
maximum length of the solution name
Definition: Constants.f90:20
This module defines variable data types.
Definition: kind.f90:8
Highest level model type. All models extend this parent type.
Definition: BaseModel.f90:13
A generic heterogeneous doubly-linked list.
Definition: List.f90:10