spx_module.f90 Source File


Contents

Source Code


Source Code

!> spx业务层
module spx_module

    use spx_kinds, only: rk
    use spx_configuration, only: spc_obj, tic_obj, ioc_obj
    use spx_pif_namelist, only: pnl_obj
    use spx_pif_h5part, only: pif_obj
    use spx_time_integration, only: tig_obj
    use spx_smoothed_kernel_function, only: skf_obj
    use spx_external_force, only: exf_obj
    use spx_eos, only: eow_obj
    use spx_density_summation, only: dsm_obj
    use spx_nnps_pairs, only: pairs, nnps_grid
    use spx_memory, only: mem_obj
    use spx_env, only: backup, rgn_obj, float_obj
    implicit none

    private
    public :: run

contains

    !> sph求解器
    !> @note 目前仅支持液体模拟
    subroutine run()
        integer :: i

        ! 读取配置文件
        call spc_obj%read()
        call tic_obj%read()
        call ioc_obj%read()

        ! 读取粒子属性
        call pnl_obj%read()
        call pif_obj%read(rgn_obj)
        allocate (float_obj(pif_obj%numbers(5)))  ! 初始化浮动粒子对象
        do i = 1, pif_obj%numbers(5)
            call float_obj(i)%init(pif_obj%ptc, istart=pif_obj%float_objects(1, i), &
                                   iend=pif_obj%float_objects(2, i))
        end do

        ! 储存固定粒子属性
        call rgn_obj%create_backup(backup, istart=pif_obj%nreal + 1, iend=pif_obj%numbers(4))

        ! 初始化输出文件
        call pif_obj%open()
        call pif_obj%write(0.0_rk)
        call skf_obj%init()
        call exf_obj%init()
        call eow_obj%init()
        call dsm_obj%init()
        call nnps_grid%init(rgn_obj%loc, pif_obj%numbers(4))
        call pairs%init(pif_obj%numbers(4)) ! 4096 是初始化的预估粒子对数

        ! ! 力学时间积分求解并输出结果
        call tig_obj%init()
        call tig_obj%run()

        ! 析构
        call pif_obj%close()
        call mem_obj%init()
        call mem_obj%report()

    end subroutine run

end module spx_module