BOUNDARY: update variables for GLM-MHD.

- exchange boundaries for the magnetic field components and scalar
   potential for GLM-MHD;
 - slightly rewrite the subroutine bnd_copy();
This commit is contained in:
Grzegorz Kowal 2010-12-01 11:48:10 -02:00
parent bee4d07135
commit 5e102ed9f1
2 changed files with 62 additions and 33 deletions

View File

@ -544,7 +544,7 @@ module boundaries
!=============================================================================== !===============================================================================
! !
! bnd_copy: subroutine copies the interior of neighbor to update the ! bnd_copy: subroutine copies the interior of neighbor to update the
! boundaries of current block ! boundaries of the current block
! !
!=============================================================================== !===============================================================================
! !
@ -554,7 +554,13 @@ module boundaries
use config , only : im, ib, ibl, ibu, ie, iel, ieu & use config , only : im, ib, ibl, ibu, ie, iel, ieu &
, jm, jb, jbl, jbu, je, jel, jeu & , jm, jb, jbl, jbu, je, jel, jeu &
, km, kb, kbl, kbu, ke, kel, keu , km, kb, kbl, kbu, ke, kel, keu
use variables, only : nqt, nfl, ibx, iby, ibz use variables, only : nqt, nfl
#ifdef MHD
use variables, only : ibx, iby, ibz
#ifdef GLM
use variables, only : iph
#endif /* GLM */
#endif /* MHD */
implicit none implicit none
@ -571,44 +577,60 @@ module boundaries
case(1) case(1)
if (iside .eq. 1) then if (iside .eq. 1) then
pdata%u(1:nfl,1:ibl ,1:jm,1:km) = u(1:nfl,iel:ie ,1:jm,1:km) pdata%u( 1:nfl,1:ibl ,1:jm,1:km) = u( 1:nfl,iel:ie ,1:jm,1:km)
#ifdef MHD #ifdef MHD
#ifdef FLUXCT #ifdef FLUXCT
pdata%u( ibx,1:ibl-1,1:jm,1:km) = u( ibx,iel:ie-1,1:jm,1:km) pdata%u(ibx ,1:ibl-1,1:jm,1:km) = u(ibx ,iel:ie-1,1:jm,1:km)
pdata%u( iby,1:ibl ,1:jm,1:km) = u( iby,iel:ie ,1:jm,1:km) pdata%u(iby ,1:ibl ,1:jm,1:km) = u(iby ,iel:ie ,1:jm,1:km)
pdata%u( ibz,1:ibl ,1:jm,1:km) = u( ibz,iel:ie ,1:jm,1:km) pdata%u(ibz ,1:ibl ,1:jm,1:km) = u(ibz ,iel:ie ,1:jm,1:km)
#endif /* FLUXCT */ #endif /* FLUXCT */
#ifdef GLM
pdata%u(ibx:ibz,1:ibl ,1:jm,1:km) = u(ibx:iby,iel:ie ,1:jm,1:km)
pdata%u(iph ,1:ibl ,1:jm,1:km) = u(iph ,iel:ie ,1:jm,1:km)
#endif /* GLM */
#endif /* MHD */ #endif /* MHD */
else else
pdata%u(1:nfl,ieu:im ,1:jm,1:km) = u(1:nfl,ib:ibu ,1:jm,1:km) pdata%u( 1:nfl,ieu:im,1:jm,1:km) = u( 1:nfl,ib:ibu,1:jm,1:km)
#ifdef MHD #ifdef MHD
#ifdef FLUXCT #ifdef FLUXCT
pdata%u( ibx,ieu:im ,1:jm,1:km) = u( ibx,ib:ibu ,1:jm,1:km) pdata%u(ibx ,ieu:im,1:jm,1:km) = u(ibx ,ib:ibu,1:jm,1:km)
pdata%u( iby,ieu:im ,1:jm,1:km) = u( iby,ib:ibu ,1:jm,1:km) pdata%u(iby ,ieu:im,1:jm,1:km) = u(iby ,ib:ibu,1:jm,1:km)
pdata%u( ibz,ieu:im ,1:jm,1:km) = u( ibz,ib:ibu ,1:jm,1:km) pdata%u(ibz ,ieu:im,1:jm,1:km) = u(ibz ,ib:ibu,1:jm,1:km)
#endif /* FLUXCT */ #endif /* FLUXCT */
#ifdef GLM
pdata%u(ibx:ibz,ieu:im,1:jm,1:km) = u(ibx:ibz,ib:ibu,1:jm,1:km)
pdata%u(iph ,ieu:im,1:jm,1:km) = u(iph ,ib:ibu,1:jm,1:km)
#endif /* GLM */
#endif /* MHD */ #endif /* MHD */
end if end if
case(2) case(2)
if (iside .eq. 1) then if (iside .eq. 1) then
pdata%u(1:nfl,1:im,1:jbl ,1:km) = u(1:nfl,1:im,jel:je ,1:km) pdata%u( 1:nfl,1:im,1:jbl ,1:km) = u( 1:nfl,1:im,jel:je ,1:km)
#ifdef MHD #ifdef MHD
#ifdef FLUXCT #ifdef FLUXCT
pdata%u( ibx,1:im,1:jbl ,1:km) = u( ibx,1:im,jel:je ,1:km) pdata%u(ibx ,1:im,1:jbl ,1:km) = u(ibx ,1:im,jel:je ,1:km)
pdata%u( iby,1:im,1:jbl-1,1:km) = u( iby,1:im,jel:je-1,1:km) pdata%u(iby ,1:im,1:jbl-1,1:km) = u(iby ,1:im,jel:je-1,1:km)
pdata%u( ibz,1:im,1:jbl ,1:km) = u( ibz,1:im,jel:je ,1:km) pdata%u(ibz ,1:im,1:jbl ,1:km) = u(ibz ,1:im,jel:je ,1:km)
#endif /* FLUXCT */ #endif /* FLUXCT */
#ifdef GLM
pdata%u(ibx:ibz,1:im,1:jbl ,1:km) = u(ibx:ibz,1:im,jel:je ,1:km)
pdata%u(iph ,1:im,1:jbl ,1:km) = u(iph ,1:im,jel:je ,1:km)
#endif /* GLM */
#endif /* MHD */ #endif /* MHD */
else else
pdata%u(1:nfl,1:im,jeu:jm ,1:km) = u(1:nfl,1:im,jb:jbu ,1:km) pdata%u( 1:nfl,1:im,jeu:jm,1:km) = u( 1:nfl,1:im,jb:jbu,1:km)
#ifdef MHD #ifdef MHD
#ifdef FLUXCT #ifdef FLUXCT
pdata%u( ibx,1:im,jeu:jm ,1:km) = u( ibx,1:im,jb:jbu ,1:km) pdata%u(ibx ,1:im,jeu:jm,1:km) = u(ibx ,1:im,jb:jbu,1:km)
pdata%u( iby,1:im,jeu:jm ,1:km) = u( iby,1:im,jb:jbu ,1:km) pdata%u(iby ,1:im,jeu:jm,1:km) = u(iby ,1:im,jb:jbu,1:km)
pdata%u( ibz,1:im,jeu:jm ,1:km) = u( ibz,1:im,jb:jbu ,1:km) pdata%u(ibz ,1:im,jeu:jm,1:km) = u(ibz ,1:im,jb:jbu,1:km)
#endif /* FLUXCT */ #endif /* FLUXCT */
#ifdef GLM
pdata%u(ibx:ibz,1:im,jeu:jm,1:km) = u(ibx:ibz,1:im,jb:jbu,1:km)
pdata%u(iph ,1:im,jeu:jm,1:km) = u(iph ,1:im,jb:jbu,1:km)
#endif /* GLM */
#endif /* MHD */ #endif /* MHD */
end if end if
@ -616,26 +638,31 @@ module boundaries
case(3) case(3)
if (iside .eq. 1) then if (iside .eq. 1) then
kl = kel pdata%u( 1:nfl,1:im,1:jm,1:kbl ) = u( 1:nfl,1:im,1:jm,kel:ke )
ku = ke
ks = 1
kt = kbl
pdata%u(1:nfl,1:im,1:jm,1:kbl ) = u(1:nfl,1:im,jel:je ,1:km)
#ifdef MHD #ifdef MHD
#ifdef FLUXCT #ifdef FLUXCT
pdata%u( ibx,1:im,1:jm,1:kbl ) = u( ibx,1:im,jel:je ,1:km) pdata%u(ibx ,1:im,1:jm,1:kbl ) = u(ibx ,1:im,1:jm,kel:ke )
pdata%u( iby,1:im,1:jm,1:kbl ) = u( iby,1:im,jel:je-1,1:km) pdata%u(iby ,1:im,1:jm,1:kbl-1) = u(iby ,1:im,1:jm,kel:ke-1)
pdata%u( ibz,1:im,1:jm,1:kbl-1) = u( ibz,1:im,jel:je ,1:km) pdata%u(ibz ,1:im,1:jm,1:kbl ) = u(ibz ,1:im,1:jm,kel:ke )
#endif /* FLUXCT */ #endif /* FLUXCT */
#ifdef GLM
pdata%u(ibx:ibz,1:im,1:jm,1:kbl ) = u(ibx:ibz,1:im,1:jm,kel:ke )
pdata%u(iph ,1:im,1:jm,1:kbl ) = u(iph ,1:im,1:jm,kel:ke )
#endif /* GLM */
#endif /* MHD */ #endif /* MHD */
else else
kl = kb pdata%u( 1:nfl,1:im,1:jm,keu:km ) = u( 1:nfl,1:im,1:jm,kb:kbu)
ku = kbu #ifdef MHD
#ifdef FLUXCT
ks = keu pdata%u(ibx ,1:im,1:jm,keu:km ) = u(ibx ,1:im,1:jm,kb:kbu)
kt = km pdata%u(iby ,1:im,1:jm,keu:km ) = u(iby ,1:im,1:jm,kb:kbu)
pdata%u(ibz ,1:im,1:jm,keu:km ) = u(ibz ,1:im,1:jm,kb:kbu)
#endif /* FLUXCT */
#ifdef GLM
pdata%u(ibx:ibz,1:im,1:jm,keu:km) = u(ibx:ibz,1:im,1:jm,kb:kbu)
pdata%u(iph ,1:im,1:jm,keu:km) = u(iph ,1:im,1:jm,kb:kbu)
#endif /* GLM */
#endif /* MHD */
end if end if
#endif /* NDIMS == 3 */ #endif /* NDIMS == 3 */

View File

@ -1009,6 +1009,8 @@ module problem
check_ref = -1 check_ref = -1
end if end if
check_ref = 1
return return
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------