27 character(len=LENMEMPATH) :: memorypath
28 character(len=LENMEMPATH) :: input_mempath =
''
29 character(len=LENMODELNAME),
pointer :: name_model => null()
30 character(len=LINELENGTH),
pointer :: input_fname => null()
31 integer(I4B),
pointer :: inunit => null()
32 integer(I4B),
pointer :: iout => null()
33 integer(I4B),
pointer :: nodes => null()
34 integer(I4B),
pointer :: nodesuser => null()
35 integer(I4B),
pointer :: nja => null()
36 integer(I4B),
pointer :: njas => null()
37 integer(I4B),
pointer :: lenuni => null()
38 integer(I4B),
pointer :: ndim => null()
39 integer(I4B),
pointer :: icondir => null()
40 integer(I4B),
pointer :: nogrb => null()
41 real(dp),
dimension(:),
pointer,
contiguous :: xc => null()
42 real(dp),
dimension(:),
pointer,
contiguous :: yc => null()
43 real(dp),
pointer :: yorigin => null()
44 real(dp),
pointer :: xorigin => null()
45 real(dp),
pointer :: angrot => null()
46 integer(I4B),
dimension(:),
pointer,
contiguous :: mshape => null()
47 real(dp),
dimension(:),
pointer,
contiguous :: top => null()
48 real(dp),
dimension(:),
pointer,
contiguous :: bot => null()
49 real(dp),
dimension(:),
pointer,
contiguous :: area => null()
52 real(dp),
dimension(:),
pointer,
contiguous :: dbuff => null()
53 integer(I4B),
dimension(:),
pointer,
contiguous :: ibuff => null()
54 integer(I4B),
dimension(:),
pointer,
contiguous :: nodereduced => null()
55 integer(I4B),
dimension(:),
pointer,
contiguous :: nodeuser => null()
123 call store_error(
'Programmer error: dis_df must be overridden', &
133 integer(I4B),
intent(in) :: moffset
136 integer(I4B) :: i, j, ipos, iglo, jglo
139 do ipos = this%con%ia(i), this%con%ia(i + 1) - 1
140 j = this%con%ja(ipos)
143 call sparse%addconnection(iglo, jglo, 1)
149 subroutine dis_mc(this, moffset, idxglo, matrix_sln)
152 integer(I4B),
intent(in) :: moffset
153 integer(I4B),
dimension(:),
intent(inout) :: idxglo
156 integer(I4B) :: i, j, ipos, iglo, jglo
160 do ipos = this%con%ia(i), this%con%ia(i + 1) - 1
161 j = this%con%ja(ipos)
163 idxglo(ipos) = matrix_sln%get_position(iglo, jglo)
172 integer(I4B),
dimension(:),
intent(in) :: icelltype
174 integer(I4B),
dimension(:),
allocatable :: ict
175 integer(I4B) :: nu, nr
178 allocate (ict(this%nodesuser))
179 do nu = 1, this%nodesuser
180 nr = this%get_nodenumber(nu, 0)
182 ict(nu) = icelltype(nr)
188 if (this%nogrb == 0)
call this%write_grb(ict)
194 integer(I4B),
dimension(:),
intent(in) :: icelltype
195 call store_error(
'Programmer error: write_grb must be overridden', &
207 deallocate (this%name_model)
208 deallocate (this%input_fname)
236 call this%con%con_da()
237 deallocate (this%con)
243 integer(I4B),
intent(in) :: nodeu
244 character(len=*),
intent(inout) :: str
246 call store_error(
'Programmer error: nodeu_to_string must be overridden', &
253 integer(I4B),
intent(in) :: nodeu
254 integer(I4B),
dimension(:),
intent(inout) :: arr
256 call store_error(
'Programmer error: nodeu_to_array must be overridden', &
263 integer(I4B),
intent(in) :: noder
264 integer(I4B) :: nodenumber
266 if (this%nodes < this%nodesuser)
then
267 nodenumber = this%nodeuser(noder)
275 integer(I4B),
intent(in) :: nodeu
276 integer(I4B),
intent(in) :: icheck
277 integer(I4B) :: nodenumber
280 call store_error(
'Programmer error: get_nodenumber_idx1 must be overridden', &
286 integer(I4B),
intent(in) :: k, j
287 integer(I4B),
intent(in) :: icheck
288 integer(I4B) :: nodenumber
291 call store_error(
'Programmer error: get_nodenumber_idx2 must be overridden', &
297 integer(I4B),
intent(in) :: k, i, j
298 integer(I4B),
intent(in) :: icheck
299 integer(I4B) :: nodenumber
302 call store_error(
'Programmer error: get_nodenumber_idx3 must be overridden', &
311 integer(I4B),
intent(in) :: noden
312 integer(I4B),
intent(in) :: nodem
313 integer(I4B),
intent(in) :: ihc
314 real(DP),
intent(inout) :: xcomp
315 real(DP),
intent(inout) :: ycomp
316 real(DP),
intent(inout) :: zcomp
317 integer(I4B),
intent(in) :: ipos
319 call store_error(
'Programmer error: connection_normal must be overridden', &
327 xcomp, ycomp, zcomp, conlen)
329 integer(I4B),
intent(in) :: noden
330 integer(I4B),
intent(in) :: nodem
331 logical,
intent(in) :: nozee
332 real(DP),
intent(in) :: satn
333 real(DP),
intent(in) :: satm
334 integer(I4B),
intent(in) :: ihc
335 real(DP),
intent(inout) :: xcomp
336 real(DP),
intent(inout) :: ycomp
337 real(DP),
intent(inout) :: zcomp
338 real(DP),
intent(inout) :: conlen
340 call store_error(
'Programmer error: connection_vector must be overridden', &
346 real(dp),
intent(in) :: x
347 real(dp),
intent(in) :: y
348 real(dp),
intent(in) :: xorigin
349 real(dp),
intent(in) :: yorigin
350 real(dp),
intent(in) :: angrot
351 real(dp),
intent(out) :: xglo
352 real(dp),
intent(out) :: yglo
361 if (ang /=
dzero)
then
362 xglo = x * cos(ang) - y * sin(ang)
363 yglo = x * sin(ang) + y * cos(ang)
367 xglo = xglo + xorigin
368 yglo = yglo + yorigin
374 character(len=*),
intent(out) :: dis_type
376 dis_type =
"Not implemented"
377 call store_error(
'Programmer error: get_dis_type must be overridden', &
385 integer(I4B) :: dis_enum
388 call store_error(
'Programmer error: get_dis_enum must be overridden', &
396 character(len=*),
intent(in) :: name_model
397 character(len=*),
intent(in) :: input_mempath
398 logical(LGP) :: found
404 allocate (this%name_model)
405 allocate (this%input_fname)
407 call mem_allocate(this%inunit,
'INUNIT', this%memoryPath)
410 call mem_allocate(this%nodesuser,
'NODESUSER', this%memoryPath)
412 call mem_allocate(this%icondir,
'ICONDIR', this%memoryPath)
414 call mem_allocate(this%xorigin,
'XORIGIN', this%memoryPath)
415 call mem_allocate(this%yorigin,
'YORIGIN', this%memoryPath)
416 call mem_allocate(this%angrot,
'ANGROT', this%memoryPath)
419 call mem_allocate(this%lenuni,
'LENUNI', this%memoryPath)
422 this%name_model = name_model
423 this%input_mempath = input_mempath
424 this%input_fname =
''
441 this%input_mempath, found)
450 call mem_allocate(this%mshape, this%ndim,
'MSHAPE', this%memoryPath)
451 call mem_allocate(this%xc, this%nodes,
'XC', this%memoryPath)
452 call mem_allocate(this%yc, this%nodes,
'YC', this%memoryPath)
453 call mem_allocate(this%top, this%nodes,
'TOP', this%memoryPath)
454 call mem_allocate(this%bot, this%nodes,
'BOT', this%memoryPath)
455 call mem_allocate(this%area, this%nodes,
'AREA', this%memoryPath)
458 this%mshape(1) = this%nodes
461 if (this%nodes < this%nodesuser)
then
462 isize = this%nodesuser
468 call mem_allocate(this%dbuff, isize,
'DBUFF', this%name_model)
469 call mem_allocate(this%ibuff, isize,
'IBUFF', this%name_model)
479 flag_string, allow_zero)
result(nodeu)
482 integer(I4B),
intent(inout) :: lloc
483 integer(I4B),
intent(inout) :: istart
484 integer(I4B),
intent(inout) :: istop
485 integer(I4B),
intent(in) :: in
486 integer(I4B),
intent(in) :: iout
487 character(len=*),
intent(inout) :: line
488 logical,
optional,
intent(in) :: flag_string
489 logical,
optional,
intent(in) :: allow_zero
490 integer(I4B) :: nodeu
493 call store_error(
'Programmer error: nodeu_from_string must be overridden', &
506 allow_zero)
result(nodeu)
509 character(len=*),
intent(inout) :: cellid
510 integer(I4B),
intent(in) :: inunit
511 integer(I4B),
intent(in) :: iout
512 logical,
optional,
intent(in) :: flag_string
513 logical,
optional,
intent(in) :: allow_zero
514 integer(I4B) :: nodeu
517 call store_error(
'Programmer error: nodeu_from_cellid must be overridden', &
529 flag_string)
result(noder)
532 integer(I4B),
intent(inout) :: lloc
533 integer(I4B),
intent(inout) :: istart
534 integer(I4B),
intent(inout) :: istop
535 integer(I4B),
intent(in) :: in
536 integer(I4B),
intent(in) :: iout
537 character(len=*),
intent(inout) :: line
538 logical,
optional,
intent(in) :: flag_string
539 integer(I4B) :: noder
541 integer(I4B) :: nodeu
542 character(len=LINELENGTH) :: nodestr
543 logical :: flag_string_local
545 if (
present(flag_string))
then
546 flag_string_local = flag_string
548 flag_string_local = .false.
550 nodeu = this%nodeu_from_string(lloc, istart, istop, in, iout, line, &
555 noder = this%get_nodenumber(nodeu, 0)
559 if (noder <= 0 .and. .not. flag_string_local)
then
560 call this%nodeu_to_string(nodeu, nodestr)
562 ' Cell is outside active grid domain: '// &
563 trim(adjustl(nodestr))
577 allow_zero)
result(noder)
579 integer(I4B) :: noder
582 character(len=*),
intent(inout) :: cellid
583 integer(I4B),
intent(in) :: inunit
584 integer(I4B),
intent(in) :: iout
585 logical,
optional,
intent(in) :: flag_string
586 logical,
optional,
intent(in) :: allow_zero
588 integer(I4B) :: nodeu
589 logical :: allowzerolocal
590 character(len=LINELENGTH) :: nodestr
591 logical :: flag_string_local
593 if (
present(flag_string))
then
594 flag_string_local = flag_string
596 flag_string_local = .false.
598 if (
present(allow_zero))
then
599 allowzerolocal = allow_zero
601 allowzerolocal = .false.
604 nodeu = this%nodeu_from_cellid(cellid, inunit, iout, flag_string_local, &
609 noder = this%get_nodenumber(nodeu, 0)
613 if (noder <= 0 .and. .not. flag_string_local)
then
614 call this%nodeu_to_string(nodeu, nodestr)
616 ' Cell is outside active grid domain: '// &
617 trim(adjustl(nodestr))
626 call store_error(
'Programmer error: supports_layers must be overridden', &
636 call store_error(
'Programmer error: get_ncpl must be overridden', &
646 integer(I4B),
intent(in) :: n
647 real(dp),
intent(in) :: x
658 thick = (tp - bt) * sat
666 integer(I4B),
intent(in) :: ic
667 real(DP),
allocatable,
intent(out) :: polyverts(:, :)
668 logical(LGP),
intent(in),
optional :: closed
670 errmsg =
'Programmer error: get_polyverts must be overridden'
679 character(len=*),
intent(inout) :: line
680 integer(I4B),
intent(inout) :: lloc
681 integer(I4B),
intent(inout) :: istart
682 integer(I4B),
intent(inout) :: istop
683 integer(I4B),
intent(in) :: in
684 integer(I4B),
intent(in) :: iout
685 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: iarray
686 character(len=*),
intent(in) :: aname
688 errmsg =
'Programmer error: read_int_array must be overridden'
697 character(len=*),
intent(inout) :: line
698 integer(I4B),
intent(inout) :: lloc
699 integer(I4B),
intent(inout) :: istart
700 integer(I4B),
intent(inout) :: istop
701 integer(I4B),
intent(in) :: in
702 integer(I4B),
intent(in) :: iout
703 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
704 character(len=*),
intent(in) :: aname
706 errmsg =
'Programmer error: read_dbl_array must be overridden'
714 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: ibuff1
715 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: ibuff2
717 integer(I4B) :: nodeu
718 integer(I4B) :: noder
720 do nodeu = 1, this%nodesuser
721 noder = this%get_nodenumber(nodeu, 0)
722 if (noder <= 0) cycle
723 ibuff2(noder) = ibuff1(nodeu)
731 real(DP),
dimension(:),
pointer,
contiguous,
intent(in) :: buff1
732 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: buff2
734 integer(I4B) :: nodeu
735 integer(I4B) :: noder
737 do nodeu = 1, this%nodesuser
738 noder = this%get_nodenumber(nodeu, 0)
739 if (noder <= 0) cycle
740 buff2(noder) = buff1(nodeu)
751 subroutine read_list(this, line_reader, in, iout, iprpak, nlist, &
752 inamedbound, iauxmultcol, nodelist, rlist, auxvar, &
753 auxname, boundname, label, pkgname, tsManager, iscloc, &
766 integer(I4B),
intent(in) :: in
767 integer(I4B),
intent(in) :: iout
768 integer(I4B),
intent(in) :: iprpak
769 integer(I4B),
intent(inout) :: nlist
770 integer(I4B),
intent(in) :: inamedbound
771 integer(I4B),
intent(in) :: iauxmultcol
772 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(inout) :: nodelist
773 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: rlist
774 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(inout) :: auxvar
775 character(len=LENAUXNAME),
dimension(:),
intent(inout) :: auxname
776 character(len=LENBOUNDNAME),
dimension(:),
pointer,
contiguous, &
777 intent(inout) :: boundname
778 character(len=*),
intent(in) :: label
779 character(len=*),
intent(in) :: pkgName
781 integer(I4B),
intent(in) :: iscloc
782 integer(I4B),
intent(in),
optional :: indxconvertflux
785 integer(I4B) :: nodeu, noder
786 character(len=LINELENGTH) :: nodestr
787 integer(I4B) :: ii, jj
788 real(DP),
pointer :: bndElem => null()
794 call lstrdobj%read_list(line_reader, in, iout, nlist, inamedbound, &
795 this%mshape, nodelist, rlist, auxvar, auxname, &
800 if (lstrdobj%ntxtrlist > 0)
then
801 do l = 1, lstrdobj%ntxtrlist
802 ii = lstrdobj%idxtxtrow(l)
803 jj = lstrdobj%idxtxtcol(l)
805 bndelem => rlist(jj, ii)
807 pkgname,
'BND', tsmanager, iprpak, &
809 if (
associated(tslinkbnd))
then
814 if (iauxmultcol > 0 .and. jj == iscloc)
then
815 tslinkbnd%RMultiplier => auxvar(iauxmultcol, ii)
819 if (lstrdobj%inamedbound == 1)
then
820 tslinkbnd%BndName = lstrdobj%boundname(tslinkbnd%IRow)
825 if (
present(indxconvertflux))
then
826 if (indxconvertflux == jj)
then
827 tslinkbnd%convertflux = .true.
829 noder = this%get_nodenumber(nodeu, 0)
830 tslinkbnd%CellArea = this%get_area(noder)
839 if (lstrdobj%ntxtauxvar > 0)
then
840 do l = 1, lstrdobj%ntxtauxvar
841 ii = lstrdobj%idxtxtauxrow(l)
842 jj = lstrdobj%idxtxtauxcol(l)
844 bndelem => auxvar(jj, ii)
846 pkgname,
'AUX', tsmanager, iprpak, &
848 if (lstrdobj%inamedbound == 1)
then
849 if (
associated(tslinkaux))
then
850 tslinkaux%BndName = lstrdobj%boundname(tslinkaux%IRow)
857 if (iauxmultcol > 0)
then
859 rlist(iscloc, l) = rlist(iscloc, l) * auxvar(iauxmultcol, l)
864 if (iprpak /= 0)
then
865 call lstrdobj%write_list()
871 if (this%nodes < this%nodesuser)
then
874 noder = this%get_nodenumber(nodeu, 0)
876 call this%nodeu_to_string(nodeu, nodestr)
878 ' Cell is outside active grid domain: '// &
879 trim(adjustl(nodestr))
900 icolbnd, aname, inunit, iout)
903 integer(I4B),
intent(in) :: ncolbnd
904 integer(I4B),
intent(in) :: maxbnd
905 integer(I4B),
dimension(maxbnd) :: nodelist
906 real(DP),
dimension(ncolbnd, maxbnd),
intent(inout) :: darray
907 integer(I4B),
intent(in) :: icolbnd
908 character(len=*),
intent(in) :: aname
909 integer(I4B),
intent(in) :: inunit
910 integer(I4B),
intent(in) :: iout
912 errmsg =
'Programmer error: read_layer_array must be overridden'
921 cdatafmp, nvaluesp, nwidthp, editdesc, dinact)
924 real(DP),
dimension(:),
pointer,
contiguous,
intent(inout) :: darray
925 integer(I4B),
intent(in) :: iout
926 integer(I4B),
intent(in) :: iprint
927 integer(I4B),
intent(in) :: idataun
928 character(len=*),
intent(in) :: aname
929 character(len=*),
intent(in) :: cdatafmp
930 integer(I4B),
intent(in) :: nvaluesp
931 integer(I4B),
intent(in) :: nwidthp
932 character(len=*),
intent(in) :: editdesc
933 real(DP),
intent(in) :: dinact
935 errmsg =
'Programmer error: record_array must be overridden'
943 real(DP),
dimension(:),
intent(in) :: flowja
944 integer(I4B),
intent(in) :: ibinun
945 integer(I4B),
intent(in) :: iout
947 character(len=16),
dimension(1) :: text
949 data text(1)/
' FLOW-JA-FACE'/
952 call ubdsv1(
kstp,
kper, text(1), ibinun, flowja,
size(flowja), 1, 1, &
960 integer(I4B),
intent(in) :: noder
961 character(len=*),
intent(inout) :: str
963 integer(I4B) :: nodeu
965 nodeu = this%get_nodeuser(noder)
966 call this%nodeu_to_string(nodeu, str)
973 integer(I4B),
intent(in) :: noder
974 integer(I4B),
dimension(:),
intent(inout) :: arr
976 integer(I4B) :: nodeu
978 nodeu = this%get_nodeuser(noder)
979 call this%nodeu_to_array(nodeu, arr)
984 dstmodel, dstpackage, naux, auxtxt, &
987 character(len=16),
intent(in) :: text
988 character(len=16),
intent(in) :: textmodel
989 character(len=16),
intent(in) :: textpackage
990 character(len=16),
intent(in) :: dstmodel
991 character(len=16),
intent(in) :: dstpackage
992 integer(I4B),
intent(in) :: naux
993 character(len=16),
dimension(:),
intent(in) :: auxtxt
994 integer(I4B),
intent(in) :: ibdchn
995 integer(I4B),
intent(in) :: nlist
996 integer(I4B),
intent(in) :: iout
998 errmsg =
'Programmer error: record_srcdst_list_header must be overridden'
1004 naux, aux, olconv, olconv2)
1007 integer(I4B),
intent(in) :: ibdchn
1008 integer(I4B),
intent(in) :: noder
1009 integer(I4B),
intent(in) :: noder2
1010 real(DP),
intent(in) :: q
1011 integer(I4B),
intent(in) :: naux
1012 real(DP),
dimension(naux),
intent(in) :: aux
1013 logical,
optional,
intent(in) :: olconv
1014 logical,
optional,
intent(in) :: olconv2
1018 integer(I4B) :: nodeu
1019 integer(I4B) :: nodeu2
1022 if (
present(olconv))
then
1028 nodeu = this%get_nodeuser(noder)
1032 if (
present(olconv2))
then
1038 nodeu2 = this%get_nodeuser(noder2)
1042 call ubdsvd(ibdchn, nodeu, nodeu2, q, naux, aux)
1051 integer(I4B),
intent(in) :: maxbnd
1052 integer(I4B),
dimension(:),
pointer,
contiguous :: darray
1053 integer(I4B),
dimension(maxbnd),
intent(inout) :: nodelist
1054 integer(I4B),
intent(inout) :: nbound
1055 character(len=*),
intent(in) :: aname
1057 errmsg =
'Programmer error: nlarray_to_nodelist must be overridden'
1065 integer(I4B),
intent(inout) :: n
1066 integer(I4B),
dimension(:),
intent(in) :: ibound
1068 integer(I4B) :: m, ii, iis
1069 logical done, bottomcell
1074 do while (.not. done)
1076 cloop:
do ii = this%con%ia(n) + 1, this%con%ia(n + 1) - 1
1078 iis = this%con%jas(ii)
1079 if (this%con%ihc(iis) == 0 .and. m > n)
then
1082 bottomcell = .false.
1085 if (ibound(m) /= 0)
then
1095 if (bottomcell) done = .true.
1102 integer(I4B),
intent(in) :: node
1105 area = this%area(node)
1119 real(dp) :: area_factor
1122 integer(I4B),
intent(in) :: node
1123 integer(I4B),
intent(in) :: idx_conn
1125 real(dp) :: area_node
1126 real(dp) :: area_conn
1129 area_node = this%area(node)
1130 area_conn = this%con%hwva(idx_conn)
1133 area_factor = area_conn / area_node
1146 integer(I4B),
intent(in) :: n
1147 integer(I4B),
intent(in) :: m
1148 integer(I4B),
intent(in) :: idx_conn
1149 real(DP),
intent(out) :: width_n
1150 real(DP),
intent(out) :: width_m
1152 integer(I4B) :: isympos
1155 isympos = this%con%jas(idx_conn)
1156 width_n = this%con%hwva(isympos)
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.
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 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 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
@ disundef
undefined 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.