test.f90 Source File


This file depends on

sourcefile~~test.f90~~EfferentGraph sourcefile~test.f90 test.f90 sourcefile~module_scalar_schw_eff_source.f90 module_scalar_schw_eff_source.f90 sourcefile~test.f90->sourcefile~module_scalar_schw_eff_source.f90 sourcefile~module_self_force_observer.f90 module_self_force_observer.f90 sourcefile~test.f90->sourcefile~module_self_force_observer.f90 sourcefile~module_grid.f90 module_grid.f90 sourcefile~test.f90->sourcefile~module_grid.f90 sourcefile~module_world_tube.f90 module_world_tube.f90 sourcefile~test.f90->sourcefile~module_world_tube.f90 sourcefile~module_singular_observer.f90 module_singular_observer.f90 sourcefile~test.f90->sourcefile~module_singular_observer.f90 sourcefile~module_geod_schw.f90 module_geod_schw.f90 sourcefile~test.f90->sourcefile~module_geod_schw.f90 sourcefile~module_dg_structures.f90 module_DG_structures.f90 sourcefile~test.f90->sourcefile~module_dg_structures.f90 sourcefile~module_analytic_circular_orbit.f90 module_analytic_circular_orbit.f90 sourcefile~test.f90->sourcefile~module_analytic_circular_orbit.f90 sourcefile~module_observers.f90 module_observers.f90 sourcefile~test.f90->sourcefile~module_observers.f90 sourcefile~module_self_force.f90 module_self_force.f90 sourcefile~test.f90->sourcefile~module_self_force.f90 sourcefile~module_scalar_schw.f90 module_scalar_schw.f90 sourcefile~test.f90->sourcefile~module_scalar_schw.f90 sourcefile~module_all_integrators.f90 module_all_integrators.f90 sourcefile~test.f90->sourcefile~module_all_integrators.f90 sourcefile~module_parameters.f90 module_parameters.f90 sourcefile~test.f90->sourcefile~module_parameters.f90 sourcefile~module_osc_schw.f90 module_osc_schw.f90 sourcefile~test.f90->sourcefile~module_osc_schw.f90 sourcefile~module_time.f90 module_time.f90 sourcefile~test.f90->sourcefile~module_time.f90 sourcefile~module_numerics.f90 module_numerics.f90 sourcefile~test.f90->sourcefile~module_numerics.f90 sourcefile~module_kinds.f90 module_kinds.f90 sourcefile~module_scalar_schw_eff_source.f90->sourcefile~module_kinds.f90 sourcefile~module_effective_source.f90 module_effective_source.f90 sourcefile~module_scalar_schw_eff_source.f90->sourcefile~module_effective_source.f90 sourcefile~module_self_force_observer.f90->sourcefile~module_observers.f90 sourcefile~module_self_force_observer.f90->sourcefile~module_scalar_schw.f90 sourcefile~module_element.f90 module_element.f90 sourcefile~module_grid.f90->sourcefile~module_element.f90 sourcefile~module_grid_function.f90 module_grid_function.f90 sourcefile~module_grid.f90->sourcefile~module_grid_function.f90 sourcefile~module_grid.f90->sourcefile~module_kinds.f90 sourcefile~module_world_tube.f90->sourcefile~module_grid_function.f90 sourcefile~module_world_tube.f90->sourcefile~module_kinds.f90 sourcefile~module_singular_observer.f90->sourcefile~module_observers.f90 sourcefile~module_singular_observer.f90->sourcefile~module_effective_source.f90 sourcefile~module_geod_schw.f90->sourcefile~module_kinds.f90 sourcefile~module_ode_equations.f90 module_ode_equations.f90 sourcefile~module_geod_schw.f90->sourcefile~module_ode_equations.f90 sourcefile~module_dg_structures.f90->sourcefile~module_kinds.f90 sourcefile~module_equations.f90 module_equations.f90 sourcefile~module_analytic_circular_orbit.f90->sourcefile~module_equations.f90 sourcefile~module_analytic_circular_orbit.f90->sourcefile~module_kinds.f90 sourcefile~module_observers.f90->sourcefile~module_grid_function.f90 sourcefile~module_observers.f90->sourcefile~module_kinds.f90 sourcefile~module_self_force.f90->sourcefile~module_parameters.f90 sourcefile~module_self_force.f90->sourcefile~module_time.f90 sourcefile~module_self_force.f90->sourcefile~module_numerics.f90 sourcefile~module_self_force.f90->sourcefile~module_kinds.f90 sourcefile~module_output.f90 module_output.f90 sourcefile~module_self_force.f90->sourcefile~module_output.f90 sourcefile~module_orbit.f90 module_orbit.f90 sourcefile~module_self_force.f90->sourcefile~module_orbit.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_scalar_schw_eff_source.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_dg_structures.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_grid_function.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_kinds.f90 sourcefile~module_time_dependent_coordinate.f90 module_time_dependent_coordinate.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_time_dependent_coordinate.f90 sourcefile~module_pde_equations.f90 module_pde_equations.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_pde_equations.f90 sourcefile~module_scalar_schw.f90->sourcefile~module_orbit.f90 sourcefile~module_all_integrators.f90->sourcefile~module_parameters.f90 sourcefile~module_abmv5.f90 module_abmv5.f90 sourcefile~module_all_integrators.f90->sourcefile~module_abmv5.f90 sourcefile~module_rk4.f90 module_rk4.f90 sourcefile~module_all_integrators.f90->sourcefile~module_rk4.f90 sourcefile~module_rk5.f90 module_rk5.f90 sourcefile~module_all_integrators.f90->sourcefile~module_rk5.f90 sourcefile~module_parameters.f90->sourcefile~module_kinds.f90 sourcefile~module_osc_schw.f90->sourcefile~module_kinds.f90 sourcefile~module_osc_schw.f90->sourcefile~module_ode_equations.f90 sourcefile~module_time.f90->sourcefile~module_kinds.f90 sourcefile~module_numerics.f90->sourcefile~module_kinds.f90 sourcefile~module_gsl_interface.f90 module_gsl_interface.f90 sourcefile~module_numerics.f90->sourcefile~module_gsl_interface.f90 sourcefile~module_equations.f90->sourcefile~module_kinds.f90 sourcefile~module_abmv5.f90->sourcefile~module_kinds.f90 sourcefile~module_mol.f90 module_mol.f90 sourcefile~module_abmv5.f90->sourcefile~module_mol.f90 sourcefile~module_rk4.f90->sourcefile~module_kinds.f90 sourcefile~module_rk4.f90->sourcefile~module_mol.f90 sourcefile~module_element.f90->sourcefile~module_kinds.f90 sourcefile~module_grid_function.f90->sourcefile~module_element.f90 sourcefile~module_grid_function.f90->sourcefile~module_kinds.f90 sourcefile~module_output.f90->sourcefile~module_kinds.f90 sourcefile~module_gsl_interface.f90->sourcefile~module_kinds.f90 sourcefile~module_time_dependent_coordinate.f90->sourcefile~module_grid_function.f90 sourcefile~module_time_dependent_coordinate.f90->sourcefile~module_kinds.f90 sourcefile~module_rk5.f90->sourcefile~module_kinds.f90 sourcefile~module_rk5.f90->sourcefile~module_mol.f90 sourcefile~module_pde_equations.f90->sourcefile~module_equations.f90 sourcefile~module_pde_equations.f90->sourcefile~module_grid_function.f90 sourcefile~module_pde_equations.f90->sourcefile~module_kinds.f90 sourcefile~module_orbit.f90->sourcefile~module_kinds.f90 sourcefile~module_ode_equations.f90->sourcefile~module_equations.f90 sourcefile~module_ode_equations.f90->sourcefile~module_kinds.f90 sourcefile~module_effective_source.f90->sourcefile~module_world_tube.f90 sourcefile~module_effective_source.f90->sourcefile~module_grid_function.f90 sourcefile~module_effective_source.f90->sourcefile~module_kinds.f90 sourcefile~module_mol.f90->sourcefile~module_equations.f90 sourcefile~module_mol.f90->sourcefile~module_kinds.f90

