Scrambler
1
|
00001 !######################################################################### 00002 ! 00003 ! Copyright (C) 2003-2012 Department of Physics and Astronomy, 00004 ! University of Rochester, 00005 ! Rochester, NY 00006 ! 00007 ! sweep_declarations.f90 is part of AstroBEAR. 00008 ! 00009 ! AstroBEAR is free software: you can redistribute it and/or modify 00010 ! it under the terms of the GNU General Public License as published by 00011 ! the Free Software Foundation, either version 3 of the License, or 00012 ! (at your option) any later version. 00013 ! 00014 ! AstroBEAR is distributed in the hope that it will be useful, 00015 ! but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 ! GNU General Public License for more details. 00018 ! 00019 ! You should have received a copy of the GNU General Public License 00020 ! along with AstroBEAR. If not, see <http://www.gnu.org/licenses/>. 00021 ! 00022 !######################################################################### 00026 00027 00028 MODULE SchemeDeclarations 00029 USE StencilDeclarations 00030 USE GlobalDeclarations 00031 USE PhysicsDeclarations 00032 00033 IMPLICIT NONE 00034 00035 SAVE 00036 00037 PUBLIC 00038 00039 INTEGER :: w = 0 00040 INTEGER :: qLx = 0 00041 INTEGER :: qRx = 0 00042 INTEGER :: qLy = 0 00043 INTEGER :: qRy = 0 00044 INTEGER :: qLz = 0 00045 INTEGER :: qRz = 0 00046 INTEGER :: fx = 0 00047 INTEGER :: fy = 0 00048 INTEGER :: fz = 0 00049 INTEGER :: q2Lx = 0 00050 INTEGER :: q2Rx = 0 00051 INTEGER :: q2Ly = 0 00052 INTEGER :: q2Ry = 0 00053 INTEGER :: q2Lz = 0 00054 INTEGER :: q2Rz = 0 00055 INTEGER :: f2x = 0 00056 INTEGER :: f2y = 0 00057 INTEGER :: f2z = 0 00058 INTEGER :: limiter_x = 0 00059 INTEGER :: limiter_y = 0 00060 INTEGER :: limiter_z = 0 00061 INTEGER :: limiter_ppm = 0 00062 INTEGER :: pT = 0 00063 INTEGER :: qex = 0 00064 INTEGER :: qey = 0 00065 INTEGER :: qez = 0 00066 INTEGER :: dqx = 0 00067 INTEGER :: dqy = 0 00068 INTEGER :: dqz = 0 00069 INTEGER :: ex = 0 00070 INTEGER :: ey = 0 00071 INTEGER :: ez = 0 00072 INTEGER :: ex_bar = 0 00073 INTEGER :: ey_bar = 0 00074 INTEGER :: ez_bar = 0 00075 INTEGER :: e2x = 0 00076 INTEGER :: e2y = 0 00077 INTEGER :: e2z = 0 00078 INTEGER :: e2x_bar = 0 00079 INTEGER :: e2y_bar = 0 00080 INTEGER :: e2z_bar = 0 00081 INTEGER :: ctfy = 0 00082 INTEGER :: ctfz = 0 00083 INTEGER :: ctfx = 0 00084 INTEGER :: ctf2x = 0 00085 INTEGER :: ctf2y = 0 00086 INTEGER :: ctf2z = 0 00087 INTEGER :: w2 = 0 00088 INTEGER :: A2x = 0 00089 INTEGER :: A2y = 0 00090 INTEGER :: A2z = 0 00091 INTEGER :: Sx = 0 00092 INTEGER :: Sy = 0 00093 INTEGER :: Sz = 0 00094 INTEGER :: w3 = 0 00095 INTEGER :: A3x = 0 00096 INTEGER :: A3y = 0 00097 INTEGER :: A3z = 0 00098 INTEGER :: SpeedsX = 0 00099 INTEGER :: SpeedsY = 0 00100 INTEGER :: SpeedsZ = 0 00101 INTEGER :: leftX = 0 00102 INTEGER :: leftY = 0 00103 INTEGER :: leftZ = 0 00104 INTEGER :: rightX = 0 00105 INTEGER :: rightY = 0 00106 INTEGER :: rightZ = 0 00107 INTEGER :: nWaves = 0 00108 INTEGER :: req_eigens = 0 00109 INTEGER :: adfx = 0 00110 INTEGER :: adfy = 0 00111 INTEGER :: adfz = 0 00112 INTEGER :: eta2x = 0 00113 INTEGER :: eta2y = 0 00114 INTEGER :: eta2z = 0 00115 INTEGER :: etax = 0 00116 INTEGER :: etay = 0 00117 INTEGER :: etaz = 0 00118 INTEGER :: q = 0 00119 INTEGER :: aux = 0 00120 INTEGER :: recon = 0 00121 INTEGER :: beforesweepstep = 0 00122 INTEGER :: aftersweepstep = 0 00123 INTEGER :: source = 0 00124 INTEGER :: source2 = 0 00125 INTEGER :: cornerdiv = 0 00126 INTEGER :: gradphix = 0 00127 INTEGER :: gradphiy = 0 00128 INTEGER :: gradphiz = 0 00129 00130 00131 00133 00134 INTEGER, DIMENSION(:), ALLOCATABLE :: index_start_bylevel 00135 INTEGER, PARAMETER :: THEBEGINNING=-999999 00136 INTEGER, PARAMETER :: NO_VISCOSITY=0, ROE_VISCOSITY=1, H_VISCOSITY=2 00137 INTEGER, PARAMETER :: NONLAGRANGIAN=0, LAGRANGIAN=1 00138 00139 REAL (KIND=xPrec), PARAMETER :: fourth=.25d0, third=1.d0/3.d0, sixth=1.d0/6.d0, epsilon=1e-13 00140 INTEGER :: SweepConsTemp, SweepCons 00141 LOGICAL :: lGudonov, lChar_Limiters, lCautious, lHLLTypeSolver, lCTU, lLimiter, lIsothermal, lUsePPML 00142 INTEGER :: InterpOrder = 3 00143 00144 INTEGER :: ViscCD = NO_VISCOSITY 00145 LOGICAL :: lApplyLOF = .false. 00146 LOGICAL :: lApplyDiffusion=.true. 00147 REAL(KIND=qpREC) :: LOF_ALPHA=.075, DIFF_ALPHA=.1 00148 00149 00150 00151 INTEGER, ALLOCATABLE, DIMENSION(:) :: SweepFluxFields 00152 INTEGER :: nSweepFlux 00153 INTEGER :: iTracer=NONLAGRANGIAN 00154 INTEGER :: CurrentLevelLoaded=-1 00155 00156 CONTAINS 00157 00158 00159 SUBROUTINE SetStencilNrVars 00160 IF (beforesweepstep /= 0) Stencil(beforesweepstep)%NrVars=(/1,NrHydroVars/) 00161 IF (w /= 0) Stencil(w)%NrVars=(/1,SweepCons/) 00162 IF (qLx /= 0) Stencil(qLx)%NrVars=(/1,SweepCons/) 00163 IF (qRx /= 0) Stencil(qRx)%NrVars=(/1,SweepCons/) 00164 IF (qLy /= 0) Stencil(qLy)%NrVars=(/1,SweepCons/) 00165 IF (qRy /= 0) Stencil(qRy)%NrVars=(/1,SweepCons/) 00166 IF (qLz /= 0) Stencil(qLz)%NrVars=(/1,SweepCons/) 00167 IF (qRz /= 0) Stencil(qRz)%NrVars=(/1,SweepCons/) 00168 IF (fx /= 0) Stencil(fx)%NrVars=(/1,SweepCons/) 00169 IF (fy /= 0) Stencil(fy)%NrVars=(/1,SweepCons/) 00170 IF (fz /= 0) Stencil(fz)%NrVars=(/1,SweepCons/) 00171 IF (ctfx /= 0) Stencil(ctfx)%NrVars=(/1,2/) 00172 IF (ctfy /= 0) Stencil(ctfy)%NrVars=(/1,2/) 00173 IF (ctfz /= 0) Stencil(ctfz)%NrVars=(/1,2/) 00174 !Second round of fluxes for CTU correction step 00175 IF (q2Lx /= 0) Stencil(q2Lx)%NrVars=(/1,SweepCons/) 00176 IF (q2Rx /= 0) Stencil(q2Rx)%NrVars=(/1,SweepCons/) 00177 IF (q2Ly /= 0) Stencil(q2Ly)%NrVars=(/1,SweepCons/) 00178 IF (q2Ry /= 0) Stencil(q2Ry)%NrVars=(/1,SweepCons/) 00179 IF (q2Lz /= 0) Stencil(q2Lz)%NrVars=(/1,SweepCons/) 00180 IF (q2Rz /= 0) Stencil(q2Rz)%NrVars=(/1,SweepCons/) 00181 IF (f2x /= 0) Stencil(f2x)%NrVars=(/1,NrHydroVars/) 00182 IF (f2y /= 0) Stencil(f2y)%NrVars=(/1,NrHydroVars/) 00183 IF (f2z /= 0) Stencil(f2z)%NrVars=(/1,NrHydroVars/) 00184 IF (ctf2x /= 0) Stencil(ctf2x)%NrVars=(/1,2/) 00185 IF (ctf2y /= 0) Stencil(ctf2y)%NrVars=(/1,2/) 00186 IF (ctf2z /= 0) Stencil(ctf2z)%NrVars=(/1,2/) 00187 IF (eta2x /= 0) Stencil(eta2x)%NrVars=(/1,1/) 00188 IF (eta2y /= 0) Stencil(eta2y)%NrVars=(/1,1/) 00189 IF (eta2z /= 0) Stencil(eta2z)%NrVars=(/1,1/) 00190 IF (etax /= 0) Stencil(etax)%NrVars=(/1,1/) 00191 IF (etay /= 0) Stencil(etay)%NrVars=(/1,1/) 00192 IF (etaz /= 0) Stencil(etaz)%NrVars=(/1,1/) 00193 00194 IF (adfx /= 0) Stencil(adfx)%NrVars=(/1,Nrtracervars/) 00195 IF (adfy /= 0) Stencil(adfy)%NrVars=(/1,Nrtracervars/) 00196 IF (adfz /= 0) Stencil(adfz)%NrVars=(/1,Nrtracervars/) 00197 00198 !Reconstruction work space 00199 IF (limiter_ppm /= 0) Stencil(limiter_ppm)%NrVars=(/1,1/) 00200 IF (limiter_x /= 0) Stencil(limiter_x)%NrVars=(/1,1/) 00201 IF (limiter_y /= 0) Stencil(limiter_y)%NrVars=(/1,1/) 00202 IF (limiter_z /= 0) Stencil(limiter_z)%NrVars=(/1,1/) 00203 IF (pT /= 0) Stencil(pT)%NrVars=(/1,1/) 00204 IF (dqx /= 0) Stencil(dqx)%NrVars=(/1,NrWaves/) 00205 IF (dqy /= 0) Stencil(dqy)%NrVars=(/1,NrWaves/) 00206 IF (dqz /= 0) Stencil(dqz)%NrVars=(/1,NrWaves/) 00207 IF (qex /= 0) Stencil(qex)%NrVars=(/1,NrWaves/) 00208 IF (qey /= 0) Stencil(qey)%NrVars=(/1,NrWaves/) 00209 IF (qez /= 0) Stencil(qez)%NrVars=(/1,NrWaves/) 00210 00211 IF (SpeedsX /= 0) Stencil(SpeedsX)%NrVars=(/ 1,NrWaves/) 00212 IF (SpeedsY /= 0) Stencil(SpeedsY)%NrVars=(/ 1,NrWaves/) 00213 IF (SpeedsZ /= 0) Stencil(SpeedsZ)%NrVars=(/ 1,NrWaves/) 00214 IF (leftX /= 0) Stencil(leftX)%NrVars=(/ NrWaves,NrWaves/) 00215 IF (leftY /= 0) Stencil(leftY)%NrVars=(/ NrWaves,NrWaves/) 00216 IF (leftZ /= 0) Stencil(leftZ)%NrVars=(/ NrWaves,NrWaves/) 00217 IF (rightX /= 0) Stencil(rightX)%NrVars=(/ NrWaves,NrWaves/) 00218 IF (rightY /= 0) Stencil(rightY)%NrVars=(/ NrWaves,NrWaves/) 00219 IF (rightZ /= 0) Stencil(rightZ)%NrVars=(/ NrWaves,NrWaves/) 00220 IF (nWaves /= 0) Stencil(nWaves)%NrVars=(/ 1,nDim/) 00221 00222 !MHD CT Stuff 00223 IF (ex /= 0) Stencil(ex)%NrVars=(/1,1/) 00224 IF (ey /= 0) Stencil(ey)%NrVars=(/1,1/) 00225 IF (ez /= 0) Stencil(ez)%NrVars=(/1,1/) 00226 IF (ex_bar /= 0) Stencil(ex_bar)%NrVars=(/1,1/) 00227 IF (ey_bar /= 0) Stencil(ey_bar)%NrVars=(/1,1/) 00228 IF (ez_bar /= 0) Stencil(ez_bar)%NrVars=(/1,1/) 00229 00230 !Second Round of MHD CT stuff 00231 ! Storing fluxes directly into Info%emf 00232 IF (e2x /= 0) Stencil(e2x)%NrVars=(/1,1/) 00233 IF (e2y /= 0) Stencil(e2y)%NrVars=(/1,1/) 00234 IF (e2z /= 0) Stencil(e2z)%NrVars=(/1,1/) 00235 00236 IF (e2x_bar /= 0) Stencil(e2x_bar)%NrVars=(/1,1/) 00237 IF (e2y_bar /= 0) Stencil(e2y_bar)%NrVars=(/1,1/) 00238 IF (e2z_bar /= 0) Stencil(e2z_bar)%NrVars=(/1,1/) 00239 !extra MHD Stuff 00240 00241 IF (w2 /= 0) Stencil(w2)%NrVars=(/1,SweepCons/) 00242 IF (A2x /= 0) Stencil(A2x)%NrVars=(/1,1/) 00243 IF (A2y /= 0) Stencil(A2y)%NrVars=(/1,1/) 00244 IF (A2z /= 0) Stencil(A2z)%NrVars=(/1,1/) 00245 00246 !Stone and Gardiner Source Terms 00247 IF (Sx /= 0) Stencil(Sx)%NrVars=(/1,SweepCons/) 00248 IF (Sy /= 0) Stencil(Sy)%NrVars=(/1,SweepCons/) 00249 IF (Sz /= 0) Stencil(Sz)%NrVars=(/1,SweepCons/) 00250 00251 IF (Sx /= 0) Stencil(Sx)%clear=.true. 00252 IF (Sy /= 0) Stencil(Sy)%clear=.true. 00253 IF (Sz /= 0) Stencil(Sz)%clear=.true. 00254 00255 IF (cornerdiv /= 0) Stencil(cornerdiv)%NrVars=(/1,1/) 00256 IF (gradphix /= 0) Stencil(gradphix)%NrVars=(/1,1/) 00257 IF (gradphiy /= 0) Stencil(gradphiy)%NrVars=(/1,1/) 00258 IF (gradphiz /= 0) Stencil(gradphiz)%NrVars=(/1,1/) 00259 00260 00261 00262 END SUBROUTINE SetStencilNrVars 00263 00265 SUBROUTINE set_descriptions() 00266 IF (w /= 0) Stencil(w)%description="w" 00267 IF (q /= 0) Stencil(q)%description="q" 00268 IF (aux /= 0) Stencil(aux)%description="aux" 00269 IF (recon /= 0) Stencil(recon)%description="recon" 00270 IF (qLx /= 0) Stencil(qLx)%description="qLx" 00271 IF (qRx /= 0) Stencil(qRx)%description="qRx" 00272 IF (qLy /= 0) Stencil(qLy)%description="qLy" 00273 IF (qRy /= 0) Stencil(qRy)%description="qRy" 00274 IF (qLz /= 0) Stencil(qLz)%description="qLz" 00275 IF (qRz /= 0) Stencil(qRz)%description="qRz" 00276 IF (fx /= 0) Stencil(fx)%description="fx" 00277 IF (fy /= 0) Stencil(fy)%description="fy" 00278 IF (fz /= 0) Stencil(fz)%description="fz" 00279 IF (w2 /= 0) Stencil(w2)%description="w2" 00280 IF (q2Lx /= 0) Stencil(q2Lx)%description="q2Lx" 00281 IF (q2Rx /= 0) Stencil(q2Rx)%description="q2Rx" 00282 IF (q2Ly /= 0) Stencil(q2Ly)%description="q2Ly" 00283 IF (q2Ry /= 0) Stencil(q2Ry)%description="q2Ry" 00284 IF (q2Lz /= 0) Stencil(q2Lz)%description="q2Lz" 00285 IF (q2Rz /= 0) Stencil(q2Rz)%description="q2Rz" 00286 IF (f2x /= 0) Stencil(f2x)%description="f2x" 00287 IF (f2y /= 0) Stencil(f2y)%description="f2y" 00288 IF (f2z /= 0) Stencil(f2z)%description="f2z" 00289 IF (limiter_x /= 0) Stencil(limiter_x)%description="limiter_x" 00290 IF (limiter_y /= 0) Stencil(limiter_y)%description="limiter_y" 00291 IF (limiter_z /= 0) Stencil(limiter_z)%description="limiter_z" 00292 IF (limiter_ppm /= 0) Stencil(limiter_ppm)%description="limiter_ppm" 00293 IF (pT /= 0) Stencil(pT)%description="pT" 00294 IF (qex /= 0) Stencil(qex)%description="qex" 00295 IF (qey /= 0) Stencil(qey)%description="qey" 00296 IF (qez /= 0) Stencil(qez)%description="qez" 00297 IF (dqx /= 0) Stencil(dqx)%description="dqx" 00298 IF (dqy /= 0) Stencil(dqy)%description="dqy" 00299 IF (dqz /= 0) Stencil(dqz)%description="dqz" 00300 IF (ex /= 0) Stencil(ex)%description="ex" 00301 IF (ey /= 0) Stencil(ey)%description="ey" 00302 IF (ez /= 0) Stencil(ez)%description="ez" 00303 IF (ex_bar /= 0) Stencil(ex_bar)%description="ex_bar" 00304 IF (ey_bar /= 0) Stencil(ey_bar)%description="ey_bar" 00305 IF (ez_bar /= 0) Stencil(ez_bar)%description="ez_bar" 00306 IF (e2x /= 0) Stencil(e2x)%description="e2x" 00307 IF (e2y /= 0) Stencil(e2y)%description="e2y" 00308 IF (e2z /= 0) Stencil(e2z)%description="e2z" 00309 IF (e2x_bar /= 0) Stencil(e2x_bar)%description="e2x_bar" 00310 IF (e2y_bar /= 0) Stencil(e2y_bar)%description="e2y_bar" 00311 IF (e2z_bar /= 0) Stencil(e2z_bar)%description="e2z_bar" 00312 IF (A2x /= 0) Stencil(A2x)%description="A2x" 00313 IF (A2y /= 0) Stencil(A2y)%description="A2y" 00314 IF (A2z /= 0) Stencil(A2z)%description="A2z" 00315 IF (Sx /= 0) Stencil(Sx)%description="Sx" 00316 IF (Sy /= 0) Stencil(Sy)%description="Sy" 00317 IF (Sz /= 0) Stencil(Sz)%description="Sz" 00318 IF (SpeedsX /= 0) Stencil(SpeedsX)%description="SpeedsX" 00319 IF (SpeedsY /= 0) Stencil(SpeedsY)%description="SpeedsY" 00320 IF (SpeedsZ /= 0) Stencil(SpeedsZ)%description="SpeedsZ" 00321 IF (leftX /= 0) Stencil(leftX)%description="leftX" 00322 IF (RightX /= 0) Stencil(RightX)%description="RightX" 00323 IF (leftY /= 0) Stencil(leftY)%description="leftY" 00324 IF (RightY /= 0) Stencil(RightY)%description="RightY" 00325 IF (leftZ /= 0) Stencil(leftZ)%description="leftZ" 00326 IF (RightZ /= 0) Stencil(RightZ)%description="RightZ" 00327 IF (nWaves /= 0) Stencil(nWaves)%description="nWaves" 00328 IF (req_eigens /= 0) Stencil(req_eigens)%description="req_eigens" 00329 IF (adfx /= 0) Stencil(adfx)%description="adfx" 00330 IF (adfy /= 0) Stencil(adfy)%description="adfy" 00331 IF (adfz /= 0) Stencil(adfz)%description="adfz" 00332 IF (ctfx /= 0) Stencil(ctfx)%description="ctfx" 00333 IF (ctfy /= 0) Stencil(ctfy)%description="ctfy" 00334 IF (ctfz /= 0) Stencil(ctfz)%description="ctfz" 00335 IF (etax /= 0) Stencil(etax)%description="etax" 00336 IF (etay /= 0) Stencil(etay)%description="etay" 00337 IF (etaz /= 0) Stencil(etaz)%description="etaz" 00338 IF (eta2x /= 0) Stencil(eta2x)%description="eta2x" 00339 IF (eta2y /= 0) Stencil(eta2y)%description="eta2y" 00340 IF (eta2z /= 0) Stencil(eta2z)%description="eta2z" 00341 IF (A3x /= 0) Stencil(A3x)%description="A3x" 00342 IF (A3y /= 0) Stencil(A3y)%description="A3y" 00343 IF (A3z /= 0) Stencil(A3z)%description="A3z" 00344 IF (w3 /= 0) Stencil(w3)%description="w3" 00345 IF (ctf2x /= 0) Stencil(ctf2x)%description="ctf2x" 00346 IF (ctf2y /= 0) Stencil(ctf2y)%description="ctf2y" 00347 IF (ctf2z /= 0) Stencil(ctf2z)%description="ctf2z" 00348 IF (beforesweepstep /= 0) Stencil(beforesweepstep)%description="beforestep" 00349 IF (aftersweepstep /= 0) Stencil(aftersweepstep)%description="afterstep" 00350 IF (source /= 0) Stencil(source)%description="source" 00351 IF (source2 /= 0) Stencil(source2)%description="source2" 00352 IF (cornerdiv /= 0) Stencil(cornerdiv)%description="cornerdiv" 00353 IF (gradphix /= 0) Stencil(gradphix)%description="gradphix" 00354 IF (gradphiy /= 0) Stencil(gradphiy)%description="gradphiy" 00355 IF (gradphiz /= 0) Stencil(gradphiz)%description="gradphiz" 00356 END SUBROUTINE set_descriptions 00357 00358 00359 00360 SUBROUTINE sweep_() 00361 INTEGER :: index,i,j,k 00362 CALL BeforeSweepStep_() 00363 CALL Init_prims_() 00364 CALL Reconstruct_() 00365 IF (viscCD == ROE_VISCOSITY .OR. viscCD == H_VISCOSITY) CALL HVisc_() 00366 IF (nDim >= 2 .AND. (lCTU .OR. lMHD)) THEN 00367 CALL calc_fluxes_() 00368 IF (lMHD) THEN 00369 CALL calc_emf_() 00370 CALL updateB_() 00371 CALL update_fluxes_() 00372 END IF 00373 IF (lMHD .OR. (NrTracerVars > 0 .AND. iTracer==LAGRANGIAN)) CALL updatew2_() 00374 CALL CTU_() 00375 CALL calc_final_fluxes_() 00376 IF (NrTracerVars > 0) CALL calc_tracer_fluxes_() 00377 CALL update_final_fluxes_() 00378 CALL update_final_() 00379 IF (lMHD) THEN 00380 CALL calc_final_emf_() 00381 CALL updateB_final_() 00382 END IF 00383 ELSE 00384 CALL calc_fluxes_noctu() 00385 ! CALL updatew2_() 00386 CALL update_final_fluxes_() 00387 CALL update_final_() 00388 END IF 00389 CALL store_fixup_fluxes_() 00390 CALL AfterSweepStep_() 00391 CONTAINS 00392 00393 SUBROUTINE BeforeSweepStep_ 00394 CALL set_dependency(beforesweepstep, q, (/0,0,0,0,0,0/)) 00395 END SUBROUTINE BeforeSweepStep_ 00396 00397 SUBROUTINE AfterSweepStep_() 00398 CALL set_dependency(aftersweepstep, w3, (/0,0,0,0,0,0/)) 00399 END SUBROUTINE AfterSweepStep_ 00400 00401 SUBROUTINE Init_prims_() 00402 !Calculating new primitive values needed for reconstruction 00403 CALL set_dependency(w, beforesweepstep, (/0,0,0,0,0,0/)) 00404 END SUBROUTINE Init_prims_ 00405 00406 SUBROUTINE Reconstruct_ 00407 IF (lGudonov) THEN 00408 CALL set_dependency(qRx, w, center_r) 00409 CALL set_dependency(qLx, w, center_l) 00410 IF (lMHD) THEN 00411 CALL set_dependency(qRx, aux, same) 00412 CALL set_dependency(qLx, aux, same) 00413 END IF 00414 IF (nDim >= 2) THEN 00415 CALL set_dependency(qRy, w, center_u) 00416 CALL set_dependency(qLy, w, center_d) 00417 IF (lMHD) THEN 00418 CALL set_dependency(qRy, aux, same) 00419 CALL set_dependency(qLy, aux, same) 00420 END IF 00421 IF (nDim >= 3) THEN 00422 CALL set_dependency(qRz, w, center_b) 00423 CALL set_dependency(qLz, w, center_f) 00424 IF (lMHD) THEN 00425 CALL set_dependency(qRz, aux, same) 00426 CALL set_dependency(qLz, aux, same) 00427 END IF 00428 END IF 00429 END IF 00430 ELSE 00431 IF (lLimiter .OR. lApplyLOF) THEN 00432 CALL calc_limiters_() 00433 END IF 00434 IF (.NOT. request_eigens_()) THEN 00435 END IF 00436 CALL set_dependency(dqx, w, (/-1,1,0,0,0,0/)) 00437 IF (lChar_Limiters) CALL set_dependency(dqx, req_eigens, same) 00438 IF (lLimiter) CALL set_dependency(dqx, limiter_ppm, same) 00439 IF (nDim >= 2) THEN 00440 CALL set_dependency(dqy, w, (/0,0,-1,1,0,0/)) 00441 IF (lChar_Limiters) CALL set_dependency(dqy, req_eigens, same) 00442 IF (lLimiter) CALL set_dependency(dqy, limiter_ppm, same) 00443 IF (nDim >= 3) THEN 00444 CALL set_dependency(dqz, w, (/0,0,0,0,-1,1/)) 00445 IF (lChar_Limiters) CALL set_dependency(dqz, req_eigens, same) 00446 IF (lLimiter) CALL set_dependency(dqz, limiter_ppm, same) 00447 END IF 00448 END IF 00449 IF (InterpOrder == 3) THEN 00450 IF (lUsePPML) THEN 00451 CALL set_dependency(qex, w, (/-2,1,0,0,0,0/)) 00452 ELSE 00453 CALL set_dependency(qex, w, (/-1,0,0,0,0,0/)) 00454 END IF 00455 CALL set_dependency(qex, dqx, (/-1,0,0,0,0,0/)) 00456 IF (nDim >= 2) THEN 00457 CALL set_dependency(qey, w, (/0,0,-1,0,0,0/)) 00458 CALL set_dependency(qey, dqy, (/0,0,-1,0,0,0/)) 00459 IF (nDim >= 3) THEN 00460 CALL set_dependency(qez, w, (/0,0,0,0,-1,0/)) 00461 CALL set_dependency(qez, dqz, (/0,0,0,0,-1,0/)) 00462 END IF 00463 END IF 00464 END IF 00465 CALL set_codependency(qRx, qLx, (/1,0,0/)) 00466 IF (nDim >= 2) THEN 00467 CALL set_codependency(qRy, qLy, (/0,1,0/)) 00468 IF (nDim >= 3) THEN 00469 CALL set_codependency(qRz, qLz, (/0,0,1/)) 00470 END IF 00471 END IF 00472 CALL set_dependency(qRx, w, center_r) 00473 IF (InterpOrder == 3) CALL set_dependency(qRx, qex, (/0,1,0,0,0,0/)) 00474 CALL set_dependency(qRx, dqx, center_r) 00475 ! IF (lLimiter) CALL set_dependency(qRx, limiter_ppm, center_r) 00476 CALL set_dependency(qRx, req_eigens, center_r) 00477 CALL set_dependency(qLx, w, center_l) 00478 CALL set_dependency(qLx, dqx, center_l) 00479 IF (InterpOrder == 3) CALL set_dependency(qLx, qex, (/-1,0,0,0,0,0/)) 00480 ! IF (lLimiter) CALL set_dependency(qLx, limiter_ppm, center_l) 00481 CALL set_dependency(qLx, req_eigens, center_l) 00482 IF (lUsePPML) THEN 00483 CALL set_dependency(qRx, w, (/-2,2,0,0,0,0/)) 00484 CALL set_dependency(qLx, w, (/-2,2,0,0,0,0/)) 00485 END IF 00486 IF (nDim >= 2) THEN 00487 CALL set_dependency(qRy, w, center_u) 00488 CALL set_dependency(qRy, dqy, center_u) 00489 IF (InterpOrder == 3) CALL set_dependency(qRy, qey, (/0,0,0,1,0,0/)) 00490 IF (lLimiter) CALL set_dependency(qRy, limiter_ppm, center_u) 00491 CALL set_dependency(qRy, req_eigens, center_u) 00492 CALL set_dependency(qLy, w, center_d) 00493 CALL set_dependency(qLy, dqy, center_d) 00494 IF (InterpOrder == 3) CALL set_dependency(qLy, qey, (/0,0,-1,0,0,0/)) 00495 IF (lLimiter) CALL set_dependency(qLy, limiter_ppm, center_d) 00496 CALL set_dependency(qLy, req_eigens, center_d) 00497 IF (nDim >= 3) THEN 00498 CALL set_dependency(qRz, w, center_f) 00499 CALL set_dependency(qRz, dqz, center_f) 00500 IF (InterpOrder == 3) CALL set_dependency(qRz, qez, (/0,0,0,0,0,1/)) 00501 IF (lLimiter) CALL set_dependency(qRz, limiter_ppm, center_f) 00502 CALL set_dependency(qRz, req_eigens, center_f) 00503 CALL set_dependency(qLz, w, center_b) 00504 CALL set_dependency(qLz, dqz, center_b) 00505 IF (InterpOrder == 3) CALL set_dependency(qLz, qez, (/0,0,0,0,-1,0/)) 00506 IF (lLimiter) CALL set_dependency(qLz, limiter_ppm, center_b) 00507 CALL set_dependency(qLz, req_eigens, center_b) 00508 END IF 00509 END IF 00510 IF (lMHD) THEN 00511 IF (nDim >= 2) THEN 00512 CALL set_dependency(qLx, aux, same) 00513 CALL set_dependency(qRx, aux, same) 00514 CALL set_dependency(qLy, aux, same) 00515 CALL set_dependency(qRy, aux, same) 00516 IF (nDim >= 3) THEN 00517 CALL set_dependency(qLz, aux, same) 00518 CALL set_dependency(qRz, aux, same) 00519 END IF 00520 END IF 00521 END IF 00522 IF (lMHD) CALL MHD_Source_Terms_() 00523 END IF 00524 IF (lSelfGravity) THEN 00525 CALL set_dependency(qLx, gradphix, same) 00526 CALL set_dependency(qRx, gradphix, same) 00527 IF (nDim >= 2) THEN 00528 CALL set_dependency(qLy, gradphiy, same) 00529 CALL set_dependency(qRy, gradphiy, same) 00530 IF (nDim >= 3) THEN 00531 CALL set_dependency(qLz, gradphiz, same) 00532 CALL set_dependency(qRz, gradphiz, same) 00533 END IF 00534 END IF 00535 END IF 00536 END SUBROUTINE Reconstruct_ 00537 00538 SUBROUTINE calc_limiters_() 00539 CALL set_dependency(pT, w, same) 00540 CALL set_dependency(limiter_x, pT, (/-2,2,0,0,0,0/)) 00541 CALL set_dependency(limiter_x, w, (/-1,1,0,0,0,0/)) 00542 IF (lLimiter) THEN 00543 IF (nDim == 1) CALL set_dependency(limiter_ppm, limiter_x, (/-1,1,0,0,0,0/)) 00544 IF (nDim == 2) CALL set_dependency(limiter_ppm, limiter_x, (/-1,1,-1,1,0,0/)) 00545 IF (nDim == 3) CALL set_dependency(limiter_ppm, limiter_x, (/-1,1,-1,1,-1,1/)) 00546 END IF 00547 IF (nDim >= 2) THEN 00548 CALL set_dependency(limiter_y, pT, (/0,0,-2,2,0,0/)) 00549 CALL set_dependency(limiter_y, w, (/0,0,-1,1,0,0/)) 00550 IF (lLimiter) THEN 00551 IF (nDim == 2) CALL set_dependency(limiter_ppm, limiter_y, (/-1,1,-1,1,0,0/)) 00552 IF (nDim == 3) CALL set_dependency(limiter_ppm, limiter_y, (/-1,1,-1,1,-1,1/)) 00553 END IF 00554 IF (nDim >= 3) THEN 00555 CALL set_dependency(limiter_z, pT, (/0,0,0,0,-2,2/)) 00556 CALL set_dependency(limiter_z, w, (/0,0,0,0,-1,1/)) 00557 IF (lLimiter) CALL set_dependency(limiter_ppm, limiter_z, (/-1,1,-1,1,-1,1/)) 00558 END IF 00559 END IF 00560 END SUBROUTINE calc_limiters_ 00561 00562 00563 FUNCTION request_eigens_() 00564 LOGICAL :: request_eigens_ 00565 CALL set_dependency(req_eigens, w, same) 00566 CALL set_group(req_eigens, nWaves) 00567 CALL set_group(req_eigens, SpeedsX) 00568 CALL set_group(req_eigens, LeftX) 00569 CALL set_group(req_eigens, RightX) 00570 IF (nDim >= 2) THEN 00571 CALL set_group(req_eigens, SpeedsY) 00572 CALL set_group(req_eigens, LeftY) 00573 CALL set_group(req_eigens, RightY) 00574 IF (nDim >= 3) THEN 00575 CALL set_group(req_eigens, SpeedsZ) 00576 CALL set_group(req_eigens, LeftZ) 00577 CALL set_group(req_eigens, RightZ) 00578 END IF 00579 END IF 00580 request_eigens_=.true. 00581 END FUNCTION request_eigens_ 00582 00583 SUBROUTINE MHD_Source_Terms_() 00584 INTEGER :: i,i2,j,k,m,index 00585 IF (nDim >= 2) THEN 00586 CALL set_dependency(qLx, w, center_l) 00587 CALL set_dependency(qLx, aux, (/-1,0,0,0,0,0/)) 00588 CALL set_dependency(qLx, aux, (/-1,-1,0,1,0,0/)) 00589 CALL set_dependency(qRx, w, center_r) 00590 CALL set_dependency(qRx, aux, (/0,1,0,0,0,0/)) 00591 CALL set_dependency(qRx, aux, (/0,0,0,1,0,0/)) 00592 00593 CALL set_dependency(qLy, w, center_d) 00594 CALL set_dependency(qLy, aux, (/0,0,-1,0,0,0/)) 00595 CALL set_dependency(qLy, aux, (/0,1,-1,-1,0,0/)) 00596 CALL set_dependency(qRy, w, center_u) 00597 CALL set_dependency(qRy, aux, (/0,1,0,0,0,0/)) 00598 CALL set_dependency(qRy, aux, (/0,0,0,1,0,0/)) 00599 00600 IF (nDim >= 3) THEN 00601 CALL set_dependency(qLx, aux, (/-1,-1,0,0,0,1/)) 00602 CALL set_dependency(qLy, aux, (/0,0,-1,-1,0,1/)) 00603 00604 CALL set_dependency(qRx, aux, (/0,0,0,0,0,1/)) 00605 CALL set_dependency(qRy, aux, (/0,0,0,0,0,1/)) 00606 00607 CALL set_dependency(qLz, w, center_b) 00608 CALL set_dependency(qLz, aux, (/0,0,0,0,-1,0/)) 00609 CALL set_dependency(qLz, aux, (/0,1,0,0,-1,-1/)) 00610 CALL set_dependency(qLz, aux, (/0,0,0,1,-1,-1/)) 00611 00612 CALL set_dependency(qRz, w, center_f) 00613 CALL set_dependency(qRz, aux, (/0,0,0,0,0,1/)) 00614 CALL set_dependency(qRz, aux, (/0,1,0,0,0,0/)) 00615 CALL set_dependency(qRz, aux, (/0,0,0,1,0,0/)) 00616 END IF 00617 END IF 00618 END SUBROUTINE MHD_Source_Terms_ 00619 00620 SUBROUTINE calc_fluxes_() 00621 CALL set_dependency(fx, qLx, same) 00622 CALL set_dependency(fx, qRx, same) 00623 IF (nDim >= 2) THEN 00624 CALL set_dependency(fy, qLy, same) 00625 CALL set_dependency(fy, qRy, same) 00626 IF (nDim >= 3) THEN 00627 CALL set_dependency(fz, qLz, same) 00628 CALL set_dependency(fz, qRz, same) 00629 END IF 00630 END IF 00631 END SUBROUTINE calc_fluxes_ 00632 00633 00634 SUBROUTINE calc_fluxes_noctu() 00635 CALL set_dependency(f2x, qLx, same) 00636 CALL set_dependency(f2x, qRx, same) 00637 IF (nDim >= 2) THEN 00638 CALL set_dependency(f2y, qLy, same) 00639 CALL set_dependency(f2y, qRy, same) 00640 IF (nDim >= 3) THEN 00641 CALL set_dependency(f2z, qLz, same) 00642 CALL set_dependency(f2z, qRz, same) 00643 END IF 00644 END IF 00645 END SUBROUTINE calc_fluxes_noctu 00646 00647 SUBROUTINE calc_emf_() 00648 CALL set_dependency(ez_bar, w, same) 00649 IF (nDim >= 3) THEN 00650 CALL set_dependency(ex_bar, w, same) 00651 CALL set_dependency(ey_bar, w, same) 00652 END IF 00653 00654 CALL set_dependency(ez, ez_bar, (/-1,0,-1,0,0,0/)) 00655 CALL set_dependency(ez, fy, (/-1,0,0,0,0,0/)) 00656 CALL set_dependency(ez, fx, (/0,0,-1,0,0,0/)) 00657 00658 IF (nDim >= 3) THEN 00659 CALL set_dependency(ex, ex_bar, (/0,0,-1,0,-1,0/)) 00660 CALL set_dependency(ex, fz, (/0,0,-1,0,0,0/)) 00661 CALL set_dependency(ex, fy, (/0,0,0,0,-1,0/)) 00662 CALL set_dependency(ey, ey_bar, (/-1,0,0,0,-1,0/)) 00663 CALL set_dependency(ey, fx, (/0,0,0,0,-1,0/)) 00664 CALL set_dependency(ey, fz, (/-1,0,0,0,0,0/)) 00665 END IF 00666 END SUBROUTINE calc_emf_ 00667 00668 00669 SUBROUTINE updateB_() 00670 CALL set_dependency(A2x, aux, same) 00671 CALL set_dependency(A2x, ez, (/0,0,0,1,0,0/)) 00672 CALL set_dependency(A2y, aux, same) 00673 CALL set_dependency(A2y, ez, (/0,1,0,0,0,0/)) 00674 00675 IF (nDim >= 3) THEN 00676 CALL set_dependency(A2x, ey, (/0,0,0,0,0,1/)) 00677 CALL set_dependency(A2y, ex, (/0,0,0,0,0,1/)) 00678 00679 CALL set_dependency(A2z, aux, same) 00680 CALL set_dependency(A2z, ex, (/0,0,0,1,0,0/)) 00681 CALL set_dependency(A2z, ey, (/0,1,0,0,0,0/)) 00682 END IF 00683 END SUBROUTINE updateB_ 00684 00685 SUBROUTINE updatew2_() 00686 CALL set_dependency(w2, beforesweepstep, same) 00687 CALL set_dependency(w2, fx, (/0,1,0,0,0,0/)) 00688 CALL set_dependency(w2, fy, (/0,0,0,1,0,0/)) 00689 IF (nDim >= 3) CALL set_dependency(w2, fz, (/0,0,0,0,0,1/)) 00690 IF (lMHD) THEN 00691 CALL set_dependency(w2, A2x, (/0,1,0,0,0,0/)) 00692 CALL set_dependency(w2, A2y, (/0,0,0,1,0,0/)) 00693 IF (nDim >= 3) THEN 00694 CALL set_dependency(w2, ctfx, (/0,1,0,0,0,0/)) 00695 CALL set_dependency(w2, ctfy, (/0,0,0,1,0,0/)) 00696 CALL set_dependency(w2, A2z, (/0,0,0,0,0,1/)) 00697 CALL set_dependency(w2, ctfz, (/0,0,0,0,0,1/)) 00698 END IF 00699 END IF 00700 IF (lSelfGravity) THEN 00701 CALL set_dependency(w2, beforesweepstep, (/-1,1,0,0,0,0/)) 00702 IF (nDim >= 2) THEN 00703 CALL set_dependency(w2, beforesweepstep, (/0,0,-1,1,0,0/)) 00704 IF (nDim >= 3) THEN 00705 CALL set_dependency(w2, beforesweepstep, (/0,0,0,0,-1,1/)) 00706 END IF 00707 END IF 00708 END IF 00709 END SUBROUTINE updatew2_ 00710 00711 00712 SUBROUTINE update_fluxes_() 00713 IF (nDim == 3) THEN 00714 CALL set_dependency(ctfx, ez, (/0,0,0,1,0,0/)) 00715 CALL set_dependency(ctfx, ey, (/0,0,0,0,0,1/)) 00716 CALL set_dependency(ctfy, ez, (/0,1,0,0,0,0/)) 00717 CALL set_dependency(ctfy, ex, (/0,0,0,0,0,1/)) 00718 CALL set_dependency(ctfz, ex, (/0,0,0,1,0,0/)) 00719 CALL set_dependency(ctfz, ey, (/0,1,0,0,0,0/)) 00720 END IF 00721 END SUBROUTINE update_fluxes_ 00722 00723 00724 SUBROUTINE CTU_() 00725 IF (lMHD) THEN 00726 CALL set_dependency(Sx, w, same) 00727 CALL set_dependency(Sy, w, same) 00728 00729 IF (nDim == 2) THEN 00730 CALL set_dependency(Sx, aux, (/0,1,0,1,0,0/)) 00731 CALL set_dependency(Sy, aux, (/0,1,0,1,0,0/)) 00732 ELSE IF (nDim >= 3) THEN 00733 CALL set_dependency(Sz, w, same) 00734 CALL set_dependency(Sx, aux, (/0,1,0,1,0,1/)) 00735 CALL set_dependency(Sy, aux, (/0,1,0,1,0,1/)) 00736 CALL set_dependency(Sz, aux, (/0,1,0,1,0,1/)) 00737 END IF 00738 END IF 00739 00740 CALL set_dependency(q2Lx, qLx, same) 00741 CALL set_dependency(q2Lx, beforesweepstep, (/-1,-1,0,0,0,0/)) 00742 CALL set_dependency(q2Lx, fy, (/-1,-1,0,1,0,0/)) 00743 CALL set_dependency(q2Rx, qRx, same) 00744 CALL set_dependency(q2Rx, beforesweepstep, (/0,0,0,0,0,0/)) 00745 CALL set_dependency(q2Rx, fy, (/0,0,0,1,0,0/)) 00746 00747 CALL set_dependency(q2Ly, qLy, same) 00748 CALL set_dependency(q2Ly, beforesweepstep, (/0,0,-1,-1,0,0/)) 00749 CALL set_dependency(q2Ly, fx, (/0, 1, -1,-1,0,0/)) 00750 CALL set_dependency(q2Ry, qRy, same) 00751 CALL set_dependency(q2Ry, beforesweepstep, (/0,0,0,0,0,0/)) 00752 CALL set_dependency(q2Ry, fx, (/0,1,0,0,0,0/)) 00753 00754 IF (lMHD) THEN 00755 CALL set_dependency(q2Lx, Sx, center_l) 00756 CALL set_dependency(q2Rx, Sx, center_r) 00757 CALL set_dependency(q2Lx, A2x, same) 00758 CALL set_dependency(q2Rx, A2x, same) 00759 CALL set_dependency(q2Ly, Sy, center_d) 00760 CALL set_dependency(q2Ry, Sy, center_u) 00761 CALL set_dependency(q2Ly, A2y, same) 00762 CALL set_dependency(q2Ry, A2y, same) 00763 END IF 00764 IF (nDim >= 3) THEN 00765 CALL set_dependency(q2Lz, qLz, same) 00766 CALL set_dependency(q2Lx, fz, (/-1,-1,0,0,0,1/)) 00767 CALL set_dependency(q2Rx, fz, (/0,0,0,0,0,1/)) 00768 CALL set_dependency(q2Ly, fz, (/0,0,-1,-1,0,1/)) 00769 CALL set_dependency(q2Ry, fz, (/0,0,0,0,0,1/)) 00770 CALL set_dependency(q2Rz, qRz, same) 00771 CALL set_dependency(q2Lz, fx, (/0,1,0,0,-1,-1/)) 00772 CALL set_dependency(q2Lz, fy, (/0,0,0,1,-1,-1/)) 00773 CALL set_dependency(q2Rz, fx, (/0,1,0,0,0,0/)) 00774 CALL set_dependency(q2Rz, fy, (/0,0,0,1,0,0/)) 00775 00776 IF (lMHD) THEN 00777 CALL set_dependency(q2Lx, ctfy, (/-1,-1,0,1,0,0/)) 00778 CALL set_dependency(q2Rx, ctfy, (/0,0,0,1,0,0/)) 00779 CALL set_dependency(q2Ly, ctfx, (/0, 1, -1,-1,0,0/)) 00780 CALL set_dependency(q2Ry, ctfx, (/0,1,0,0,0,0/)) 00781 CALL set_dependency(q2Lz, ctfx, (/0,1,0,0,-1,-1/)) 00782 CALL set_dependency(q2Lz, ctfy, (/0,0,0,1,-1,-1/)) 00783 CALL set_dependency(q2Rz, ctfx, (/0,1,0,0,0,0/)) 00784 CALL set_dependency(q2Rz, ctfy, (/0,0,0,1,0,0/)) 00785 CALL set_dependency(q2Lx, ctfz, (/-1,-1,0,0,0,1/)) 00786 CALL set_dependency(q2Rx, ctfz, (/0,0,0,0,0,1/)) 00787 CALL set_dependency(q2Ly, ctfz, (/0,0,-1,-1,0,1/)) 00788 CALL set_dependency(q2Ry, ctfz, (/0,0,0,0,0,1/)) 00789 CALL set_dependency(q2Lz, Sz, center_b) 00790 CALL set_dependency(q2Rz, Sz, center_f) 00791 CALL set_dependency(q2Lz, A2z, same) 00792 CALL set_dependency(q2Rz, A2z, same) 00793 END IF 00794 END IF 00795 IF (lSelfGravity) THEN 00796 CALL set_dependency(q2Lx, gradphiy, (/-1,-1,0,1,0,0/)) 00797 CALL set_dependency(q2Rx, gradphiy, (/0,0,0,1,0,0/)) 00798 CALL set_dependency(q2Ly, gradphix, (/0,1,-1,-1,0,0/)) 00799 CALL set_dependency(q2Ry, gradphix, (/0,1,0,0,0,0/)) 00800 IF (nDim >= 3) THEN 00801 CALL set_dependency(q2Lx, gradphiz, (/-1,-1,0,0,0,1/)) 00802 CALL set_dependency(q2Rx, gradphiz, (/0,0,0,0,0,1/)) 00803 CALL set_dependency(q2Ly, gradphiz, (/0,0,-1,-1,0,1/)) 00804 CALL set_dependency(q2Ry, gradphiz, (/0,0,0,0,0,1/)) 00805 CALL set_dependency(q2Lz, gradphix, (/0,1,0,0,-1,-1/)) 00806 CALL set_dependency(q2Lz, gradphiy, (/0,0,0,1,-1,-1/)) 00807 CALL set_dependency(q2Rz, gradphix, (/0,1,0,0,0,0/)) 00808 CALL set_dependency(q2Rz, gradphiy, (/0,0,0,1,0,0/)) 00809 END IF 00810 END IF 00811 00812 END SUBROUTINE CTU_ 00813 00814 SUBROUTINE calc_tracer_fluxes_() 00815 CALL set_dependency(adfx, beforesweepstep, (/-1,1,0,0,0,0/)) 00816 CALL set_dependency(f2x, w2, (/-1,0,0,0,0,0/)) 00817 CALL set_dependency(f2x, adfx, (/-1,0,0,0,0,0/)) 00818 IF (nDim >= 2) THEN 00819 CALL set_dependency(adfy, beforesweepstep, (/0,0,-1,1,0,0/)) 00820 CALL set_dependency(f2y, w2, (/0,0,-1,0,0,0/)) 00821 CALL set_dependency(f2y, adfy, (/0,0,-1,0,0,0/)) 00822 IF (nDim >= 3) THEN 00823 CALL set_dependency(adfz, beforesweepstep, (/0,0,0,0,-1,1/)) 00824 CALL set_dependency(f2z, w2, (/0,0,0,0,-1,0/)) 00825 CALL set_dependency(f2z, adfz, (/0,0,0,0,-1,0/)) 00826 END IF 00827 END IF 00828 END SUBROUTINE calc_tracer_fluxes_ 00829 00830 SUBROUTINE HVisc_() 00831 00832 CALL set_dependency(etax, req_eigens, (/-1,0,0,0,0,0/)) 00833 CALL set_dependency(eta2x, etax, same) 00834 00835 IF (nDim >= 2) THEN 00836 CALL set_dependency(etay, req_eigens, (/0,0,-1,0,0,0/)) 00837 CALL set_dependency(eta2y, etay, same) 00838 IF (nDim >= 3) THEN 00839 CALL set_dependency(etaz, req_eigens, (/0,0,0,0,-1,0/)) 00840 CALL set_dependency(eta2z, etaz, same) 00841 END IF 00842 IF (ViscCD >= 2) THEN 00843 CALL set_dependency(eta2x, etay, (/-1,0,0,1,0,0/)) 00844 CALL set_dependency(eta2y, etax, (/0,1,-1,0,0,0/)) 00845 IF (nDim >= 3) THEN 00846 CALL set_dependency(eta2x, etaz, (/-1,0,0,0,0,1/)) 00847 CALL set_dependency(eta2y, etaz, (/0,0,-1,0,0,1/)) 00848 CALL set_dependency(eta2z, etax, (/0,1,0,0,-1,0/)) 00849 CALL set_dependency(eta2z, etay, (/0,0,0,1,-1,0/)) 00850 END IF 00851 END IF 00852 END IF 00853 END SUBROUTINE HVisc_ 00854 00855 SUBROUTINE calc_final_fluxes_() 00856 CALL set_dependency(f2x, q2Lx, same) 00857 CALL set_dependency(f2x, q2Rx, same) 00858 IF (ViscCD > 0) CALL set_dependency(f2x, eta2x, same) 00859 IF (nDim >= 2) THEN 00860 CALL set_dependency(f2y, q2Ly, same) 00861 CALL set_dependency(f2y, q2Ry, same) 00862 IF (ViscCD > 0) CALL set_dependency(f2y, eta2y, same) 00863 IF (nDim >= 3) THEN 00864 CALL set_dependency(f2z, q2Lz, same) 00865 CALL set_dependency(f2z, q2Rz, same) 00866 IF (ViscCD > 0) CALL set_dependency(f2z, eta2z, same) 00867 END IF 00868 END IF 00869 END SUBROUTINE calc_final_fluxes_ 00870 00871 SUBROUTINE calc_final_emf_() 00872 00873 CALL set_dependency(e2z_bar, w2, same) 00874 CALL set_dependency(e2z, e2z_bar, (/-1,0,-1,0,0,0/)) 00875 CALL set_dependency(e2z, f2x, (/0,0,-1,0,0,0/)) 00876 CALL set_dependency(e2z, f2y, (/-1,0,0,0,0,0/)) 00877 00878 IF (nDim >= 3) THEN 00879 CALL set_dependency(e2x_bar, w2, same) 00880 CALL set_dependency(e2y_bar, w2, same) 00881 CALL set_dependency(e2x, e2x_bar, (/0,0,-1,0,-1,0/)) 00882 CALL set_dependency(e2x, f2y, (/0,0,0,0,-1,0/)) 00883 CALL set_dependency(e2x, f2z, (/0,0,-1,0,0,0/)) 00884 CALL set_dependency(e2y, e2y_bar, (/-1,0,0,0,-1,0/)) 00885 CALL set_dependency(e2y, f2z, (/-1,0,0,0,0,0/)) 00886 CALL set_dependency(e2y, f2x, (/0,0,0,0,-1,0/)) 00887 END IF 00888 END SUBROUTINE calc_final_emf_ 00889 00890 SUBROUTINE store_fixup_fluxes_() 00891 END SUBROUTINE store_fixup_fluxes_ 00892 00893 00894 00895 SUBROUTINE update_final_fluxes_() 00896 00897 IF (lApplyDiffusion) THEN 00898 IF (nDim == 1) CALL set_dependency(cornerdiv, w, (/-1,0,0,0,0,0/)) 00899 IF (nDim == 2) CALL set_dependency(cornerdiv, w, (/-1,0,-1,0,0,0/)) 00900 IF (nDim == 3) CALL set_dependency(cornerdiv, w, (/-1,0,-1,0,-1,0/)) 00901 00902 CALL set_dependency(f2x, beforesweepstep, (/-1,0,0,0,0,0/)) 00903 IF (nDim == 1) CALL set_dependency(f2x, cornerdiv, (/0,0,0,0,0,0/)) 00904 IF (nDim == 2) CALL set_dependency(f2x, cornerdiv, (/0,0,0,1,0,0/)) 00905 IF (nDim == 3) CALL set_dependency(f2x, cornerdiv, (/0,0,0,1,0,1/)) 00906 00907 IF (nDim >= 2) THEN 00908 CALL set_dependency(f2y, beforesweepstep, (/0,0,-1,0,0,0/)) 00909 IF (nDim == 2) CALL set_dependency(f2y, cornerdiv, (/0,1,0,0,0,0/)) 00910 IF (nDim == 3) CALL set_dependency(f2y, cornerdiv, (/0,1,0,0,0,1/)) 00911 IF (nDim == 3) THEN 00912 CALL set_dependency(f2z, beforesweepstep, (/0,0,0,0,-1,0/)) 00913 CALL set_dependency(f2z, cornerdiv, (/0,1,0,1,0,0/)) 00914 END IF 00915 END IF 00916 END IF 00917 00918 IF (lApplyLOF) THEN 00919 CALL set_dependency(f2x, beforesweepstep, (/-2,1,0,0,0,0/)) 00920 CALL set_dependency(f2y, beforesweepstep, (/0,0,-2,1,0,0/)) 00921 CALL set_dependency(f2x, limiter_y, (/-1,0,0,0,0,0/)) 00922 CALL set_dependency(f2y, limiter_x, (/0,0,-1,0,0,0/)) 00923 IF (nDim == 3) THEN 00924 CALL set_dependency(f2z, beforesweepstep, (/0,0,0,0,-2,1/)) 00925 CALL set_dependency(f2x, limiter_z, (/-1,0,0,0,0,0/)) 00926 CALL set_dependency(f2y, limiter_z, (/0,0,-1,0,0,0/)) 00927 CALL set_dependency(f2z, limiter_x, (/0,0,0,0,-1,0/)) 00928 CALL set_dependency(f2z, limiter_y, (/0,0,0,0,-1,0/)) 00929 END IF 00930 END IF 00931 00932 IF (lSourceTerms) THEN 00933 IF (lSelfGravity) THEN 00934 CALL set_dependency(gradphix, beforesweepstep, (/-1,0,0,0,0,0/)) 00935 CALL set_dependency(f2x, gradphix, (/0,0,0,0,0,0/)) 00936 IF (nDim >= 2) THEN 00937 CALL set_dependency(gradphiy, beforesweepstep, (/0,0,-1,0,0,0/)) 00938 CALL set_dependency(f2x, gradphiy, (/-1,0,0,1,0,0/)) 00939 CALL set_dependency(f2y, gradphix, (/0,1,-1,0,0,0/)) 00940 CALL set_dependency(f2y, gradphiy, (/0,0,0,0,0,0/)) 00941 IF (nDim == 3) THEN 00942 CALL set_dependency(gradphiz, beforesweepstep, (/0,0,0,0,-1,0/)) 00943 CALL set_dependency(f2x, gradphiz, (/-1,0,0,0,0,1/)) 00944 CALL set_dependency(f2y, gradphiz, (/0,0,-1,0,0,1/)) 00945 CALL set_dependency(f2z, gradphix, (/0,1,0,0,-1,0/)) 00946 CALL set_dependency(f2z, gradphiy, (/0,0,0,1,-1,0/)) 00947 CALL set_dependency(f2z, gradphiz, (/0,0,0,0,0,0/)) 00948 END IF 00949 END IF 00950 END IF 00951 END IF 00952 END SUBROUTINE update_final_fluxes_ 00953 00954 SUBROUTINE updateB_final_() 00955 CALL set_dependency(A3x, aux, same) 00956 CALL set_dependency(A3x, e2z, (/0,0,0,1,0,0/)) 00957 CALL set_dependency(A3y, e2z, (/0,1,0,0,0,0/)) 00958 00959 IF (nDim >= 3) THEN 00960 CALL set_dependency(A3x, e2y, (/0,0,0,0,0,1/)) 00961 CALL set_dependency(A3y, e2x, (/0,0,0,0,0,1/)) 00962 CALl set_dependency(A3z, e2x, (/0,0,0,1,0,0/)) 00963 CALl set_dependency(A3z, e2y, (/0,1,0,0,0,0/)) 00964 END IF 00965 END SUBROUTINE updateB_final_ 00966 00967 00968 00969 SUBROUTINE update_final_() 00970 CALL set_dependency(w3, beforesweepstep, same) 00971 CALL set_dependency(w3, f2x, (/0,1,0,0,0,0/)) 00972 IF (nDim >= 2) THEN 00973 CALL set_dependency(w3, f2y, (/0,0,0,1,0,0/)) 00974 IF (nDim >= 3) THEN 00975 CALL set_dependency(w3, f2z, (/0,0,0,0,0,1/)) 00976 END IF 00977 END IF 00978 IF (lMHD .AND. nDim >= 2) THEN 00979 CALL set_dependency(aftersweepstep, A3x, (/0,1,0,0,0,0/)) 00980 CALL set_dependency(aftersweepstep, A3y, (/0,0,0,1,0,0/)) 00981 IF (nDim == 3) CALL set_dependency(aftersweepstep, A3z, (/0,0,0,0,0,1/)) 00982 END IF 00983 END SUBROUTINE update_final_ 00984 00985 SUBROUTINE update_final_noctu_() 00986 CALL set_dependency(w3, beforesweepstep, same) 00987 CALL set_dependency(w3, f2x, (/0,1,0,0,0,0/)) 00988 IF (nDim >= 2) THEN 00989 CALL set_dependency(w3, f2y, (/0,0,0,1,0,0/)) 00990 IF (nDim >= 3) THEN 00991 CALL set_dependency(w3, f2z, (/0,0,0,0,0,1/)) 00992 END IF 00993 END IF 00994 END SUBROUTINE update_final_noctu_ 00995 00996 END SUBROUTINE sweep_ 00997 00998 END MODULE SchemeDeclarations