test_params_diffusion_m.pf Source File


Contents


Source Code

module test_params_diffusion_m
    !! Tests of parameter handling of diffusion model
    use funit
    use grillix_build_info_m, only : git_repo_path
    use precision_grillix_m, only : GP
    use helpers_m, only : almost_equal
    implicit none
            
contains

    @test
    subroutine test_params_diffusion_mms()
        !! Tests params_diffusion_mms
        use params_diffusion_mms_m
    
        character(len=:), allocatable :: filename 
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! Check default value
        @assertTrue(.not.mms_on)
        
        ! Read parameters and check input
        call read_params_mms(filename)
        call write_params_mms()
        
        ! Check parameter values after read from file 
        @assertTrue(mms_on)

    end subroutine
    
    @test
    subroutine test_params_diffusion_model()
        !! Tests params_diffusion_model
        use params_diffusion_model_m
    
        character(len=:), allocatable :: filename
        logical :: fine
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! No defaults
        
        ! Read parameters
        call read_params_model(filename)
        call write_params_model()
        
        ! Check parameter values after read from file 
        fine = almost_equal(diffcoeff_par, 1.0_GP, rtol = 0.0_GP, atol = 1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(diffcoeff_perp, 1.0E-3_GP, rtol = 0.0_GP, atol = 1.0E-10_GP) 
        @assertTrue(fine)
        
    end subroutine
    
    @test
    subroutine test_params_diffusion_tstep()
        !! Tests params_diffusion_tstep
        use params_diffusion_tstep_m
    
        character(len=:), allocatable :: filename
        logical :: fine
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! Check default values
        @assertEqual(tstep_implicit_level, 0)
        @assertEqual(tstep_order, 2)
        fine = almost_equal(dtau, 1.0E-2_GP, rtol= 0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(tau_fin, 20.0_GP, rtol= 0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(tau_snaps, 1.0_GP, rtol= 0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
        ! Read parameters
        call read_params_tstep(filename)
        call write_params_tstep()
        
        ! Check parameter values after read from file 
        @assertEqual(tstep_implicit_level, 2)
        @assertEqual(tstep_order, 3)
        fine = almost_equal(dtau, 5.0E-3_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(tau_fin, 10.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(tau_snaps, 5.0E-2_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
    end subroutine
    
    @test
    subroutine test_params_diffusion_boundaries_perp()
        !! Tests params_diffusion_boundaries_perp
        use params_diffusion_boundaries_perp_m
        use descriptors_m, only : BND_TYPE_DIRICHLET_ZERO, BND_TYPE_NEUMANN
    
        character(len=:), allocatable :: filename
        logical :: fine
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! Check default values
        @assertEqual(bnd_descr_core, BND_TYPE_DIRICHLET_ZERO)
        @assertEqual(bnd_descr_wall, BND_TYPE_DIRICHLET_ZERO)
        @assertEqual(bnd_descr_dome, BND_TYPE_DIRICHLET_ZERO)
        @assertEqual(bnd_descr_out, BND_TYPE_DIRICHLET_ZERO)
        fine = almost_equal(bnd_val_core, 0.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(bnd_val_wall, 0.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(bnd_val_dome, 0.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(bnd_val_out, 0.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
        ! Read parameters
        call read_params_boundaries_perp(filename)
        call write_params_boundaries_perp()
        
        ! Check parameter values after read from file 
        @assertEqual(bnd_descr_core, BND_TYPE_NEUMANN)
        @assertEqual(bnd_descr_wall, BND_TYPE_NEUMANN)
        @assertEqual(bnd_descr_dome, BND_TYPE_NEUMANN)
        @assertEqual(bnd_descr_out, BND_TYPE_NEUMANN)
        fine = almost_equal(bnd_val_core, 0.1_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(bnd_val_wall, 0.2_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(bnd_val_dome, 0.3_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(bnd_val_out, 0.4_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
    end subroutine

    @test
    subroutine test_params_diffusion_boundaries_parpen()
        !! Tests params_diffusion_boundaries_parpen
        use params_diffusion_boundaries_parpen_m
        use descriptors_m, only : BND_TYPE_DIRICHLET_ZERO, BND_TYPE_NEUMANN
    
        character(len=:), allocatable :: filename
        logical :: fine
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! Check default values
        @assertEqual(bnd_descr_par, BND_TYPE_DIRICHLET_ZERO)
        @assertTrue(.not.bnd_par_odd)
        fine = almost_equal(bnd_val_par, 0.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(epsinv, 0.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
        ! Read parameters
        call read_params_boundaries_parpen(filename)
        call write_params_boundaries_parpen()
        
        ! Check parameter values after read from file 
        @assertEqual(bnd_descr_par, BND_TYPE_NEUMANN)
        @assertTrue(bnd_par_odd)
        fine = almost_equal(bnd_val_par, 0.7_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        fine = almost_equal(epsinv, 10.0_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
    end subroutine
    
    @test
    subroutine test_params_diffusion_init_select()
        !! Tests params_diffusion_boundaries_parpen
        use params_diffusion_init_select_m
    
        character(len=:), allocatable :: filename
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! Check default values
        @assertEqual(trim(adjustl(init_type)), 'BLOB')
        @assertEqual(trim(adjustl(init_path)), 'params_diffusion.in')
        
        ! Read parameters and check input
        call read_params_init_select(filename)
        call write_params_init_select()
        
         ! Check parameter values after read from file 
        @assertEqual(trim(adjustl(init_type)), 'BLOB_ALIGNED')
        @assertEqual(trim(adjustl(init_path)), 'sample_params_diffusion.in')
        
    end subroutine
                    
    @test
    subroutine test_params_diffusion_parsolver()
        !! Tests params_diffusion_parsolver
        use params_diffusion_parsolver_m
        use solver_aligned3d_m, only : params_solver_aligned3d_t
    
        character(len=:), allocatable :: filename
        logical :: fine
        type(params_solver_aligned3d_t) :: default_params
        ! Default aprameters of solver
        
        filename = git_repo_path // &
                   '/cicd/res/params/sample_params_diffusion.in'
                   
        ! Check default values
        @assertEqual(parsolver_params%precond_type, default_params%precond_type)
        @assertEqual(parsolver_params%maxiter, default_params%maxiter)
        @assertEqual(parsolver_params%nrestart, default_params%nrestart)
        @assertEqual(parsolver_params%dbgout, default_params%dbgout)
        fine = almost_equal(parsolver_params%resmax,  default_params%resmax, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
        ! Read parameters
        call read_params_parsolver(filename)
        call write_params_parsolver()
        
         ! Check parameter values after read from file 
        @assertEqual(parsolver_params%precond_type, 'JAC')
        @assertEqual(parsolver_params%maxiter, 25)
        @assertEqual(parsolver_params%nrestart, 7)
        @assertEqual(parsolver_params%dbgout, 1)
        fine = almost_equal(parsolver_params%resmax,  1.0E-6_GP, rtol=0.0_GP, atol=1.0E-10_GP)
        @assertTrue(fine)
        
    end subroutine
    
end module