Contents

Source Code


Source Code

program test

  use parameters
  use time_info
  use DG_structures
  use grid
  use scalar_schw
  use all_integrators
  use observers
  use geodesic_schwarzschild
  use osculating_schwarzschild
  use world_tube
  use scalar_schw_eff
  use self_force_observer
  use self_force_base
  use numerics, only : time_window
  use analytic_circular_orbit
  use singular_observer

  implicit none

  class(equation), pointer  :: eqp
  type(scal_schw), allocatable, target :: my_eq
  integer(ip) :: i, j, k
  type(ref_element) :: relem
  class(equation_pointer), dimension(:), allocatable :: eqs
  type(cobserver), dimension(:,:), allocatable :: cobs
  type(sing_observer) :: sobs
  class(equation), pointer :: orbit
  complex(wp), dimension(:,:), allocatable :: psi, dpsidt, dpsidr
  real(wp) :: r, phi, ur, En, Lz, tfac, dtfac_dt, dt2fac_dt2

  call read_parameters ()

  print*,'p_orb = ', p_orb
  print*,'ecc = ', ecc
  relem = ref_element( order )

  call init_grid_coordinates ( relem )

  call init_time ( t_initial )

  if (use_world_tube) then
    wt = wtube()

!    call wt%win%output(rho)
!    call wt%dwin%output(rho)
!    call wt%d2win%output(rho)
!    call wt%boundary_info%output(rho)
  end if

  if ( use_generic_orbit ) then
    if ( use_osculating_orbit ) then
      allocate ( osc_schw :: orbit )
    else
      allocate ( geod_schw :: orbit )
    end if
  else
    allocate ( circular_orbit :: orbit )
  end if 
  call orbit%init ( )

  print*,'rho%vname = ', rho%vname
  print*,'equation_name = ', equation_name
  print*,'n_elems = ', n_elems
  print*,'order = ', order
  allocate(my_eq)
  call my_eq%init ( )

  if ( output_coords_for_exact ) then
    call my_eq%output_coords ( )
  end if

  call sobs%init ( (/ p_orb /), my_eq%r_star, my_eq%effs )

  allocate(eqs(2))
  eqs(1)%p => my_eq
  eqs(2)%p => orbit
