paramesh unk与unk1之间的操作

amr_1blk_guardcell调用
!! CALLS
!!
!!     mpi_amr_local_surr_blks_lkup
!!     mpi_amr_1blk_guardcell_c_to_f
!!     mpi_amr_get_remote_block
!!     amr_perm_to_1blk
!!     amr_1blk_guardcell_srl
amr_perm_to_1blk
amr_1blk_guardcell_srl
调用
amr_1blk_bcset,

1.
amr_guardcell调用==》 amr_1blk_guardcell,而amr_1blk_guardcell调用了==》amr_perm_to_1blk把unk拷贝到unk1的 内部cell。

amr_perm_to_1blk中调用
!-----appropriate guardcell padding.
      If (iopt == 1) Then

        If (lcc) Then

          If (lb <= lnblocks) Then

            Do ivar=1,nvar
              If (int_gcell_on_cc(ivar)) Then
                 unk1(ivar,                                            &
                      1+nguard:nxb+nguard,                             &
                      1+nguard*k2d:nyb+nguard*k2d,                     & 
                      1+nguard*k3d:nzb+nguard*k3d,                     &
                      idest) =                                         & 
                 unk(ivar,                                             &
                     1+nguard0:nxb+nguard0,                            &
                     1+nguard0*k2d:nyb+nguard0*k2d,                    & 
                     1+nguard0*k3d:nzb+nguard0*k3d,                    &
                     lb)
              End If
            End Do

2.
a mr_1blk_guardcell然后调用   amr_1blk_guardcell_srl, amr_1blk_guardcell_srl调用amr_1blk_bcset在amr_1blk_bcset中设置边界条件对unk1进行操作,把unk1的guard cell层的数据设置好

3.
amr_guardcell在调用amr_1blk_guardcell后调用下面片段。这样完成了边界条件的设置
这段代码嵌套在循环中,比如id:iu在每次循环时对应于
(1:nguard),(nguard+1:nxb+nguard),(nxb+nguard+1:nxb+2*nguard)
If (iopt == 1) Then
             Do ivar=1,nvar
               If (int_gcell_on_cc(ivar)) Then
                 unk(ivar,id:iu,jd:ju,kd:ku,lb) =                      & 
                  unk1(ivar,id:iu,jd:ju,kd:ku,1)
               Endif
             Enddo

你可能感兴趣的:(paramesh unk与unk1之间的操作)