Changeset 667 for palm/trunk/SOURCE/inflow_turbulence.f90
- Timestamp:
- Dec 23, 2010 12:06:00 PM (13 years ago)
- Location:
- palm/trunk/SOURCE
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/palm/branches/suehring 423-666 /palm/branches/letzel/masked_output/SOURCE 296-409
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
-
palm/trunk/SOURCE/inflow_turbulence.f90
r623 r667 4 4 ! Current revisions: 5 5 ! ----------------- 6 ! 6 ! Using nbgp recycling planes for a better resolution of the turbulent flow 7 ! near the inflow. 7 8 ! 8 9 ! Former revisions: … … 35 36 IMPLICIT NONE 36 37 37 INTEGER :: i, imax, j, k, ngp_ifd, ngp_pr38 INTEGER :: i, imax, j, k, l, ngp_ifd, ngp_pr 38 39 39 40 REAL, DIMENSION(1:2) :: volume_flow_l, volume_flow_offset 40 REAL, DIMENSION(nzb:nzt+1,5 ) :: avpr, avpr_l41 REAL, DIMENSION(nzb:nzt+1,nys -1:nyn+1,5) :: inflow_dist41 REAL, DIMENSION(nzb:nzt+1,5,nbgp) :: avpr, avpr_l 42 REAL, DIMENSION(nzb:nzt+1,nysg:nyng,5,nbgp) :: inflow_dist 42 43 43 44 CALL cpu_log( log_point(40), 'inflow_turbulence', 'start' ) 44 45 45 46 ! 46 !-- Carry out horizontalaveraging in the recycling plane47 !-- Carry out spanwise averaging in the recycling plane 47 48 avpr_l = 0.0 48 ngp_pr = ( nzt - nzb + 2 ) * 5 49 ngp_ifd = ngp_pr * ( nyn - nys + 3)49 ngp_pr = ( nzt - nzb + 2 ) * 5 * nbgp 50 ngp_ifd = ngp_pr * ( nyn - nys + 1 + 2 * nbgp ) 50 51 51 52 ! 52 53 !-- First, local averaging within the recycling domain 53 IF ( recycling_plane >= nxl ) THEN 54 55 imax = MIN( nxr, recycling_plane ) 56 57 DO i = nxl, imax 54 55 i = recycling_plane 56 57 #if defined( __parallel ) 58 IF ( myidx == id_recycling ) THEN 59 60 DO l = 1, nbgp 58 61 DO j = nys, nyn 59 DO k = nzb, nzt +160 61 avpr_l(k,1 ) = avpr_l(k,1) + u(k,j,i)62 avpr_l(k,2 ) = avpr_l(k,2) + v(k,j,i)63 avpr_l(k,3 ) = avpr_l(k,3) + w(k,j,i)64 avpr_l(k,4 ) = avpr_l(k,4) + pt(k,j,i)65 avpr_l(k,5 ) = avpr_l(k,5) + e(k,j,i)62 DO k = nzb, nzt + 1 63 64 avpr_l(k,1,l) = avpr_l(k,1,l) + u(k,j,i) 65 avpr_l(k,2,l) = avpr_l(k,2,l) + v(k,j,i) 66 avpr_l(k,3,l) = avpr_l(k,3,l) + w(k,j,i) 67 avpr_l(k,4,l) = avpr_l(k,4,l) + pt(k,j,i) 68 avpr_l(k,5,l) = avpr_l(k,5,l) + e(k,j,i) 66 69 67 70 ENDDO 68 71 ENDDO 69 ENDDO 70 71 ENDIF 72 73 ! WRITE (9,*) '*** averaged profiles avpr_l' 74 ! DO k = nzb, nzt+1 75 ! WRITE (9,'(F5.1,1X,F5.1,1X,F5.1,1X,F6.1,1X,F7.2)') avpr_l(k,1),avpr_l(k,2),avpr_l(k,3),avpr_l(k,4),avpr_l(k,5) 76 ! ENDDO 77 ! WRITE (9,*) ' ' 78 79 #if defined( __parallel ) 72 i = i + 1 73 ENDDO 74 75 ENDIF 80 76 ! 81 77 !-- Now, averaging over all PEs 82 78 IF ( collective_wait ) CALL MPI_BARRIER( comm2d, ierr ) 83 CALL MPI_ALLREDUCE( avpr_l(nzb,1), avpr(nzb,1), ngp_pr, MPI_REAL, MPI_SUM, & 84 comm2d, ierr ) 79 CALL MPI_ALLREDUCE( avpr_l(nzb,1,1), avpr(nzb,1,1), ngp_pr, & 80 MPI_REAL, MPI_SUM, comm2d, ierr ) 81 85 82 #else 83 DO l = 1, nbgp 84 DO j = nys, nyn 85 DO k = nzb, nzt + 1 86 87 avpr_l(k,1,l) = avpr_l(k,1,l) + u(k,j,i) 88 avpr_l(k,2,l) = avpr_l(k,2,l) + v(k,j,i) 89 avpr_l(k,3,l) = avpr_l(k,3,l) + w(k,j,i) 90 avpr_l(k,4,l) = avpr_l(k,4,l) + pt(k,j,i) 91 avpr_l(k,5,l) = avpr_l(k,5,l) + e(k,j,i) 92 93 ENDDO 94 ENDDO 95 i = i + 1 96 ENDDO 97 86 98 avpr = avpr_l 87 99 #endif 88 100 89 avpr = avpr / ( ( ny + 1 ) * ( recycling_plane + 1 ) ) 90 91 ! WRITE (9,*) '*** averaged profiles' 92 ! DO k = nzb, nzt+1 93 ! WRITE (9,'(F5.1,1X,F5.1,1X,F5.1,1X,F6.1,1X,F7.2)') avpr(k,1),avpr(k,2),avpr(k,3),avpr(k,4),avpr(k,5) 94 ! ENDDO 95 ! WRITE (9,*) ' ' 96 101 avpr = avpr / ( ny + 1 ) 97 102 ! 98 103 !-- Calculate the disturbances at the recycling plane … … 101 106 #if defined( __parallel ) 102 107 IF ( myidx == id_recycling ) THEN 103 104 DO j = nys-1, nyn+1 108 DO l = 1, nbgp 109 DO j = nysg, nyng 110 DO k = nzb, nzt + 1 111 112 inflow_dist(k,j,1,l) = u(k,j,i+1) - avpr(k,1,l) 113 inflow_dist(k,j,2,l) = v(k,j,i) - avpr(k,2,l) 114 inflow_dist(k,j,3,l) = w(k,j,i) - avpr(k,3,l) 115 inflow_dist(k,j,4,l) = pt(k,j,i) - avpr(k,4,l) 116 inflow_dist(k,j,5,l) = e(k,j,i) - avpr(k,5,l) 117 118 ENDDO 119 ENDDO 120 i = i + 1 121 ENDDO 122 123 ENDIF 124 #else 125 DO l = 1, nbgp 126 DO j = nysg, nyng 105 127 DO k = nzb, nzt+1 106 128 107 inflow_dist(k,j,1) = u(k,j,i+1) - avpr(k,1) 108 inflow_dist(k,j,2) = v(k,j,i) - avpr(k,2) 109 inflow_dist(k,j,3) = w(k,j,i) - avpr(k,3) 110 inflow_dist(k,j,4) = pt(k,j,i) - avpr(k,4) 111 inflow_dist(k,j,5) = e(k,j,i) - avpr(k,5) 112 113 ENDDO 114 ENDDO 115 116 ENDIF 117 #else 118 DO j = nys-1, nyn+1 119 DO k = nzb, nzt+1 120 121 inflow_dist(k,j,1) = u(k,j,i+1) - avpr(k,1) 122 inflow_dist(k,j,2) = v(k,j,i) - avpr(k,2) 123 inflow_dist(k,j,3) = w(k,j,i) - avpr(k,3) 124 inflow_dist(k,j,4) = pt(k,j,i) - avpr(k,4) 125 inflow_dist(k,j,5) = e(k,j,i) - avpr(k,5) 126 127 ENDDO 129 inflow_dist(k,j,1,l) = u(k,j,i+1) - avpr(k,1,l) 130 inflow_dist(k,j,2,l) = v(k,j,i) - avpr(k,2,l) 131 inflow_dist(k,j,3,l) = w(k,j,i) - avpr(k,3,l) 132 inflow_dist(k,j,4,l) = pt(k,j,i) - avpr(k,4,l) 133 inflow_dist(k,j,5,l) = e(k,j,i) - avpr(k,5,l) 134 135 ENDDO 136 ENDDO 137 i = i + 1 128 138 ENDDO 129 139 #endif … … 134 144 IF ( myidx == id_recycling .AND. myidx /= id_inflow ) THEN 135 145 136 CALL MPI_SEND( inflow_dist(nzb,nys -1,1), ngp_ifd, MPI_REAL, &146 CALL MPI_SEND( inflow_dist(nzb,nysg,1,1), ngp_ifd, MPI_REAL, & 137 147 id_inflow, 1, comm1dx, ierr ) 138 148 … … 140 150 141 151 inflow_dist = 0.0 142 CALL MPI_RECV( inflow_dist(nzb,nys -1,1), ngp_ifd, MPI_REAL, &152 CALL MPI_RECV( inflow_dist(nzb,nysg,1,1), ngp_ifd, MPI_REAL, & 143 153 id_recycling, 1, comm1dx, status, ierr ) 144 154 … … 150 160 IF ( nxl == 0 ) THEN 151 161 152 DO j = nys-1, nyn+1 153 DO k = nzb, nzt+1 154 155 ! WRITE (9,*) 'j=',j,' k=',k 156 ! WRITE (9,*) 'mean_u = ', mean_inflow_profiles(k,1), ' dist_u = ',& 157 ! inflow_dist(k,j,1) 158 ! WRITE (9,*) 'mean_v = ', mean_inflow_profiles(k,2), ' dist_v = ',& 159 ! inflow_dist(k,j,2) 160 ! WRITE (9,*) 'mean_w = 0.0', ' dist_w = ',& 161 ! inflow_dist(k,j,3) 162 ! WRITE (9,*) 'mean_pt = ', mean_inflow_profiles(k,4), ' dist_pt = ',& 163 ! inflow_dist(k,j,4) 164 ! WRITE (9,*) 'mean_e = ', mean_inflow_profiles(k,5), ' dist_e = ',& 165 ! inflow_dist(k,j,5) 166 u(k,j,0) = mean_inflow_profiles(k,1) + & 167 inflow_dist(k,j,1) * inflow_damping_factor(k) 168 v(k,j,-1) = mean_inflow_profiles(k,2) + & 169 inflow_dist(k,j,2) * inflow_damping_factor(k) 170 w(k,j,-1) = inflow_dist(k,j,3) * inflow_damping_factor(k) 171 pt(k,j,-1) = mean_inflow_profiles(k,4) + & 172 inflow_dist(k,j,4) * inflow_damping_factor(k) 173 e(k,j,-1) = mean_inflow_profiles(k,5) + & 174 inflow_dist(k,j,5) * inflow_damping_factor(k) 175 e(k,j,-1) = MAX( e(k,j,-1), 0.0 ) 162 DO j = nysg, nyng 163 DO k = nzb, nzt + 1 164 165 u(k,j,-nbgp+1:0) = mean_inflow_profiles(k,1) + & 166 inflow_dist(k,j,1,1:nbgp) * inflow_damping_factor(k) 167 v(k,j,-nbgp:-1) = mean_inflow_profiles(k,2) + & 168 inflow_dist(k,j,2,1:nbgp) * inflow_damping_factor(k) 169 w(k,j,-nbgp:-1) = inflow_dist(k,j,3,1:nbgp) * inflow_damping_factor(k) 170 pt(k,j,-nbgp:-1) = mean_inflow_profiles(k,4) + & 171 inflow_dist(k,j,4,1:nbgp) * inflow_damping_factor(k) 172 e(k,j,-nbgp:-1) = mean_inflow_profiles(k,5) + & 173 inflow_dist(k,j,5,1:nbgp) * inflow_damping_factor(k) 174 e(k,j,-nbgp:-1) = MAX( e(k,j,-nbgp:-1), 0.0 ) 176 175 177 176 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.