DCS
a Driven-Cavity Open source Simulator code
 All Classes Files Functions Variables Groups Pages
Data_Type_Conservative.f90
Go to the documentation of this file.
1 
6 
12 
18 
24 
27 !-----------------------------------------------------------------------------------------------------------------------------------
28 USE ir_precision ! Integers and reals precision definition.
29 !-----------------------------------------------------------------------------------------------------------------------------------
30 
31 !-----------------------------------------------------------------------------------------------------------------------------------
32 private
33 public:: computestream
34 public:: computevorticity
35 public:: computeresidual
36 !-----------------------------------------------------------------------------------------------------------------------------------
37 
38 !-----------------------------------------------------------------------------------------------------------------------------------
41 type, public:: type_conservative
42  real(R8P):: s=0._r8p
43  real(R8P):: v=0._r8p
44  contains
45  procedure, non_overridable:: set ! Procedure for setting variables.
46  procedure, non_overridable:: pprint ! Procedure for printing Type_Conservative components with a "pretty" format.
47 endtype type_conservative
48 !-----------------------------------------------------------------------------------------------------------------------------------
49 contains
57  pure subroutine computestream(cons,beta,dh)
58  !---------------------------------------------------------------------------------------------------------------------------------
59  implicit none
60  type(type_conservative), intent(INOUT):: cons(0:,0:)
61  real(R8P), intent(IN):: beta
62  real(R8P), intent(IN):: dh
63  integer(I4P):: i,j
64  !---------------------------------------------------------------------------------------------------------------------------------
65 
66  !---------------------------------------------------------------------------------------------------------------------------------
67  !$OMP PARALLEL DEFAULT(NONE) &
68  !$OMP PRIVATE(i,j) &
69  !$OMP SHARED(cons,beta,dh)
70  !$OMP DO COLLAPSE(2)
71  do j=1_i4p,ubound(cons,dim=2)-1_i4p
72  do i=1_i4p,ubound(cons,dim=1)-1_i4p
73  cons(i,j)%s=beta*((cons(i-1,j)%s+cons(i+1,j)%s+cons(i,j-1)%s+cons(i,j+1)%s + dh*dh*cons(i,j)%v)*0.25_r8p) +&
74  (1._r8p-beta)*cons(i,j)%s
75  enddo
76  enddo
77  !$OMP END PARALLEL
78  return
79  !---------------------------------------------------------------------------------------------------------------------------------
80  endsubroutine computestream
81 
91  pure subroutine computevorticity(cons,Re,beta,dh)
92  !---------------------------------------------------------------------------------------------------------------------------------
93  implicit none
94  type(type_conservative), intent(INOUT):: cons(0:,0:)
95  real(R8P), intent(IN):: Re
96  real(R8P), intent(IN):: beta
97  real(R8P), intent(IN):: dh
98  integer(I4P):: n
99  integer(I4P):: ij,i,j
100  !---------------------------------------------------------------------------------------------------------------------------------
101 
102  !---------------------------------------------------------------------------------------------------------------------------------
103  n=ubound(cons,dim=1)
104  !$OMP PARALLEL DEFAULT(NONE) &
105  !$OMP PRIVATE(ij,i,j) &
106  !$OMP SHARED(cons,Re,beta,dh,N)
107  !$OMP DO
108  do ij=1,n-1_i4p
109  cons(ij,0)%v=( &
110  -(cons(ij-1,1)%s + cons(ij,1)%s + cons(ij+1,1)%s) /(3._r8p*dh*dh) &
111  -( 0.5_r8p*cons(ij-1,0)%v + 0.5_r8p*cons(ij+1,0)%v &
112  +0.25_r8p*cons(ij-1,1)%v + cons(ij,1)%v + 0.25_r8p*cons(ij+1,1)%v)/(9._r8p) &
113  )*9._r8p*0.5_r8p
114  cons(ij,n)%v=(-1._r8p/dh &
115  -(cons(ij-1,n-1)%s+cons(ij,n-1)%s + cons(ij+1,n-1)%s) /(3._r8p*dh*dh) &
116  -( 0.5_r8p*cons(ij-1,n )%v + 0.5_r8p*cons(ij+1,n )%v &
117  +0.25_r8p*cons(ij-1,n-1)%v + cons(ij,n-1)%v + 0.25_r8p*cons(ij+1,n-1)%v)/(9._r8p) &
118  )*9._r8p*0.5_r8p
119  cons(0,ij)%v=( &
120  -(cons(1,ij-1)%s + cons(1,ij)%s + cons(1,ij+1)%s) /(3._r8p*dh*dh) &
121  -( 0.5_r8p*cons(0,ij-1)%v + 0.5_r8p*cons(0,ij+1)%v &
122  +0.25_r8p*cons(1,ij-1)%v + cons(1,ij)%v + 0.25_r8p*cons(1,ij+1)%v)/(9._r8p) &
123  )*9._r8p*0.5_r8p
124  cons(n,ij)%v=( &
125  -(cons(n-1,ij-1)%s+cons(n-1,ij)%s+cons(n-1,ij+1)%s) /(3._r8p*dh*dh) &
126  -( 0.5_r8p*cons(n,ij-1 )%v + 0.5_r8p*cons(n,ij+1 )%v &
127  +0.25_r8p*cons(n-1,ij-1)%v + cons(n-1,ij)%v + 0.25_r8p*cons(n-1,ij+1)%v)/(9._r8p) &
128  )*9._r8p*0.5_r8p
129  enddo
130  !$OMP SINGLE
131  cons(0,0)%v=( &
132  -(cons(1,1)%s)/(3._r8p*dh*dh) &
133  -(0.5_r8p*cons(1,0)%v+0.5_r8p*cons(0,1)%v+0.25_r8p*cons(1,1)%v)/(9._r8p) &
134  )*9._r8p
135  cons(n,0)%v=( &
136  -(cons(n-1,1)%s)/(3._r8p*dh*dh) &
137  -(0.5_r8p*cons(n-1,0)%v+0.5_r8p*cons(n,1)%v+0.25_r8p*cons(n-1,1)%v)/(9._r8p) &
138  )*9._r8p
139  cons(n,n)%v=(-0.5_r8p/dh &
140  -(cons(n-1,n-1)%s)/(3._r8p*dh*dh) &
141  -(0.5_r8p*cons(n-1,n)%v+0.5_r8p*cons(n,n-1)%v+0.25_r8p*cons(n-1,n-1)%v)/(9._r8p) &
142  )*9._r8p
143  cons(0,n)%v=(-0.5_r8p/dh &
144  -(cons(1,n-1)%s)/(3._r8p*dh*dh) &
145  -(0.5_r8p*cons(1,n)%v+0.5_r8p*cons(0,n-1)%v+0.25_r8p*cons(1,n-1)%v)/(9._r8p) &
146  )*9._r8p
147  !$OMP END SINGLE
148  !$OMP DO COLLAPSE(2)
149  do j=1,n-1
150  do i=1,n-1
151  cons(i,j)%v=beta*(( &
152  cons(i-1,j)%v+cons(i+1,j)%v+cons(i,j-1)%v+cons(i,j+1)%v &
153  -0.25_r8p*re*(cons(i,j+1)%s-cons(i,j-1)%s)*(cons(i+1,j)%v-cons(i-1,j)%v) &
154  +0.25_r8p*re*(cons(i+1,j)%s-cons(i-1,j)%s)*(cons(i,j+1)%v-cons(i,j-1)%v) &
155  )*0.25_r8p) + (1._r8p-beta)*cons(i,j)%v
156  enddo
157  enddo
158  !$OMP END PARALLEL
159  return
160  !---------------------------------------------------------------------------------------------------------------------------------
161  endsubroutine computevorticity
162 
164  pure function computeresidual(cons,Re,dh) result(residual)
165  !---------------------------------------------------------------------------------------------------------------------------------
166  implicit none
167  type(type_conservative), intent(IN):: cons(0:,0:)
168  real(R8P), intent(IN):: re
169  real(R8P), intent(IN):: dh
170  type(type_conservative):: residual
171  integer(I4P):: i,j
172  !---------------------------------------------------------------------------------------------------------------------------------
173 
174  !---------------------------------------------------------------------------------------------------------------------------------
175  residual%s=0._r8p
176  residual%v=0._r8p
177  do j=1_i4p,ubound(cons,dim=2)-1_i4p
178  do i=1_i4p,ubound(cons,dim=1)-1_i4p
179  residual%s =max(residual%s, &
180  abs((cons(i-1,j)%s-2._r8p*cons(i,j)%s+cons(i+1,j)%s)/(dh*dh) + &
181  (cons(i,j-1)%s-2._r8p*cons(i,j)%s+cons(i,j+1)%s)/(dh*dh) + cons(i,j)%v))
182  residual%v =max(residual%v, &
183  abs((1._r8p/re)*(cons(i-1,j)%v-2._r8p*cons(i,j)%v+cons(i+1,j)%v)/(dh*dh) + &
184  (1._r8p/re)*(cons(i,j-1)%v-2._r8p*cons(i,j)%v+cons(i,j+1)%v)/(dh*dh) - &
185  (cons(i,j+1)%s-cons(i,j-1)%s)/(2._r8p*dh)*(cons(i+1,j)%v-cons(i-1,j)%v)/(2._r8p*dh) + &
186  (cons(i+1,j)%s-cons(i-1,j)%s)/(2._r8p*dh)*(cons(i,j+1)%v-cons(i,j-1)%v)/(2._r8p*dh)))
187  enddo
188  enddo
189  return
190  !---------------------------------------------------------------------------------------------------------------------------------
191  endfunction computeresidual
193 
197  elemental subroutine set(self,s,v)
198  !---------------------------------------------------------------------------------------------------------------------------------
199  implicit none
200  class(type_conservative), intent(INOUT):: self
201  real(R8P), intent(IN):: s
202  real(R8P), intent(IN):: v
203  !---------------------------------------------------------------------------------------------------------------------------------
204 
205  !---------------------------------------------------------------------------------------------------------------------------------
206  self%s = s
207  self%v = v
208  return
209  !---------------------------------------------------------------------------------------------------------------------------------
210  endsubroutine set
211 
214  function pprint(self,unit) result(err)
215  !---------------------------------------------------------------------------------------------------------------------------------
216  implicit none
217  class(type_conservative), intent(IN):: self
218  integer(I4P), intent(IN):: unit
219  integer(I4P):: err
220  !---------------------------------------------------------------------------------------------------------------------------------
221 
222  !---------------------------------------------------------------------------------------------------------------------------------
223  write(unit,'(A)',iostat=err)' s(n)='//str(n=self%s)
224  write(unit,'(A)',iostat=err)' v(n)='//str(n=self%v)
225  return
226  !---------------------------------------------------------------------------------------------------------------------------------
227  endfunction pprint
229 endmodule data_type_conservative
pure type(type_conservative) function, public computeresidual(cons, Re, dh)
Function for computing residuals.
pure subroutine, public computevorticity(cons, Re, beta, dh)
Subroutine for computing new (n+1) vorticity.
pure subroutine, public computestream(cons, beta, dh)
Subroutine for computing new (n+1) stream function.
Procedure for converting number, real and integer, to string (number to string type casting); logical...
This module contains the definition of Type_Conservative and its procedures.
Derived type containing conservative variables.
procedure, non_overridable pprint
Module IR_Precision makes available some portable kind-parameters and some useful procedures to deal ...