1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC 2 ! C 3 ! Module name: CN_EXTRAPOL C 4 ! C 5 ! Purpose: Performs the explicit extrapolation phase when C 6 ! Crank-Nicholson based second order accurate time C 7 ! integration is activated (CN_ON = TRUE) C 8 ! C 9 ! Make sure dt is set to dt/2 when CN_ON=T C 10 ! C 11 ! Author: Aeolus Research, Inc. (A.Gel) Date: APR-30-01 C 12 ! C 13 ! Literature/Document References: C 14 ! C 15 ! Variables referenced: ROP_g, EP_g, ROP_s, IJKMAX2, MMAX, U_s, V_s, C 16 ! W_s C 17 ! C 18 ! Variables modified: 19 field variables are time integrated 19 ! EP_g , EP_go : Void fraction at t & t-dt time C 20 ! P_G , P_go : Gas pressure at t & t-dt time C 21 ! P_star,P_staro: Solids pressure that maintains C 22 ! EP_g >= EP_star C 23 ! RO_g , RO_go : Gas density C 24 ! ROP_g , ROP_go: Macroscopic gas density C 25 ! U_g , U_go : x-component of gas velocity C 26 ! V_g , V_go : y-component of gas velocity C 27 ! W_g , W_go : z-component of gas velocity C 28 ! T_g , T_go : Gas phase temperature C 29 ! X_g , X_go : Gas species mass fraction C 30 ! Scalar,Scalaro: User-defined Scalars C 31 ! ROP_s , ROP_so: Macroscopic density of solids C 32 ! phases C 33 ! T_s , T_so : Solid phase temperature C 34 ! THETA_m,THETA_mo: Granular temperature of m^th C 35 ! phase C 36 ! trD_S_C, trD_S_Co: trace of D_s C 37 ! U_s , U_so : x-component of solid velocity C 38 ! V_s , V_so : y-component of solid velocity C 39 ! W_s , W_so : z-component of solid velocity C 40 ! X_s , X_so : Solid species mass fraction C 41 ! C 42 ! C 43 ! Local variables: NONE C 44 ! C 45 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C 46 ! 47 SUBROUTINE CN_EXTRAPOL 48 !...Translated by Pacific-Sierra Research VAST-90 2.06G5 12:17:31 12/09/98 49 !...Switches: -xf 50 ! 51 !----------------------------------------------- 52 ! M o d u l e s 53 !----------------------------------------------- 54 USE param 55 USE param1 56 USE parallel 57 USE scales 58 USE constant 59 USE physprop 60 USE fldvar 61 USE scalars 62 USE trace 63 USE run 64 USE geometry 65 USE indices 66 USE compar 67 USE mpi_utility 68 USE functions 69 IMPLICIT NONE 70 !----------------------------------------------- 71 ! G l o b a l P a r a m e t e r s 72 !----------------------------------------------- 73 !----------------------------------------------- 74 ! L o c a l P a r a m e t e r s 75 !----------------------------------------------- 76 !----------------------------------------------- 77 ! L o c a l V a r i a b l e s 78 !----------------------------------------------- 79 ! 80 ! Indices 81 INTEGER :: M, IJK 82 !----------------------------------------------- 83 ! 84 !!!$omp parallel do private(IJK) 85 DO ijk = IJKSTART3, IJKEND3 86 ! IF(.NOT.IS_ON_myPE_OWNS(I_OF(IJK), J_OF(IJK), K_OF(IJK))) CYCLE 87 EP_G(ijk) = 2.*EP_G(ijk) - EP_GO(ijk) 88 !AE TIME Pressure is not postprocessed/calculated in the current implementation 89 ! P_G(ijk) = 2.*P_G(ijk) - P_GO(ijk) 90 ! P_STAR(ijk) = 2.*P_STAR(ijk) - P_STARO(ijk) 91 RO_G(ijk) = 2.*RO_G(ijk) - RO_GO(ijk) 92 ROP_G(ijk) = 2.*ROP_G(ijk)- ROP_GO(ijk) 93 U_G(ijk) = 2.*U_G(ijk) - U_GO(ijk) 94 V_G(ijk) = 2.*V_G(ijk) - V_GO(ijk) 95 W_G(ijk) = 2.*W_G(ijk) - W_GO(ijk) 96 IF (ENERGY_EQ) T_G(ijk) = 2.*T_G(ijk) - T_GO(ijk) 97 98 !AE TIME Update P_g with state equation based on extrapolated ro_g, T_g 99 ! EOSG = UNSCALE(PG)*MW/(GAS_CONST*TG) 100 ! IF (.NOT.WALL_AT(IJK)) THEN 101 ! P_G(ijk) = ((RO_G(ijk)*(GAS_CONST*T_G(ijk))/MW_MIX_G(IJK))- P_ref)/P_scale 102 ! P_G(ijk) = ((RO_G(ijk)*(GAS_CONST*T_G(ijk))/MW_MIX_G(IJK))) 103 ! ENDIF 104 105 IF (SPECIES_EQ(0)) THEN 106 IF (NMAX(0) > 0) THEN 107 X_G(ijk,:NMAX(0)) = 2.*X_G(ijk,:NMAX(0)) - X_GO(ijk,:NMAX(0)) 108 ENDIF 109 ENDIF 110 111 IF (NScalar > 0) THEN 112 Scalar(ijk,:NScalar) = 2.*Scalar(ijk,:NScalar) - ScalarO(ijk,:NScalar) 113 ENDIF 114 115 DO M = 1, MMAX 116 ROP_S(ijk,M) = 2.*ROP_S(ijk,M) - ROP_SO(ijk,M) 117 IF (ENERGY_EQ) T_S(ijk,M) = 2.*T_S(ijk,M) - T_SO(ijk,M) 118 IF (GRANULAR_ENERGY) THEN 119 THETA_M(ijk,M) = 2.*THETA_M(ijk,M) - THETA_MO(ijk,M) 120 TRD_S_C(ijk,M) = 2.*TRD_S_C(ijk,M) - TRD_S_CO(ijk,M) 121 ENDIF 122 U_S(ijk,M) = 2.*U_S(ijk,M) - U_SO(ijk,M) 123 V_S(ijk,M) = 2.*V_S(ijk,M) - V_SO(ijk,M) 124 W_S(ijk,M) = 2.*W_S(ijk,M) - W_SO(ijk,M) 125 IF (SPECIES_EQ(M)) THEN 126 IF (NMAX(M) > 0) THEN 127 X_S(ijk,M,:NMAX(M)) = 2.*X_S(ijk,M,:NMAX(M)) - X_SO(ijk,M,:NMAX(M)) 128 ENDIF 129 ENDIF 130 END DO 131 132 133 END DO 134 135 136 RETURN 137 END SUBROUTINE CN_EXTRAPOL 138 139 !// Comments on the modifications for DMP version implementation 140 !// 120 Replaced the index for initialization: (:IJKMAX2) to just (:) 141