59 TYPE(t_region
) :: region
62 INTEGER :: ijkc, ifc, ipatch
65 CHARACTER(CHRLEN) :: rcsidentstring
69 INTEGER ::
n, ijkc0, ijkcb, istage
71 REAL(RFREAL) :: rhoc, rhouc, rhovc, rhowc, rhoec, pc
72 REAL(RFREAL) :: refmassflux, rescaler,
alpha, massflux
73 REAL(RFREAL) :: cfl, dt, rucm,
delta, deltamassflux, aversurf
74 REAL(RFREAL) :: sndmassflux, rcvmassflux, sndaversurf, rcvaversurf
75 REAL(RFREAL) :: snddt, rcvdt, avgdt, dtfactor, refmeanpgrad, reftauwall
76 REAL(RFREAL) :: tauwall, avgtauwall, sndtauwall, rcvtauwall
77 REAL(RFREAL) :: rn, sndrn, rcvrn,
dy, fnmag, voltot
78 REAL(RFREAL),
POINTER :: xyz(:,:), vol(:), cofg(:,:)
79 REAL(RFREAL),
POINTER :: cv(:,:), tv(:,:), rdt(:)
83 rcsidentstring =
'$RCSfile: PERI_coPgradUpdateFlu.F90,v $ $Revision: 1.9 $'
85 global => region%global
87 'PERI_coPgradUpdateFlu.F90' )
91 xyz => region%grid%xyz
92 vol => region%grid%vol
93 cofg => region%grid%cofg
98 istage = mod(region%irkStep,global%nrkSteps) + 1
99 alpha = region%mixtInput%ark(istage)
100 refmassflux = region%periInput%bulkmFlux
101 delta = global%refLength
103 IF (region%periInput%flowKind == peri_flow_cpr)
THEN
104 rescaler = region%periInput%cprEpsilon
105 IF (global%flowType == flow_unsteady .AND. &
106 global%solverType == solv_explicit )
alpha = 1._rfreal
107 ELSEIF (region%periInput%flowKind == peri_flow_channel)
THEN
111 IF (global%flowType==flow_steady)
THEN
112 cfl = region%mixtInput%cfl
114 IF (global%solverType == solv_implicit )
THEN
115 dtfactor = 10._rfreal
117 dtfactor = 0.9_rfreal
120 DO ijkc0=1,region%grid%nCellsTot
122 avgdt = avgdt + rdt(ijkc0)
127 CALL mpi_allreduce( snddt,rcvdt,1,mpi_double_precision, mpi_sum, &
128 global%mpiComm, global%mpierr )
131 CALL mpi_allreduce( sndrn,rcvrn,1,mpi_double_precision, mpi_sum, &
132 global%mpiComm, global%mpierr )
135 avgdt = dtfactor*avgdt/rn
144 refmeanpgrad = region%periInput%meanPgrad
147 IF (refmeanpgrad /= global%moduleVar(1) )
THEN
148 CALL
errorstop( global,err_peri_physparam,__line__, &
149 'mean pressure gradient vary between regions' )
157 DO ijkc = 1, region%grid%nCellsTot
158 rucm = rucm + cv(cv_mixt_xmom,ijkc0)*vol(ijkc)
159 voltot = voltot + vol(ijkc)
162 aversurf = 0.5_rfreal*voltot/
delta
166 avgtauwall = 0._rfreal
168 IF (region%periInput%flowKind == peri_flow_channel .AND. &
169 region%periInput%split(jcoord) /= off )
THEN
171 DO ipatch=1,region%grid%nPatches
172 patch => region%patches(ipatch)
173 IF (
patch%bcType>=bc_noslipwall .AND. &
174 patch%bcType<=bc_noslipwall+bc_range)
THEN
176 DO ifc=1,
patch%nBFaces
177 ijkcb =
patch%bf2c(ifc)
179 dy = abs( cofg(ycoord,ijkcb)-
patch%fc(ycoord,ifc) )
180 fnmag =
patch%fn(xyzmag,ifc)
182 tauwall = 0.5_rfreal*tv(tv_mixt_muel,ijkcb)* &
183 cv(cv_mixt_xmom,ijkcb)/cv(cv_mixt_dens,ijkcb)/
dy
184 avgtauwall = avgtauwall + tauwall*fnmag
193 sndmassflux = massflux
194 CALL mpi_allreduce( sndmassflux,rcvmassflux,1,mpi_double_precision,mpi_sum, &
195 global%mpiComm, global%mpierr )
196 massflux = rcvmassflux
198 IF (region%periInput%flowKind == peri_flow_channel)
THEN
199 sndtauwall = avgtauwall
200 CALL mpi_allreduce( sndtauwall,rcvtauwall,1,mpi_double_precision,mpi_sum, &
201 global%mpiComm, global%mpierr )
202 avgtauwall = rcvtauwall
205 IF (region%periInput%split(jcoord) == off)
THEN
206 sndaversurf = aversurf
207 CALL mpi_allreduce( sndaversurf,rcvaversurf,1,mpi_double_precision,mpi_sum, &
208 global%mpiComm, global%mpierr )
209 aversurf = rcvaversurf
212 IF (global%myProcId==masterproc)
write(*,*)massflux,aversurf
216 massflux = massflux/aversurf
217 avgtauwall = 0.5_rfreal*avgtauwall/aversurf
221 deltamassflux = refmassflux - massflux
222 IF (global%myProcId==masterproc)
WRITE(*,*) region%iRegionGlobal, &
223 'refMassFlux-massFlux prior updating u',refmassflux,massflux,deltamassflux, &
226 refmeanpgrad = refmeanpgrad - 0.5_rfreal*deltamassflux/ &
229 IF ((region%periInput%flowKind == peri_flow_channel) .AND. &
230 (region%periInput%pgradType == cnl_pgrad_tauwall))
THEN
233 refmeanpgrad =
min( refmeanpgrad, -avgtauwall/global%refLength )
236 IF (global%myProcId==masterproc)
WRITE(*,*) region%iRegionGlobal, &
237 ' meanPgrad ',refmeanpgrad,dt,
alpha
240 region%periInput%meanPgrad = refmeanpgrad
244 IF (region%periInput%flowKind == peri_flow_cpr)
THEN
247 DO ijkc = 1,region%grid%nCellsTot
248 rucm = rucm + cv(cv_mixt_xmom,ijkc0)*vol(ijkc)
253 CALL mpi_barrier( global%mpiComm, global%mpierr )
254 sndmassflux = massflux
255 CALL mpi_allreduce( sndmassflux,rcvmassflux,1,mpi_double_precision,mpi_sum, &
256 global%mpiComm, global%mpierr )
257 massflux = rcvmassflux
260 massflux = massflux/aversurf
262 deltamassflux = refmassflux - massflux
263 IF (global%myProcId==masterproc)
WRITE(*,*) region%iRegionGlobal, &
264 'refMassFlux-massFlux AFTER updating u',refmassflux,massflux,deltamassflux
270 global%moduleVar(1) = refmeanpgrad
subroutine registerfunction(global, funName, fileName)
subroutine peri_copgradupdate(region)
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
subroutine errorstop(global, errorCode, errorLine, addMessage)
unsigned char alpha() const
subroutine deregisterfunction(global)