qinit default routines¶
For GeoClaw, see qinit routine in GeoClaw.
Below are the default qinit library routines for Classic and AMRClaw.
These should never be used as is, but rather copied to your application directory and modified to set the initial conditions as desired.
$CLAW/classic/src/1d/qinit.f90:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | subroutine qinit(meqn,mbc,mx,xlower,dx,q,maux,aux)
! Set initial conditions for the q array.
! This default version prints an error message since it should
! not be used directly. Copy this to an application directory and
! loop over all grid cells to set values of q(1:meqn, 1:mx).
implicit none
integer, intent(in) :: meqn,mbc,mx,maux
real(kind=8), intent(in) :: xlower,dx
real(kind=8), intent(in) :: aux(maux,1-mbc:mx+mbc)
real(kind=8), intent(inout) :: q(meqn,1-mbc:mx+mbc)
write(6,*) '*** Error -- you must set initial conditions'
stop
end subroutine qinit
|
$CLAW/classic/src/2d/qinit.f90:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | subroutine qinit(meqn,mbc,mx,my,xlower,ylower,dx,dy,q,maux,aux)
! Set initial conditions for the q array.
! This default version prints an error message since it should
! not be used directly. Copy this to an application directory and
! loop over all grid cells to set values of q(1:meqn, 1:mx, 1:my).
implicit none
integer, intent(in) :: meqn,mbc,mx,my,maux
real(kind=8), intent(in) :: xlower,ylower,dx,dy
real(kind=8), intent(in) :: aux(maux,1-mbc:mx+mbc,1-mbc:my+mbc)
real(kind=8), intent(inout) :: q(meqn,1-mbc:mx+mbc,1-mbc:my+mbc)
write(6,*) '*** Error -- you must set initial conditions'
stop
end subroutine qinit
|
$CLAW/classic/src/3d/qinit.f90:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | subroutine qinit(meqn,mbc,mx,my,mz,xlower,ylower,zlower,dx,dy,dz,q,maux,aux)
! Set initial conditions for the q array.
! This default version prints an error message since it should
! not be used directly. Copy this to an application directory and
! loop over all grid cells to set values of q(1:meqn, 1:mx, 1:my, 1:mz).
implicit none
integer, intent(in) :: mbc,mx,my,mz,maux
real(kind=8), intent(in) :: xlower,ylower,zlower,dx,dy,dz
real(kind=8), intent(in) :: aux(maux,1-mbc:mx+mbc,1-mbc:my+mbc)
real(kind=8), intent(inout) :: q(meqn,1-mbc:mx+mbc,1-mbc:my+mbc)
write(6,*) '*** Error -- you must set initial conditions'
stop
end subroutine qinit
|
qinit routine in GeoClaw¶
In GeoClaw, there is a library routine that sets the surface elevation to sea level by default, and also has the option of adding a perturbation as specified in the setrun file, see qinit data file parameters.
$CLAW/geoclaw/src/2d/shallow/qinit.f90:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | subroutine qinit(meqn,mbc,mx,my,xlower,ylower,dx,dy,q,maux,aux)
use qinit_module, only: qinit_type,add_perturbation
use geoclaw_module, only: sea_level
implicit none
! Subroutine arguments
integer, intent(in) :: meqn,mbc,mx,my,maux
real(kind=8), intent(in) :: xlower,ylower,dx,dy
real(kind=8), intent(inout) :: q(meqn,1-mbc:mx+mbc,1-mbc:my+mbc)
real(kind=8), intent(inout) :: aux(maux,1-mbc:mx+mbc,1-mbc:my+mbc)
! Locals
integer :: i,j,m
! Set flat state based on sea_level
q = 0.d0
forall(i=1:mx, j=1:my)
q(1,i,j) = max(0.d0, sea_level - aux(1,i,j))
end forall
! Add perturbation to initial conditions
if (qinit_type > 0) then
call add_perturbation(meqn,mbc,mx,my,xlower,ylower,dx,dy,q,maux,aux)
endif
if (.false.) then
open(23, file='fort.aux',status='unknown',form='formatted')
print *,'Writing out aux arrays'
print *,' '
do j=1,my
do i=1,mx
write(23,*) i,j,(q(m,i,j),m=1,meqn)
enddo
enddo
close(23)
endif
end subroutine qinit
|