diff --git a/GNUmakefile.in b/GNUmakefile.in index 62f09f68205..e8c3a5ca9b2 100644 --- a/GNUmakefile.in +++ b/GNUmakefile.in @@ -1,6 +1,4 @@ -USE_AMREX_FI_MAIN = FALSE - AMREX_HOME := $(shell pwd) include $(AMREX_HOME)/Tools/GNUMake/Make.defs diff --git a/Src/F_Interfaces/AmrCore/AMReX_amrcore_mod.F90 b/Src/F_Interfaces/AmrCore/AMReX_amrcore_mod.F90 index 9bb96f97786..2a35fd69d84 100644 --- a/Src/F_Interfaces/AmrCore/AMReX_amrcore_mod.F90 +++ b/Src/F_Interfaces/AmrCore/AMReX_amrcore_mod.F90 @@ -161,10 +161,16 @@ subroutine amrex_fi_regrid (baselev, t, amrcore) bind(c) end subroutine amrex_fi_regrid end interface + logical, save, private :: call_amrex_finalize = .false. + contains subroutine amrex_amrcore_init () integer :: ilev + if (.not.amrex_initialized()) then + call amrex_init() + call_amrex_finalize = .true. + end if call amrex_fi_new_amrcore(amrcore) amrex_max_level = amrex_fi_get_max_level(amrcore) allocate(amrex_ref_ratio(0:amrex_max_level-1)) @@ -178,6 +184,10 @@ end subroutine amrex_amrcore_init subroutine amrex_amrcore_finalize () call amrex_fi_delete_amrcore(amrcore) amrcore = c_null_ptr + if (call_amrex_finalize) then + call amrex_finalize() + call_amrex_finalize = .false. + end if end subroutine amrex_amrcore_finalize logical function amrex_amrcore_initialized () diff --git a/Src/F_Interfaces/Base/AMReX_fi_main.cpp b/Src/F_Interfaces/Base/AMReX_fi_main.cpp deleted file mode 100644 index 921bc232b3e..00000000000 --- a/Src/F_Interfaces/Base/AMReX_fi_main.cpp +++ /dev/null @@ -1,20 +0,0 @@ - -#include -#include - -extern "C" { - void amrex_fmain(); -} - -int main (int argc, char* argv[]) -{ - amrex::Initialize(argc,argv); - - BL_PROFILE_VAR("main()", pmain); - - amrex_fmain(); - - BL_PROFILE_VAR_STOP(pmain); - - amrex::Finalize(); -} diff --git a/Src/F_Interfaces/Base/AMReX_init_mod.F90 b/Src/F_Interfaces/Base/AMReX_init_mod.F90 index 606550ff58f..ccee1f7a1a8 100644 --- a/Src/F_Interfaces/Base/AMReX_init_mod.F90 +++ b/Src/F_Interfaces/Base/AMReX_init_mod.F90 @@ -5,7 +5,9 @@ module amrex_init_module implicit none private - public :: amrex_init, amrex_finalize + public :: amrex_init, amrex_finalize, amrex_initialized + + logical, save, private :: initialized = .false. contains @@ -27,6 +29,7 @@ end subroutine amrex_fi_init else call amrex_string_build(cmd_string, cmd) call amrex_fi_init(cmd_string%data) + initialized = .true. end if end subroutine amrex_init @@ -38,6 +41,11 @@ subroutine amrex_fi_finalize() bind(c) end subroutine amrex_fi_finalize end interface call amrex_fi_finalize() + initialized = .false. end subroutine amrex_finalize + pure logical function amrex_initialized () + amrex_initialized = initialized + end function amrex_initialized + end module amrex_init_module diff --git a/Src/F_Interfaces/Base/Make.package b/Src/F_Interfaces/Base/Make.package index 1f9498beff8..a6bf80e636b 100644 --- a/Src/F_Interfaces/Base/Make.package +++ b/Src/F_Interfaces/Base/Make.package @@ -1,11 +1,5 @@ DEFINES += -DBL_USE_F_INTERFACES -USE_AMREX_FI_MAIN ?= TRUE - -ifeq ($(USE_AMREX_FI_MAIN),TRUE) - CEXE_sources += AMReX_fi_main.cpp -endif - F90EXE_sources += AMReX_init_mod.F90 F90EXE_sources += AMReX_parallel_mod.F90 diff --git a/Tutorials/Amr/Advection_F/Source/fmain.F90 b/Tutorials/Amr/Advection_F/Source/fmain.F90 index 731384172f0..987b5788c15 100644 --- a/Tutorials/Amr/Advection_F/Source/fmain.F90 +++ b/Tutorials/Amr/Advection_F/Source/fmain.F90 @@ -1,5 +1,5 @@ -subroutine amrex_fmain () bind(c) +program main use amrex_amr_module @@ -9,6 +9,7 @@ subroutine amrex_fmain () bind(c) implicit none + call amrex_init() call amrex_amrcore_init() call my_amr_init() @@ -20,5 +21,6 @@ subroutine amrex_fmain () bind(c) call my_amr_finalize() call amrex_amrcore_finalize() + call amrex_finalize() -end subroutine amrex_fmain +end program main diff --git a/Tutorials/Amr/Advection_F/Source/my_amr_mod.F90 b/Tutorials/Amr/Advection_F/Source/my_amr_mod.F90 index 592efb518bc..4c864be7f1c 100644 --- a/Tutorials/Amr/Advection_F/Source/my_amr_mod.F90 +++ b/Tutorials/Amr/Advection_F/Source/my_amr_mod.F90 @@ -21,14 +21,14 @@ module my_amr_module real(rt) :: stop_time = huge(1._rt) real(rt) :: cfl = 0.7_rt ! - character(len=127) :: check_file = "chk" - character(len=127) :: plot_file = "plt" - character(len=127) :: restart = "" + character(len=:), allocatable, save :: check_file + character(len=:), allocatable, save :: plot_file + character(len=:), allocatable, save :: restart - integer, allocatable :: stepno(:) - integer, allocatable :: nsubsteps(:) + integer, allocatable, save :: stepno(:) + integer, allocatable, save :: nsubsteps(:) - real(rt), allocatable :: dt(:) + real(rt), allocatable, save :: dt(:) integer, private, parameter :: ncomp = 1, nghost = 0 @@ -47,6 +47,13 @@ subroutine my_amr_init () & my_clear_level, & & my_error_estimate) + ! some default parameters + allocate(character(len=3)::check_file) + check_file = "chk" + allocate(character(len=3)::plot_file) + plot_file = "plt" + allocate(character(len=0)::restart) + ! Read parameters call amrex_parmparse_build(pp) call pp%query("max_step", max_step) diff --git a/Tutorials/Amr/Advection_octree_F/Source/fmain.F90 b/Tutorials/Amr/Advection_octree_F/Source/fmain.F90 index 6e60b0a2adc..a490a4cfb12 100644 --- a/Tutorials/Amr/Advection_octree_F/Source/fmain.F90 +++ b/Tutorials/Amr/Advection_octree_F/Source/fmain.F90 @@ -1,5 +1,5 @@ -subroutine amrex_fmain () bind(c) +program main use amrex_amr_module use amrex_octree_module @@ -10,8 +10,8 @@ subroutine amrex_fmain () bind(c) implicit none + call amrex_init() call amrex_octree_init() - call amrex_amrcore_init() call my_amr_init() @@ -23,7 +23,7 @@ subroutine amrex_fmain () bind(c) call my_amr_finalize() call amrex_amrcore_finalize() - call amrex_octree_finalize() + call amrex_finalize() -end subroutine amrex_fmain +end program main diff --git a/Tutorials/Amr/Advection_octree_F/Source/my_amr_mod.F90 b/Tutorials/Amr/Advection_octree_F/Source/my_amr_mod.F90 index f77430c163c..318f652ca0d 100644 --- a/Tutorials/Amr/Advection_octree_F/Source/my_amr_mod.F90 +++ b/Tutorials/Amr/Advection_octree_F/Source/my_amr_mod.F90 @@ -19,12 +19,12 @@ module my_amr_module real(rt) :: stop_time = huge(1._rt) real(rt) :: cfl = 0.7_rt ! - character(len=127) :: check_file = "chk" - character(len=127) :: plot_file = "plt" - character(len=127) :: restart = "" + character(len=:), allocatable, save :: check_file + character(len=:), allocatable, save :: plot_file + character(len=:), allocatable, save :: restart - integer :: stepno - real(rt) :: dtstep + integer, save :: stepno + real(rt), save :: dtstep integer, private, parameter :: ncomp = 1, nghost = 0 @@ -42,6 +42,13 @@ subroutine my_amr_init () & my_clear_level, & & my_error_estimate) + ! some default parameters + allocate(character(len=3)::check_file) + check_file = "chk" + allocate(character(len=3)::plot_file) + plot_file = "plt" + allocate(character(len=0)::restart) + ! Read parameters call amrex_parmparse_build(pp) call pp%query("max_step", max_step) diff --git a/Tutorials/Basic/HeatEquation_EX1_F/GNUmakefile b/Tutorials/Basic/HeatEquation_EX1_F/GNUmakefile index 6dade671714..31db1932679 100644 --- a/Tutorials/Basic/HeatEquation_EX1_F/GNUmakefile +++ b/Tutorials/Basic/HeatEquation_EX1_F/GNUmakefile @@ -15,8 +15,6 @@ COMP = g++ DIM = 3 -USE_AMREX_FI_MAIN = TRUE - EBASE = main include ./Make.package diff --git a/Tutorials/Basic/HeatEquation_EX1_F/fmain.f90 b/Tutorials/Basic/HeatEquation_EX1_F/fmain.f90 index 506e7784d48..608e2f45c3d 100644 --- a/Tutorials/Basic/HeatEquation_EX1_F/fmain.f90 +++ b/Tutorials/Basic/HeatEquation_EX1_F/fmain.f90 @@ -1,5 +1,5 @@ -subroutine amrex_fmain () bind(c) +program main use amrex_base_module @@ -19,6 +19,8 @@ subroutine amrex_fmain () bind(c) type(amrex_geometry) :: geom type(amrex_multifab) :: new_phi, old_phi + call amrex_init() + ! amrex_parmparse is way of reading inputs from the inputs file ! "get" means it must be set in the inputs file, whereas ! "query" means it may not may not be in the inputs file @@ -87,4 +89,7 @@ subroutine amrex_fmain () bind(c) call amrex_geometry_destroy(geom) -end subroutine amrex_fmain + call amrex_finalize() + +end program main + diff --git a/Tutorials/Basic/HelloWorld_F/fmain.f90 b/Tutorials/Basic/HelloWorld_F/fmain.f90 index 9e3e2a508cb..9b0202f6ddf 100644 --- a/Tutorials/Basic/HelloWorld_F/fmain.f90 +++ b/Tutorials/Basic/HelloWorld_F/fmain.f90 @@ -1,12 +1,16 @@ -subroutine amrex_fmain () bind(c) +program main use amrex_base_module implicit none + call amrex_init() + if (amrex_parallel_ioprocessor()) then print *, "Hello world!" end if -end subroutine amrex_fmain + call amrex_finalize() + +end program main diff --git a/Tutorials/Basic/main_F/GNUmakefile b/Tutorials/Basic/main_F/GNUmakefile index 7c7d1067f70..31e6221f480 100644 --- a/Tutorials/Basic/main_F/GNUmakefile +++ b/Tutorials/Basic/main_F/GNUmakefile @@ -10,8 +10,6 @@ COMP = gnu USE_MPI = TRUE USE_OMP = FALSE -USE_AMREX_FI_MAIN = FALSE - include $(AMREX_HOME)/Tools/GNUMake/Make.defs include ./Make.package