-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcartesian_analytical_column_density.f90
91 lines (77 loc) · 4.14 KB
/
cartesian_analytical_column_density.f90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
module cartesian_analytical_column_density
use precision, only: dp
use input, only: level_py, cellsize_sl, four_over_three_pi
use array, only: cartesian_analytical_number_density, &
cartesian_analytical_xHI, &
cartesian_analytical_xHeI , &
cartesian_analytical_xHeII, &
cartesian_analytical_HI_column_density_in, cartesian_analytical_HeI_column_density_in, &
cartesian_analytical_HeII_column_density_in, cartesian_analytical_HI_column_density_out, &
cartesian_analytical_HeI_column_density_out, cartesian_analytical_HeII_column_density_out, &
cartesian_analytical_shell_volume
contains
subroutine cartesian_analytical_column_density_calculation
implicit none
real(kind=dp) :: absolute_x, absolute_y, absolute_z
real(kind=dp) :: in_x, in_y, in_z
real(kind=dp) :: out_x, out_y, out_z
real(kind=dp) :: in_distance, out_distance
integer :: i,j,k
cartesian_analytical_HI_column_density_in(0,0,0) = 0
cartesian_analytical_HeI_column_density_in(0,0,0) = 0
cartesian_analytical_HeII_column_density_in(0,0,0) = 0
cartesian_analytical_shell_volume(0,0,0) = cellsize_sl*cellsize_sl*cellsize_sl
cartesian_analytical_HI_column_density_out(0,0,0) = 0.5*cellsize_sl*cartesian_analytical_number_density*cartesian_analytical_xHI
cartesian_analytical_HeI_column_density_out(0,0,0) = 0.5*cellsize_sl*cartesian_analytical_number_density*cartesian_analytical_xHeI
cartesian_analytical_HeII_column_density_out(0,0,0) = 0.5*cellsize_sl*cartesian_analytical_number_density*cartesian_analytical_xHeII
do i = -level_py,level_py
do j = -level_py,level_py
do k = -level_py,level_py
if (i.ne.0 .or. j.ne.0 .or. k.ne.0) then
absolute_x = abs(i)
absolute_y = abs(j)
absolute_z = abs(k)
if (absolute_z.ge.absolute_x .and. absolute_z.ge.absolute_y) then
in_x = (absolute_x)*(absolute_z-0.5)/(absolute_z)
in_y = (absolute_y)*(absolute_z-0.5)/(absolute_z)
in_z = absolute_z-0.5
out_x = (absolute_x)*(absolute_z+0.5)/(absolute_z)
out_y = (absolute_y)*(absolute_z+0.5)/(absolute_z)
out_z = absolute_z+0.5
elseif (absolute_y.ge.absolute_x .and. absolute_y.ge.absolute_z) then
in_x = (absolute_x)*(absolute_y-0.5)/(absolute_y)
in_y = absolute_y-0.5
in_z = (absolute_z)*(absolute_y-0.5)/(absolute_y)
out_x = (absolute_x)*(absolute_y+0.5)/(absolute_y)
out_y = absolute_y+0.5
out_z = (absolute_z)*(absolute_y+0.5)/(absolute_y)
elseif (absolute_x.ge.absolute_y .and. absolute_x.ge.absolute_z) then
in_x = absolute_x-0.5
in_y = (absolute_y)*(absolute_x-0.5)/(absolute_x)
in_z = (absolute_z)*(absolute_x-0.5)/(absolute_x)
out_x = absolute_x+0.5
out_y = (absolute_y)*(absolute_x+0.5)/(absolute_x)
out_z = (absolute_z)*(absolute_x+0.5)/(absolute_x)
endif
in_distance = in_x*in_x + in_y*in_y + in_z*in_z
in_distance = in_distance**0.5
in_distance = in_distance*cellsize_sl
out_distance = out_x*out_x + out_y*out_y + out_z*out_z
out_distance = out_distance**0.5
out_distance = out_distance*cellsize_sl
cartesian_analytical_HI_column_density_in(i,j,k) = in_distance*cartesian_analytical_number_density*cartesian_analytical_xHI
cartesian_analytical_HeI_column_density_in(i,j,k) = in_distance*cartesian_analytical_number_density*cartesian_analytical_xHeI
cartesian_analytical_HeII_column_density_in(i,j,k) = in_distance*cartesian_analytical_number_density*cartesian_analytical_xHeII
cartesian_analytical_HI_column_density_out(i,j,k) = out_distance*cartesian_analytical_number_density*cartesian_analytical_xHI
cartesian_analytical_HeI_column_density_out(i,j,k) = out_distance*cartesian_analytical_number_density*cartesian_analytical_xHeI
cartesian_analytical_HeII_column_density_out(i,j,k) = out_distance*cartesian_analytical_number_density*cartesian_analytical_xHeII
cartesian_analytical_shell_volume(i,j,k) = four_over_three_pi*(out_distance*out_distance*out_distance-&
in_distance*in_distance*in_distance)
endif
enddo
enddo
enddo
!write(*,*) 'c in ',cartesian_analytical_HI_column_density_in(1,0,0)
!write(*,*) 'c out ',cartesian_analytical_HI_column_density_out(1,0,0)
end subroutine cartesian_analytical_column_density_calculation
end module cartesian_analytical_column_density