50 character(len=LENMODELNAME) :: gwfmodelname1 =
''
51 character(len=LENMODELNAME) :: gwfmodelname2 =
''
52 real(dp),
dimension(:),
pointer,
contiguous :: gwfsimvals => null()
59 integer(I4B),
pointer :: inewton => null()
60 integer(I4B),
pointer :: iadvscheme
64 integer(I4B),
pointer :: inmvt => null()
68 integer(I4B),
pointer :: inobs => null()
72 real(dp),
dimension(:),
pointer,
contiguous :: cond => null()
73 real(dp),
dimension(:),
pointer,
contiguous :: simvals => null()
118 character(len=*),
intent(in) :: filename
119 integer(I4B),
intent(in) :: id
120 character(len=*) :: name
121 integer(I4B),
intent(in) :: m1_id
122 integer(I4B),
intent(in) :: m2_id
123 character(len=*),
intent(in) :: input_mempath
128 integer(I4B) :: m1_index, m2_index
132 baseexchange => exchange
139 exchange%input_mempath = input_mempath
142 call exchange%allocate_scalars()
143 exchange%filename = filename
144 exchange%typename =
'GWT-GWT'
145 exchange%iAdvScheme = 0
150 mb => getbasemodelfromlist(basemodellist, m1_index)
151 if (m1_index > 0)
then
154 exchange%model1 => mb
155 exchange%gwtmodel1 => mb
162 if (m2_index > 0)
then
163 mb => getbasemodelfromlist(basemodellist, m2_index)
166 exchange%model2 => mb
167 exchange%gwtmodel2 => mb
173 if (.not.
associated(exchange%gwtmodel1) .and. m1_index > 0)
then
174 write (
errmsg,
'(3a)')
'Problem with GWT-GWT exchange ', &
175 trim(exchange%name), &
176 '. First specified GWT Model does not appear to be of the correct type.'
181 if (.not.
associated(exchange%gwtmodel2) .and. m2_index > 0)
then
182 write (
errmsg,
'(3a)')
'Problem with GWT-GWT exchange ', &
183 trim(exchange%name), &
184 '. Second specified GWT Model does not appear to be of the correct type.'
189 call obs_cr(exchange%obs, exchange%inobs)
206 write (
iout,
'(/a,a)')
' Creating exchange: ', this%name
209 if (this%v_model1%idsoln%get() /= this%v_model2%idsoln%get())
then
210 call store_error(
'Two models are connected in a GWT '// &
211 'exchange but they are in different solutions. '// &
212 'GWT models must be in same solution: '// &
213 trim(this%v_model1%name)//
' '// &
214 trim(this%v_model2%name))
219 call this%source_options(
iout)
222 call this%source_dimensions(
iout)
225 call this%allocate_arrays()
228 call this%source_data(
iout)
231 if (this%inmvt > 0)
then
232 call this%read_mvt(
iout)
233 if (this%v_model1%is_local)
then
234 call this%mvt%mvt_df(this%gwtmodel1%dis)
236 call this%mvt%mvt_df(this%gwtmodel2%dis)
241 call this%gwt_gwt_df_obs()
242 if (
associated(this%gwtmodel1))
then
243 call this%obs%obs_df(
iout, this%name,
'GWT-GWT', this%gwtmodel1%dis)
247 call this%validate_exchange()
257 if (this%gwfmodelname1 ==
'')
then
258 write (
errmsg,
'(3a)')
'GWT-GWT exchange ', trim(this%name), &
259 ' requires that GWFMODELNAME1 be entered in the &
263 if (this%gwfmodelname2 ==
'')
then
264 write (
errmsg,
'(3a)')
'GWT-GWT exchange ', trim(this%name), &
265 ' requires that GWFMODELNAME2 be entered in the &
271 if (this%v_model1 == this%v_model2)
then
272 if (this%ixt3d > 0)
then
273 write (
errmsg,
'(3a)')
'GWT-GWT exchange ', trim(this%name), &
274 ' is a periodic boundary condition which cannot'// &
275 ' be configured with XT3D'
283 if (
associated(this%gwtmodel1) .and.
associated(this%gwtmodel2))
then
284 if (this%gwtmodel1%indsp /= 0 .or. this%gwtmodel2%indsp /= 0)
then
285 if (this%ianglex == 0)
then
286 write (
errmsg,
'(3a)')
'GWT-GWT exchange ', trim(this%name), &
287 ' requires that ANGLDEGX be specified as an'// &
288 ' auxiliary variable because dispersion was '// &
289 'specified in one or both transport models.'
295 if (this%ixt3d > 0 .and. this%ianglex == 0)
then
296 write (
errmsg,
'(3a)')
'GWT-GWT exchange ', trim(this%name), &
297 ' requires that ANGLDEGX be specified as an'// &
298 ' auxiliary variable because XT3D is enabled'
316 if (this%inmvt > 0)
call this%mvt%mvt_ar()
319 call this%obs%obs_ar()
336 if (this%inmvt > 0)
call this%mvt%mvt_rp()
339 call this%gwt_gwt_rp_obs()
354 call this%obs%obs_ad()
359 integer(I4B),
intent(in) :: kiter
361 real(DP),
dimension(:),
pointer,
contiguous :: x_m1, x_m2
364 if (this%inmvt > 0)
then
367 if (
associated(this%gwtmodel1)) x_m1 => this%gwtmodel1%x
368 if (
associated(this%gwtmodel2)) x_m2 => this%gwtmodel2%x
369 call this%mvt%xmvt_cf(x_m1, x_m2)
378 subroutine gwt_gwt_fc(this, kiter, matrix_sln, rhs_sln, inwtflag)
381 integer(I4B),
intent(in) :: kiter
383 real(DP),
dimension(:),
intent(inout) :: rhs_sln
384 integer(I4B),
optional,
intent(in) :: inwtflag
386 real(DP),
dimension(:),
pointer,
contiguous :: x_m1, x_m2
389 if (this%inmvt > 0)
then
392 if (
associated(this%gwtmodel1)) x_m1 => this%gwtmodel1%x
393 if (
associated(this%gwtmodel2)) x_m2 => this%gwtmodel2%x
394 call this%mvt%mvt_fc(x_m1, x_m2)
402 subroutine gwt_gwt_bd(this, icnvg, isuppress_output, isolnid)
408 integer(I4B),
intent(inout) :: icnvg
409 integer(I4B),
intent(in) :: isuppress_output
410 integer(I4B),
intent(in) :: isolnid
412 character(len=LENBUDTXT),
dimension(1) :: budtxt
413 real(DP),
dimension(2, 1) :: budterm
414 real(DP) :: ratin, ratout
417 budtxt(1) =
' FLOW-JA-FACE'
423 if (
associated(this%gwtmodel1))
then
424 budterm(1, 1) = ratin
425 budterm(2, 1) = ratout
426 call this%gwtmodel1%model_bdentry(budterm, budtxt, this%name)
430 if (
associated(this%gwtmodel2))
then
431 budterm(1, 1) = ratout
432 budterm(2, 1) = ratin
433 call this%gwtmodel2%model_bdentry(budterm, budtxt, this%name)
437 if (this%inmvt > 0)
call this%mvt%mvt_bd()
448 integer(I4B) :: icbcfl, ibudfl
451 if (
associated(this%gwtmodel1))
then
452 call this%gwt_gwt_bdsav_model(this%gwtmodel1)
456 if (
associated(this%gwtmodel2))
then
457 call this%gwt_gwt_bdsav_model(this%gwtmodel2)
469 if (this%inobs /= 0)
then
470 call this%gwt_gwt_save_simvals()
486 character(len=LENBOUNDNAME) :: bname
487 character(len=LENPACKAGENAME + 4) :: packname
488 character(len=LENBUDTXT),
dimension(1) :: budtxt
491 character(len=20) :: nodestr
492 integer(I4B) :: ntabrows
493 integer(I4B) :: nodeu
494 integer(I4B) :: i, n1, n2, n1u, n2u
495 integer(I4B) :: ibinun
496 real(DP) :: ratin, ratout, rrate
497 logical(LGP) :: is_for_model1
498 integer(I4B) :: isuppress_output
499 real(DP),
dimension(this%naux) :: auxrow
503 budtxt(1) =
' FLOW-JA-FACE'
504 packname =
'EXG '//this%name
505 packname = adjustr(packname)
506 if (
associated(model, this%gwtmodel1))
then
507 output_tab => this%outputtab1
508 nbr_model => this%v_model2
509 is_for_model1 = .true.
511 output_tab => this%outputtab2
512 nbr_model => this%v_model1
513 is_for_model1 = .false.
517 if (this%iprflow /= 0)
then
520 if (model%oc%oc_save(
'BUDGET'))
then
521 call output_tab%set_title(packname)
525 call output_tab%set_kstpkper(
kstp,
kper)
534 if (this%v_model1%ibound%get(n1) /= 0 .and. &
535 this%v_model2%ibound%get(n2) /= 0)
then
536 ntabrows = ntabrows + 1
539 if (ntabrows > 0)
then
540 call output_tab%set_maxbound(ntabrows)
547 if (this%ipakcb /= 0)
then
548 ibinun = model%oc%oc_save_unit(
'BUDGET')
555 if (.not. model%oc%oc_save(
'BUDGET')) ibinun = 0
556 if (isuppress_output /= 0)
then
561 if (ibinun /= 0)
then
562 call model%dis%record_srcdst_list_header(budtxt(1), &
567 this%naux, this%auxname, &
580 if (this%inamedbound > 0)
then
581 bname = this%boundname(i)
592 if (this%v_model1%ibound%get(n1) /= 0 .and. &
593 this%v_model2%ibound%get(n2) /= 0)
then
594 rrate = this%simvals(i)
597 if (this%iprflow /= 0)
then
598 if (model%oc%oc_save(
'BUDGET'))
then
601 if (is_for_model1)
then
602 nodeu = model%dis%get_nodeuser(n1)
603 call model%dis%nodeu_to_string(nodeu, nodestr)
604 call output_tab%print_list_entry(i, trim(adjustl(nodestr)), &
607 nodeu = model%dis%get_nodeuser(n2)
608 call model%dis%nodeu_to_string(nodeu, nodestr)
609 call output_tab%print_list_entry(i, trim(adjustl(nodestr)), &
614 if (rrate <
dzero)
then
615 ratout = ratout - rrate
617 ratin = ratin + rrate
622 n1u = this%v_model1%dis_get_nodeuser(n1)
623 n2u = this%v_model2%dis_get_nodeuser(n2)
624 if (ibinun /= 0)
then
625 if (this%naux > 0)
then
626 auxrow(:) = this%auxvar(:, i)
628 if (is_for_model1)
then
629 call model%dis%record_mf6_list_entry( &
630 ibinun, n1u, n2u, rrate, this%naux, auxrow, &
633 call model%dis%record_mf6_list_entry( &
634 ibinun, n2u, n1u, -rrate, this%naux, auxrow, &
653 integer(I4B) :: iexg, n1, n2
654 integer(I4B) :: ibudfl
656 character(len=LINELENGTH) :: node1str, node2str
658 character(len=*),
parameter :: fmtheader = &
659 "(/1x, 'SUMMARY OF EXCHANGE RATES FOR EXCHANGE ', a, ' WITH ID ', i0, /, &
660 &2a16, 5a16, /, 112('-'))"
661 character(len=*),
parameter :: fmtheader2 = &
662 "(/1x, 'SUMMARY OF EXCHANGE RATES FOR EXCHANGE ', a, ' WITH ID ', i0, /, &
663 &2a16, 4a16, /, 96('-'))"
664 character(len=*),
parameter :: fmtdata = &
668 call this%gwt_gwt_bdsav()
671 if (this%iprflow /= 0)
then
672 write (
iout, fmtheader2) trim(adjustl(this%name)), this%id,
'NODEM1', &
673 'NODEM2',
'COND',
'X_M1',
'X_M2',
'FLOW'
674 do iexg = 1, this%nexg
675 n1 = this%nodem1(iexg)
676 n2 = this%nodem2(iexg)
677 flow = this%simvals(iexg)
678 call this%v_model1%dis_noder_to_string(n1, node1str)
679 call this%v_model2%dis_noder_to_string(n2, node2str)
680 write (
iout, fmtdata) trim(adjustl(node1str)), &
681 trim(adjustl(node2str)), &
682 this%cond(iexg), this%v_model1%x%get(n1), &
683 this%v_model2%x%get(n2), flow
690 if (this%inmvt > 0)
call this%mvt%mvt_ot_bdsummary(ibudfl)
693 call this%obs%obs_ot()
710 integer(I4B),
intent(in) :: iout
713 character(len=LENVARNAME),
dimension(4) :: adv_scheme = &
714 &[character(len=LENVARNAME) ::
'UPSTREAM',
'CENTRAL',
'TVD',
'UTVD']
715 character(len=linelength) :: mvt_fname
718 call mem_set_value(this%gwfmodelname1,
'GWFMODELNAME1', this%input_mempath, &
720 call mem_set_value(this%gwfmodelname2,
'GWFMODELNAME2', this%input_mempath, &
722 call mem_set_value(this%iAdvScheme,
'ADV_SCHEME', this%input_mempath, &
723 adv_scheme, found%adv_scheme)
724 call mem_set_value(this%ixt3d,
'DSP_XT3D_OFF', this%input_mempath, &
726 call mem_set_value(this%ixt3d,
'DSP_XT3D_RHS', this%input_mempath, &
729 write (iout,
'(1x,a)')
'PROCESSING GWT-GWT EXCHANGE OPTIONS'
732 call this%DisConnExchangeType%source_options(iout)
734 if (found%gwfmodelname1)
then
735 write (iout,
'(4x,a,a)') &
736 'GWFMODELNAME1 IS SET TO: ', trim(this%gwfmodelname1)
739 if (found%gwfmodelname2)
then
740 write (iout,
'(4x,a,a)') &
741 'GWFMODELNAME2 IS SET TO: ', trim(this%gwfmodelname2)
744 if (found%adv_scheme)
then
745 if (this%iAdvScheme == 0)
then
746 call store_error(
'Unrecognized input value for ADV_SCHEME option.')
750 this%iAdvScheme = this%iAdvScheme - 1
751 write (iout,
'(4x,a,a)') &
752 'ADVECTION SCHEME METHOD HAS BEEN SET TO: ', &
753 trim(adv_scheme(this%iAdvScheme + 1))
757 if (found%dsp_xt3d_off .and. found%dsp_xt3d_rhs)
then
758 errmsg =
'DSP_XT3D_OFF and DSP_XT3D_RHS cannot both be set as options.'
761 else if (found%dsp_xt3d_off)
then
763 write (iout,
'(4x,a)')
'XT3D FORMULATION HAS BEEN SHUT OFF.'
764 else if (found%dsp_xt3d_rhs)
then
766 write (iout,
'(4x,a)')
'XT3D RIGHT-HAND SIDE FORMULATION IS SELECTED.'
770 if (
filein_fname(mvt_fname,
'MVT6_FILENAME', this%input_mempath, &
773 call openfile(this%inmvt, iout, mvt_fname,
'MVT')
774 write (iout,
'(4x,a)') &
775 'WATER MOVER TRANSPORT INFORMATION WILL BE READ FROM ', trim(mvt_fname)
779 if (
filein_fname(this%obs%inputFilename,
'OBS6_FILENAME', &
780 this%input_mempath, this%filename))
then
781 this%obs%active = .true.
783 call openfile(this%obs%inUnitObs, iout, this%obs%inputFilename,
'OBS')
786 write (iout,
'(1x,a)')
'END OF GWT-GWT EXCHANGE OPTIONS'
798 integer(I4B),
intent(in) :: iout
803 tspmodel1 => this%gwtmodel1
804 tspmodel2 => this%gwtmodel2
805 call xmvt_cr(this%mvt, this%name, tspmodel1, tspmodel2, &
806 this%gwfmodelname1, this%gwfmodelname2, this%inmvt, iout)
821 call this%DisConnExchangeType%allocate_scalars()
823 call mem_allocate(this%inewton,
'INEWTON', this%memoryPath)
825 call mem_allocate(this%iAdvScheme,
'IADVSCHEME', this%memoryPath)
845 if (this%inmvt > 0)
then
846 call this%mvt%mvt_da()
847 deallocate (this%mvt)
849 call this%obs%obs_da()
850 deallocate (this%obs)
855 call mem_deallocate(this%gwfsimvals,
'GWFSIMVALS', this%memoryPath)
858 if (
associated(this%outputtab1))
then
859 call this%outputtab1%table_da()
860 deallocate (this%outputtab1)
861 nullify (this%outputtab1)
863 if (
associated(this%outputtab2))
then
864 call this%outputtab2%table_da()
865 deallocate (this%outputtab2)
866 nullify (this%outputtab2)
870 deallocate (this%filename)
877 call this%DisConnExchangeType%disconnex_da()
890 character(len=LINELENGTH) :: text
891 integer(I4B) :: ntabcol, i
893 call this%DisConnExchangeType%allocate_arrays()
895 call mem_allocate(this%cond, this%nexg,
'COND', this%memoryPath)
896 call mem_allocate(this%simvals, this%nexg,
'SIMVALS', this%memoryPath)
904 if (this%iprflow /= 0)
then
908 if (this%inamedbound > 0)
then
909 ntabcol = ntabcol + 1
914 if (this%v_model1%is_local)
then
915 call table_cr(this%outputtab1, this%name,
' ')
916 call this%outputtab1%table_df(this%nexg, ntabcol, this%gwtmodel1%iout, &
919 call this%outputtab1%initialize_column(text, 10, alignment=
tabcenter)
921 call this%outputtab1%initialize_column(text, 20, alignment=
tableft)
923 call this%outputtab1%initialize_column(text, 15, alignment=
tabcenter)
924 if (this%inamedbound > 0)
then
926 call this%outputtab1%initialize_column(text, 20, alignment=
tableft)
930 if (this%v_model2%is_local)
then
931 call table_cr(this%outputtab2, this%name,
' ')
932 call this%outputtab2%table_df(this%nexg, ntabcol, this%gwtmodel2%iout, &
935 call this%outputtab2%initialize_column(text, 10, alignment=
tabcenter)
937 call this%outputtab2%initialize_column(text, 20, alignment=
tableft)
939 call this%outputtab2%initialize_column(text, 15, alignment=
tabcenter)
940 if (this%inamedbound > 0)
then
942 call this%outputtab2%initialize_column(text, 20, alignment=
tableft)
960 call this%obs%StoreObsType(
'flow-ja-face', .true., indx)
977 character(len=LENBOUNDNAME) :: bname
980 10
format(
'Exchange "', a,
'" for observation "', a, &
981 '" is invalid in package "', a,
'"')
982 20
format(
'Exchange id "', i0,
'" for observation "', a, &
983 '" is invalid in package "', a,
'"')
985 do i = 1, this%obs%npakobs
986 obsrv => this%obs%pakobs(i)%obsrv
991 call obsrv%ResetObsIndex()
992 obsrv%BndFound = .false.
994 bname = obsrv%FeatureName
995 if (bname /=
'')
then
1000 if (this%inamedbound /= 0)
then
1002 if (this%boundname(j) == bname)
then
1004 obsrv%BndFound = .true.
1005 obsrv%CurrentTimeStepEndValue =
dzero
1006 call obsrv%AddObsIndex(j)
1010 if (.not. jfound)
then
1011 write (
errmsg, 10) trim(bname), trim(obsrv%ObsTypeId), trim(this%name)
1016 if (obsrv%intPak1 <= this%nexg .and. obsrv%intPak1 > 0)
then
1018 obsrv%BndFound = .true.
1019 obsrv%CurrentTimeStepEndValue =
dzero
1020 call obsrv%AddObsIndex(obsrv%intPak1)
1024 if (.not. jfound)
then
1025 write (
errmsg, 20) obsrv%intPak1, trim(obsrv%ObsTypeId), trim(this%name)
1054 logical(LGP) :: is_connected
1056 is_connected = .false.
1061 if (
associated(this%gwtmodel1, model))
then
1062 is_connected = .true.
1063 else if (
associated(this%gwtmodel2, model))
then
1064 is_connected = .true.
1081 logical(LGP) :: use_im
1103 integer(I4B) :: iexg
1108 if (this%obs%npakobs > 0)
then
1109 call this%obs%obs_bd_clear()
1110 do i = 1, this%obs%npakobs
1111 obsrv => this%obs%pakobs(i)%obsrv
1112 do j = 1, obsrv%indxbnds_count
1113 iexg = obsrv%indxbnds(j)
1115 select case (obsrv%ObsTypeId)
1116 case (
'FLOW-JA-FACE')
1117 n1 = this%nodem1(iexg)
1118 n2 = this%nodem2(iexg)
1119 v = this%simvals(iexg)
1121 errmsg =
'Unrecognized observation type: '// &
1122 trim(obsrv%ObsTypeId)
1126 call this%obs%SaveOneSimval(obsrv, v)
1145 integer(I4B),
intent(in) :: inunitobs
1146 integer(I4B),
intent(in) :: iout
1148 integer(I4B) :: n, iexg, istat
1149 integer(I4B) :: icol, istart, istop
1151 character(len=LINELENGTH) :: string
1153 string = obsrv%IDstring
1156 call urword(string, icol, istart, istop, 1, n, r, iout, inunitobs)
1157 read (string(istart:istop),
'(i10)', iostat=istat) iexg
1158 if (istat == 0)
then
1159 obsrv%intPak1 = iexg
1163 obsrv%FeatureName = trim(adjustl(string))
1167 obsrv%intPak1 = namedboundflag
1178 class(*),
pointer,
intent(inout) :: obj
1183 if (.not.
associated(obj))
return
1198 type(
listtype),
intent(inout) :: list
1199 integer(I4B),
intent(in) :: idx
1203 class(*),
pointer :: obj
1205 obj => list%GetItem(idx)
subroutine, public addbaseexchangetolist(list, exchange)
Add the exchange object (BaseExchangeType) to a list.
class(basemodeltype) function, pointer, public getbasemodelfromlist(list, idx)
This module contains the BudgetModule.
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
@ tabcenter
centered table column
@ tableft
left justified table column
integer(i4b), parameter lenmodelname
maximum length of the model name
integer(i4b), parameter lenpackagename
maximum length of the package name
integer(i4b), parameter namedboundflag
named bound flag
real(dp), parameter dnodata
real no data constant
integer(i4b), parameter lenvarname
maximum length of a variable name
integer(i4b), parameter lenauxname
maximum length of a aux variable
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
subroutine, public gnc_cr(gncobj, name_parent, inunit, iout)
Create new GNC exchange object.
This module contains the GwtGwtExchangeModule Module.
class(gwtexchangetype) function, pointer, public castasgwtexchange(obj)
@ brief Cast polymorphic object as exchange
subroutine allocate_scalars(this)
@ brief Allocate scalars
subroutine gwt_gwt_fc(this, kiter, matrix_sln, rhs_sln, inwtflag)
@ brief Fill coefficients
subroutine read_mvt(this, iout)
@ brief Read mover
subroutine gwt_gwt_df_obs(this)
@ brief Define observations
subroutine source_options(this, iout)
@ brief Source options
subroutine gwt_gwt_df(this)
@ brief Define GWT GWT exchange
subroutine gwt_gwt_process_obsid(obsrv, dis, inunitobs, iout)
@ brief Obs ID processor
subroutine, public gwtexchange_create(filename, name, id, m1_id, m2_id, input_mempath)
@ brief Create GWT GWT exchange
subroutine validate_exchange(this)
validate exchange data after reading
subroutine gwt_gwt_bdsav(this)
@ brief Budget save
subroutine gwt_gwt_fp(this)
@ brief Final processing
logical(lgp) function gwt_gwt_connects_model(this, model)
Return true when this exchange provides matrix coefficients for solving.
subroutine gwt_gwt_save_simvals(this)
@ brief Save simulated flow observations
subroutine gwt_gwt_ad(this)
@ brief Advance
subroutine gwt_gwt_rp_obs(this)
@ brief Read and prepare observations
subroutine gwt_gwt_bdsav_model(this, model)
@ brief Budget save
subroutine gwt_gwt_cf(this, kiter)
class(gwtexchangetype) function, pointer, public getgwtexchangefromlist(list, idx)
@ brief Get exchange from list
subroutine allocate_arrays(this)
@ brief Allocate arrays
subroutine gwt_gwt_ar(this)
@ brief Allocate and read
subroutine gwt_gwt_bd(this, icnvg, isuppress_output, isolnid)
@ brief Budget
logical(lgp) function use_interface_model(this)
Should interface model be used for this exchange.
subroutine gwt_gwt_rp(this)
@ brief Read and prepare
subroutine gwt_gwt_da(this)
@ brief Deallocate
subroutine gwt_gwt_ot(this)
@ brief Output
This module defines variable data types.
type(listtype), public basemodellist
type(listtype), public baseexchangelist
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
This module contains the derived types ObserveType and ObsDataType.
This module contains the derived type ObsType.
subroutine, public obs_cr(obs, inobs)
@ brief Create a new ObsType object
This module contains simulation methods.
subroutine, public ustop(stopmess, ioutlocal)
Stop the simulation.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
subroutine, public store_error_filename(filename, terminate)
Store the erroring file name.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
integer(i4b), dimension(:), allocatable model_loc_idx
equals the local index into the basemodel list (-1 when not available)
integer(i4b) iout
file unit number for simulation output
This module contains the SourceCommonModule.
logical(lgp) function, public filein_fname(filename, tagname, input_mempath, input_fname)
enforce and set a single input filename provided via FILEIN keyword
subroutine, public table_cr(this, name, title)
logical(lgp), pointer, public readnewdata
flag indicating time to read new data
integer(i4b), pointer, public kstp
current time step number
integer(i4b), pointer, public kper
current stress period number
This module contains the base transport model type.
subroutine, public xmvt_cr(mvt, name_exg, tsp_model1, tsp_model2, gwfmodelname1, gwfmodelname2, inunit, iout)
subroutine, public mvt_cr(mvt, name_model, inunit, iout, fmi1, eqnsclfac, depvartype, gwfmodelname1, gwfmodelname2, fmi2)
Highest level model type. All models extend this parent type.
This class is used to store a single deferred-length character string. It was designed to work in an ...
Exchange based on connection between discretizations of DisBaseType. The data specifies the connectio...
Derived type for GwtExchangeType.
A generic heterogeneous doubly-linked list.