cross Subroutine

public subroutine cross(a, b, c)

Uses

  • proc~~cross~~UsesGraph proc~cross cross module~mod_geometry mod_geometry proc~cross->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~cross->module~mod_global_parameters module~mod_comm_lib mod_comm_lib module~mod_geometry->module~mod_comm_lib module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

Type IntentOptional Attributes Name
double precision, intent(in), dimension(ndir) :: a
double precision, intent(in), dimension(ndir) :: b
double precision, intent(out), dimension(ndir) :: c

Calls

proc~~cross~~CallsGraph proc~cross cross proc~mpistop mpistop proc~cross->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~cross~~CalledByGraph proc~cross cross proc~derivs_gca derivs_gca proc~derivs_gca->proc~cross proc~derivs_gca_rk derivs_gca_rk proc~derivs_gca_rk->proc~cross proc~gca_integrate_particles gca_integrate_particles proc~gca_integrate_particles->proc~cross proc~gca_integrate_particles->proc~derivs_gca proc~gca_integrate_particles->proc~derivs_gca_rk proc~gca_update_payload gca_update_payload proc~gca_integrate_particles->proc~gca_update_payload proc~gca_get_particle_dt gca_get_particle_dt proc~gca_integrate_particles->proc~gca_get_particle_dt proc~gca_update_payload->proc~cross proc~lorentz_kick Lorentz_kick proc~lorentz_kick->proc~cross proc~lorentz_update_payload Lorentz_update_payload proc~lorentz_update_payload->proc~cross proc~gca_create_particles gca_create_particles proc~gca_create_particles->proc~gca_update_payload proc~gca_get_particle_dt->proc~derivs_gca proc~gca_get_particle_dt->proc~derivs_gca_rk proc~lorentz_create_particles Lorentz_create_particles proc~lorentz_create_particles->proc~lorentz_update_payload proc~lorentz_integrate_particles Lorentz_integrate_particles proc~lorentz_integrate_particles->proc~lorentz_kick proc~lorentz_integrate_particles->proc~lorentz_update_payload proc~particles_create particles_create proc~particles_create->proc~gca_create_particles proc~particles_create->proc~lorentz_create_particles proc~main main proc~main->proc~particles_create program~agile agile program~agile->proc~main

Source Code

  subroutine cross(a,b,c)
    use mod_global_parameters
    use mod_geometry
    double precision, dimension(ndir), intent(in)   :: a,b
    double precision, dimension(ndir), intent(out)  :: c

    ! ndir needs to be three for this to work!!!
    if(ndir==3) then
      select case(coordinate)
      case(Cartesian,Cartesian_stretched,spherical)
        c(1) = a(2)*b(3) - a(3)*b(2)
        c(2) = a(3)*b(1) - a(1)*b(3)
        c(3) = a(1)*b(2) - a(2)*b(1)
      case (cylindrical)
        c(r_)   = a(phi_)*b(z_) - a(z_)*b(phi_)
        c(phi_) = a(z_)*b(r_) - a(r_)*b(z_)
        c(z_)   = a(r_)*b(phi_) - a(phi_)*b(r_)
      case default
        call mpistop('geometry not implemented in cross(a,b,c)')
      end select
    else
      call mpistop("cross in particles needs to be run with three components!")

    end if

  end subroutine cross