Changeset 736 for palm/trunk/SOURCE/prognostic_equations.f90
- Timestamp:
- Aug 17, 2011 2:13:26 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/prognostic_equations.f90
r710 r736 4 4 ! Current revisions: 5 5 ! ----------------- 6 ! 6 ! Bugfix: determination of first thread index i for WS-scheme 7 7 ! 8 8 ! Former revisions: … … 147 147 148 148 CHARACTER (LEN=9) :: time_to_string 149 INTEGER :: i, j, k149 INTEGER :: i, i_omp_start, j, k, tn = 0 150 150 REAL :: sat, sbt 151 151 … … 172 172 ! 173 173 !-- u-tendency terms with no communication 174 i_omp_start = nxlu 174 175 DO i = nxlu, nxr 175 176 DO j = nys, nyn … … 179 180 tend(:,j,i) = 0.0 180 181 IF ( ws_scheme_mom ) THEN 181 CALL advec_u_ws( i, j )182 CALL advec_u_ws( i, j, i_omp_start, tn ) 182 183 ELSE 183 184 CALL advec_u_pw( i, j ) … … 257 258 ! 258 259 !-- v-tendency terms with no communication 260 i_omp_start = nxl 259 261 DO i = nxl, nxr 260 262 DO j = nysv, nyn … … 264 266 tend(:,j,i) = 0.0 265 267 IF ( ws_scheme_mom ) THEN 266 CALL advec_v_ws( i, j )268 CALL advec_v_ws( i, j, i_omp_start, tn ) 267 269 ELSE 268 270 CALL advec_v_pw( i, j ) … … 348 350 tend(:,j,i) = 0.0 349 351 IF ( ws_scheme_mom ) THEN 350 CALL advec_w_ws( i, j )352 CALL advec_w_ws( i, j, i_omp_start, tn ) 351 353 ELSE 352 354 CALL advec_w_pw( i, j ) … … 453 455 IF ( ws_scheme_sca ) THEN 454 456 CALL advec_s_ws( i, j, pt, 'pt', flux_s_pt, & 455 diss_s_pt, flux_l_pt, diss_l_pt )457 diss_s_pt, flux_l_pt, diss_l_pt, i_omp_start, tn ) 456 458 ELSE 457 459 CALL advec_s_pw( i, j, pt ) … … 574 576 IF ( ws_scheme_sca ) THEN 575 577 CALL advec_s_ws( i, j, sa, 'sa', flux_s_sa, & 576 diss_s_sa, flux_l_sa, diss_l_sa )578 diss_s_sa, flux_l_sa, diss_l_sa, i_omp_start, tn ) 577 579 ELSE 578 580 CALL advec_s_pw( i, j, sa ) … … 673 675 IF ( ws_scheme_sca ) THEN 674 676 CALL advec_s_ws( i, j, q, 'q', flux_s_q, & 675 diss_s_q, flux_l_q, diss_l_q )677 diss_s_q, flux_l_q, diss_l_q, i_omp_start, tn ) 676 678 ELSE 677 679 CALL advec_s_pw( i, j, q ) … … 813 815 IF ( ws_scheme_sca ) THEN 814 816 CALL advec_s_ws( i, j, e, 'e', flux_s_e, & 815 diss_s_e, flux_l_e, diss_l_e )817 diss_s_e, flux_l_e, diss_l_e, i_omp_start, tn ) 816 818 ELSE 817 819 CALL advec_s_pw( i, j, e ) … … 916 918 917 919 CHARACTER (LEN=9) :: time_to_string 918 INTEGER :: i, j, k 920 INTEGER :: i, i_omp_start, j, k, omp_get_thread_num, tn = 0 921 LOGICAL :: loop_start 919 922 920 923 … … 934 937 intermediate_timestep_count == 1 ) CALL ws_statistics 935 938 936 937 939 ! 938 940 !-- Loop over all prognostic equations 939 !$OMP PARALLEL private (i,j,k) 941 !$OMP PARALLEL private (i,i_omp_start,j,k,loop_start,tn) 942 943 !$ tn = omp_get_thread_num() 944 loop_start = .TRUE. 940 945 !$OMP DO 941 946 DO i = nxl, nxr 947 948 ! 949 !-- Store the first loop index. It differs for each thread and is required 950 !-- later in advec_ws 951 IF ( loop_start ) THEN 952 loop_start = .FALSE. 953 i_omp_start = i 954 ENDIF 955 942 956 DO j = nys, nyn 943 957 ! … … 948 962 IF ( tsc(2) == 2.0 .OR. timestep_scheme(1:5) == 'runge' ) THEN 949 963 IF ( ws_scheme_mom ) THEN 950 ! CALL local_diss( i, j, u) ! dissipation control 951 CALL advec_u_ws( i, j ) 964 IF ( outflow_l .AND. i_omp_start == nxl ) THEN 965 ! CALL local_diss( i, j, u) ! dissipation control 966 CALL advec_u_ws( i, j, i_omp_start + 1, tn ) 967 ELSE 968 CALL advec_u_ws( i, j, i_omp_start, tn ) 969 ENDIF 952 970 ELSE 953 971 CALL advec_u_pw( i, j ) 954 972 ENDIF 955 ELSE973 ELSE 956 974 CALL advec_u_up( i, j ) 957 975 ENDIF … … 1017 1035 IF ( ws_scheme_mom ) THEN 1018 1036 ! CALL local_diss( i, j, v) 1019 CALL advec_v_ws( i, j )1037 CALL advec_v_ws( i, j, i_omp_start, tn ) 1020 1038 ELSE 1021 1039 CALL advec_v_pw( i, j ) … … 1081 1099 IF ( ws_scheme_mom ) THEN 1082 1100 ! CALL local_diss( i, j, w) 1083 CALL advec_w_ws( i, j )1101 CALL advec_w_ws( i, j, i_omp_start, tn ) 1084 1102 ELSE 1085 1103 CALL advec_w_pw( i, j ) … … 1145 1163 ! CALL local_diss( i, j, pt ) 1146 1164 CALL advec_s_ws( i, j, pt, 'pt', flux_s_pt, & 1147 diss_s_pt, flux_l_pt, diss_l_pt )1165 diss_s_pt, flux_l_pt, diss_l_pt, i_omp_start, tn ) 1148 1166 ELSE 1149 1167 CALL advec_s_pw( i, j, pt ) … … 1227 1245 ! CALL local_diss( i, j, sa ) 1228 1246 CALL advec_s_ws( i, j, sa, 'sa', flux_s_sa, & 1229 diss_s_sa, flux_l_sa, diss_l_sa )1247 diss_s_sa, flux_l_sa, diss_l_sa, i_omp_start, tn ) 1230 1248 ELSE 1231 1249 CALL advec_s_pw( i, j, sa ) … … 1285 1303 ! CALL local_diss( i, j, q ) 1286 1304 CALL advec_s_ws( i, j, q, 'q', flux_s_q, & 1287 diss_s_q, flux_l_q, diss_l_q )1305 diss_s_q, flux_l_q, diss_l_q, i_omp_start, tn ) 1288 1306 ELSE 1289 1307 CALL advec_s_pw( i, j, q ) … … 1361 1379 ! CALL local_diss( i, j, e ) 1362 1380 CALL advec_s_ws( i, j, e, 'e', flux_s_e, & 1363 diss_s_e, flux_l_e, diss_l_e )1381 diss_s_e, flux_l_e, diss_l_e , i_omp_start, tn ) 1364 1382 ELSE 1365 1383 CALL advec_s_pw( i, j, e )
Note: See TracChangeset
for help on using the changeset viewer.