Changeset 667 for palm/trunk/SOURCE/boundary_conds.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/boundary_conds.f90
r484 r667 4 4 ! Current revisions: 5 5 ! ----------------- 6 ! 7 ! nxl-1, nxr+1, nys-1, nyn+1 replaced by nxlg, nxrg, nysg, nyng 8 ! 6 9 ! 7 ! 10 ! Removed mirror boundary conditions for u and v at the bottom in case of 11 ! ibc_uv_b == 0. Instead, dirichelt boundary conditions (u=v=0) are set 12 ! in init_3d_model 13 ! 8 14 ! Former revisions: 9 15 ! ----------------- … … 70 76 IF ( range == 'main') THEN 71 77 ! 72 !-- Bottom boundary 73 IF ( ibc_uv_b == 0 ) THEN 74 ! 75 !-- Satisfying the Dirichlet condition with an extra layer below the 76 !-- surface where the u and v component change their sign 77 u_p(nzb,:,:) = -u_p(nzb+1,:,:) 78 v_p(nzb,:,:) = -v_p(nzb+1,:,:) 79 ELSE 78 !-- Bottom boundary 79 IF ( ibc_uv_b == 1 ) THEN 80 80 u_p(nzb,:,:) = u_p(nzb+1,:,:) 81 81 v_p(nzb,:,:) = v_p(nzb+1,:,:) 82 82 ENDIF 83 DO i = nxl -1, nxr+184 DO j = nys -1, nyn+183 DO i = nxlg, nxrg 84 DO j = nysg, nyng 85 85 w_p(nzb_w_inner(j,i),j,i) = 0.0 86 86 ENDDO … … 90 90 !-- Top boundary 91 91 IF ( ibc_uv_t == 0 ) THEN 92 u_p(nzt+1,:,:) = ug(nzt+1)93 v_p(nzt+1,:,:) = vg(nzt+1)92 u_p(nzt+1,:,:) = ug(nzt+1) 93 v_p(nzt+1,:,:) = vg(nzt+1) 94 94 ELSE 95 u_p(nzt+1,:,:) = u_p(nzt,:,:)96 v_p(nzt+1,:,:) = v_p(nzt,:,:)95 u_p(nzt+1,:,:) = u_p(nzt,:,:) 96 v_p(nzt+1,:,:) = v_p(nzt,:,:) 97 97 ENDIF 98 98 w_p(nzt:nzt+1,:,:) = 0.0 ! nzt is not a prognostic level (but cf. pres) … … 103 103 !-- the sea surface temperature of the coupled ocean model. 104 104 IF ( ibc_pt_b == 0 ) THEN 105 DO i = nxl -1, nxr+1106 DO j = nys -1, nyn+1105 DO i = nxlg, nxrg 106 DO j = nysg, nyng 107 107 pt_p(nzb_s_inner(j,i),j,i) = pt(nzb_s_inner(j,i),j,i) 108 108 ENDDO 109 109 ENDDO 110 110 ELSEIF ( ibc_pt_b == 1 ) THEN 111 DO i = nxl -1, nxr+1112 DO j = nys -1, nyn+1111 DO i = nxlg, nxrg 112 DO j = nysg, nyng 113 113 pt_p(nzb_s_inner(j,i),j,i) = pt_p(nzb_s_inner(j,i)+1,j,i) 114 114 ENDDO … … 119 119 !-- Temperature at top boundary 120 120 IF ( ibc_pt_t == 0 ) THEN 121 pt_p(nzt+1,:,:) = pt(nzt+1,:,:)121 pt_p(nzt+1,:,:) = pt(nzt+1,:,:) 122 122 ELSEIF ( ibc_pt_t == 1 ) THEN 123 pt_p(nzt+1,:,:) = pt_p(nzt,:,:)123 pt_p(nzt+1,:,:) = pt_p(nzt,:,:) 124 124 ELSEIF ( ibc_pt_t == 2 ) THEN 125 pt_p(nzt+1,:,:) = pt_p(nzt,:,:) + bc_pt_t_val * dzu(nzt+1)125 pt_p(nzt+1,:,:) = pt_p(nzt,:,:) + bc_pt_t_val * dzu(nzt+1) 126 126 ENDIF 127 127 … … 130 130 !-- Generally Neumann conditions with de/dz=0 are assumed 131 131 IF ( .NOT. constant_diffusion ) THEN 132 DO i = nxl -1, nxr+1133 DO j = nys -1, nyn+1132 DO i = nxlg, nxrg 133 DO j = nysg, nyng 134 134 e_p(nzb_s_inner(j,i),j,i) = e_p(nzb_s_inner(j,i)+1,j,i) 135 135 ENDDO … … 144 144 !-- Bottom boundary: Neumann condition because salinity flux is always 145 145 !-- given 146 DO i = nxl -1, nxr+1147 DO j = nys -1, nyn+1146 DO i = nxlg, nxrg 147 DO j = nysg, nyng 148 148 sa_p(nzb_s_inner(j,i),j,i) = sa_p(nzb_s_inner(j,i)+1,j,i) 149 149 ENDDO … … 153 153 !-- Top boundary: Dirichlet or Neumann 154 154 IF ( ibc_sa_t == 0 ) THEN 155 sa_p(nzt+1,:,:) = sa(nzt+1,:,:)155 sa_p(nzt+1,:,:) = sa(nzt+1,:,:) 156 156 ELSEIF ( ibc_sa_t == 1 ) THEN 157 sa_p(nzt+1,:,:) = sa_p(nzt,:,:)157 sa_p(nzt+1,:,:) = sa_p(nzt,:,:) 158 158 ENDIF 159 159 … … 167 167 !-- Surface conditions for constant_humidity_flux 168 168 IF ( ibc_q_b == 0 ) THEN 169 DO i = nxl -1, nxr+1170 DO j = nys -1, nyn+1169 DO i = nxlg, nxrg 170 DO j = nysg, nyng 171 171 q_p(nzb_s_inner(j,i),j,i) = q(nzb_s_inner(j,i),j,i) 172 172 ENDDO 173 173 ENDDO 174 174 ELSE 175 DO i = nxl -1, nxr+1176 DO j = nys -1, nyn+1175 DO i = nxlg, nxrg 176 DO j = nysg, nyng 177 177 q_p(nzb_s_inner(j,i),j,i) = q_p(nzb_s_inner(j,i)+1,j,i) 178 178 ENDDO … … 182 182 !-- Top boundary 183 183 q_p(nzt+1,:,:) = q_p(nzt,:,:) + bc_q_t_val * dzu(nzt+1) 184 185 184 186 ENDIF 185 187 … … 226 228 c_max = dy / dt_3d 227 229 228 DO i = nxl -1, nxr+1230 DO i = nxlg, nxrg 229 231 DO k = nzb+1, nzt+1 230 232 … … 299 301 !-- Bottom boundary at the outflow 300 302 IF ( ibc_uv_b == 0 ) THEN 301 u_p(nzb,-1,:) = -u_p(nzb+1,-1,:)302 v_p(nzb,0,:) = -v_p(nzb+1,0,:)303 u_p(nzb,-1,:) = 0.0 304 v_p(nzb,0,:) = 0.0 303 305 ELSE 304 306 u_p(nzb,-1,:) = u_p(nzb+1,-1,:) … … 324 326 c_max = dy / dt_3d 325 327 326 DO i = nxl -1, nxr+1328 DO i = nxlg, nxrg 327 329 DO k = nzb+1, nzt+1 328 330 … … 397 399 !-- Bottom boundary at the outflow 398 400 IF ( ibc_uv_b == 0 ) THEN 399 u_p(nzb,ny+1,:) = -u_p(nzb+1,ny+1,:)400 v_p(nzb,ny+1,:) = -v_p(nzb+1,ny+1,:)401 u_p(nzb,ny+1,:) = 0.0 402 v_p(nzb,ny+1,:) = 0.0 401 403 ELSE 402 404 u_p(nzb,ny+1,:) = u_p(nzb+1,ny+1,:) … … 422 424 c_max = dx / dt_3d 423 425 424 DO j = nys -1, nyn+1426 DO j = nysg, nyng 425 427 DO k = nzb+1, nzt+1 426 428 … … 495 497 !-- Bottom boundary at the outflow 496 498 IF ( ibc_uv_b == 0 ) THEN 497 u_p(nzb,:, -1) = -u_p(nzb+1,:,-1)498 v_p(nzb,:,-1) = -v_p(nzb+1,:,-1)499 u_p(nzb,:,0) = 0.0 500 v_p(nzb,:,-1) = 0.0 499 501 ELSE 500 u_p(nzb,:, -1) = u_p(nzb+1,:,-1)502 u_p(nzb,:,0) = u_p(nzb+1,:,0) 501 503 v_p(nzb,:,-1) = v_p(nzb+1,:,-1) 502 504 ENDIF … … 520 522 c_max = dx / dt_3d 521 523 522 DO j = nys -1, nyn+1524 DO j = nysg, nyng 523 525 DO k = nzb+1, nzt+1 524 526 … … 593 595 !-- Bottom boundary at the outflow 594 596 IF ( ibc_uv_b == 0 ) THEN 595 u_p(nzb,:,nx+1) = -u_p(nzb+1,:,nx+1)596 v_p(nzb,:,nx+1) = -v_p(nzb+1,:,nx+1)597 u_p(nzb,:,nx+1) = 0.0 598 v_p(nzb,:,nx+1) = 0.0 597 599 ELSE 598 600 u_p(nzb,:,nx+1) = u_p(nzb+1,:,nx+1)
Note: See TracChangeset
for help on using the changeset viewer.