MODFLOW 6  version 6.5.0.dev2
MODFLOW 6 Code Documentation
GweGweConnection.f90
Go to the documentation of this file.
2  use kindmodule, only: i4b, dp, lgp
4  use csrutilsmodule, only: getcsrindex
5  use simmodule, only: ustop
9  use gwemodule
13  use sparsemodule, only: sparsematrix
17  use simstagesmodule
19 
20  implicit none
21  private
22 
23  public :: castasgwegweconnection
24 
25  !> Connects a GWE model to other GWE models in space. Derives
26  !! from NumericalExchangeType so the solution can use it to
27  !! fetch the coefficients for this connection.
28  !<
30 
31  class(gwemodeltype), pointer :: gwemodel => null() !< the model for which this connection exists
32  class(gweexchangetype), pointer :: gweexchange => null() !< the primary exchange, cast to GWE-GWE
33  class(gweinterfacemodeltype), pointer :: gweinterfacemodel => null() !< the interface model
34  integer(I4B), pointer :: iifaceadvscheme => null() !< the advection scheme at the interface:
35  !! 0 = upstream, 1 = central, 2 = TVD
36  integer(I4B), pointer :: iifacext3d => null() !< XT3D in the interface CND package: 0 = no, 1 = lhs, 2 = rhs
37  integer(I4B), pointer :: exgflowsign => null() !< indicates the flow direction of exgflowja
38  real(dp), dimension(:), pointer, contiguous :: exgflowjagwe => null() !< gwe-flowja at the interface (this is a subset of the GWT
39  !! interface model flowja's)
40 
41  real(dp), dimension(:), pointer, contiguous :: gwfflowja => null() !< gwfflowja for the interface model
42  real(dp), dimension(:), pointer, contiguous :: gwfsat => null() !< gwfsat for the interface model
43  real(dp), dimension(:), pointer, contiguous :: gwfhead => null() !< gwfhead for the interface model
44  real(dp), dimension(:, :), pointer, contiguous :: gwfspdis => null() !< gwfspdis for the interface model
45 
46  real(dp), dimension(:), pointer, contiguous :: conc => null() !< pointer to concentration array
47  integer(I4B), dimension(:), pointer, contiguous :: icbound => null() !< store pointer to gwe ibound array
48 
49  integer(I4B) :: iout = 0 !< the list file for the interface model
50 
51  contains
52 
53  procedure, pass(this) :: gwegweconnection_ctor
54  generic, public :: construct => gwegweconnection_ctor
55 
56  procedure :: exg_ar => gwegwecon_ar
57  procedure :: exg_df => gwegwecon_df
58  procedure :: exg_rp => gwegwecon_rp
59  procedure :: exg_ad => gwegwecon_ad
60  procedure :: exg_fc => gwegwecon_fc
61  procedure :: exg_da => gwegwecon_da
62  procedure :: exg_cq => gwegwecon_cq
63  procedure :: exg_bd => gwegwecon_bd
64  procedure :: exg_ot => gwegwecon_ot
65 
66  ! overriding 'protected'
67  procedure :: validateconnection
68 
69  ! local stuff
70  procedure, private :: allocate_scalars
71  procedure, private :: allocate_arrays
72  procedure, private :: cfg_dist_vars
73  procedure, private :: setgridextent
74  procedure, private :: setflowtoexchange
75 
76  end type gwegweconnectiontype
77 
78 contains
79 
80  !> @brief Basic construction of the connection
81  !<
82  subroutine gwegweconnection_ctor(this, model, gweEx)
83  ! -- modules
84  use inputoutputmodule, only: openfile
85  ! -- dummy
86  class(gwegweconnectiontype) :: this !< the connection
87  class(numericalmodeltype), pointer :: model !< the model owning this connection,
88  !! this must be a GweModelType
89  class(disconnexchangetype), pointer :: gweEx !< the GWE-GWE exchange the interface model is created for
90  ! -- local
91  character(len=LINELENGTH) :: fname
92  character(len=LENCOMPONENTNAME) :: name
93  class(*), pointer :: objPtr
94  logical(LGP) :: write_ifmodel_listfile = .false.
95  !
96  objptr => model
97  this%gweModel => castasgwemodel(objptr)
98  objptr => gweex
99  this%gweExchange => castasgweexchange(objptr)
100  !
101  if (gweex%v_model1%is_local .and. gweex%v_model2%is_local) then
102  this%owns_exchange = associated(model, gweex%model1)
103  else
104  this%owns_exchange = .true.
105  end if
106  !
107  if (gweex%v_model1 == model) then
108  write (name, '(a,i0)') 'GWECON1_', gweex%id
109  else
110  write (name, '(a,i0)') 'GWECON2_', gweex%id
111  end if
112  !
113  ! -- .lst file for interface model
114  if (write_ifmodel_listfile) then
115  fname = trim(name)//'.im.lst'
116  call openfile(this%iout, 0, fname, 'LIST', filstat_opt='REPLACE')
117  write (this%iout, '(4a)') 'Creating GWE-GWE connection for model ', &
118  trim(this%gweModel%name), 'from exchange ', &
119  trim(gweex%name)
120  end if
121  !
122  ! -- First call base constructor
123  call this%SpatialModelConnectionType%spatialConnection_ctor(model, &
124  gweex, &
125  name)
126  !
127  call this%allocate_scalars()
128  this%typename = 'GWE-GWE'
129  this%iIfaceAdvScheme = 0
130  this%iIfaceXt3d = 0
131  this%exgflowSign = 1
132  !
133  allocate (this%gweInterfaceModel)
134  this%interface_model => this%gweInterfaceModel
135  !
136  end subroutine gwegweconnection_ctor
137 
138  !> @brief Allocate scalar variables for this connection
139  !<
140  subroutine allocate_scalars(this)
141  ! -- dummy
142  class(gwegweconnectiontype) :: this !< the connection
143  !
144  call mem_allocate(this%iIfaceAdvScheme, 'IADVSCHEME', this%memoryPath)
145  call mem_allocate(this%iIfaceXt3d, 'IXT3D', this%memoryPath)
146  call mem_allocate(this%exgflowSign, 'EXGFLOWSIGN', this%memoryPath)
147  !
148  end subroutine allocate_scalars
149 
150  !> @brief define the GWE-GWE connection
151  !<
152  subroutine gwegwecon_df(this)
153  ! -- dummy
154  class(gwegweconnectiontype) :: this !< the connection
155  ! -- local
156  character(len=LENCOMPONENTNAME) :: imName
157 
158  ! -- Determine advection scheme (the GWE-GWE exchange
159  ! has been read at this point)
160  this%iIfaceAdvScheme = this%gweExchange%iAdvScheme
161  !
162  ! -- Determine xt3d setting on interface
163  this%iIfaceXt3d = this%gweExchange%ixt3d
164 
165  ! -- Turn off when off in the owning model
166  if (this%gweModel%incnd > 0) then
167  this%iIfaceXt3d = this%gweModel%cnd%ixt3d
168  end if
169 
170  ! -- Determine the required size of the interface model grid
171  call this%setGridExtent()
172 
173  ! -- Now set up the GridConnection
174  call this%spatialcon_df()
175 
176  ! -- We have to 'catch up' and create the interface model
177  ! here, then the remainder of this routine will be define
178  if (this%prim_exchange%v_model1 == this%owner) then
179  write (imname, '(a,i0)') 'GWEIM1_', this%gweExchange%id
180  else
181  write (imname, '(a,i0)') 'GWEIM2_', this%gweExchange%id
182  end if
183  call this%gweInterfaceModel%gweifmod_cr(imname, &
184  this%iout, &
185  this%ig_builder)
186  call this%gweInterfaceModel%set_idsoln(this%gweModel%idsoln)
187  this%gweInterfaceModel%iAdvScheme = this%iIfaceAdvScheme
188  this%gweInterfaceModel%ixt3d = this%iIfaceXt3d
189  call this%gweInterfaceModel%model_df()
190 
191  call this%cfg_dist_vars()
192 
193  call this%allocate_arrays()
194  call this%gweInterfaceModel%allocate_fmi()
195 
196  ! -- Connect X, RHS, IBOUND, and flowja
197  call this%spatialcon_setmodelptrs()
198 
199  ! -- Connect pointers (used by BUY)
200  this%conc => this%gweInterfaceModel%x
201  this%icbound => this%gweInterfaceModel%ibound
202 
203  ! -- Add connections from the interface model to solution matrix
204  call this%spatialcon_connect()
205 
206  end subroutine gwegwecon_df
207 
208  !> @brief Configure distributed variables for this interface model
209  !<
210  subroutine cfg_dist_vars(this)
211  ! -- dummy
212  class(gwegweconnectiontype) :: this !< the connection
213  !
214  call this%cfg_dv('X', '', sync_nds, &
216  call this%cfg_dv('IBOUND', '', sync_nds, (/stg_bfr_con_ar/))
217  call this%cfg_dv('TOP', 'DIS', sync_nds, (/stg_bfr_con_ar/))
218  call this%cfg_dv('BOT', 'DIS', sync_nds, (/stg_bfr_con_ar/))
219  call this%cfg_dv('AREA', 'DIS', sync_nds, (/stg_bfr_con_ar/))
220  !
221  if (this%gweInterfaceModel%cnd%idisp > 0) then
222  call this%cfg_dv('ALH', 'CND', sync_nds, (/stg_bfr_con_ar/))
223  call this%cfg_dv('ALV', 'CND', sync_nds, (/stg_bfr_con_ar/))
224  call this%cfg_dv('ATH1', 'CND', sync_nds, (/stg_bfr_con_ar/))
225  call this%cfg_dv('ATH2', 'CND', sync_nds, (/stg_bfr_con_ar/))
226  call this%cfg_dv('ATV', 'CND', sync_nds, (/stg_bfr_con_ar/))
227  call this%cfg_dv('KTW', 'CND', sync_nds, (/stg_bfr_con_ar/))
228  call this%cfg_dv('KTS', 'CND', sync_nds, (/stg_bfr_con_ar/))
229  end if
230  call this%cfg_dv('GWFHEAD', 'FMI', sync_nds, (/stg_bfr_exg_ad/))
231  call this%cfg_dv('GWFSAT', 'FMI', sync_nds, (/stg_bfr_exg_ad/))
232  call this%cfg_dv('GWFSPDIS', 'FMI', sync_nds, (/stg_bfr_exg_ad/))
233  call this%cfg_dv('GWFFLOWJA', 'FMI', sync_con, (/stg_bfr_exg_ad/))
234  call this%cfg_dv('GWFFLOWJA', 'FMI', sync_exg, (/stg_bfr_exg_ad/), &
235  exg_var_name='GWFSIMVALS')
236  ! -- Fill porosity from est packages, needed for cnd
237  if (this%gweModel%incnd > 0 .and. this%gweModel%inest > 0) then
238  call this%cfg_dv('POROSITY', 'EST', sync_nds, (/stg_aft_con_ar/))
239  end if
240  !
241  end subroutine cfg_dist_vars
242 
243  !> @brief Allocate array variables for this connection
244  !<
245  subroutine allocate_arrays(this)
246  class(gwegweconnectiontype) :: this !< the connection
247 
248  call mem_allocate(this%exgflowjaGwe, this%ig_builder%nrOfBoundaryCells, &
249  'EXGFLOWJAGWT', this%memoryPath)
250 
251  end subroutine allocate_arrays
252 
253  !> @brief Set required extent of the interface grid from
254  !< the configuration
255  subroutine setgridextent(this)
256  ! -- dummy
257  class(gwegweconnectiontype) :: this !< the connection
258  ! -- local
259  logical(LGP) :: hasAdv, hasCnd
260  !
261  hasadv = this%gweModel%inadv > 0
262  hascnd = this%gweModel%incnd > 0
263  !
264  if (hasadv) then
265  if (this%iIfaceAdvScheme == 2) then
266  this%exg_stencil_depth = 2
267  if (this%gweModel%adv%iadvwt == 2) then
268  this%int_stencil_depth = 2
269  end if
270  end if
271  end if
272  !
273  if (hascnd) then
274  if (this%iIfaceXt3d > 0) then
275  this%exg_stencil_depth = 2
276  if (this%gweModel%cnd%ixt3d > 0) then
277  this%int_stencil_depth = 2
278  end if
279  end if
280  end if
281  !
282  end subroutine setgridextent
283 
284  !> @brief allocate and read/set the connection's data structures
285  !<
286  subroutine gwegwecon_ar(this)
287  class(gwegweconnectiontype) :: this !< the connection
288 
289  ! check if we can construct an interface model
290  ! NB: only makes sense after the models' allocate&read have been
291  ! called, which is why we do it here
292  call this%validateConnection()
293 
294  ! -- Allocate and read base
295  call this%spatialcon_ar()
296 
297  ! ... and now the interface model
298  call this%gweInterfaceModel%model_ar()
299 
300  ! -- Set a pointer in the interface model to the gwecommon data
301  if (this%gweModel%inest > 0) then
302  this%gweInterfaceModel%gwecommon%gwecpw = this%gweModel%gwecommon%gwecpw
303  this%gweInterfaceModel%gwecommon%gwerhow = this%gweModel%gwecommon%gwerhow
304  end if
305 
306  !-- Set the equation scaling factor in the interface model to that of
307  ! underlying GWE model
308  if (this%gweModel%incnd > 0) then
309  this%gweInterfaceModel%ieqnsclfac = this%gweModel%cnd%eqnsclfac
310  end if
311 
312  ! -- AR the movers and obs through the exchange
313  if (this%owns_exchange) then
314  !cdl implement this when MVT is ready
315  !cdl if (this%gweExchange%inmvt > 0) then
316  !cdl call this%gweExchange%mvt%mvt_ar()
317  !cdl end if
318  if (this%gweExchange%inobs > 0) then
319  call this%gweExchange%obs%obs_ar()
320  end if
321  end if
322 
323  end subroutine gwegwecon_ar
324 
325  !> @brief validate this connection prior to constructing
326  !< the interface model
327  subroutine validateconnection(this)
328  use simvariablesmodule, only: errmsg
330  class(gwegweconnectiontype) :: this !< this connection
331 
332  ! -- Base validation, the spatial/geometry part
333  call this%SpatialModelConnectionType%validateConnection()
334 
335  ! -- We cannot validate this (yet) in parallel mode
336  if (.not. this%gweExchange%v_model1%is_local) return
337  if (.not. this%gweExchange%v_model2%is_local) return
338 
339  ! -- GWE related matters
340  if ((this%gweExchange%gwemodel1%inadv > 0 .and. &
341  this%gweExchange%gwemodel2%inadv == 0) .or. &
342  (this%gweExchange%gwemodel2%inadv > 0 .and. &
343  this%gweExchange%gwemodel1%inadv == 0)) then
344  write (errmsg, '(1x,a,a,a)') 'Cannot connect GWE models in exchange ', &
345  trim(this%gweExchange%name), ' because one model is configured with ADV &
346  &and the other one is not'
347  call store_error(errmsg)
348  end if
349  !
350  if ((this%gweExchange%gwemodel1%incnd > 0 .and. &
351  this%gweExchange%gwemodel2%incnd == 0) .or. &
352  (this%gweExchange%gwemodel2%incnd > 0 .and. &
353  this%gweExchange%gwemodel1%incnd == 0)) then
354  write (errmsg, '(1x,a,a,a)') 'Cannot connect GWE models in exchange ', &
355  trim(this%gweExchange%name), ' because one model is configured with CND &
356  &and the other one is not'
357  call store_error(errmsg)
358  end if
359  !
360  ! Abort on errors
361  if (count_errors() > 0) then
362  write (errmsg, '(a)') 'Errors occurred while processing exchange(s)'
363  call ustop()
364  end if
365  !
366  end subroutine validateconnection
367 
368  subroutine gwegwecon_rp(this)
369  ! -- dummy
370  class(gwegweconnectiontype) :: this !< the connection
371  !
372  ! Call exchange rp routines
373  if (this%owns_exchange) then
374  call this%gweExchange%exg_rp()
375  end if
376  !
377  end subroutine gwegwecon_rp
378 
379  !> @brief Advance this connection
380  !<
381  subroutine gwegwecon_ad(this)
382  !
383  class(gwegweconnectiontype) :: this !< this connection
384  !
385  ! -- Recalculate conduction ellipse
386  if (this%gweInterfaceModel%incnd > 0) call this%gweInterfaceModel%cnd%cnd_ad()
387  !
388  if (this%owns_exchange) then
389  call this%gweExchange%exg_ad()
390  end if
391  !
392  end subroutine gwegwecon_ad
393 
394  subroutine gwegwecon_fc(this, kiter, matrix_sln, rhs_sln, inwtflag)
395  ! -- dummy
396  class(gwegweconnectiontype) :: this !< the connection
397  integer(I4B), intent(in) :: kiter !< the iteration counter
398  class(matrixbasetype), pointer :: matrix_sln !< the system matrix
399  real(DP), dimension(:), intent(inout) :: rhs_sln !< global right-hand-side
400  integer(I4B), optional, intent(in) :: inwtflag !< newton-raphson flag
401  !
402  call this%SpatialModelConnectionType%spatialcon_fc( &
403  kiter, matrix_sln, rhs_sln, inwtflag)
404  !
405  ! FC the movers through the exchange
406  if (this%owns_exchange) then
407  if (this%gweExchange%inmvt > 0) then
408  call this%gweExchange%mvt%mvt_fc(this%gweExchange%gwemodel1%x, &
409  this%gweExchange%gwemodel2%x)
410  end if
411  end if
412  !
413  end subroutine gwegwecon_fc
414 
415  subroutine gwegwecon_cq(this, icnvg, isuppress_output, isolnid)
416  ! -- dummy
417  class(gwegweconnectiontype) :: this !< the connection
418  integer(I4B), intent(inout) :: icnvg !< convergence flag
419  integer(I4B), intent(in) :: isuppress_output !< suppress output when =1
420  integer(I4B), intent(in) :: isolnid !< solution id
421  !
422  call this%gweInterfaceModel%model_cq(icnvg, isuppress_output)
423  call this%setFlowToExchange()
424  !
425  end subroutine gwegwecon_cq
426 
427  !> @brief Set the flows (flowja from interface model) to the
428  !< simvals in the exchange, leaving the budget calcution in there
429  subroutine setflowtoexchange(this)
430  ! -- modules
431  use indexmapmodule
432  ! -- dummy
433  class(gwegweconnectiontype) :: this !< this connection
434  ! -- local
435  integer(I4B) :: i
436  class(gweexchangetype), pointer :: gweEx
437  type(indexmapsgntype), pointer :: map
438  !
439  if (this%owns_exchange) then
440  gweex => this%gweExchange
441  map => this%interface_map%exchange_maps(this%interface_map%prim_exg_idx)
442  !
443  ! -- Use (half of) the exchange map in reverse:
444  do i = 1, size(map%src_idx)
445  if (map%sign(i) < 0) cycle ! simvals is defined from exg%m1 => exg%m2
446  gweex%simvals(map%src_idx(i)) = &
447  this%gweInterfaceModel%flowja(map%tgt_idx(i))
448  end do
449  end if
450  !
451  end subroutine setflowtoexchange
452 
453  subroutine gwegwecon_bd(this, icnvg, isuppress_output, isolnid)
454  ! -- modules
455  use budgetmodule, only: rate_accumulator
456  ! -- dummy
457  class(gwegweconnectiontype) :: this !< the connection
458  integer(I4B), intent(inout) :: icnvg !< convergence flag
459  integer(I4B), intent(in) :: isuppress_output !< suppress output when =1
460  integer(I4B), intent(in) :: isolnid !< solution id
461  !
462  ! -- Call exchange budget routine, also calls bd
463  ! for movers.
464  if (this%owns_exchange) then
465  call this%gweExchange%exg_bd(icnvg, isuppress_output, isolnid)
466  end if
467  !
468  end subroutine gwegwecon_bd
469 
470  subroutine gwegwecon_ot(this)
471  ! -- dummy
472  class(gwegweconnectiontype) :: this !< the connection
473  !
474  ! -- Call exg_ot() here as it handles all output processing
475  ! based on gweExchange%simvals(:), which was correctly
476  ! filled from gwegwecon
477  if (this%owns_exchange) then
478  call this%gweExchange%exg_ot()
479  end if
480  !
481  end subroutine gwegwecon_ot
482 
483  subroutine gwegwecon_da(this)
484  ! -- dummy
485  class(gwegweconnectiontype) :: this !< the connection
486  ! -- local
487  logical(LGP) :: isOpen
488  !
489  ! -- Scalars
490  call mem_deallocate(this%iIfaceAdvScheme)
491  call mem_deallocate(this%iIfaceXt3d)
492  call mem_deallocate(this%exgflowSign)
493  !
494  ! -- Arrays
495  call mem_deallocate(this%exgflowjaGwe)
496  !
497  ! -- Interface model
498  call this%gweInterfaceModel%model_da()
499  deallocate (this%gweInterfaceModel)
500  !
501  ! -- Dealloc base
502  call this%spatialcon_da()
503  !
504  inquire (this%iout, opened=isopen)
505  if (isopen) then
506  close (this%iout)
507  end if
508  !
509  ! -- We need to deallocate the exchange we own:
510  if (this%owns_exchange) then
511  call this%gweExchange%exg_da()
512  end if
513  !
514  end subroutine gwegwecon_da
515 
516  !> @brief Cast to GweGweConnectionType
517  !<
518  function castasgwegweconnection(obj) result(res)
519  implicit none
520  ! -- dummy
521  class(*), pointer, intent(inout) :: obj !< object to be cast
522  ! -- return
523  class(gwegweconnectiontype), pointer :: res !< the GweGweConnection
524  !
525  res => null()
526  if (.not. associated(obj)) return
527  !
528  select type (obj)
529  class is (gwegweconnectiontype)
530  res => obj
531  end select
532  !
533  end function castasgwegweconnection
534 
535 end module
This module contains the BudgetModule.
Definition: Budget.f90:20
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
Definition: Budget.f90:664
This module contains simulation constants.
Definition: Constants.f90:9
integer(i4b), parameter linelength
maximum length of a standard line
Definition: Constants.f90:44
integer(i4b), parameter lencomponentname
maximum length of a component name
Definition: Constants.f90:18
real(dp), parameter dzero
real constant zero
Definition: Constants.f90:64
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
Definition: Constants.f90:36
integer(i4b) function, public getcsrindex(i, j, ia, ja)
Return index for element i,j in CSR storage,.
Definition: CsrUtils.f90:13
subroutine allocate_scalars(this)
Allocate scalars and initialize to defaults.
subroutine allocate_arrays(this)
Allocate array data, using the number of connected nodes.
integer(i4b), parameter, public sync_nds
synchronize over nodes
integer(i4b), parameter, public sync_exg
synchronize as exchange variable
integer(i4b), parameter, public sync_con
synchronize over connections
subroutine gwegwecon_fc(this, kiter, matrix_sln, rhs_sln, inwtflag)
subroutine gwegwecon_ot(this)
subroutine gwegwecon_ad(this)
Advance this connection.
subroutine gwegwecon_da(this)
subroutine setgridextent(this)
Set required extent of the interface grid from.
subroutine gwegwecon_rp(this)
subroutine gwegwecon_bd(this, icnvg, isuppress_output, isolnid)
subroutine gwegwecon_df(this)
define the GWE-GWE connection
class(gwegweconnectiontype) function, pointer, public castasgwegweconnection(obj)
Cast to GweGweConnectionType.
subroutine setflowtoexchange(this)
Set the flows (flowja from interface model) to the.
subroutine gwegwecon_ar(this)
allocate and read/set the connection's data structures
subroutine gwegwecon_cq(this, icnvg, isuppress_output, isolnid)
subroutine cfg_dist_vars(this)
Configure distributed variables for this interface model.
subroutine gwegweconnection_ctor(this, model, gweEx)
Basic construction of the connection.
subroutine validateconnection(this)
validate this connection prior to constructing
This module contains the GweGweExchangeModule Module.
Definition: exg-gwegwe.f90:10
class(gweexchangetype) function, pointer, public castasgweexchange(obj)
@ brief Cast polymorphic object as exchange
Definition: gwe.f90:3
class(gwemodeltype) function, pointer, public castasgwemodel(model)
Cast to GweModelType.
Definition: gwe.f90:836
subroutine, public openfile(iu, iout, fname, ftype, fmtarg_opt, accarg_opt, filstat_opt, mode_opt)
Open a file.
Definition: InputOutput.f90:30
This module defines variable data types.
Definition: kind.f90:8
This module contains simulation methods.
Definition: Sim.f90:10
subroutine, public ustop(stopmess, ioutlocal)
Stop the simulation.
Definition: Sim.f90:315
subroutine, public store_error(msg, terminate)
Store an error message.
Definition: Sim.f90:92
integer(i4b) function, public count_errors()
Return number of errors.
Definition: Sim.f90:59
integer(i4b), parameter, public stg_aft_con_ar
afterr connection allocate read
Definition: SimStages.f90:18
integer(i4b), parameter, public stg_bfr_exg_ad
before exchange advance (per solution)
Definition: SimStages.f90:21
integer(i4b), parameter, public stg_bfr_exg_cf
before exchange calculate (per solution)
Definition: SimStages.f90:22
integer(i4b), parameter, public stg_bfr_con_ar
before connection allocate read
Definition: SimStages.f90:17
This module contains simulation variables.
Definition: SimVariables.f90:9
character(len=maxcharlen) errmsg
error message string
Data structure to hold a global cell identifier, using a pointer to the model and its local cell.
Exchange based on connection between discretizations of DisBaseType. The data specifies the connectio...
Connects a GWE model to other GWE models in space. Derives from NumericalExchangeType so the solution...
Derived type for GwtExchangeType.
Definition: exg-gwegwe.f90:47
The GWE Interface Model is a utility to calculate the solution's exchange coefficients from the inter...
Class to manage spatial connection of a model to one or more models of the same type....