!  allocate(eqs(2))
!  eqs(1)%p => orbit
  print*,'my_eq%eq_data(1,1)%vname = ', my_eq%eq_data(1,1)%vname
  print*,'my_eq%eq_data(2,1)%vname = ', my_eq%eq_data(2,1)%vname
  print*,'my_eq%eq_data(3,1)%vname = ', my_eq%eq_data(3,1)%vname

  if (use_particle) then
    call time_window ( get_current_time (), tsigma, torder, tfac, &
                                     dtfac_dt, dt2fac_dt2 )
    print*,'Setting time window: ', get_current_time ( ), tfac, dtfac_dt, dt2fac_dt2
! Tell the effective source about the time 
    if ( turn_on_source_smoothly ) then
      call my_eq%effs%set_time_window ( tfac, dtfac_dt, dt2fac_dt2, -1 )
    else
      call my_eq%effs%set_time_window ( tfac, dtfac_dt, dt2fac_dt2, &
                                      exact_initial_data_lmax )
    end if
    print*,'Setting particle position'
    call orbit_info%get_orbit ( r, phi, ur, En, Lz )
    call my_eq%effs%set_particle_pos ( r, phi, ur, En, Lz,  &
                               0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp )
    print*,'Particle position set'
    print*,'Evaluating effective source'
    call my_eq%effs%evaluate_source ( my_eq%r_schw, wt )
    print*,'Effective source evaluated'
  end if
  if (use_exact_initial_data) then
    call my_eq%read_all_modes ( )
  end if

  do i = 1, my_eq%effs%nmodes
    call my_eq%effs%source(1,i)%output(rho)
