@@ -343,6 +343,8 @@ void advect(Grid &grid,
343
343
344
344
arma_mat t_to_e;
345
345
346
+ precision_t duflux, lrflux, cosdrop;
347
+
346
348
for (iAlt = nGCs; iAlt < nAlts - nGCs; iAlt++) {
347
349
348
350
if (report.test_verbose (3 ))
@@ -424,13 +426,13 @@ void advect(Grid &grid,
424
426
eq2FluxD = rhoP.D % xVelP.D % yVelP.D ;
425
427
eq2FluxU = rhoP.U % xVelP.U % yVelP.U ;
426
428
eq2Flux = rho % xVel % yVel;
427
-
429
+
428
430
eq3FluxR = rhoP.R % xVelP.R % yVelP.R ;
429
431
eq3FluxL = rhoP.L % xVelP.L % yVelP.L ;
430
432
eq3FluxD = rhoP.D % (yVelP.D % yVelP.D + (gammaP.D - 1 ) % tempP.D );
431
433
eq3FluxU = rhoP.U % (yVelP.U % yVelP.U + (gammaP.U - 1 ) % tempP.U );
432
434
eq3Flux = rho % (yVel % yVel + (gamma2d - 1 ) % temp);
433
-
435
+
434
436
eq4FluxL = rhoP.L % xVelP.L % (0.5 * velL2 + gammaP.L % tempP.L );
435
437
eq4FluxR = rhoP.R % xVelP.R % (0.5 * velR2 + gammaP.R % tempP.R );
436
438
eq4FluxD = rhoP.D % yVelP.D % (0.5 * velD2 + gammaP.D % tempP.D );
@@ -499,29 +501,36 @@ void advect(Grid &grid,
499
501
500
502
geometry =
501
503
sin (grid.geoLat_scgc .slice (iAlt)) /
502
- cos (grid.geoLat_scgc .slice (iAlt)) /
503
- grid.radius_scgc (1 , 1 , iAlt);
504
+ cos (grid.geoLat_scgc .slice (iAlt));
505
+
506
+ geometry.clamp (-100.0 , 100.0 );
507
+ geometry = geometry / grid.radius_scgc (1 , 1 , iAlt);
504
508
505
509
for (int64_t j = nGCs; j < nY - nGCs; j++) {
506
510
for (int64_t i = nGCs; i < nX - nGCs; i++) {
507
- // if (i == nGCs) cout << "j = " << j << " " << xWidth(i,j) << "\n";
508
511
rho (i, j) = rho (i, j) - dt *
509
512
(yWidth (i + 1 , j) * eq1FluxLR (i + 1 , j) -
510
513
yWidth (i, j) * eq1FluxLR (i, j) +
511
514
xWidth (i, j + 1 ) * eq1FluxDU (i, j + 1 ) -
512
515
xWidth (i, j) * eq1FluxDU (i, j)) / area (i, j);
516
+ lrflux = 1.0 * (
517
+ (yWidth (i + 1 , j) * eq2FluxLR (i + 1 , j) -
518
+ yWidth (i, j) * eq2FluxLR (i, j)) / area (i,j) -
519
+ geometry (i, j) * eq2Flux (i, j));
513
520
xMomentum (i, j) = xMomentum (i, j) - dt *
514
- ((yWidth (i + 1 , j) * eq2FluxLR (i + 1 , j) -
515
- yWidth (i, j) * eq2FluxLR (i, j) +
516
- xWidth (i, j + 1 ) * eq2FluxDU (i, j + 1 ) -
517
- xWidth (i, j) * eq2FluxDU (i, j)) / area (i, j) -
518
- geometry (i, j) * eq2Flux (i, j));
521
+ ((xWidth (i, j + 1 ) * eq2FluxDU (i, j + 1 ) -
522
+ xWidth (i, j) * eq2FluxDU (i, j)) / area (i, j) +
523
+ lrflux);
524
+ duflux = 1.0 * (
525
+ (xWidth (i, j + 1 ) * eq3FluxDU (i, j + 1 ) -
526
+ xWidth (i, j) * eq3FluxDU (i, j)) / area (i, j) +
527
+ geometry (i, j) * eq3Flux (i, j));
528
+
519
529
yMomentum (i, j) = yMomentum (i, j) - dt *
520
530
((yWidth (i + 1 , j) * eq3FluxLR (i + 1 , j) -
521
- yWidth (i, j) * eq3FluxLR (i, j) +
522
- xWidth (i, j + 1 ) * eq3FluxDU (i, j + 1 ) -
523
- xWidth (i, j) * eq3FluxDU (i, j)) / area (i, j) +
524
- geometry (i, j) * eq3Flux (i, j));
531
+ yWidth (i, j) * eq3FluxLR (i, j))/ area (i, j) +
532
+ duflux);
533
+
525
534
totalE (i, j) = totalE (i, j) - dt *
526
535
(yWidth (i + 1 , j) * eq4FluxLR (i + 1 , j) -
527
536
yWidth (i, j) * eq4FluxLR (i, j) +
0 commit comments