質問編集履歴

3

画像を追加

2020/04/23 13:25

投稿

highkazu
highkazu

スコア11

test CHANGED
File without changes
test CHANGED
@@ -373,3 +373,11 @@
373
373
  法線を解析的に求めた場合の画像.
374
374
 
375
375
  ![イメージ説明](021e83ca8d57de0e6681cf8078c3a8d0.png)
376
+
377
+
378
+
379
+ 2020/04/23 追記
380
+
381
+ 正規化方法をコメント頂いたように直した場合
382
+
383
+ ![イメージ説明](ffe8aaff7f8045be5be4a085a34ceae6.png)

2

プログラムの更新

2020/04/23 13:25

投稿

highkazu
highkazu

スコア11

test CHANGED
File without changes
test CHANGED
@@ -30,20 +30,20 @@
30
30
 
31
31
 
32
32
 
33
+
34
+
33
35
  program main
34
36
 
35
37
  ! Determine some arrays
36
38
 
37
39
  implicit none
38
40
 
39
- integer,parameter :: i_max=50, j_max=50,k_max=50
41
+ integer,parameter :: i_max=100, j_max=100
40
42
 
41
43
  double precision :: x(0:i_max,0:j_max), y(0:i_max,0:j_max), z(0:i_max,0:j_max) ! this is the position
42
44
 
43
45
  double precision :: v(3) ! this is the velocity (uniform flow)
44
46
 
45
- double precision :: nx(0:i_max-1,0:j_max-1,0:k_max-1),ny(0:i_max-1,0:j_max-1,0:k_max-1),nz(0:i_max-1,0:j_max-1,0:k_max-1)
46
-
47
47
  double precision :: cp(0:i_max,0:j_max)
48
48
 
49
49
  integer :: i,j
@@ -56,12 +56,24 @@
56
56
 
57
57
  call dataSave
58
58
 
59
+ print *, pi_generator()
60
+
59
61
  stop
60
62
 
61
63
  contains
62
64
 
63
65
 
64
66
 
67
+ double precision function pi_generator()
68
+
69
+ pi_generator = 4*atan(1.0)
70
+
71
+ return
72
+
73
+ end function
74
+
75
+
76
+
65
77
  subroutine grid
66
78
 
67
79
  ! Generating grids
@@ -74,15 +86,13 @@
74
86
 
75
87
  do 1000 j=0,j_max
76
88
 
77
- theta(j)=float(j)/float((j_max))*(3.141592)/2.0
89
+ theta(j)=float(j)/float((j_max))*(pi_generator() )/2.0
78
-
79
- print *, theta(j), j
80
90
 
81
91
  1000 continue
82
92
 
83
93
  do 1001 i=0,i_max
84
94
 
85
- phi(i) = float(i)/float(i_max)*3.141592*2
95
+ phi(i) = float(i)/float(i_max)*(pi_generator() )*2
86
96
 
87
97
  1001 continue
88
98
 
@@ -100,6 +110,10 @@
100
110
 
101
111
  101 continue
102
112
 
113
+ ! x(i,0)=x(i,j_max)
114
+
115
+ ! y(i,0)=y(i,j_max)
116
+
103
117
  100 continue
104
118
 
105
119
  end subroutine
@@ -122,19 +136,19 @@
122
136
 
123
137
  !
124
138
 
125
- ! o (U)
139
+ ! o(U)
126
140
 
127
141
  ! |
128
142
 
143
+ ! (L) |
144
+
145
+ ! o-------o-------o(R)
146
+
129
147
  ! |
130
148
 
131
- !(L)o-------o-------o(R)
132
-
133
149
  ! |
134
150
 
135
- ! |
136
-
137
- ! o (B)
151
+ ! o(B)
138
152
 
139
153
 
140
154
 
@@ -190,8 +204,6 @@
190
204
 
191
205
  vec_B(3) = z(i,j-1) - z(i,j)
192
206
 
193
- print *, vec_B(2)
194
-
195
207
 
196
208
 
197
209
 
@@ -252,13 +264,25 @@
252
264
 
253
265
 
254
266
 
267
+ ! 球の場合,normal=(x,y,z)でした.x**2+y**2+z**2=r**2より,f=x**2+y**2+z**2-r**2としてgradとればokでした...
268
+
269
+ ! =====================================================================================
270
+
271
+ cross_avg(1)=0.5*x(i,j)/sqrt( (0.5*x(i,j) )**2+ (0.5*y(i,j) )**2+ (0.5*z(i,j) )**2+1.0d-5)
272
+
273
+ cross_avg(2)=0.5*y(i,j)/sqrt( (0.5*x(i,j) )**2+ (0.5*y(i,j) )**2+ (0.5*z(i,j) )**2+1.0d-5)
274
+
275
+ cross_avg(3)=0.5*z(i,j)/sqrt( (0.5*x(i,j) )**2+ (0.5*y(i,j) )**2+ (0.5*z(i,j) )**2+1.0d-5)
276
+
277
+ ! ====================================================================================
278
+
255
279
  v(1)=0
256
280
 
257
281
  v(2)=0
258
282
 
259
283
  v(3)=-100*7
260
284
 
261
- if (dot_product(v,cross_avg) > 0) then
285
+ if (dot_product(v,cross_avg) < 0) then
262
286
 
263
287
  cp(i,j) = 2*((dot_product(v,cross_avg)) &
264
288
 
@@ -296,7 +320,7 @@
296
320
 
297
321
  integer :: fo2=12
298
322
 
299
- write(filename, "(a,i5.5,a)") "Newtonian" ! Dataファイル
323
+ write(filename, "(a,i5.5,a)") "vtkdata/Newtonian"
300
324
 
301
325
  open(fo2,file=filename)
302
326
 

1

頂いた回答をもとに計算しなおした画像を掲載

2020/04/22 10:03

投稿

highkazu
highkazu

スコア11

test CHANGED
File without changes
test CHANGED
@@ -341,3 +341,11 @@
341
341
  で書いています.
342
342
 
343
343
  fortran90を使用しています
344
+
345
+
346
+
347
+ 2020/04/22 追記
348
+
349
+ 法線を解析的に求めた場合の画像.
350
+
351
+ ![イメージ説明](021e83ca8d57de0e6681cf8078c3a8d0.png)