31 character(len=LENMEMPATH) :: memorypath
32 character(len=LENMEMPATH) :: input_mempath =
''
33 character(len=LENMODELNAME),
pointer :: name_model => null()
34 character(len=LINELENGTH),
pointer :: input_fname => null()
35 character(len=LINELENGTH),
pointer :: output_fname => null()
36 integer(I4B),
pointer :: inunit => null()
37 integer(I4B),
pointer :: iout => null()
38 integer(I4B),
pointer :: nodes => null()
39 integer(I4B),
pointer :: nodesuser => null()
40 integer(I4B),
pointer :: nja => null()
41 integer(I4B),
pointer :: njas => null()
42 integer(I4B),
pointer :: lenuni => null()
43 integer(I4B),
pointer :: ndim => null()
44 integer(I4B),
pointer :: icondir => null()
45 integer(I4B),
pointer :: nogrb => null()
46 real(dp),
dimension(:),
pointer,
contiguous :: xc => null()
47 real(dp),
dimension(:),
pointer,
contiguous :: yc => null()
48 real(dp),
pointer :: yorigin => null()
49 real(dp),
pointer :: xorigin => null()
50 real(dp),
pointer :: angrot => null()
51 integer(I4B),
dimension(:),
pointer,
contiguous :: mshape => null()
52 real(dp),
dimension(:),
pointer,
contiguous :: top => null()
53 real(dp),
dimension(:),
pointer,
contiguous :: bot => null()
54 real(dp),
dimension(:),
pointer,
contiguous :: area => null()
57 real(dp),
dimension(:),
pointer,
contiguous :: dbuff => null()
58 integer(I4B),
dimension(:),
pointer,
contiguous :: ibuff => null()
59 integer(I4B),
dimension(:),
pointer,
contiguous :: nodereduced => null()
60 integer(I4B),
dimension(:),
pointer,
contiguous :: nodeuser => null()
131 call store_error(
'Programmer error: dis_df must be overridden', &
141 integer(I4B),
intent(in) :: moffset
144 integer(I4B) :: i, j, ipos, iglo, jglo
147 do ipos = this%con%ia(i), this%con%ia(i + 1) - 1
148 j = this%con%ja(ipos)
151 call sparse%addconnection(iglo, jglo, 1)
157 subroutine dis_mc(this, moffset, idxglo, matrix_sln)
160 integer(I4B),
intent(in) :: moffset
161 integer(I4B),
dimension(:),
intent(inout) :: idxglo
164 integer(I4B) :: i, j, ipos, iglo, jglo
168 do ipos = this%con%ia(i), this%con%ia(i + 1) - 1
169 j = this%con%ja(ipos)
171 idxglo(ipos) = matrix_sln%get_position(iglo, jglo)
180 integer(I4B),
dimension(:),
intent(in) :: icelltype
182 integer(I4B),
dimension(:),
allocatable :: ict
183 integer(I4B) :: nu, nr
186 allocate (ict(this%nodesuser))
187 do nu = 1, this%nodesuser
188 nr = this%get_nodenumber(nu, 0)
190 ict(nu) = icelltype(nr)
196 if (this%nogrb == 0)
call this%write_grb(ict)
202 integer(I4B),
dimension(:),
intent(in) :: icelltype
203 call store_error(
'Programmer error: write_grb must be overridden', &
215 deallocate (this%name_model)
216 deallocate (this%input_fname)
217 deallocate (this%output_fname)
245 call this%con%con_da()
246 deallocate (this%con)
252 integer(I4B),
intent(in) :: nodeu
253 character(len=*),
intent(inout) :: str
255 call store_error(
'Programmer error: nodeu_to_string must be overridden', &
262 integer(I4B),
intent(in) :: nodeu
263 integer(I4B),
dimension(:),
intent(inout) :: arr
265 call store_error(
'Programmer error: nodeu_to_array must be overridden', &
272 integer(I4B),
intent(in) :: noder
273 integer(I4B) :: nodenumber
275 if (this%nodes < this%nodesuser)
then
276 nodenumber = this%nodeuser(noder)
284 integer(I4B),
intent(in) :: nodeu
285 integer(I4B),
intent(in) :: icheck
286 integer(I4B) :: nodenumber
289 call store_error(
'Programmer error: get_nodenumber_idx1 must be overridden', &
295 integer(I4B),
intent(in) :: k, j
296 integer(I4B),
intent(in) :: icheck
297 integer(I4B) :: nodenumber
300 call store_error(
'Programmer error: get_nodenumber_idx2 must be overridden', &
306 integer(I4B),
intent(in) :: k, i, j
307 integer(I4B),
intent(in) :: icheck
308 integer(I4B) :: nodenumber
311 call store_error(
'Programmer error: get_nodenumber_idx3 must be overridden', &
320 integer(I4B),
intent(in) :: noden
321 integer(I4B),
intent(in) :: nodem
322 integer(I4B),
intent(in) :: ihc
323 real(DP),
intent(inout) :: xcomp
324 real(DP),
intent(inout) :: ycomp
325 real(DP),
intent(inout) :: zcomp
326 integer(I4B),
intent(in) :: ipos
328 call store_error(
'Programmer error: connection_normal must be overridden', &
336 xcomp, ycomp, zcomp, conlen)
338 integer(I4B),
intent(in) :: noden
339 integer(I4B),
intent(in) :: nodem
340 logical,
intent(in) :: nozee
341 real(DP),
intent(in) :: satn
342 real(DP),
intent(in) :: satm
343 integer(I4B),
intent(in) :: ihc
344 real(DP),
intent(inout) :: xcomp
345 real(DP),
intent(inout) :: ycomp
346 real(DP),
intent(inout) :: zcomp
347 real(DP),
intent(inout) :: conlen
349 call store_error(
'Programmer error: connection_vector must be overridden', &
355 real(dp),
intent(in) :: x
356 real(dp),
intent(in) :: y
357 real(dp),
intent(in) :: xorigin
358 real(dp),
intent(in) :: yorigin
359 real(dp),
intent(in) :: angrot
360 real(dp),
intent(out) :: xglo
361 real(dp),
intent(out) :: yglo
370 if (ang /=
dzero)
then
371 xglo = x * cos(ang) - y * sin(ang)
372 yglo = x * sin(ang) + y * cos(ang)
376 xglo = xglo + xorigin
377 yglo = yglo + yorigin
383 character(len=*),
intent(out) :: dis_type
385 dis_type =
"Not implemented"
386 call store_error(
'Programmer error: get_dis_type must be overridden', &
394 integer(I4B) :: dis_enum
397 call store_error(
'Programmer error: get_dis_enum must be overridden', &
405 character(len=*),
intent(in) :: name_model
406 character(len=*),
intent(in) :: input_mempath
407 logical(LGP) :: found
413 allocate (this%name_model)
414 allocate (this%input_fname)
415 allocate (this%output_fname)
417 call mem_allocate(this%inunit,
'INUNIT', this%memoryPath)
420 call mem_allocate(this%nodesuser,
'NODESUSER', this%memoryPath)
422 call mem_allocate(this%icondir,
'ICONDIR', this%memoryPath)
424 call mem_allocate(this%xorigin,
'XORIGIN', this%memoryPath)
425 call mem_allocate(this%yorigin,
'YORIGIN', this%memoryPath)
426 call mem_allocate(this%angrot,
'ANGROT', this%memoryPath)
429 call mem_allocate(this%lenuni,
'LENUNI', this%memoryPath)
432 this%name_model = name_model
433 this%input_mempath = input_mempath
434 this%input_fname =
''
435 this%output_fname =
''
452 this%input_mempath, found)
454 this%input_mempath, found)
455 if (.not. found)
then
456 this%output_fname = trim(this%input_fname)//
'.grb'
466 call mem_allocate(this%mshape, this%ndim,
'MSHAPE', this%memoryPath)
467 call mem_allocate(this%xc, this%nodes,
'XC', this%memoryPath)
468 call mem_allocate(this%yc, this%nodes,
'YC', this%memoryPath)
469 call mem_allocate(this%top, this%nodes,
'TOP', this%memoryPath)
470 call mem_allocate(this%bot, this%nodes,
'BOT', this%memoryPath)
471 call mem_allocate(this%area, this%nodes,
'AREA', this%memoryPath)
474 this%mshape(1) = this%nodes
477 if (this%nodes < this%nodesuser)
then
478 isize = this%nodesuser
484 call mem_allocate(this%dbuff, isize,
'DBUFF', this%name_model)
485 call mem_allocate(this%ibuff, isize,
'IBUFF', this%name_model)
495 flag_string, allow_zero)
result(nodeu)
498 integer(I4B),
intent(inout) :: lloc
499 integer(I4B),
intent(inout) :: istart
500 integer(I4B),
intent(inout) :: istop
501 integer(I4B),
intent(in) :: in
502 integer(I4B),
intent(in) :: iout
503 character(len=*),
intent(inout) :: line
504 logical,
optional,
intent(in) :: flag_string
505 logical,
optional,
intent(in) :: allow_zero
506 integer(I4B) :: nodeu
509 call store_error(
'Programmer error: nodeu_from_string must be overridden', &
522 allow_zero)
result(nodeu)
525 character(len=*),
intent(inout) :: cellid
526 integer(I4B),
intent(in) :: inunit
527 integer(I4B),
intent(in) :: iout
528 logical,
optional,
intent(in) :: flag_string
529 logical,
optional,
intent(in) :: allow_zero
530 integer(I4B) :: nodeu
533 call store_error(
'Programmer error: nodeu_from_cellid must be overridden', &
545 flag_string)
result(noder)
548 integer(I4B),
intent(inout) :: lloc
549 integer(I4B),
intent(inout) :: istart
550 integer(I4B),
intent(inout) :: istop
551 integer(I4B),
intent(in) :: in
552 integer(I4B),
intent(in) :: iout
553 character(len=*),
intent(inout) :: line
554 logical,
optional,
intent(in) :: flag_string
555 integer(I4B) :: noder
557 integer(I4B) :: nodeu
558 character(len=LINELENGTH) :: nodestr
559 logical :: flag_string_local
561 if (
present(flag_string))
then
562 flag_string_local = flag_string
564 flag_string_local = .false.
566 nodeu = this%nodeu_from_string(lloc, istart, istop, in, iout, line, &
571 noder = this%get_nodenumber(nodeu, 0)
575 if (noder <= 0 .and. .not. flag_string_local)
then
576 call this%nodeu_to_string(nodeu, nodestr)
578 ' Cell is outside active grid domain: '// &
579 trim(adjustl(nodestr))
593 allow_zero)
result(noder)
595 integer(I4B) :: noder
598 character(len=*),
intent(inout) :: cellid
599 integer(I4B),
intent(in) :: inunit
600 integer(I4B),
intent(in) :: iout
601 logical,
optional,
intent(in) :: flag_string
602 logical,
optional,
intent(in) :: allow_zero
604 integer(I4B) :: nodeu
605 logical :: allowzerolocal
606 character(len=LINELENGTH) :: nodestr
607 logical :: flag_string_local
609 if (
present(flag_string))
then
610 flag_string_local = flag_string
612 flag_string_local = .false.
614 if (
present(allow_zero))
then
615 allowzerolocal = allow_zero
617 allowzerolocal = .false.
620 nodeu = this%nodeu_from_cellid(cellid, inunit, iout, flag_string_local, &
625 noder = this%get_nodenumber(nodeu, 0)
629 if (noder <= 0 .and. .not. flag_string_local)
then
630 call this%nodeu_to_string(nodeu, nodestr)
632 ' Cell is outside active grid domain: '// &
633 trim(adjustl(nodestr))
642 call store_error(
'Programmer error: supports_layers must be overridden', &
652 call store_error(
'Programmer error: get_ncpl must be overridden', &
662 integer(I4B),
intent(in) :: n
663 real(dp),
intent(in) :: x
674 thick = (tp - bt) * sat
682 integer(I4B),
intent(in) :: ic
683 real(DP),
allocatable,
intent(out) :: polyverts(:, :)
684 logical(LGP),
intent(in),
optional :: closed
686 errmsg =
'Programmer error: get_polyverts must be overridden'
695 character(len=*),
intent(inout) :: line
696 integer(I4B),
intent(inout) :: lloc
697 integer(I4B),
intent(inout) :: istart
698 integer(I4B),
intent(inout) :: istop
699 integer(I4B),
intent(in) :: in
700 integer(I4B),
intent(in) :: iout
701 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: iarray
702 character(len=*),
intent(in) :: aname
704 errmsg =
'Programmer error: read_int_array must be overridden'
713 character(len=*),
intent(inout) :: line
714 integer(I4B),
intent(inout) :: lloc
715 integer(I4B),
intent(inout) :: istart
716 integer(I4B),
intent(inout) :: istop
717 integer(I4B),
intent(in) :: in
718 integer(I4B),
intent(in) :: iout
719 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
720 character(len=*),
intent(in) :: aname
722 errmsg =
'Programmer error: read_dbl_array must be overridden'
730 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: ibuff1
731 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: ibuff2
733 integer(I4B) :: nodeu
734 integer(I4B) :: noder
736 do nodeu = 1, this%nodesuser
737 noder = this%get_nodenumber(nodeu, 0)
738 if (noder <= 0) cycle
739 ibuff2(noder) = ibuff1(nodeu)
747 real(DP),
dimension(:),
pointer,
contiguous,
intent(in) :: buff1
748 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: buff2
750 integer(I4B) :: nodeu
751 integer(I4B) :: noder
753 do nodeu = 1, this%nodesuser
754 noder = this%get_nodenumber(nodeu, 0)
755 if (noder <= 0) cycle
756 buff2(noder) = buff1(nodeu)
767 subroutine read_list(this, line_reader, in, iout, iprpak, nlist, &
768 inamedbound, iauxmultcol, nodelist, rlist, auxvar, &
769 auxname, boundname, label, pkgname, tsManager, iscloc, &
782 integer(I4B),
intent(in) :: in
783 integer(I4B),
intent(in) :: iout
784 integer(I4B),
intent(in) :: iprpak
785 integer(I4B),
intent(inout) :: nlist
786 integer(I4B),
intent(in) :: inamedbound
787 integer(I4B),
intent(in) :: iauxmultcol
788 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: nodelist
789 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: rlist
790 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: auxvar
791 character(len=LENAUXNAME),
dimension(:),
intent(inout) :: auxname
792 character(len=LENBOUNDNAME),
dimension(:),
pointer,
contiguous, &
793 intent(inout) :: boundname
794 character(len=*),
intent(in) :: label
795 character(len=*),
intent(in) :: pkgName
797 integer(I4B),
intent(in) :: iscloc
798 integer(I4B),
intent(in),
optional :: indxconvertflux
801 integer(I4B) :: nodeu, noder
802 character(len=LINELENGTH) :: nodestr
803 integer(I4B) :: ii, jj
804 real(DP),
pointer :: bndElem => null()
810 call lstrdobj%read_list(line_reader, in, iout, nlist, inamedbound, &
811 this%mshape, nodelist, rlist, auxvar, auxname, &
816 if (lstrdobj%ntxtrlist > 0)
then
817 do l = 1, lstrdobj%ntxtrlist
818 ii = lstrdobj%idxtxtrow(l)
819 jj = lstrdobj%idxtxtcol(l)
821 bndelem => rlist(jj, ii)
823 pkgname,
'BND', tsmanager, iprpak, &
825 if (
associated(tslinkbnd))
then
830 if (iauxmultcol > 0 .and. jj == iscloc)
then
831 tslinkbnd%RMultiplier => auxvar(iauxmultcol, ii)
835 if (lstrdobj%inamedbound == 1)
then
836 tslinkbnd%BndName = lstrdobj%boundname(tslinkbnd%IRow)
841 if (
present(indxconvertflux))
then
842 if (indxconvertflux == jj)
then
843 tslinkbnd%convertflux = .true.
845 noder = this%get_nodenumber(nodeu, 0)
846 tslinkbnd%CellArea = this%get_area(noder)
855 if (lstrdobj%ntxtauxvar > 0)
then
856 do l = 1, lstrdobj%ntxtauxvar
857 ii = lstrdobj%idxtxtauxrow(l)
858 jj = lstrdobj%idxtxtauxcol(l)
860 bndelem => auxvar(jj, ii)
862 pkgname,
'AUX', tsmanager, iprpak, &
864 if (lstrdobj%inamedbound == 1)
then
865 if (
associated(tslinkaux))
then
866 tslinkaux%BndName = lstrdobj%boundname(tslinkaux%IRow)
873 if (iauxmultcol > 0)
then
875 rlist(iscloc, l) = rlist(iscloc, l) * auxvar(iauxmultcol, l)
880 if (iprpak /= 0)
then
881 call lstrdobj%write_list()
887 if (this%nodes < this%nodesuser)
then
890 noder = this%get_nodenumber(nodeu, 0)
892 call this%nodeu_to_string(nodeu, nodestr)
894 ' Cell is outside active grid domain: '// &
895 trim(adjustl(nodestr))
916 icolbnd, aname, inunit, iout)
919 integer(I4B),
intent(in) :: ncolbnd
920 integer(I4B),
intent(in) :: maxbnd
921 integer(I4B),
dimension(maxbnd) :: nodelist
922 real(DP),
dimension(ncolbnd, maxbnd),
intent(inout) :: darray
923 integer(I4B),
intent(in) :: icolbnd
924 character(len=*),
intent(in) :: aname
925 integer(I4B),
intent(in) :: inunit
926 integer(I4B),
intent(in) :: iout
928 errmsg =
'Programmer error: read_layer_array must be overridden'
937 cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
940 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
941 integer(I4B),
intent(in) :: iout
942 integer(I4B),
intent(in) :: iprint
943 integer(I4B),
intent(in) :: idataun
944 character(len=*),
intent(in) :: aname
945 character(len=*),
intent(in) :: cdatafmp
946 integer(I4B),
intent(in) :: nvaluesp
947 integer(I4B),
intent(in) :: nwidthp
948 character(len=*),
intent(in) :: editdesc
949 real(DP),
intent(in) :: dinact
951 errmsg =
'Programmer error: record_array must be overridden'
959 real(DP),
dimension(:),
intent(in) :: flowja
960 integer(I4B),
intent(in) :: ibinun
961 integer(I4B),
intent(in) :: iout
963 character(len=16),
dimension(1) :: text
965 data text(1)/
' FLOW-JA-FACE'/
968 call ubdsv1(
kstp,
kper, text(1), ibinun, flowja,
size(flowja), 1, 1, &
976 integer(I4B),
intent(in) :: noder
977 character(len=*),
intent(inout) :: str
979 integer(I4B) :: nodeu
981 nodeu = this%get_nodeuser(noder)
982 call this%nodeu_to_string(nodeu, str)
989 integer(I4B),
intent(in) :: noder
990 integer(I4B),
dimension(:),
intent(inout) :: arr
992 integer(I4B) :: nodeu
994 nodeu = this%get_nodeuser(noder)
995 call this%nodeu_to_array(nodeu, arr)
1000 dstmodel, dstpackage, naux, auxtxt, &
1001 ibdchn, nlist, iout)
1003 character(len=16),
intent(in) :: text
1004 character(len=16),
intent(in) :: textmodel
1005 character(len=16),
intent(in) :: textpackage
1006 character(len=16),
intent(in) :: dstmodel
1007 character(len=16),
intent(in) :: dstpackage
1008 integer(I4B),
intent(in) :: naux
1009 character(len=16),
dimension(:),
intent(in) :: auxtxt
1010 integer(I4B),
intent(in) :: ibdchn
1011 integer(I4B),
intent(in) :: nlist
1012 integer(I4B),
intent(in) :: iout
1014 errmsg =
'Programmer error: record_srcdst_list_header must be overridden'
1020 naux, aux, olconv, olconv2)
1023 integer(I4B),
intent(in) :: ibdchn
1024 integer(I4B),
intent(in) :: noder
1025 integer(I4B),
intent(in) :: noder2
1026 real(DP),
intent(in) :: q
1027 integer(I4B),
intent(in) :: naux
1028 real(DP),
dimension(naux),
intent(in) :: aux
1029 logical,
optional,
intent(in) :: olconv
1030 logical,
optional,
intent(in) :: olconv2
1034 integer(I4B) :: nodeu
1035 integer(I4B) :: nodeu2
1038 if (
present(olconv))
then
1044 nodeu = this%get_nodeuser(noder)
1048 if (
present(olconv2))
then
1054 nodeu2 = this%get_nodeuser(noder2)
1058 call ubdsvd(ibdchn, nodeu, nodeu2, q, naux, aux)
1067 integer(I4B),
intent(in) :: maxbnd
1068 integer(I4B),
dimension(:),
pointer,
contiguous :: darray
1069 integer(I4B),
dimension(maxbnd),
intent(inout) :: nodelist
1070 integer(I4B),
intent(inout) :: nbound
1071 character(len=*),
intent(in) :: aname
1073 errmsg =
'Programmer error: nlarray_to_nodelist must be overridden'
1081 integer(I4B),
intent(inout) :: n
1082 integer(I4B),
dimension(:),
intent(in) :: ibound
1084 integer(I4B) :: m, ii, iis
1085 logical done, bottomcell
1090 do while (.not. done)
1092 cloop:
do ii = this%con%ia(n) + 1, this%con%ia(n + 1) - 1
1094 iis = this%con%jas(ii)
1095 if (this%con%ihc(iis) == 0 .and. m > n)
then
1098 bottomcell = .false.
1101 if (ibound(m) /= 0)
then
1111 if (bottomcell) done = .true.
1119 integer(I4B),
intent(inout) :: n
1120 real(DP),
dimension(:),
intent(in) :: sat
1122 integer(I4B) :: m, ii, iis
1123 logical(LGP) :: is_done, bottomcell
1128 do while (.not. is_done)
1130 cloop:
do ii = this%con%ia(n) + 1, this%con%ia(n + 1) - 1
1132 iis = this%con%jas(ii)
1133 if (this%con%ihc(iis) == 0 .and. m > n)
then
1136 bottomcell = .false.
1139 if (sat(m) >
dzero)
then
1149 if (bottomcell) is_done = .true.
1156 integer(I4B),
intent(in) :: node
1159 area = this%area(node)
1173 real(dp) :: area_factor
1176 integer(I4B),
intent(in) :: node
1177 integer(I4B),
intent(in) :: idx_conn
1179 real(dp) :: area_node
1180 real(dp) :: area_conn
1183 area_node = this%area(node)
1184 area_conn = this%con%hwva(idx_conn)
1187 area_factor = area_conn / area_node
1200 integer(I4B),
intent(in) :: n
1201 integer(I4B),
intent(in) :: m
1202 integer(I4B),
intent(in) :: idx_conn
1203 real(DP),
intent(out) :: width_n
1204 real(DP),
intent(out) :: width_m
1206 integer(I4B) :: isympos
1209 isympos = this%con%jas(idx_conn)
1210 width_n = this%con%hwva(isympos)
1222 select case (this%get_dis_enum())
1235 select case (this%get_dis_enum())
1248 select case (this%get_dis_enum())
real(dp) function get_area(this, node)
Return the cell area for the given node.
subroutine dis_df(this)
Define the discretization.
subroutine noder_to_string(this, noder, str)
Convert reduced node number to string (nodenumber), (k,j) or (k,i,j)
integer(i4b) function get_nodenumber_idx2(this, k, j, icheck)
real(dp) function get_area_factor(this, node, idx_conn)
@ brief Calculate the area factor for the cell connection
subroutine read_layer_array(this, nodelist, darray, ncolbnd, maxbnd, icolbnd, aname, inunit, iout)
Read a 2d double array into col icolbnd of darray.
integer(i4b) function nodeu_from_string(this, lloc, istart, istop, in, iout, line, flag_string, allow_zero)
Convert a string to a user nodenumber.
subroutine allocate_scalars(this, name_model, input_mempath)
Allocate and initialize scalar variables.
subroutine dis_mc(this, moffset, idxglo, matrix_sln)
Map cell connections in the numerical solution coefficient matrix.
logical(lgp) function is_1d(this)
@Brief return true if grid is one dimensional
subroutine highest_active(this, n, ibound)
Find the first highest active cell beneath cell n.
subroutine record_array(this, darray, iout, iprint, idataun, aname, cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
Record a double precision array.
subroutine record_srcdst_list_header(this, text, textmodel, textpackage, dstmodel, dstpackage, naux, auxtxt, ibdchn, nlist, iout)
Record list header for imeth=6.
integer(i4b) function get_nodenumber_idx3(this, k, i, j, icheck)
subroutine record_srcdst_list_entry(this, ibdchn, noder, noder2, q, naux, aux, olconv, olconv2)
Record list header.
subroutine write_grb(this, icelltype)
Write a binary grid file.
subroutine, public dis_transform_xy(x, y, xorigin, yorigin, angrot, xglo, yglo)
Get global (x, y) coordinates from cell-local coordinates.
subroutine read_int_array(this, line, lloc, istart, istop, iout, in, iarray, aname)
Read an integer array.
logical(lgp) function is_3d(this)
@Brief return true if grid is three dimensional
logical function supports_layers(this)
Indicates whether the grid discretization supports layers.
subroutine connection_normal(this, noden, nodem, ihc, xcomp, ycomp, zcomp, ipos)
Get normal vector components between the cell and a given neighbor. The normal points outward from th...
subroutine nodeu_to_string(this, nodeu, str)
Convert a user nodenumber to a string (nodenumber), (k,j), or (k,i,j)
integer(i4b) function noder_from_string(this, lloc, istart, istop, in, iout, line, flag_string)
Convert a string to a reduced nodenumber.
subroutine fill_int_array(this, ibuff1, ibuff2)
Fill an integer array.
subroutine get_polyverts(this, ic, polyverts, closed)
Get a 2D array of polygon vertices, listed in clockwise order beginning with the lower left corner.
subroutine dis_da(this)
@brier Deallocate variables
subroutine fill_dbl_array(this, buff1, buff2)
Fill a double precision array.
subroutine dis_ac(this, moffset, sparse)
Add connections to sparse cell connectivity matrix.
subroutine record_connection_array(this, flowja, ibinun, iout)
Record a connection-based double precision array.
subroutine nodeu_to_array(this, nodeu, arr)
Convert a user nodenumber to an array (nodenumber), (k,j), or (k,i,j)
integer(i4b) function get_nodenumber_idx1(this, nodeu, icheck)
integer(i4b) function nodeu_from_cellid(this, cellid, inunit, iout, flag_string, allow_zero)
Convert a cellid string to a user nodenumber.
subroutine highest_saturated(this, n, sat)
Find the first saturated cell beneath cell n.
logical(lgp) function is_2d(this)
@Brief return true if grid is two dimensional
subroutine noder_to_array(this, noder, arr)
Convert reduced node number to array (nodenumber), (k,j) or (k,i,j)
subroutine get_dis_type(this, dis_type)
Get the discretization type (DIS, DISV, or DISU)
integer(i4b) function get_nodeuser(this, noder)
Convert a reduced nodenumber to a user node number.
subroutine get_flow_width(this, n, m, idx_conn, width_n, width_m)
@ brief Calculate the flow width between two cells
subroutine read_dbl_array(this, line, lloc, istart, istop, iout, in, darray, aname)
Read a double precision array.
subroutine dis_ar(this, icelltype)
Allocate and setup variables, and write binary grid file.
subroutine allocate_arrays(this)
Allocate and initialize arrays.
integer(i4b) function get_dis_enum(this)
Get the discretization type enumeration.
integer(i4b) function noder_from_cellid(this, cellid, inunit, iout, flag_string, allow_zero)
Convert cellid string to reduced nodenumber.
subroutine nlarray_to_nodelist(this, darray, nodelist, maxbnd, nbound, aname)
Convert an integer array to nodelist.
integer(i4b) function get_ncpl(this)
Return number of cells per layer. This is nodes for a DISU grid, as there are no layers.
real(dp) function get_cell_volume(this, n, x)
Return volume of cell n based on x value passed.
subroutine read_list(this, line_reader, in, iout, iprpak, nlist, inamedbound, iauxmultcol, nodelist, rlist, auxvar, auxname, boundname, label, pkgname, tsManager, iscloc, indxconvertflux)
Read a list using the list reader.
subroutine connection_vector(this, noden, nodem, nozee, satn, satm, ihc, xcomp, ycomp, zcomp, conlen)
Get unit vector components between the cell and a given neighbor. Saturation must be provided to comp...
This module contains block parser methods.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter lenmodelname
maximum length of the model name
@ disu
DISV6 discretization.
@ dis
DIS6 discretization.
@ dis1d
DIS1D6 discretization.
@ disv2d
DISV2D6 discretization.
@ disv1d
DISV1D6 discretization.
@ dis2d
DIS2D6 discretization.
@ disv
DISU6 discretization.
@ disu1d
DISU1D6 discretization.
@ disundef
undefined discretization
@ disu2d
DISU2D6 discretization.
integer(i4b), parameter lenauxname
maximum length of a aux variable
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dpio180
real constant
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenmempath
maximum length of the memory path
This module defines variable data types.
Generic List Reader Module.
This module contains the LongLineReaderType.
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
This module contains simulation methods.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
subroutine, public store_error_unit(iunit, terminate)
Store the file unit number.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
real(dp) function squadraticsaturation(top, bot, x, eps)
@ brief sQuadraticSaturation
real(dp), pointer, public pertim
time relative to start of stress period
real(dp), pointer, public totim
time relative to start of simulation
integer(i4b), pointer, public kstp
current time step number
integer(i4b), pointer, public kper
current stress period number
real(dp), pointer, public delt
length of the current time step
subroutine, public read_value_or_time_series(textInput, ii, jj, bndElem, pkgName, auxOrBnd, tsManager, iprpak, tsLink)
Call this subroutine if the time-series link is available or needed.