set_B0_face Subroutine

private subroutine set_B0_face(igrid, x, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3)

Uses

  • proc~~set_b0_face~~UsesGraph proc~set_b0_face set_B0_face module~mod_global_parameters mod_global_parameters proc~set_b0_face->module~mod_global_parameters 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
integer, intent(in) :: igrid
double precision, intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1:ndim)
integer, intent(in) :: ixImin1
integer, intent(in) :: ixImin2
integer, intent(in) :: ixImin3
integer, intent(in) :: ixImax1
integer, intent(in) :: ixImax2
integer, intent(in) :: ixImax3
integer, intent(in) :: ixOmin1
integer, intent(in) :: ixOmin2
integer, intent(in) :: ixOmin3
integer, intent(in) :: ixOmax1
integer, intent(in) :: ixOmax2
integer, intent(in) :: ixOmax3

Calls

proc~~set_b0_face~~CallsGraph proc~set_b0_face set_B0_face proc~set_b0_cell set_B0_cell proc~set_b0_face->proc~set_b0_cell dcos dcos proc~set_b0_cell->dcos dsin dsin proc~set_b0_cell->dsin

Called by

proc~~set_b0_face~~CalledByGraph proc~set_b0_face set_B0_face proc~set_b0_grid set_B0_grid proc~set_b0_grid->proc~set_b0_face proc~alloc_node alloc_node proc~alloc_node->proc~set_b0_grid proc~alloc_node~2 alloc_node proc~alloc_node~2->proc~set_b0_grid proc~alloc_node~3 alloc_node proc~alloc_node~3->proc~set_b0_grid proc~alloc_node~4 alloc_node proc~alloc_node~4->proc~set_b0_grid

Source Code

  subroutine set_B0_face(igrid,x,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
     ixImax3,ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3)
    use mod_global_parameters
  
    integer, intent(in) :: igrid, ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
       ixImax3, ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3
    double precision, intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,&
       ixImin3:ixImax3,1:ndim)
  
    double precision :: delx(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,&
       1:ndim)
    double precision :: xC(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,&
       1:ndim),xshift1,xshift2,xshift3
    integer :: idims, ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3, hxOmin1,&
       hxOmin2,hxOmin3,hxOmax1,hxOmax2,hxOmax3, ix, idims2
  
    if(slab_uniform)then
      delx(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,1)=rnode(rpdx1_,&
         igrid)
      delx(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,2)=rnode(rpdx2_,&
         igrid)
      delx(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,3)=rnode(rpdx3_,&
         igrid)
    else
      ! for all non-cartesian and stretched cartesian coordinates
      delx(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,&
         1:ndim)=ps(igrid)%dx(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,&
         1:ndim)
    endif
  
  
    do idims=1,ndim
      hxOmin1=ixOmin1-kr(idims,1);hxOmin2=ixOmin2-kr(idims,2)
      hxOmin3=ixOmin3-kr(idims,3);hxOmax1=ixOmax1-kr(idims,1)
      hxOmax2=ixOmax2-kr(idims,2);hxOmax3=ixOmax3-kr(idims,3);
      if(stagger_grid) then
        ! ct needs all transverse cells
        ixCmax1=ixOmax1+nghostcells-nghostcells*kr(idims,1)
        ixCmax2=ixOmax2+nghostcells-nghostcells*kr(idims,2)
        ixCmax3=ixOmax3+nghostcells-nghostcells*kr(idims,3)
        ixCmin1=hxOmin1-nghostcells+nghostcells*kr(idims,1)
        ixCmin2=hxOmin2-nghostcells+nghostcells*kr(idims,2)
        ixCmin3=hxOmin3-nghostcells+nghostcells*kr(idims,3);
      else
        ! ixC is centered index in the idims direction from ixOmin-1/2 to ixOmax+1/2
        ixCmax1=ixOmax1;ixCmax2=ixOmax2;ixCmax3=ixOmax3; ixCmin1=hxOmin1
        ixCmin2=hxOmin2;ixCmin3=hxOmin3;
      end if
      ! always xshift=0 or 1/2
      xshift1=half*(one-kr(1,idims));xshift2=half*(one-kr(2,idims))
      xshift3=half*(one-kr(3,idims));
      do idims2=1,ndim
        select case(idims2)
        case(1)
          do ix = ixCmin1,ixCmax1
            ! xshift=half: this is the cell center coordinate
            ! xshift=0: this is the cell edge i+1/2 coordinate
            xC(ix,ixCmin2:ixCmax2,ixCmin3:ixCmax3,1)=x(ix,ixCmin2:ixCmax2,&
               ixCmin3:ixCmax3,1)+(half-xshift1)*delx(ix,ixCmin2:ixCmax2,&
               ixCmin3:ixCmax3,1)
          end do
        case(2)
          do ix = ixCmin2,ixCmax2
            ! xshift=half: this is the cell center coordinate
            ! xshift=0: this is the cell edge i+1/2 coordinate
            xC(ixCmin1:ixCmax1,ix,ixCmin3:ixCmax3,2)=x(ixCmin1:ixCmax1,ix,&
               ixCmin3:ixCmax3,2)+(half-xshift2)*delx(ixCmin1:ixCmax1,ix,&
               ixCmin3:ixCmax3,2)
          end do
        case(3)
          do ix = ixCmin3,ixCmax3
            ! xshift=half: this is the cell center coordinate
            ! xshift=0: this is the cell edge i+1/2 coordinate
            xC(ixCmin1:ixCmax1,ixCmin2:ixCmax2,ix,3)=x(ixCmin1:ixCmax1,&
               ixCmin2:ixCmax2,ix,3)+(half-xshift3)*delx(ixCmin1:ixCmax1,&
               ixCmin2:ixCmax2,ix,3)
          end do
        end select
      end do
      call set_B0_cell(ps(igrid)%B0(ixImin1:ixImax1,ixImin2:ixImax2,&
         ixImin3:ixImax3,:,idims),xC,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
         ixImax3,ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3)
    end do
  
  end subroutine set_B0_face