包含基于射线追踪的任意复杂界面计算
这个提交包含在:
@@ -0,0 +1,92 @@
|
||||
!Copyright (c) 2013 by tdem.org under guide of Xiu Li(lixiu@chd.edu.cn)
|
||||
!written by Huaifeng Sun(sunhuaifeng@gmail.com) and Xushan Lu(luxushan@gmail.com)
|
||||
!Code distribution @ tdem.org or sunhuaifeng.com
|
||||
|
||||
SUBROUTINE GET_COORDINATES
|
||||
!> @brief This subroutine calculates the coordinates of each grid node in the 3D domain,
|
||||
!>including the Yee grid nodes and the source-centered coordinate system.
|
||||
USE CONSTANTPARAMETERS
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER(KIND=4) :: ii,jj,kk
|
||||
!================================================
|
||||
Coordiz(NZS) = -Cdelz(NZS)/2
|
||||
!>In the Coordiz coordinate system, the coordinates are on the grid edge
|
||||
!! Coordinates are defined at cell centers relative to source location
|
||||
do kk=NZS-1,1,-1
|
||||
Coordiz(kk)=Coordiz(kk+1)-(Cdelz(kk+1)+Cdelz(kk))/2
|
||||
end do
|
||||
do kk=NZS+1,NZ,1
|
||||
Coordiz(kk)=Coordiz(kk-1)+(Cdelz(kk-1)+Cdelz(kk))/2
|
||||
end do
|
||||
!> Initialize X and Y coordinates based on source grid length being odd or even
|
||||
IF(Logi_Sourcelenth) THEN
|
||||
!> For odd source grid length, origin is at the grid center
|
||||
Coordix(NXS)=0
|
||||
do ii=NXS-1,1,-1
|
||||
Coordix(ii)=Coordix(ii+1)-(Cdelx(ii)+Cdelx(ii+1))/2
|
||||
end do
|
||||
do ii=NXS+1,NX,1
|
||||
Coordix(ii)=Coordix(ii-1)+(Cdelx(ii-1)+Cdelx(ii))/2
|
||||
end do
|
||||
|
||||
Coordiy(NYS)=0
|
||||
do jj=NYS-1,1,-1
|
||||
Coordiy(jj)=Coordiy(jj+1)-(Cdely(jj)+Cdely(jj+1))/2
|
||||
end do
|
||||
do jj=NYS+1,NY,1
|
||||
Coordiy(jj)=Coordiy(jj-1)+(Cdely(jj)+Cdely(jj-1))/2
|
||||
end do
|
||||
ELSE
|
||||
!> For even source grid length, origin spans between two grid centers
|
||||
Coordix(NXS)=-GridSize/2.0
|
||||
Coordix(NXS+1)=GridSize/2.0
|
||||
do ii=NXS-1,1,-1
|
||||
Coordix(ii)=Coordix(ii+1)-(Cdelx(ii)+Cdelx(ii+1))/2
|
||||
end do
|
||||
do ii=NXS+2,nx,1
|
||||
Coordix(ii)=Coordix(ii-1)+(Cdelx(ii-1)+Cdelx(ii))/2
|
||||
end do
|
||||
|
||||
Coordiy(NYS)=-GridSize/2.0
|
||||
Coordiy(NYS+1)=GridSize/2.0
|
||||
do jj=NYS-1,1,-1
|
||||
Coordiy(jj)=Coordiy(jj+1)-(Cdely(jj)+Cdely(jj+1))/2
|
||||
end do
|
||||
do jj=NYS+2,ny,1
|
||||
Coordiy(jj)=Coordiy(jj-1)+(Cdely(jj)+Cdely(jj-1))/2
|
||||
end do
|
||||
ENDIF
|
||||
|
||||
!===============================Calculate the Yee node coordinates========================================
|
||||
!> Allocate and calculate Yee grid node coordinates
|
||||
ALLOCATE(coordinates_x(NXB),coordinates_y(NYB),coordinates_z(NZB))
|
||||
|
||||
DO ii=1,NX
|
||||
coordinates_x(ii)=Coordix(ii)-Cdelx(ii)/2.0
|
||||
ENDDO
|
||||
coordinates_x(NXB)=Coordix(NX)+Cdelx(NX)/2.0
|
||||
|
||||
DO jj=1,NY
|
||||
coordinates_y(jj)=Coordiy(jj)-Cdely(jj)/2.0
|
||||
ENDDO
|
||||
coordinates_y(NYB)=Coordiy(NY)+Cdely(NY)/2.0
|
||||
|
||||
DO kk=1,NZ
|
||||
coordinates_z(kk)=Coordiz(kk)-Cdelz(kk)/2
|
||||
ENDDO
|
||||
coordinates_z(NZB)=coordinates_z(NZ)+Cdelz(NZ)
|
||||
|
||||
!---------------------Create a global coordinate system about HZ-----------------------!
|
||||
! The HZ grid planes are located at the Yee nodes, whose source-centered
|
||||
! coordinates are stored in coordinates_x/y/z (origin at the loop source /
|
||||
! ground surface). The receiver coordinates read from input.dat are also
|
||||
! source-centered, so Coord_HZ_* must use the SAME origin, otherwise the
|
||||
! receiver-to-grid search in Get_Receiver_Gridlabel yields index 0 (or an
|
||||
! uninitialized value) and the observer interpolation in Iteration.f90 reads
|
||||
! out-of-bounds EX/EY/CDELX/CDELY entries -> NaN in the dBzdt output files.
|
||||
ALLOCATE(Coord_HZ_X(Nx),Coord_HZ_Y(NY),Coord_HZ_Z(NZB))
|
||||
Coord_HZ_X(1:NX) = coordinates_x(1:NX) !Record the HZ coordinate information in the x direction.
|
||||
Coord_HZ_Y(1:NY) = coordinates_y(1:NY) !Record the HZ coordinate information in the y direction.
|
||||
Coord_HZ_Z(1:NZB) = coordinates_z(1:NZB) !Record the HZ coordinate information in the z direction.
|
||||
END SUBROUTINE
|
||||
在新工单中引用
屏蔽一个用户