pass rhs functions subroutine to rk4 and move parameters to m_parameters
This commit is contained in:
parent
b01be79870
commit
a974e2959d
4 changed files with 40 additions and 26 deletions
|
|
@ -20,17 +20,22 @@ module m_parameters
|
|||
|
||||
real :: SL_u
|
||||
|
||||
integer :: omitnum
|
||||
|
||||
integer, allocatable :: omit_t(:,:)
|
||||
|
||||
integer, allocatable :: file_dist(:)
|
||||
|
||||
integer, allocatable :: export_offset(:)
|
||||
|
||||
real, parameter :: pi=3.14159265358979323846
|
||||
|
||||
real, parameter :: me=1.00e-20
|
||||
|
||||
REAL :: hx,dt,vis,sc,diff,tf,t_now,t_uf,dt_uf
|
||||
|
||||
REAL :: lewis
|
||||
|
||||
REAL :: minf,tar_lo,u0,ctmp,lo_flm=0.
|
||||
|
||||
REAL :: er_lof=0., erdot=0.
|
||||
|
||||
REAL :: pflame,pflold,oldu
|
||||
|
||||
INTEGER :: ncyc=0,int_pr,nx
|
||||
|
||||
contains
|
||||
|
||||
end module m_parameters
|
||||
|
|
|
|||
|
|
@ -13,12 +13,12 @@ endif
|
|||
compiler = gfortran
|
||||
|
||||
ex : test.o ysolve.o m_parameters.o m_calculate.o m_compact.o
|
||||
${compiler} -o ex test.o ysolve.o m_compact.o
|
||||
${compiler} -o ex test.o ysolve.o m_parameters.o m_calculate.o m_compact.o
|
||||
|
||||
test.o : test.f90 ysolve.mod m_compact.mod
|
||||
${compiler} -c ${flags} test.f90
|
||||
|
||||
ysolve.o ysolve.mod : ysolve.f90 m_compact.mod
|
||||
ysolve.o ysolve.mod : ysolve.f90 m_compact.mod m_parameters.mod
|
||||
${compiler} -c ${flags} ysolve.f90
|
||||
|
||||
m_compact.o m_compact.mod : m_compact.f90
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cd sample/4pi-IC1
|
||||
ls
|
||||
../../ex
|
||||
../../ex itape
|
||||
diff -y sfield.dat sfield.diff
|
||||
|
|
|
|||
|
|
@ -1,14 +1,9 @@
|
|||
MODULE ysolve
|
||||
USE m_compact
|
||||
USE m_parameters
|
||||
|
||||
IMPLICIT NONE
|
||||
PRIVATE
|
||||
REAL, PARAMETER :: pi=3.14159265358979323846
|
||||
REAL :: hx,dt,vis,sc,diff,pre,ac,bc,tf,t_now,t_uf,dt_uf
|
||||
REAL :: lewis
|
||||
REAL :: c_cut,c_ref,refwr,minf,tar_lo,u0,ctmp,l_0,lo_flm=0.
|
||||
REAL :: er_lof=0., erdot=0.,min_wr,prof_wr
|
||||
REAL :: pflame,pflold,oldu
|
||||
INTEGER :: ncyc=0,int_pr,nx
|
||||
|
||||
REAL, DIMENSION(:), ALLOCATABLE :: u
|
||||
REAL, DIMENSION(:,:), ALLOCATABLE :: y1,y2,yf
|
||||
REAL, DIMENSION(:), ALLOCATABLE :: uxt,duxt
|
||||
|
|
@ -28,7 +23,7 @@
|
|||
|
||||
LOGICAL :: read_itape, read_stdin
|
||||
CHARACTER(100) :: itape_name
|
||||
PUBLIC :: solve, parse
|
||||
|
||||
CONTAINS
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE parse
|
||||
|
|
@ -80,6 +75,7 @@
|
|||
END SUBROUTINE parse
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE solve
|
||||
|
||||
INTEGER :: i,j,k,savenum
|
||||
REAL :: pflame,pflold,delf=0.
|
||||
|
||||
|
|
@ -93,7 +89,7 @@
|
|||
|
||||
DO
|
||||
CALL SET_BC
|
||||
CALL RK4
|
||||
CALL RK4(fns)
|
||||
IF(t_now.ge.tf) EXIT
|
||||
IF(t_uf.ge.dt_uf) THEN
|
||||
pflold=pflame
|
||||
|
|
@ -219,7 +215,7 @@
|
|||
|
||||
OPEN (305,FILE='sfield.dat')
|
||||
DO i=1,nx
|
||||
WRITE (305,'(2e30.20)') y1(i,1), y1(i,2)
|
||||
WRITE (305,'(e30.20)') y1(i,1)
|
||||
ENDDO
|
||||
CLOSE (305)
|
||||
|
||||
|
|
@ -388,14 +384,25 @@
|
|||
|
||||
END SUBROUTINE READ_INTRO
|
||||
|
||||
SUBROUTINE RK4
|
||||
SUBROUTINE RK4(rhs)
|
||||
|
||||
INTERFACE
|
||||
SUBROUTINE rhs(r1,f)
|
||||
REAL, INTENT(IN), DIMENSION(:,:) :: r1
|
||||
REAL, INTENT(OUT), DIMENSION(:,:) :: f
|
||||
END SUBROUTINE rhs
|
||||
END INTERFACE
|
||||
|
||||
REAL :: test_var
|
||||
|
||||
istage=1; CALL substep(y1,y1,y2,yf)
|
||||
istage=2; CALL substep(y1,y2,y1,yf)
|
||||
istage=3; CALL substep(y2,y1,y2,yf)
|
||||
istage=4; CALL substep(y1,y2,y1,yf)
|
||||
istage=5; CALL substep(y2,y1,y2,yf)
|
||||
END SUBROUTINE RK4
|
||||
!------------------------------------------------------------------------
|
||||
|
||||
CONTAINS
|
||||
|
||||
SUBROUTINE substep(ri,r1,r2,f)
|
||||
REAL, INTENT(INOUT),DIMENSION(:,:) :: ri,r1,r2
|
||||
REAL, INTENT(OUT),DIMENSION(:,:) :: f
|
||||
|
|
@ -403,7 +410,7 @@
|
|||
INTEGER :: i,j,k
|
||||
REAL :: at,bt
|
||||
|
||||
CALL fns(ri,f)
|
||||
CALL rhs(ri,f)
|
||||
IF(istage<5) THEN
|
||||
at=a(istage)*dt
|
||||
bt=(b(istage)-a(istage))*dt
|
||||
|
|
@ -414,6 +421,8 @@
|
|||
r1=r1+bt*f
|
||||
ENDIF
|
||||
END SUBROUTINE substep
|
||||
|
||||
END SUBROUTINE RK4
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE fns(r1,f)
|
||||
REAL, INTENT(IN),DIMENSION(:,:) :: r1
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue