79 REAL*8 :: dt_old , dt_old_old
81 LOGICAL :: stop_flag_old
93 CALL allocate_solver_variables
101 IF( riemann_flag .EQV. .true. )
THEN 118 WRITE(*,*)
'******** START COMPUTATION *********' 121 IF ( verbose_level .GE. 1 )
THEN 123 WRITE(*,*)
'Min q(1,:,:)=',minval(q(1,:,:))
124 WRITE(*,*)
'Max q(1,:,:)=',maxval(q(1,:,:))
126 WRITE(*,*)
'Min B(:,:)=',minval(
b_cent(:,:))
127 WRITE(*,*)
'Max B(:,:)=',maxval(
b_cent(:,:))
132 WRITE(*,*)
'SUM(q(1,:,:)=',sum(q(1,:,:))
133 WRITE(*,*)
'SUM(B_cent(:,:)=',sum(
b_cent(:,:))
137 q1max(:,:) = q(1,:,:)
145 IF ( output_runout_flag )
CALL output_runout(t,stop_flag)
147 CALL output_solution(t)
149 IF ( sum(q(1,:,:)) .EQ. 0.d0 ) t_steady = t_output
153 WRITE(*,fmt=
"(A3,F10.4,A5,F9.5,A15,ES12.3E3,A15,ES12.3E3,A15,ES12.3E3)") &
154 't =',t,
'dt =',dt0, &
155 ' total volume = ',
dx*
dy*sum(q(1,:,:)) , &
156 ' total area = ',
dx*
dy*count(q(1,:,:).GT.1.d-5) , &
157 ' total sediment fraction = ',
dx*
dy*sum(q(4,:,:))
161 WRITE(*,fmt=
"(A3,F10.4,A5,F9.5,A15,ES12.3E3,A15,ES12.3E3)") &
162 't =',t,
'dt =',dt0, &
163 ' total volume = ',
dx*
dy*sum(q(1,:,:)) , &
164 ' total area = ',
dx*
dy*count(q(1,:,:).GT.1.d-5)
168 DO WHILE ( ( t .LT. t_end ) .AND. ( t .LT. t_steady ) )
180 IF ( t+dt .GT. t_end ) dt = t_end - t
181 IF ( t+dt .GT. t_output ) dt = t_output - t
183 IF ( output_runout_flag )
THEN 185 IF ( t+dt .GT. t_runout ) dt = t_runout - t
189 dt = min(dt,1.1d0*0.5d0*(dt_old+dt_old_old))
198 CALL update_erosion_deposition_ver(dt)
208 WRITE(*,fmt=
"(A3,F10.4,A5,F9.5,A15,ES12.3E3,A15,ES12.3E3,A15,ES12.3E3)")&
210 ' total volume = ',
dx*
dy*sum(q(1,:,:)) , &
211 ' total area = ',
dx*
dy*count(q(1,:,:).GT.1.d-7) , &
212 ' total sediment fraction = ',
dx*
dy*sum(q(4,:,:))
216 WRITE(*,fmt=
"(A3,F10.4,A5,F9.5,A15,ES12.3E3,A15,ES12.3E3)") &
218 ' total volume = ',
dx*
dy*sum(q(1,:,:)) , &
219 ' total area = ',
dx*
dy*count(q(1,:,:).GT.1.d-7)
223 IF ( output_runout_flag )
THEN 225 IF ( ( t .GE. t_runout ) .OR. ( t .GE. t_steady ) )
THEN 227 stop_flag_old = stop_flag
229 IF ( output_runout_flag )
CALL output_runout(t,stop_flag)
231 IF ( ( stop_flag ) .AND. (.NOT.stop_flag_old) )
THEN 233 t_steady = min(t_end,t_output)
242 IF ( ( t .GE. t_output ) .OR. ( t .GE. t_end ) )
THEN 244 CALL output_solution(t)
250 CALL deallocate_solver_variables
256 WRITE(*,*)
'Time taken by the code was',t2-t1,
'seconds' real *8 dy
Control volumes size.
real *8 t_steady
end time when reached steady solution
real *8, dimension(:,:), allocatable b_cent
Topography at the centers of the control volumes.
subroutine read_solution
Read the solution from the restart unit.
real *8 dx
Control volumes size.
real *8 t_end
end time for the run
subroutine deallocate_solver_variables
Memory deallocation.
subroutine update_param
Read the input file.
subroutine initial_conditions
Problem initialization.
real *8 dt0
Initial time step.
subroutine update_erosion_deposition_ver(dt)
Evaluate the averaged explicit terms.
program imex_sflow_2d
Main Program.
subroutine init_grid
Finite volume grid initialization.
logical restart
Flag to start a run from a previous output: .
subroutine output_runout(time, stop_flag)
Write runout on file.
subroutine output_solution(time)
Write the solution on the output unit.
subroutine init_problem_param
Initialization of relaxation flags.
subroutine timestep2
Time-step computation.
logical riemann_flag
Flag to choose the sort of problem to solve.
real *8 t_output
time of the next output
subroutine read_param
Read the input file.
subroutine timestep
Time-step computation.
real *8 t_runout
time of the next runout output
subroutine riemann_problem
Riemann problem initialization.
subroutine init_param
Initialization of the variables read from the input file.
subroutine imex_rk_solver
Runge-Kutta integration.
real *8, dimension(:,:), allocatable q1max
Maximum over time of thickness.
logical solid_transport_flag
Flag to choose if we model solid phase transport.
subroutine allocate_solver_variables
Memory allocation.
logical output_runout_flag
Flag to save the max runout at ouput times.
real *8 t_start
initial time for the run
real *8, dimension(:,:,:), allocatable q
Conservative variables.