pass rhs functions subroutine to rk4 and move parameters to m_parameters

This commit is contained in:
ignis 2019-08-30 05:29:58 +09:00
parent b01be79870
commit a974e2959d
4 changed files with 40 additions and 26 deletions

View file

@ -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

View file

@ -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

View file

@ -1,4 +1,4 @@
cd sample/4pi-IC1
ls
../../ex
../../ex itape
diff -y sfield.dat sfield.diff

View file

@ -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