17 resid, max_resid, ijk_resid)
41 INTEGER,
INTENT(IN) :: M
43 DOUBLE PRECISION,
INTENT(OUT) :: NUM, DEN
45 DOUBLE PRECISION,
INTENT(OUT) :: RESID
47 DOUBLE PRECISION,
INTENT(OUT) :: MAX_RESID
49 INTEGER,
INTENT(OUT) :: IJK_RESID
54 INTEGER :: IJK, IJKW, IJKS, IJKB, IJKE, IJKN, IJKT
56 DOUBLE PRECISION :: NUM1, DEN1
60 DOUBLE PRECISION,
DIMENSION(ijksize3_all(myPE)) :: RESID_IJK
61 DOUBLE PRECISION :: MAX_RESID_GL(0:
numpes-1), MAX_RESID_L(0:
numpes 62 INTEGER :: IJK_RESID_GL(0:
numpes-1), IJK_RESID_L(0:
numpes-1)
81 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
82 IF (fluid_at(ijk))
THEN 91 num1 = b_m(ijk,m) - (a_m(ijk,0,m)*var(ijk)+a_m(ijk,
east,m)*var
98 num1 = num1 - (a_m(ijk,
top,m)*var(ijkt)+a_m(ijk,
bottom,m)
102 den1 = abs(a_m(ijk,0,m)*var(ijk))
104 resid_ijk(ijk) = num1
122 max_resid = resid_ijk( ijk_resid )
124 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
125 IF (resid_ijk(ijk) > max_resid)
THEN 127 max_resid = resid_ijk( ijk_resid )
133 if(nproc.eq.
mype)
then 134 max_resid_l(nproc) = max_resid
135 ijk_resid_l(nproc) = funijk_gl(
i_of(ijk_resid),
j_of(ijk_resid
137 max_resid_l(nproc) = 0.0
138 ijk_resid_l(nproc) = 0
152 if(max_resid_gl(nproc).eq.max_resid.and.ijk_resid_gl(nproc).lt.ijk_resid
then 153 ijk_resid = ijk_resid_gl(nproc)
160 max_resid = ncells*max_resid/den
161 ELSEIF (num ==
zero)
THEN 176 include
'functions.inc' 196 resid, max_resid, ijk_resid, tol)
225 INTEGER,
INTENT(IN) :: M
227 DOUBLE PRECISION,
INTENT(OUT) :: NUM, DEN
229 DOUBLE PRECISION,
INTENT(OUT) :: RESID
231 DOUBLE PRECISION,
INTENT(OUT) :: MAX_RESID
233 INTEGER,
INTENT(OUT) :: IJK_RESID
235 DOUBLE PRECISION,
INTENT(IN) :: TOL
240 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
242 DOUBLE PRECISION :: NUM1, DEN1
246 DOUBLE PRECISION,
DIMENSION(ijksize3_all(myPE)) :: RESID_IJK
247 DOUBLE PRECISION :: MAX_RESID_GL(0:
numpes-1), MAX_RESID_L(0:
numpes 248 INTEGER :: IJK_RESID_GL(0:
numpes-1), IJK_RESID_L(0:
numpes-1)
260 resid_ijk(ijk) =
zero 269 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
271 IF (fluid_at(ijk) .AND. abs(var(ijk)) > tol)
THEN 285 num1 = b_m(ijk,m) - (a_m(ijk,0,m)*var(ijk)+a_m(ijk,
east,m)*var
291 num1 = num1 - (a_m(ijk,
top,m)*var(ijkp)+a_m(ijk,
bottom,m)
295 den1 = abs(a_m(ijk,0,m)*var(ijk))
297 resid_ijk(ijk) = num1
315 max_resid = resid_ijk( ijk_resid )
317 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
318 IF (resid_ijk(ijk) > max_resid)
THEN 320 max_resid = resid_ijk( ijk_resid )
326 if(nproc.eq.
mype)
then 327 max_resid_l(nproc) = max_resid
328 ijk_resid_l(nproc) = funijk_gl(
i_of(ijk_resid),
j_of(ijk_resid
330 max_resid_l(nproc) = 0.0
331 ijk_resid_l(nproc) = 0
345 if(max_resid_gl(nproc).eq.max_resid.and.ijk_resid_gl(nproc).lt.ijk_resid
then 346 ijk_resid = ijk_resid_gl(nproc)
353 max_resid = ncells*max_resid/den
354 ELSEIF (num ==
zero)
THEN 369 include
'functions.inc' 391 SUBROUTINE calc_resid_pp(B_M, NORM, NUM, DEN, RESID, MAX_RESID, &
412 DOUBLE PRECISION,
INTENT(IN) :: NORM
414 DOUBLE PRECISION,
INTENT(OUT) :: NUM, DEN
416 DOUBLE PRECISION,
INTENT(OUT) :: RESID
418 DOUBLE PRECISION,
INTENT(OUT) :: MAX_RESID
420 INTEGER,
INTENT(OUT) :: IJK_RESID
429 DOUBLE PRECISION :: NUM1, DEN1
431 DOUBLE PRECISION :: MAX_RESID_GL(0:
numpes-1), MAX_RESID_L(0:
numpes 432 INTEGER :: IJK_RESID_GL(0:
numpes-1), IJK_RESID_L(0:
numpes-1)
445 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
446 IF (fluid_at(ijk))
THEN 449 num1 = abs(b_m(ijk,0))
450 IF (num1 > max_resid)
THEN 469 IF (den*norm >
zero)
THEN 471 resid = num/(den*norm)
472 ELSEIF (num ==
zero)
THEN 487 if(nproc.eq.
mype)
then 488 max_resid_l(nproc) = max_resid
489 ijk_resid_l(nproc) = funijk_gl(
i_of(ijk_resid),
j_of(ijk_resid
491 max_resid_l(nproc) = 0.0
492 ijk_resid_l(nproc) = 0
506 if(max_resid_gl(nproc).eq.max_resid.and.ijk_resid_gl(nproc).lt.ijk_resid
then 507 ijk_resid = ijk_resid_gl(nproc)
512 IF (den*norm >
zero)
THEN 513 resid = num/(den*norm)
514 max_resid = ncells*max_resid/(den*norm)
515 ELSEIF (num ==
zero)
THEN 532 include
'functions.inc' 576 INTEGER,
INTENT(IN) :: init
578 DOUBLE PRECISION,
INTENT(OUT) :: ErrorPercent(0:
mmax)
587 DOUBLE PRECISION :: dt_local
590 DOUBLE PRECISION :: flux_in, flux_out, fin, fout
591 DOUBLE PRECISION :: err, accum_new, denom
647 flux_out = flux_out + fout * dt_local
648 flux_in = flux_in + fin * dt_local
653 denom = max(abs(accum_new), abs(
accum_resid_g), abs(flux_in), abs
654 IF (denom /=
zero)
THEN 655 errorpercent(0) = err*100./denom
683 flux_out = flux_out + fout * dt_local
684 flux_in = flux_in + fin * dt_local
689 denom = max(abs(accum_new), abs(
accum_resid_s(m)), abs(flux_in
690 if(denom /=
zero)
THEN 691 errorpercent(m) = err*100./denom
705 include
'functions.inc' 720 SUBROUTINE calc_resid_u(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, &
721 resid, max_resid, ijk_resid)
754 INTEGER,
INTENT(IN) :: M
756 DOUBLE PRECISION,
INTENT(OUT) :: NUM, DEN
758 DOUBLE PRECISION,
INTENT(OUT) :: RESID
760 DOUBLE PRECISION,
INTENT(OUT) :: MAX_RESID
762 INTEGER,
INTENT(OUT) :: IJK_RESID
767 DOUBLE PRECISION :: VEL
769 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
771 DOUBLE PRECISION :: NUM1, DEN1
775 DOUBLE PRECISION,
DIMENSION(ijksize3_all(myPE)) :: RESID_IJK
776 DOUBLE PRECISION :: MAX_RESID_GL(0:
numpes-1), MAX_RESID_L(0:
numpes 777 INTEGER :: IJK_RESID_GL(0:
numpes-1), IJK_RESID_L(0:
numpes-1)
781 DOUBLE PRECISION :: EPSA
797 resid_ijk(ijk) =
zero 799 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
802 IF(wall_at(ijk)) cycle
805 epsa = avg_x(
ep_s(ijk,m),
ep_s(east_of(ijk),m),
i_of(ijk))
809 IF (.NOT.ip_at_e(ijk))
THEN 818 num1 = b_m(ijk,m) - (a_m(ijk,0,m)*u_m(ijk)+&
819 a_m(ijk,
east,m)*u_m(ipjk)+a_m(ijk,
west,m)*u_m(imjk)+&
820 a_m(ijk,
north,m)*u_m(ijpk)+a_m(ijk,
south,m)*u_m(ijmk))
824 num1 = num1 - (a_m(ijk,
top,m)*u_m(ijkp)+a_m(ijk,
bottom,m)
829 vel = sqrt(u_m(ijk)**2+v_m(ijk)**2+w_m(ijk)**2)
832 den1 = abs(a_m(ijk,0,m)*vel)
834 resid_ijk(ijk) = num1
853 max_resid = resid_ijk( ijk_resid )
855 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
856 IF (resid_ijk( ijk ) > max_resid)
THEN 858 max_resid = resid_ijk( ijk_resid )
864 if(nproc.eq.
mype)
then 865 max_resid_l(nproc) = max_resid
866 ijk_resid_l(nproc) = funijk_gl(
i_of(ijk_resid),
j_of(ijk_resid
868 max_resid_l(nproc) = 0.0
869 ijk_resid_l(nproc) = 0
883 IF(max_resid_gl(nproc).eq.max_resid.and.&
884 ijk_resid_gl(nproc).lt.ijk_resid)
THEN 885 ijk_resid = ijk_resid_gl(nproc)
892 max_resid = ncells*max_resid/den
893 ELSEIF (num ==
zero)
THEN 908 include
'functions.inc' 923 SUBROUTINE calc_resid_v(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, &
924 resid, max_resid, ijk_resid)
957 INTEGER,
INTENT(IN) :: M
959 DOUBLE PRECISION,
INTENT(OUT) :: NUM, DEN
961 DOUBLE PRECISION,
INTENT(OUT) :: RESID
963 DOUBLE PRECISION,
INTENT(OUT) :: MAX_RESID
965 INTEGER,
INTENT(OUT) :: IJK_RESID
970 DOUBLE PRECISION :: VEL
972 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
974 DOUBLE PRECISION :: NUM1, DEN1
978 DOUBLE PRECISION,
DIMENSION(ijksize3_all(myPE)) :: RESID_IJK
979 DOUBLE PRECISION :: MAX_RESID_GL(0:
numpes-1), MAX_RESID_L(0:
numpes 980 INTEGER :: IJK_RESID_GL(0:
numpes-1), IJK_RESID_L(0:
numpes-1)
983 DOUBLE PRECISION :: EPSA
999 resid_ijk(ijk) =
zero 1001 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
1004 IF(wall_at(ijk)) cycle
1007 epsa = avg_y(
ep_s(ijk,m),
ep_s(north_of(ijk),m),
j_of(ijk))
1011 IF (.NOT.ip_at_n(ijk))
THEN 1020 num1 = b_m(ijk,m) - (a_m(ijk,0,m)*v_m(ijk)+&
1021 a_m(ijk,
east,m)*v_m(ipjk)+a_m(ijk,
west,m)*v_m(imjk)+&
1022 a_m(ijk,
north,m)*v_m(ijpk)+a_m(ijk,
south,m)*v_m(ijmk))
1026 num1 = num1 - (a_m(ijk,
top,m)*v_m(ijkp)+a_m(ijk,
bottom,m)
1031 vel = sqrt(u_m(ijk)**2+v_m(ijk)**2+w_m(ijk)**2)
1034 den1 = abs(a_m(ijk,0,m)*vel)
1036 resid_ijk(ijk) = num1
1055 max_resid = resid_ijk( ijk_resid )
1057 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
1058 IF (resid_ijk( ijk ) > max_resid)
THEN 1060 max_resid = resid_ijk( ijk_resid )
1066 if(nproc.eq.
mype)
then 1067 max_resid_l(nproc) = max_resid
1068 ijk_resid_l(nproc) = funijk_gl(
i_of(ijk_resid),
j_of(ijk_resid
1070 max_resid_l(nproc) = 0.0
1071 ijk_resid_l(nproc) = 0
1085 if(max_resid_gl(nproc).eq.max_resid.and.ijk_resid_gl(nproc).lt.ijk_resid
then 1086 ijk_resid = ijk_resid_gl(nproc)
1091 IF (den >
zero)
THEN 1093 max_resid = ncells*max_resid/den
1094 ELSEIF (num ==
zero)
THEN 1109 include
'functions.inc' 1128 SUBROUTINE calc_resid_w(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, &
1129 resid, max_resid, ijk_resid)
1162 INTEGER,
INTENT(IN) :: M
1164 DOUBLE PRECISION,
INTENT(OUT) :: NUM, DEN
1166 DOUBLE PRECISION,
INTENT(OUT) :: RESID
1168 DOUBLE PRECISION,
INTENT(OUT) :: MAX_RESID
1170 INTEGER,
INTENT(OUT) :: IJK_RESID
1175 DOUBLE PRECISION :: VEL
1177 INTEGER :: IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
1179 DOUBLE PRECISION :: NUM1, DEN1
1183 DOUBLE PRECISION,
DIMENSION(ijksize3_all(myPE)) :: RESID_IJK
1184 DOUBLE PRECISION :: MAX_RESID_GL(0:
numpes-1), MAX_RESID_L(0:
numpes 1185 INTEGER :: IJK_RESID_GL(0:
numpes-1), IJK_RESID_L(0:
numpes-1)
1188 DOUBLE PRECISION :: EPSA
1204 resid_ijk(ijk) =
zero 1206 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
1209 IF(wall_at(ijk)) cycle
1212 epsa = avg_z(
ep_s(ijk,m),
ep_s(top_of(ijk),m),
k_of(ijk))
1216 IF (.NOT.ip_at_t(ijk))
THEN 1225 num1 = b_m(ijk,m) - (a_m(ijk,0,m)*w_m(ijk)+&
1226 a_m(ijk,
east,m)*w_m(ipjk)+a_m(ijk,
west,m)*w_m(imjk)+&
1227 a_m(ijk,
north,m)*w_m(ijpk)+a_m(ijk,
south,m)*w_m(ijmk))
1231 num1 = num1 - (a_m(ijk,
top,m)*w_m(ijkp)+a_m(ijk,
bottom,m)
1236 vel = sqrt(u_m(ijk)**2+v_m(ijk)**2+w_m(ijk)**2)
1239 den1 = abs(a_m(ijk,0,m)*vel)
1241 resid_ijk(ijk) = num1
1260 max_resid = resid_ijk( ijk_resid )
1262 IF(.NOT.is_on_mype_wobnd(
i_of(ijk),
j_of(ijk),
k_of(ijk))) cycle
1264 IF (resid_ijk( ijk ) > max_resid)
THEN 1266 max_resid = resid_ijk( ijk_resid )
1272 if(nproc.eq.
mype)
then 1273 max_resid_l(nproc) = max_resid
1274 ijk_resid_l(nproc) = funijk_gl(
i_of(ijk_resid),
j_of(ijk_resid
1276 max_resid_l(nproc) = 0.0
1277 ijk_resid_l(nproc) = 0
1292 if(max_resid_gl(nproc).eq.max_resid.and.ijk_resid_gl(nproc).lt.ijk_resid
then 1293 ijk_resid = ijk_resid_gl(nproc)
1298 IF (den >
zero)
THEN 1300 max_resid = ncells*max_resid/den
1301 ELSE IF (num ==
zero)
THEN 1316 include
'functions.inc' subroutine calc_resid_u(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
integer, dimension(dimension_bc) bc_k_b
double precision, dimension(:), allocatable flux_ge
subroutine calc_resid_mb(INIT, ErrorPercent)
integer, dimension(:), allocatable i_of
double precision, dimension(dim_m) accum_resid_s
double precision, dimension(:), allocatable flux_gst
double precision, dimension(:,:), allocatable flux_st
double precision, parameter one
integer, dimension(dimension_bc) bc_i_w
integer, dimension(dimension_bc) bc_j_n
double precision, dimension(:), allocatable flux_ssn
subroutine calc_mass_fluxhr(I1, I2, J1, J2, K1, K2, Plane, Flux_E
double precision, dimension(:), allocatable sum_r_g
double precision, dimension(:,:), allocatable sum_r_s
integer, parameter dimension_bc
subroutine calc_resid_s(VAR, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID, TOL)
double precision, parameter undefined
character, dimension(dimension_bc) bc_plane
integer, dimension(:), allocatable k_of
double precision, dimension(:), allocatable flux_gse
integer, dimension(dimension_bc) bc_k_t
double precision function accumulation(ro)
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable flux_gn
double precision, parameter small_number
integer, dimension(dimension_bc) bc_j_s
logical, dimension(dimension_bc) bc_defined
subroutine calc_resid_pp(B_M, NORM, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
double precision, parameter large_number
double precision, parameter dil_ep_s
double precision, dimension(:), allocatable flux_gt
double precision accum_resid_g
subroutine calc_resid_c(VAR, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
subroutine calc_resid_w(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
subroutine calc_resid_v(U_M, V_M, W_M, A_M, B_M, M, NUM, DEN, RESID, MAX_RESID, IJK_RESID)
double precision function ep_s(IJK, xxM)
double precision, dimension(:,:), allocatable rop_s
double precision, dimension(:,:), allocatable flux_se
double precision, dimension(:), allocatable flux_gsn
double precision, dimension(:), allocatable rop_g
double precision, dimension(:,:), allocatable flux_sn
integer, dimension(dimension_bc) bc_i_e
double precision, parameter zero
double precision, dimension(:), allocatable flux_sst
double precision, dimension(:), allocatable flux_sse