diff --git a/FElib/test/FE/field_cubedom3d_hexahedral/test_field_cubedom3d_hexahedral.f90 b/FElib/test/FE/field_cubedom3d_hexahedral/test_field_cubedom3d_hexahedral.f90 index 8e0098d5..25937f69 100644 --- a/FElib/test/FE/field_cubedom3d_hexahedral/test_field_cubedom3d_hexahedral.f90 +++ b/FElib/test/FE/field_cubedom3d_hexahedral/test_field_cubedom3d_hexahedral.f90 @@ -59,7 +59,7 @@ program test_field3d type(MeshField3D), target :: dudx type(MeshField3D), target :: dudy type(MeshField3D), target :: dudz - integer :: HST_ID(5) + integer, save :: HST_ID(5) type(MeshFieldCommCubeDom3D) :: fields_comm diff --git a/FElib/test/FE/field_cubedspheredom2d/test_field_cubedspheredom2d.f90 b/FElib/test/FE/field_cubedspheredom2d/test_field_cubedspheredom2d.f90 index cb8fd765..f93e3d5a 100644 --- a/FElib/test/FE/field_cubedspheredom2d/test_field_cubedspheredom2d.f90 +++ b/FElib/test/FE/field_cubedspheredom2d/test_field_cubedspheredom2d.f90 @@ -44,10 +44,10 @@ program test_field_cubedspheredom2d character(len=H_short), parameter :: q_VARNAME = "q" character(len=H_short), parameter :: q_DESC = "q" character(len=H_short), parameter :: q_UNITS = "K" - integer :: HST_ID(3) + integer, save :: HST_ID(3) type(MeshFieldCommCubedSphereDom2D) :: fields_comm - type(MeshFieldContainer) :: field_list(1) + type(MeshFieldContainer), save :: field_list(1) integer :: n type(LocalMesh2D), pointer :: lcmesh diff --git a/FElib/test/FE/field_cubedspheredom3d/test_field_cubedspheredom3d.f90 b/FElib/test/FE/field_cubedspheredom3d/test_field_cubedspheredom3d.f90 index d3f05704..54bd6ccc 100644 --- a/FElib/test/FE/field_cubedspheredom3d/test_field_cubedspheredom3d.f90 +++ b/FElib/test/FE/field_cubedspheredom3d/test_field_cubedspheredom3d.f90 @@ -47,10 +47,10 @@ program test_field_cubedspheredom3d character(len=H_short), parameter :: q_VARNAME = "q" character(len=H_short), parameter :: q_DESC = "q" character(len=H_short), parameter :: q_UNITS = "K" - integer :: HST_ID(1) + integer, save :: HST_ID(1) type(MeshFieldCommCubedSphereDom3D) :: fields_comm - type(MeshFieldContainer) :: field_list(1) + type(MeshFieldContainer), save :: field_list(1) integer :: n type(LocalMesh3D), pointer :: lcmesh diff --git a/FElib/test/FE/field_linedom1d/test_field_linedom1d.f90 b/FElib/test/FE/field_linedom1d/test_field_linedom1d.f90 index bd6c4e91..ea2beadb 100644 --- a/FElib/test/FE/field_linedom1d/test_field_linedom1d.f90 +++ b/FElib/test/FE/field_linedom1d/test_field_linedom1d.f90 @@ -43,10 +43,10 @@ program test_field1d character(len=H_short), parameter :: q_VARNAME = "q" character(len=H_short), parameter :: q_DESC = "q" character(len=H_short), parameter :: q_UNITS = "K" - integer :: HST_ID(1) + integer, save :: HST_ID(1) type(MeshFieldComm1D) :: fields_comm - type(MeshFieldContainer) :: field_list(1) + type(MeshFieldContainer), save :: field_list(1) type(LocalMesh1D), pointer :: lcmesh integer :: n diff --git a/FElib/test/FE/field_rectdom2d_quadrilateral/test_field_rectdom2d_quadrilateral.f90 b/FElib/test/FE/field_rectdom2d_quadrilateral/test_field_rectdom2d_quadrilateral.f90 index 5e84811a..3ca47d9d 100644 --- a/FElib/test/FE/field_rectdom2d_quadrilateral/test_field_rectdom2d_quadrilateral.f90 +++ b/FElib/test/FE/field_rectdom2d_quadrilateral/test_field_rectdom2d_quadrilateral.f90 @@ -46,10 +46,10 @@ program test_field2d character(len=H_short), parameter :: q_VARNAME = "q" character(len=H_short), parameter :: q_DESC = "q" character(len=H_short), parameter :: q_UNITS = "K" - integer :: HST_ID(1) + integer, save :: HST_ID(1) type(MeshFieldCommRectDom2D) :: fields_comm - type(MeshFieldContainer) :: field_list(1) + type(MeshFieldContainer), save :: field_list(1) integer :: n type(LocalMesh2D), pointer :: lcmesh diff --git a/FElib/test/FE/profile_calperf/test_profile_calperf.f90 b/FElib/test/FE/profile_calperf/test_profile_calperf.f90 index 57d5cac8..eba812cb 100644 --- a/FElib/test/FE/profile_calperf/test_profile_calperf.f90 +++ b/FElib/test/FE/profile_calperf/test_profile_calperf.f90 @@ -45,7 +45,7 @@ program test_profile_calperf type(MeshCubeDom3D), target :: mesh - type(MeshField3D), target :: q(5) + type(MeshField3D), save, target :: q(5) type(MeshFieldCommCubeDom3D) :: fields_comm diff --git a/FElib/test/common/sparsemat/test_sparsemat.f90 b/FElib/test/common/sparsemat/test_sparsemat.f90 index 9aa587da..bfd5e646 100644 --- a/FElib/test/common/sparsemat/test_sparsemat.f90 +++ b/FElib/test/common/sparsemat/test_sparsemat.f90 @@ -9,10 +9,10 @@ program test_sparsemat implicit none integer, parameter :: N = 5 - real(RP) :: A(N,N) + real(RP), save :: A(N,N) type(SparseMat) :: Acsr type(SparseMat) :: Aell - real(RP) :: x(N), b(N), b_ans(N) + real(RP), save :: x(N), b(N), b_ans(N) integer :: i, j !---------------------------------------- diff --git a/FElib/test/common/timeint_rk/test_timeint_rk.f90 b/FElib/test/common/timeint_rk/test_timeint_rk.f90 index 61a0ddd9..757b23f4 100644 --- a/FElib/test/common/timeint_rk/test_timeint_rk.f90 +++ b/FElib/test/common/timeint_rk/test_timeint_rk.f90 @@ -18,9 +18,9 @@ program test_timeint_rk integer, parameter :: save_error_dstep2 = 8 integer, parameter :: error_array_size = 100 - real(RP) :: answer(error_array_size) - real(RP) :: error1_mem(error_array_size) - real(RP) :: error2_mem(error_array_size) + real(RP), save :: answer(error_array_size) + real(RP), save :: error1_mem(error_array_size) + real(RP), save :: error2_mem(error_array_size) !------------------------------- diff --git a/model/atm_nonhydro3d/util/regrid_tool/prg_regrid_tool.F90 b/model/atm_nonhydro3d/util/regrid_tool/prg_regrid_tool.F90 index 34a13c89..80644405 100644 --- a/model/atm_nonhydro3d/util/regrid_tool/prg_regrid_tool.F90 +++ b/model/atm_nonhydro3d/util/regrid_tool/prg_regrid_tool.F90 @@ -59,7 +59,6 @@ program regrid_tool integer :: myrank ! my rank (execution) logical :: ismaster ! master process? (execution) - logical :: do_output integer :: vid integer :: istep @@ -219,8 +218,6 @@ subroutine initialize() end if !- - do_output = .true. - LOG_INFO("regrid_tool",*) 'Setup has been finished.' if( IO_L ) call flush(IO_FID_LOG) diff --git a/sample/advdiff1d/test_advdiff1d.f90 b/sample/advdiff1d/test_advdiff1d.f90 index e402fd4b..7e2322bb 100644 --- a/sample/advdiff1d/test_advdiff1d.f90 +++ b/sample/advdiff1d/test_advdiff1d.f90 @@ -41,16 +41,12 @@ program test_advdiff1d get_upwind_pos1d => fieldutil_get_upwind_pos1d, & get_profile1d_tracer => fieldutil_get_profile1d_tracer - !----------------------------------------------------------------------------- implicit none - integer :: NeGX = 8 - integer, parameter :: NLocalMeshPerPrc = 1 - ! The type of initial q (sin, gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(2) + real(RP), save :: InitShapeParams(2) ! The type of specified velocify field (constant) real(RP) :: ADV_VEL ! The coefficient of diffusion @@ -60,10 +56,7 @@ program test_advdiff1d real(RP), parameter :: dom_xmax = +1.0_RP type(LineElement) :: refElem - integer :: PolyOrder - logical, parameter :: DumpedMassMatFlag = .false. type(sparsemat) :: Dx, Sx, Lift - integer, parameter :: PolyOrderErrorCheck = 6 type(MeshLineDom1D), target :: mesh type(MeshField1D), target :: q, qexact @@ -71,15 +64,14 @@ program test_advdiff1d type(MeshField1D), target :: u type(MeshFieldComm1D) :: fields_comm type(MeshFieldComm1D) :: auxvars_comm - type(MeshFieldContainer) :: field_list(2) - type(MeshFieldContainer) :: auxvars_list(1) + type(MeshFieldContainer), save :: field_list(2) + type(MeshFieldContainer), save :: auxvars_list(1) - integer :: HST_ID(2) + integer, save :: HST_ID(2) integer :: n, k, p type(LocalMesh1D), pointer :: lcmesh - character(len=H_SHORT) :: TINTEG_SCHEME_TYPE type(timeint_rk), allocatable :: tinteg_lc(:) integer :: nowstep integer :: rkstage @@ -87,20 +79,16 @@ program test_advdiff1d integer, parameter :: RKVAR_Q = 1 real(RP) :: tsec_ + integer :: PolyOrderErrorCheck real(RP), allocatable :: IntrpMat(:,:) - real(RP) :: intw_intrp(PolyOrderErrorCheck) - real(RP) :: x_intrp(PolyOrderErrorCheck) - + real(RP), allocatable :: intw_intrp(:) + real(RP), allocatable :: x_intrp(:) integer :: nstep_eval_error !------------------------------------------------------- call init() call set_initcond() - field_list(1)%field1d => q - field_list(2)%field1d => u - auxvars_list(1)%field1d => dqdx - do nowstep=1, TIME_NSTEP do rkstage=1, tinteg_lc(1)%nstage !* Exchange halo data @@ -369,12 +357,17 @@ subroutine set_initcond() end subroutine set_initcond subroutine init() - use scale_calendar, only: CALENDAR_setup use scale_time_manager, only: TIME_manager_Init use scale_file_history_meshfield, only: FILE_HISTORY_meshfield_setup use scale_file_history, only: FILE_HISTORY_reg implicit none + + integer :: NeGX = 8 + integer, parameter :: NLocalMeshPerPrc = 1 + integer :: PolyOrder + logical, parameter :: DumpedMassMatFlag = .false. + character(len=H_SHORT) :: TINTEG_SCHEME_TYPE namelist /PARAM_TEST/ & NeGX, PolyOrder, & @@ -382,6 +375,7 @@ subroutine init() InitShapeName, InitShapeParams, & ADV_VEL, & DIFF_COEF, & + PolyOrderErrorCheck, & nstep_eval_error character(len=H_LONG) :: cnf_fname ! config file for launcher @@ -412,7 +406,8 @@ subroutine init() InitShapeParams = (/ 1.0_RP, 0.0_RP /) ADV_VEL = 0.0_RP DIFF_COEF = 0.0_RP - nstep_eval_error = 5 + PolyOrderErrorCheck = 6 + nstep_eval_error = 5 TINTEG_SCHEME_TYPE = 'ERK_SSP_3s3o' rewind(IO_FID_CONF) @@ -452,9 +447,13 @@ subroutine init() call qexact%Init( "qexact", "1", mesh ) call dqdx%Init( "q", "1", mesh ) call u%Init( "u", "m/s", mesh ) + call fields_comm%Init(2, 0, mesh) call auxvars_comm%Init(1, 0, mesh) - + field_list(1)%field1d => q + field_list(2)%field1d => u + auxvars_list(1)%field1d => dqdx + call FILE_HISTORY_meshfield_setup( mesh ) call FILE_HISTORY_reg( q%varname, "q", q%unit, HST_ID(1), dim_type='X') call FILE_HISTORY_reg( qexact%varname, "qexact", q%unit, HST_ID(2), dim_type='X') @@ -468,7 +467,12 @@ subroutine init() end do !------------------ + + ! calculate the information about GL points, weights, and matrix for interpolation + allocate(IntrpMat(PolyOrderErrorCheck,PolyOrder+1)) + allocate(intw_intrp(PolyOrderErrorCheck), x_intrp(PolyOrderErrorCheck)) + IntrpMat(:,:) = refElem%GenIntGaussLegendreIntrpMat( PolyOrderErrorCheck, & ! (in) intw_intrp, x_intrp ) ! (out) diff --git a/sample/advect1d/test_advect1d.f90 b/sample/advect1d/test_advect1d.f90 index 1dee34b0..fa4ce0d6 100644 --- a/sample/advect1d/test_advect1d.f90 +++ b/sample/advect1d/test_advect1d.f90 @@ -48,7 +48,7 @@ program test_advect1d implicit none character(len=H_SHORT) :: InitShapeName !< The type of initial profile (sin, gaussian-hill, cosine-bell, top-hat) - real(RP) :: InitShapeParams(2) + real(RP), save :: InitShapeParams(2) integer :: InitGPMatPolyOrder real(RP) :: ADV_VEL !< The constant speed of advection @@ -61,8 +61,8 @@ program test_advect1d type(MeshField1D), target :: q, u, qexact type(MeshFieldComm1D) :: fields_comm - type(MeshFieldContainer) :: field_list(2) - integer :: HST_ID(2) + type(MeshFieldContainer), save :: field_list(2) + integer, save :: HST_ID(2) integer :: nowstep real(RP) :: tsec_ diff --git a/sample/advect1d_fvm/test_advect1d.f90 b/sample/advect1d_fvm/test_advect1d.f90 index 4804c64b..c7d22645 100644 --- a/sample/advect1d_fvm/test_advect1d.f90 +++ b/sample/advect1d_fvm/test_advect1d.f90 @@ -41,7 +41,7 @@ program test_advect1d ! The type of initial q (sin, gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(2) + real(RP), save :: InitShapeParams(2) ! The type of specified velocify field (constant) real(RP) :: ADV_VEL @@ -61,7 +61,7 @@ program test_advect1d real(RP) :: tsec_ character(len=H_MID), parameter :: APPNAME = "advect1d with FVM" - integer :: HST_ID(2) + integer, save :: HST_ID(2) real(RP), allocatable :: q(:,:,:) real(RP), allocatable :: qexact(:,:,:) real(RP), allocatable :: u(:,:,:) diff --git a/sample/advect2d/test_advect2d.f90 b/sample/advect2d/test_advect2d.f90 index 4d54e0ac..07664b34 100644 --- a/sample/advect2d/test_advect2d.f90 +++ b/sample/advect2d/test_advect2d.f90 @@ -48,10 +48,10 @@ program test_advect2d ! The type of initial q (sin, gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(4) + real(RP), save :: InitShapeParams(4) ! The type of specified velocify field (constant, rigid-body-rot) character(len=H_SHORT) :: VelTypeName - real(RP) :: VelTypeParams(4) + real(RP), save :: VelTypeParams(4) real(RP), parameter :: dom_xmin = 0.0_RP real(RP), parameter :: dom_xmax = +1.0_RP @@ -60,22 +60,19 @@ program test_advect2d type(QuadrilateralElement) :: refElem integer :: PolyOrder - logical, parameter :: LumpedMassMatFlag = .false. logical :: InitCond_GalerkinProjFlag - integer, parameter :: PolyOrderErrorCheck = 6 type(sparsemat) :: Dx, Dy, Lift type(MeshRectDom2D), target :: mesh type(MeshField2D), target :: q, qexact type(MeshField2D), target :: u, v type(MeshFieldCommRectDom2D) :: fields_comm - type(MeshFieldContainer) :: field_list(3) - integer :: HST_ID(2) + type(MeshFieldContainer), save :: field_list(3) + integer, save :: HST_ID(2) integer :: n, ke, p type(LocalMesh2D), pointer :: lcmesh - character(len=H_SHORT) :: TINTEG_SCHEME_TYPE type(timeint_rk), allocatable :: tinteg_lc(:) integer :: nowstep integer :: rkstage @@ -83,10 +80,11 @@ program test_advect2d integer, parameter :: RKVAR_Q = 1 real(RP) :: tsec_ + integer :: PolyOrderErrorCheck real(RP), allocatable :: IntrpMat(:,:) - real(RP) :: intw_intrp(PolyOrderErrorCheck**2) - real(RP) :: x_intrp(PolyOrderErrorCheck**2) - real(RP) :: y_intrp(PolyOrderErrorCheck**2) + real(RP), allocatable :: intw_intrp(:) + real(RP), allocatable :: x_intrp(:) + real(RP), allocatable :: y_intrp(:) integer :: nstep_eval_error !------------------------------------------------------- @@ -386,6 +384,9 @@ subroutine init() use scale_file_history, only: FILE_HISTORY_reg implicit none + + logical, parameter :: LumpedMassMatFlag = .false. + character(len=H_SHORT) :: TINTEG_SCHEME_TYPE namelist /PARAM_TEST/ & NeGX, NeGY, PolyOrder, & @@ -393,6 +394,7 @@ subroutine init() InitShapeName, InitShapeParams, & InitCond_GalerkinProjFlag, & VelTypeName, VelTypeParams, & + PolyOrderErrorCheck, & nstep_eval_error character(len=H_LONG) :: cnf_fname ! config file for launcher @@ -425,7 +427,8 @@ subroutine init() VelTypeName = 'const' InitCond_GalerkinProjFlag = .false. VelTypeParams(:) = (/ 1.0_RP, 1.0_RP, 0.0_RP, 0.0_RP /) - nstep_eval_error = 5 + PolyOrderErrorCheck = 6 + nstep_eval_error = 5 rewind(IO_FID_CONF) read(IO_FID_CONF,nml=PARAM_TEST,iostat=ierr) @@ -482,6 +485,7 @@ subroutine init() !--- allocate( IntrpMat(PolyOrderErrorCheck**2,(PolyOrder+1)**2) ) + allocate( intw_intrp(PolyOrderErrorCheck**2), x_intrp(PolyOrderErrorCheck**2), y_intrp(PolyOrderErrorCheck**2) ) IntrpMat(:,:) = refElem%GenIntGaussLegendreIntrpMat( PolyOrderErrorCheck, & ! (in) intw_intrp, x_intrp, y_intrp ) ! (out) diff --git a/sample/advect2dGlobal/test_advect2dGlobal.f90 b/sample/advect2dGlobal/test_advect2dGlobal.f90 index 6427998c..6e32ccad 100644 --- a/sample/advect2dGlobal/test_advect2dGlobal.f90 +++ b/sample/advect2dGlobal/test_advect2dGlobal.f90 @@ -53,16 +53,15 @@ program test_advect2dGlobal ! The type of initial q (gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(4) + real(RP), save :: InitShapeParams(4) ! The type of specified velocify field (rigid-body-rot) character(len=H_SHORT) :: VelTypeName - real(RP) :: VelTypeParams(4) + real(RP), save :: VelTypeParams(4) type(QuadrilateralElement) :: refElem integer :: PolyOrder logical, parameter :: LumpedMassMatFlag = .false. logical :: InitCond_GalerkinProjFlag - integer, parameter :: PolyOrderErrorCheck = 6 type(sparsemat) :: Dx, Dy, Lift type(MeshCubedSphereDom2D), target :: mesh @@ -70,16 +69,15 @@ program test_advect2dGlobal type(MeshField2D), target :: U, V type(MeshField2D), target :: lon, lat, Gsqrt type(MeshFieldCommCubedSphereDom2D) :: prgvars_comm - type(MeshFieldContainer) :: prgvars_comm_vars(1) + type(MeshFieldContainer), save :: prgvars_comm_vars(1) type(MeshFieldCommCubedSphereDom2D) :: auxvars_comm - type(MeshFieldContainer) :: auxvars_comm_vars(2) + type(MeshFieldContainer), save :: auxvars_comm_vars(2) - integer :: HST_ID(7) + integer, save :: HST_ID(7) integer :: n, ke, p type(LocalMesh2D), pointer :: lcmesh - character(len=H_SHORT) :: TINTEG_SCHEME_TYPE type(timeint_rk), allocatable :: tinteg_lc(:) integer :: nowstep integer :: rkstage @@ -87,10 +85,11 @@ program test_advect2dGlobal integer, parameter :: RKVAR_Q = 1 real(RP) :: tsec_ + integer :: PolyOrderErrorCheck real(RP), allocatable :: IntrpMat(:,:) - real(RP) :: intw_intrp(PolyOrderErrorCheck**2) - real(RP) :: x_intrp(PolyOrderErrorCheck**2) - real(RP) :: y_intrp(PolyOrderErrorCheck**2) + real(RP), allocatable :: intw_intrp(:) + real(RP), allocatable :: x_intrp(:) + real(RP), allocatable :: y_intrp(:) integer :: nstep_eval_error !------------------------------------------------------- @@ -98,10 +97,6 @@ program test_advect2dGlobal call init() call set_initcond() - prgvars_comm_vars(1)%field2d => q - auxvars_comm_vars(1)%field2d => U - auxvars_comm_vars(2)%field2d => V - call auxvars_comm%Put(auxvars_comm_vars, 1) call auxvars_comm%Exchange() call auxvars_comm%Get(auxvars_comm_vars, 1) @@ -434,6 +429,7 @@ subroutine init() implicit none + character(len=H_SHORT) :: TINTEG_SCHEME_TYPE namelist /PARAM_TEST/ & NeGX, NeGY, NLocalMeshPerPrc, & PolyOrder, & @@ -441,6 +437,7 @@ subroutine init() InitShapeName, InitShapeParams, & InitCond_GalerkinProjFlag, & VelTypeName, VelTypeParams, & + PolyOrderErrorCheck, & nstep_eval_error character(len=H_LONG) :: cnf_fname ! config file for launcher @@ -473,7 +470,8 @@ subroutine init() VelTypeName = 'const' InitCond_GalerkinProjFlag = .false. VelTypeParams(:) = (/ 1.0_RP, 1.0_RP, 0.0_RP, 0.0_RP /) - nstep_eval_error = 5 + PolyOrderErrorCheck = 6 + nstep_eval_error = 5 rewind(IO_FID_CONF) read(IO_FID_CONF,nml=PARAM_TEST,iostat=ierr) @@ -526,7 +524,10 @@ subroutine init() call prgvars_comm%Init(1, 0, 0, mesh) call auxvars_comm%Init(0, 1, 0, mesh) - + prgvars_comm_vars(1)%field2d => q + auxvars_comm_vars(1)%field2d => U + auxvars_comm_vars(2)%field2d => V + call lon%Init( "lon", "rad", mesh ) call lat%Init( "lat", "rad", mesh ) call Gsqrt%Init( "Gsqrt", "", mesh ) @@ -543,6 +544,7 @@ subroutine init() call FILE_HISTORY_reg( Gsqrt%varname, "Gsqrt", Gsqrt%unit, HST_ID(7), dim_type='XY') allocate( IntrpMat(PolyOrderErrorCheck**2,(PolyOrder+1)**2) ) + allocate( intw_intrp(PolyOrderErrorCheck**2), x_intrp(PolyOrderErrorCheck**2), y_intrp(PolyOrderErrorCheck**2) ) IntrpMat(:,:) = refElem%GenIntGaussLegendreIntrpMat( PolyOrderErrorCheck, & ! (in) intw_intrp, x_intrp, y_intrp ) ! (out) diff --git a/sample/advect2d_fvm/test.conf b/sample/advect2d_fvm/test.conf index 2a411670..777c064b 100644 --- a/sample/advect2d_fvm/test.conf +++ b/sample/advect2d_fvm/test.conf @@ -14,7 +14,7 @@ ! InitShapeParams = 1.0D0, 1.0D0, 0.15D0, 0.0D0, !- InitShapeName = 'gaussian-hill', - InitShapeParams = 0.25D0, 0.25D0, 0.10D0, 0.0D0, + InitShapeParams = 0.25D0, 0.25D0, 0.05D0, 0.0D0, !- ! InitShapeName = 'top-hat', ! InitShapeParams = 0.0D0, 0.0D0, 0.15D0, 0.15D0, diff --git a/sample/advect2d_fvm/test_advect2d.f90 b/sample/advect2d_fvm/test_advect2d.f90 index d8259dcb..f02f6a1b 100644 --- a/sample/advect2d_fvm/test_advect2d.f90 +++ b/sample/advect2d_fvm/test_advect2d.f90 @@ -50,14 +50,13 @@ program test_advect2d integer :: NeGX, GXHALO integer :: NeGY, GYHALO - integer, parameter :: NLocalMeshPerPrc = 1 ! The type of initial q (sin, gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(4) + real(RP), save :: InitShapeParams(4) ! The type of specified velocify field (constant, rigid-body-rot) character(len=H_SHORT) :: VelTypeName - real(RP) :: VelTypeParams(4) + real(RP), save :: VelTypeParams(4) real(RP), parameter :: dom_xmin = 0.0_RP real(RP), parameter :: dom_xmax = +1.0_RP @@ -77,7 +76,7 @@ program test_advect2d real(RP) :: tsec_ character(len=H_MID), parameter :: APPNAME = "advect2d with FVM" - integer :: HST_ID(2) + integer, save :: HST_ID(2) real(RP), allocatable :: q(:,:,:) real(RP), allocatable :: qexact(:,:,:) real(RP), allocatable :: u(:,:,:) diff --git a/sample/advect3d/test_advect3d.f90 b/sample/advect3d/test_advect3d.f90 index 807b692c..9207614b 100644 --- a/sample/advect3d/test_advect3d.f90 +++ b/sample/advect3d/test_advect3d.f90 @@ -44,14 +44,13 @@ program test_advect3d integer :: NprcX, NprcY integer :: NeX, NeY, NeGZ - integer, parameter :: NLocalMeshPerPrc = 1 ! The type of initial q (sin, gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(6) + real(RP), save :: InitShapeParams(6) ! The type of specified velocify field (constant) character(len=H_SHORT) :: VelTypeName - real(RP) :: VelTypeParams(6) + real(RP), save :: VelTypeParams(6) real(RP), parameter :: dom_xmin = 0.0_RP real(RP), parameter :: dom_xmax = +1.0_RP @@ -62,17 +61,15 @@ program test_advect3d type(HexahedralElement) :: refElem integer :: PolyOrder_h, PolyOrder_v - logical, parameter :: LumpedMassMatFlag = .false. logical :: InitCond_GalerkinProjFlag - integer, parameter :: PolyOrderErrorCheck = 6 - type(sparsemat) :: Dx, Sx, Dy, Sy, Dz, Sz, Lift + type(sparsemat) :: Dx, Dy, Dz, Lift type(MeshCubeDom3D), target :: mesh type(MeshField3D), target :: q, qexact type(MeshField3D), target :: u, v, w type(MeshFieldCommCubeDom3D) :: fields_comm - type(MeshFieldContainer) :: field_list(4) - integer :: HST_ID(2) + type(MeshFieldContainer), save :: field_list(4) + integer, save :: HST_ID(2) integer :: n type(LocalMesh3D), pointer :: lcmesh @@ -85,23 +82,18 @@ program test_advect3d integer, parameter :: RKVAR_Q = 1 real(RP) :: tsec_ + integer :: PolyOrderErrorCheck real(RP), allocatable :: IntrpMat(:,:) - real(RP) :: intw_intrp(PolyOrderErrorCheck**3) - real(RP) :: x_intrp(PolyOrderErrorCheck**3) - real(RP) :: y_intrp(PolyOrderErrorCheck**3) - real(RP) :: z_intrp(PolyOrderErrorCheck**3) - + real(RP), allocatable :: intw_intrp(:) + real(RP), allocatable :: x_intrp(:) + real(RP), allocatable :: y_intrp(:) + real(RP), allocatable :: z_intrp(:) integer :: nstep_eval_error !------------------------------------------------------- call init() call set_initcond() - field_list(1)%field3d => q - field_list(2)%field3d => u - field_list(3)%field3d => v - field_list(4)%field3d => w - do nowstep=1, TIME_NSTEP do rkstage=1, tinteg_lc(1)%nstage tsec_ = TIME_NOWDATE(6) + TIME_NOWSUBSEC @@ -238,7 +230,6 @@ end subroutine cal_bnd_flux_dyn !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ subroutine evaluate_error(tsec) - implicit none real(DP), intent(in) :: tsec @@ -413,14 +404,14 @@ subroutine set_initcond() end subroutine set_initcond subroutine init() - use scale_calendar, only: CALENDAR_setup use scale_time_manager, only: TIME_manager_Init use scale_file_history_meshfield, only: FILE_HISTORY_meshfield_setup use scale_file_history, only: FILE_HISTORY_reg - implicit none + logical, parameter :: LumpedMassMatFlag = .false. + integer, parameter :: NLocalMeshPerPrc = 1 namelist /PARAM_TEST/ & NprcX, NeX, NprcY, NeY, NeGZ, & PolyOrder_h, PolyOrder_v, & @@ -428,6 +419,7 @@ subroutine init() InitShapeName, InitShapeParams, & InitCond_GalerkinProjFlag, & VelTypeName, VelTypeParams, & + PolyOrderErrorCheck, & nstep_eval_error integer :: comm, myrank, nprocs @@ -458,7 +450,8 @@ subroutine init() VelTypeName = 'const' InitCond_GalerkinProjFlag = .false. VelTypeParams(:) = (/ 1.0_RP, 1.0_RP, 1.0_RP, 0.0_RP, 0.0_RP, 0.0_RP /) - nstep_eval_error = 5 + PolyOrderErrorCheck = 6 + nstep_eval_error = 5 rewind(IO_FID_CONF) read(IO_FID_CONF,nml=PARAM_TEST,iostat=ierr) @@ -509,14 +502,20 @@ subroutine init() call u%Init( "u", "m/s", mesh ) call v%Init( "v", "m/s", mesh ) call w%Init( "w", "m/s", mesh ) + call fields_comm%Init(4, 0, 0, mesh) - + field_list(1)%field3d => q + field_list(2)%field3d => u + field_list(3)%field3d => v + field_list(4)%field3d => w + call FILE_HISTORY_meshfield_setup( mesh3d_=mesh ) call FILE_HISTORY_reg( q%varname, "q", q%unit, HST_ID(1), dim_type='XYZ') call FILE_HISTORY_reg( qexact%varname, "qexact", q%unit, HST_ID(2), dim_type='XYZ') !--- allocate( IntrpMat(PolyOrderErrorCheck**3,(PolyOrder_h+1)**2*(PolyOrder_v+1)) ) + allocate( intw_intrp(PolyOrderErrorCheck**3), x_intrp(PolyOrderErrorCheck**3), y_intrp(PolyOrderErrorCheck**3), z_intrp(PolyOrderErrorCheck**3) ) IntrpMat(:,:) = refElem%GenIntGaussLegendreIntrpMat( PolyOrderErrorCheck, & ! (in) intw_intrp, x_intrp, y_intrp, z_intrp ) ! (out) diff --git a/sample/advect3dGlobal/test_advect3dGlobal.f90 b/sample/advect3dGlobal/test_advect3dGlobal.f90 index 13eb5f59..752fc542 100644 --- a/sample/advect3dGlobal/test_advect3dGlobal.f90 +++ b/sample/advect3dGlobal/test_advect3dGlobal.f90 @@ -59,17 +59,15 @@ program test_advect3dGlobal ! The type of initial q (gaussian-hill, cosine-bell, top-hat) character(len=H_SHORT) :: InitShapeName - real(RP) :: InitShapeParams(4) + real(RP), save :: InitShapeParams(4) ! The type of specified velocify field (rigid-body-rot) character(len=H_SHORT) :: VelTypeName - real(RP) :: VelTypeParams(4) + real(RP), save :: VelTypeParams(4) type(HexahedralElement) :: refElem integer :: PolyOrder_h integer :: PolyOrder_v - logical, parameter :: LumpedMassMatFlag = .false. logical :: InitCond_GalerkinProjFlag - integer, parameter :: PolyOrderErrorCheck = 6 type(sparsemat) :: Dx, Dy, Dz, Lift type(MeshCubedSphereDom3D), target :: mesh @@ -77,16 +75,15 @@ program test_advect3dGlobal type(MeshField3D), target :: U, V, W type(MeshField3D), target :: Vellon, Vellat type(MeshFieldCommCubedSphereDom3D) :: prgvars_comm - type(MeshFieldContainer) :: prgvars_comm_vars(1) + type(MeshFieldContainer), save :: prgvars_comm_vars(1) type(MeshFieldCommCubedSphereDom3D) :: auxvars_comm - type(MeshFieldContainer) :: auxvars_comm_vars(3) + type(MeshFieldContainer), save :: auxvars_comm_vars(3) - integer :: HST_ID(7) + integer, save :: HST_ID(7) integer :: n, ke, p type(LocalMesh3D), pointer :: lcmesh - character(len=H_SHORT) :: TINTEG_SCHEME_TYPE type(timeint_rk), allocatable :: tinteg_lc(:) integer :: nowstep integer :: rkstage @@ -94,23 +91,18 @@ program test_advect3dGlobal integer, parameter :: RKVAR_Q = 1 real(RP) :: tsec_ + integer :: PolyOrderErrorCheck real(RP), allocatable :: IntrpMat(:,:) - real(RP) :: intw_intrp(PolyOrderErrorCheck**3) - real(RP) :: x_intrp(PolyOrderErrorCheck**3) - real(RP) :: y_intrp(PolyOrderErrorCheck**3) - real(RP) :: z_intrp(PolyOrderErrorCheck**3) - + real(RP), allocatable :: intw_intrp(:) + real(RP), allocatable :: x_intrp(:) + real(RP), allocatable :: y_intrp(:) + real(RP), allocatable :: z_intrp(:) integer :: nstep_eval_error !------------------------------------------------------- call init() call set_initcond() - - prgvars_comm_vars(1)%field3d => q - auxvars_comm_vars(1)%field3d => W - auxvars_comm_vars(2)%field3d => U - auxvars_comm_vars(3)%field3d => V - + do nowstep=1, TIME_NSTEP do rkstage=1, tinteg_lc(1)%nstage tsec_ = ( dble(nowstep-1) + tinteg_lc(1)%coef_c_ex(rkstage) ) * TIME_DTSEC @@ -476,6 +468,8 @@ subroutine init() implicit none + logical, parameter :: LumpedMassMatFlag = .false. + character(len=H_SHORT) :: TINTEG_SCHEME_TYPE namelist /PARAM_TEST/ & NeGX, NeGY, NeGZ, NLocalMeshPerPrc, & PolyOrder_h, PolyOrder_v, & @@ -484,6 +478,7 @@ subroutine init() InitShapeName, InitShapeParams, & InitCond_GalerkinProjFlag, & VelTypeName, VelTypeParams, & + PolyOrderErrorCheck, & nstep_eval_error character(len=H_LONG) :: cnf_fname ! config file for launcher @@ -518,7 +513,8 @@ subroutine init() VelTypeName = 'const' InitCond_GalerkinProjFlag = .false. VelTypeParams(:) = (/ 1.0_RP, 1.0_RP, 0.0_RP, 0.0_RP /) - nstep_eval_error = 5 + PolyOrderErrorCheck = 6 + nstep_eval_error = 5 rewind(IO_FID_CONF) read(IO_FID_CONF,nml=PARAM_TEST,iostat=ierr) @@ -573,7 +569,11 @@ subroutine init() call prgvars_comm%Init(1, 0, 0, mesh) call auxvars_comm%Init(1, 1, 0, mesh) - + prgvars_comm_vars(1)%field3d => q + auxvars_comm_vars(1)%field3d => W + auxvars_comm_vars(2)%field3d => U + auxvars_comm_vars(3)%field3d => V + call Vellon%Init( "Vellon", "m/s", mesh ) call Vellat%Init( "Vellat", "m/s", mesh ) @@ -588,6 +588,7 @@ subroutine init() call FILE_HISTORY_reg( Vellat%varname, "Vellat", Vellat%unit, HST_ID(7), dim_type='XYZ') allocate( IntrpMat(PolyOrderErrorCheck**3,(PolyOrder_h+1)**2*(PolyOrder_v+1)) ) + allocate( intw_intrp(PolyOrderErrorCheck**3), x_intrp(PolyOrderErrorCheck**3), y_intrp(PolyOrderErrorCheck**3), z_intrp(PolyOrderErrorCheck**3) ) IntrpMat(:,:) = refElem%GenIntGaussLegendreIntrpMat( PolyOrderErrorCheck, & ! (in) intw_intrp, x_intrp, y_intrp, z_intrp ) ! (out) diff --git a/sysdep/Makedef.Linux64-intel-impi b/sysdep/Makedef.Linux64-intel-impi index bf41dddf..d94b4472 100644 --- a/sysdep/Makedef.Linux64-intel-impi +++ b/sysdep/Makedef.Linux64-intel-impi @@ -1,6 +1,6 @@ ################################################################################ # -# ------ For Linux64 & intel fortran&C & intel mpi ----- +# ------ For Linux64 & intel fortran (classic) & C & intel mpi ----- # ################################################################################ diff --git a/sysdep/Makedef.Linux64-llvm-intel-impi b/sysdep/Makedef.Linux64-llvm-intel-impi new file mode 100644 index 00000000..9a7a341b --- /dev/null +++ b/sysdep/Makedef.Linux64-llvm-intel-impi @@ -0,0 +1,93 @@ +################################################################################ +# +# ------ For Linux64 & LLVM based intel fortran&C & intel mpi ----- +# +################################################################################ + +##### Fortran setting +#FFLAGS is set in Mkinclude. FFLAGS_DEBUG is used if SCALE_DEBUG=T + +FC = mpiifx +SFC = ifx +MODDIROPT = -module + +#FFLAGS_FAST = -fpp +FFLAGS_FAST = -fpp -m64 -O3 -xAVX \ + -assume byterecl -convert big_endian \ + -fp-model source \ + -ftz -fno-alias -align all + +FFLAGS_AGGRESSIVE = -ipo -no-prec-div + +FFLAGS_QUICKDEBUG = -traceback -fpe0 -CB -CU + +FFLAGS_DYN = $(FFLAGS) + +FFLAGS_DEBUG = -fpp -m64 -O0 \ + -assume byterecl -convert big_endian \ + -fpe0 -fp-model source \ + -check all -warn all -g -traceback \ + -mcmodel=medium -heap-arrays \ + -assume nobuffered_io + + + +##### C setting +#CFLAGS is set in Mkinclude. CFLAGS_DEBUG is used if SCALE_DEBUG=T + +CC = mpiicx + +CFLAGS_FAST = -O3 -xHost -ip -ftz -mcmodel=medium -shared-intel +CFLAGS_AGGRESSIVE = -ipo -no-prec-div +CFLAGS_DEBUG = -O0 + + + +##### Special setting + +IFORT_VERSION=$(shell $(SFC) -v 2>&1 | cut -f3 -d' ' | cut -f1 -d.) +ifeq ($(shell if [ $(IFORT_VERSION) -ge 15 ]; then echo yes; fi),yes) + FFLAGS_OPENMP = -qopenmp -no-heap-arrays +# FFLAGS_OPENMP = -qopenmp -heap-arrays +else + FFLAGS_OPENMP = -openmp -no-heap-arrays +endif + +ifeq ($(SCALE_DISABLE_INTELVEC),T) + NOVEC = -no-vec +endif + +FFLAGS_SYSDEPEND = $(NOVEC) +CFLAGS_SYSDEPEND = + +FFLAGS_TENTATIVE = -no-ip -no-ipo + +##### Linker setting + +LD = $(FC) +LDFLAGS = $(FFLAGS) + +##### Execute command + +MPIEXEC = "mpiexec.hydra -np" + +################################################################################ + +###### NetCDF library +# Settings are inquired by using nf-config & nc-config command (see scale/Mkinclude) +# Or, please set environment variable +# example: +# export SCALE_NETCDF_INCLUDE="-I/ap/netcdf4-fortran/4.4.2-intel/include -I/ap/HDF5/1.8.16-intel/include -I/ap/netcdf4/4.3.3.1-intel/include" +# export SCALE_NETCDF_LIBS="-L/ap/netcdf4-fortran/4.4.2-intel/lib -L/ap/HDF5/1.8.16-intel/lib -L/ap/netcdf4/4.3.3.1-intel/lib -lnetcdff -lnetcdf" + +###### Math library +# Please set environment variable +# example: +export SCALE_MATHLIB_LIBS="-qmkl=sequential" + +##### for frontend +INSTALL = install +AR = ar +ARFLAGS = r +RANLIB = ranlib +JOBSUB = sh diff --git a/sysdep/Mkjobshell.Linux64-llvm-intel-impi.sh b/sysdep/Mkjobshell.Linux64-llvm-intel-impi.sh new file mode 100644 index 00000000..baf4f0a4 --- /dev/null +++ b/sysdep/Mkjobshell.Linux64-llvm-intel-impi.sh @@ -0,0 +1,130 @@ +#! /bin/bash -x + +# Arguments +MPIEXEC=${1} +BINDIR=${2} +PPNAME=${3} +INITNAME=${4} +BINNAME=${5} +PPCONF=${6} +INITCONF=${7} +RUNCONF=${8} +PROCS=${9} +eval DATPARAM=(`echo ${10} | tr -s '[' '"' | tr -s ']' '"'`) +eval DATDISTS=(`echo ${11} | tr -s '[' '"' | tr -s ']' '"'`) + +PROCLIST=(`echo ${PROCS} | tr -s ',' ' '`) +TPROC=${PROCLIST[0]} +for n in ${PROCLIST[@]} +do + (( n > TPROC )) && TPROC=${n} +done + +if [ ! ${PPCONF} = "NONE" ]; then + CONFLIST=(`echo ${PPCONF} | tr -s ',' ' '`) + ndata=${#CONFLIST[@]} + for n in `seq 1 ${ndata}` + do + let i="n - 1" + RUN_PP=`echo -e "${RUN_PP}\n"${MPIEXEC} ${PROCLIST[i]} ${BINDIR}/${PPNAME} ${CONFLIST[i]} "|| exit 1"` + done +fi + +if [ ! ${INITCONF} = "NONE" ]; then + CONFLIST=(`echo ${INITCONF} | tr -s ',' ' '`) + ndata=${#CONFLIST[@]} + for n in `seq 1 ${ndata}` + do + let i="n - 1" + RUN_INIT=`echo -e "${RUN_INIT}\n"${MPIEXEC} ${PROCLIST[i]} ${BINDIR}/${INITNAME} ${CONFLIST[i]} "|| exit 1"` + done +fi + +if [ ! ${RUNCONF} = "NONE" ]; then + CONFLIST=(`echo ${RUNCONF} | tr -s ',' ' '`) + ndata=${#CONFLIST[@]} + for n in `seq 1 ${ndata}` + do + let i="n - 1" + RUN_MAIN=`echo -e "${RUN_MAIN}\n"${MPIEXEC} ${PROCLIST[i]} ${BINDIR}/${BINNAME} ${CONFLIST[i]} "|| exit 1"` + done +fi + + +cat << EOF1 > ./run.sh +#! /bin/bash -x +################################################################################ +# +# ------ For Linux64 & intel fortran&C & intel mpi ----- +# +################################################################################ +export FORT_FMT_RECL=400 +export OMP_NUM_THREADS=${OMP_NUM_THREADS} + +EOF1 + +# link to file or directory +ndata=${#DATPARAM[@]} + +if [ ${ndata} -gt 0 ]; then + for n in `seq 1 ${ndata}` + do + let i="n - 1" + + pair=(${DATPARAM[$i]}) + + src=${pair[0]} + dst=${pair[1]} + if [ "${dst}" = "" ]; then + dst=${pair[0]} + fi + + if [ -f ${src} ]; then + echo "ln -svf ${src} ./${dst}" >> ./run.sh + elif [ -d ${src} ]; then + echo "rm -f ./${dst}" >> ./run.sh + echo "ln -svf ${src} ./${dst}" >> ./run.sh + else + echo "datafile does not found! : ${src}" + exit 1 + fi + done +fi + +# link to distributed file +ndata=${#DATDISTS[@]} + +if [ ${ndata} -gt 0 ]; then + for n in `seq 1 ${ndata}` + do + let i="n - 1" + + triple=(${DATDISTS[$i]}) + + for np in `seq 1 ${triple[0]}` + do + let "ip = ${np} - 1" + PE=`printf %06d ${ip}` + + src=${triple[1]}.pe${PE}${nc} + dst=${triple[2]}.pe${PE}${nc} + + if [ -f ${src} ]; then + echo "ln -svf ${src} ./${dst}" >> ./run.sh + else + echo "datafile does not found! : ${src}" + exit 1 + fi + done + done +fi + +cat << EOF2 >> ./run.sh + +# run +${RUN_PP} +${RUN_INIT} +${RUN_MAIN} + +################################################################################ +EOF2