!    if (use_particle) then
!      call my_eq%eq_lcoeffs(i)%output(rho)
!    end if
  end do
  call my_eq%r_schw%output(rho)
!  do i = 1, 4
!    call my_eq%eq_coeffs(i)%output(rho)
!  end do
!  do i = 1, 2
!    call my_eq%eq_lambda(i)%output(rho)
!    do j = 1, 2
!      call my_eq%eq_s(i,j)%output(rho)
!      call my_eq%eq_sinv(i,j)%output(rho)
!    end do
!  end do 

  do i = 1, my_eq%nmodes
    do j = 1, 3
      call my_eq%eq_data(j,i)%output(rho)
      call my_eq%eq_rhs_data(j,i)%output(rho)
    end do
!    do j = 1, 2
!      call my_eq%eq_flux_data(j,i)%output(rho)
!    end do
  end do
  print*,'Calling orbit output'
  call orbit%output()

  allocate ( cobs(3,my_eq%nmodes) )
  do i = 1, my_eq%nmodes
    do j = 1, 3
      call cobs(j,i)%init( (/ rho_min, rho_max /), rho, my_eq%eq_data(j,i) )
      call cobs(j,i)%extract ( )
      call cobs(j,i)%output ( )
    end do
  end do
  print*,'elem_index = ', cobs(1,1)%elem_index
  print*,'node_index = ', cobs(1,1)%node_index

  if (use_particle) then
    call sfobs%init( (/ rho_particle /), rho, my_eq )
    call sfobs%extract ( )
    call sfobs%output ( )
    call sf%output ( )
  end if

  call choose_integrator ( )

  if (use_particle .and. use_generic_orbit) then
      call set_dtime ( coufac*delta_rho_min/my_eq%time_dep_coord%maxspeed )
  else
    call set_dtime ( coufac*delta_rho_min )
  end if
  print*,'dtime = ', get_current_dtime ( )

  call mol_int%init(eqs)
  print*,'ntemp for integrator ', mol_integrator, ' = ', mol_int%ntemp()

  if ( use_particle ) then
    print*,'turn_on_source_smoothly = ', turn_on_source_smoothly
    print*,'exact_initial_data_lmax = ', exact_initial_data_lmax, lmax
    if ( turn_on_source_smoothly .or. &
         (use_exact_initial_data .and. exact_initial_data_lmax < lmax ) ) then
      if (get_current_dtime()*100.0_wp>4.0_wp*tsigma) then
        print*,'In order to turn on the source smoothly, using dtime = ', 4.0_wp*tsigma/100
        call set_dtime ( 4.0_wp*tsigma/100 )
        short_timesteps_active = .true.
      end if
    end if
  end if

  print*,'Starting evolution at time = ', get_current_time ( )
  k = 0
  do 
    if ( get_current_time () > t_final ) exit
    k = k+1
!    print*,'time = ', get_current_time ( )
    call mol_int%step( )

    if (out1d_every>0 .and. mod(k,out1d_every)==0) then
      do i = 1, my_eq%nmodes
        do j = 1, 3
          call my_eq%eq_data(j,i)%output(rho)
          call my_eq%eq_rhs_data(j,i)%output(rho)
        end do
!        do j = 1, 2
!!          call my_eq%eq_flux_data(j,i)%output(rho)
!        end do
        if (use_particle) then
          call my_eq%effs%source(1,i)%output(rho)
        end if
      end do
!      do j = 1, 4
!        call my_eq%eq_coeffs(j)%output(rho)
!      end do 
!      call my_eq%r_star%output(rho)
!      call my_eq%r_schw%output(rho)
    end if
    if (out0d_every>0 .and. mod(k,out0d_every)==0) then
      do i = 1, my_eq%nmodes
        do j = 1, 3
          call cobs(j,i)%extract ( )
          call cobs(j,i)%output ( )
        end do
      end do
      if (use_particle) then
        call sfobs%extract ( )
        call sfobs%output ( )
      end if
      call orbit%output ( )
      call sf%output ( )
    end if
  end do

  print*,'Program ended after ', k, ' iterations.'
end program test