test_equilibrium_storage_m.pf Source File


Contents


Source Code

module test_equilibrium_storage_m
    use funit
    implicit none
contains
    
    @test
    subroutine equilibrium_storage_cerfons
        !! Test of inplane operators in cerfons geometry
        use precision_grillix_m, only : GP
        use helpers_mesh_sample_m, only : mesh_sample_cerfons
        use helpers_m, only : almost_equal
        use equilibrium_storage_m, only : equilibrium_storage_t
        use equilibrium_m, only : equilibrium_t
        use mesh_cart_m, only : mesh_cart_t

        class(equilibrium_t), allocatable :: equi
        type(mesh_cart_t) :: mesh
        type(equilibrium_storage_t) :: equi_st

        logical :: fine
        integer :: l, iret
        real(GP) :: phi, x, y, epolx, epoly, eradx, erady

        write(*,*)''
        write(*,*)''
        write(*,'(A80)')'test_equilibrium_storage_cerfons ------------------------------------------'
       
        ! Create samplemesh ---------------------------------------------------------------------------
        phi = 0.0_GP
        call mesh_sample_cerfons(equi, phi, mesh)

        call equi_st%fill_storage(equi, mesh)


        ! Select a specific point for testing ---------------------------------------------------------
        do l = 1, mesh%get_n_points()
            x = mesh%get_x(l)
            y = mesh%get_y(l)
            fine = almost_equal(equi_st%rho(l), equi%rho(x,y, phi), rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine) 
            fine = almost_equal(equi_st%bx(l), equi%bx(x,y, phi), rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            fine = almost_equal(equi_st%by(l), equi%by(x,y, phi), rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            fine = almost_equal(equi_st%btor(l), equi%btor(x,y, phi), rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            fine = almost_equal(equi_st%absb(l), equi%absb(x,y, phi), rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            
            call equi%epol(x,y, phi, epolx, epoly)
            fine = almost_equal(equi_st%epol(l,1), epolx, rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            fine = almost_equal(equi_st%epol(l,2), epoly, rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            
            call equi%erad(x,y, phi, eradx, erady)
            fine = almost_equal(equi_st%erad(l,1), eradx, rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)
            fine = almost_equal(equi_st%erad(l,2), erady, rtol = 0.0_GP, atol = 1.0E-8_GP)
            @assertTrue(fine)    
            
            iret = equi%district(x, y, phi)
            @assertEqual(equi_st%district(l), iret)            
        enddo
        
        write(*,'(A80)')'test_equilibrium_storage_cerfons complete ---------------------------------'
        write(*,*)''
        write(*,*)''
        
    end subroutine
end module