Changeset 75 for palm/trunk/SOURCE/init_3d_model.f90
- Timestamp:
- Mar 22, 2007 9:54:05 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/init_3d_model.f90
r73 r75 9 9 ! Arrays for radiation boundary conditions are allocated (u_m_l, u_m_r, etc.), 10 10 ! bugfix for cases with the outflow damping layer extending over more than one 11 ! subdomain, 12 ! New initializing action "by_user" calls user_init_3d_model,11 ! subdomain, moisture renamed humidity, 12 ! new initializing action "by_user" calls user_init_3d_model, 13 13 ! precipitation_amount/rate, ts_value are allocated, +module netcdf_control, 14 14 ! initial velocities at nzb+1 are regarded for volume 15 15 ! flow control in case they have been set zero before (to avoid small timesteps) 16 ! -uvmean_outflow, uxrp, vynp eliminated 16 17 ! 17 18 ! Former revisions: … … 76 77 sums_divnew_l(0:statistic_regions), & 77 78 sums_divold_l(0:statistic_regions) ) 78 ALLOCATE( rdf(nzb+1:nzt), uvmean_outflow(nzb:nzt+1), & 79 uvmean_outflow_l(nzb:nzt+1) ) 79 ALLOCATE( rdf(nzb+1:nzt) ) 80 80 ALLOCATE( hom_sum(nzb:nzt+1,var_hom,0:statistic_regions), & 81 81 ngp_2dh_outer(nzb:nzt+1,0:statistic_regions), & … … 105 105 ENDIF 106 106 107 ALLOCATE( d(nzb+1:nzta,nys:nyna,nxl:nxra), 108 e_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 109 e_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 110 e_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 111 kh_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 112 km_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 113 p(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 114 pt_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 115 pt_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 116 pt_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 117 tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 118 u_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1 +uxrp),&119 u_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1 +uxrp),&120 u_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1 +uxrp),&121 v_1(nzb:nzt+1,nys-1:nyn+1 +vynp,nxl-1:nxr+1), &122 v_2(nzb:nzt+1,nys-1:nyn+1 +vynp,nxl-1:nxr+1), &123 v_3(nzb:nzt+1,nys-1:nyn+1 +vynp,nxl-1:nxr+1), &124 w_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 125 w_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), 107 ALLOCATE( d(nzb+1:nzta,nys:nyna,nxl:nxra), & 108 e_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 109 e_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 110 e_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 111 kh_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 112 km_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 113 p(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 114 pt_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 115 pt_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 116 pt_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 117 tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 118 u_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 119 u_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 120 u_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 121 v_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 122 v_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 123 v_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 124 w_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 125 w_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 126 126 w_3(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) ) 127 127 … … 131 131 ENDIF 132 132 133 IF ( moisture.OR. passive_scalar ) THEN134 ! 135 !-- 2D- moisture/scalar arrays133 IF ( humidity .OR. passive_scalar ) THEN 134 ! 135 !-- 2D-humidity/scalar arrays 136 136 ALLOCATE ( qs(nys-1:nyn+1,nxl-1:nxr+1), & 137 137 qsws_1(nys-1:nyn+1,nxl-1:nxr+1), & … … 143 143 ENDIF 144 144 ! 145 !-- 3D- moisture/scalar arrays145 !-- 3D-humidity/scalar arrays 146 146 ALLOCATE( q_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & 147 147 q_2(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1), & … … 149 149 150 150 ! 151 !-- 3D-arrays needed for moistureonly152 IF ( moisture) THEN151 !-- 3D-arrays needed for humidity only 152 IF ( humidity ) THEN 153 153 ALLOCATE( vpt_1(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) ) 154 154 … … 212 212 !-- conditions 213 213 IF ( outflow_l ) THEN 214 ALLOCATE( u_m_l(nzb:nzt+1,nys-1:nyn+1,-1:1 ,-2:-1), &215 v_m_l(nzb:nzt+1,nys-1:nyn+1,-1:1 ,-2:-1), &216 w_m_l(nzb:nzt+1,nys-1:nyn+1,-1:1 ,-2:-1) )214 ALLOCATE( u_m_l(nzb:nzt+1,nys-1:nyn+1,-1:1), & 215 v_m_l(nzb:nzt+1,nys-1:nyn+1,-1:1), & 216 w_m_l(nzb:nzt+1,nys-1:nyn+1,-1:1) ) 217 217 ENDIF 218 218 IF ( outflow_r ) THEN 219 ALLOCATE( u_m_r(nzb:nzt+1,nys-1:nyn+1,nx-1:nx+1 ,-2:-1), &220 v_m_r(nzb:nzt+1,nys-1:nyn+1,nx-1:nx+1 ,-2:-1), &221 w_m_r(nzb:nzt+1,nys-1:nyn+1,nx-1:nx+1 ,-2:-1) )219 ALLOCATE( u_m_r(nzb:nzt+1,nys-1:nyn+1,nx-1:nx+1), & 220 v_m_r(nzb:nzt+1,nys-1:nyn+1,nx-1:nx+1), & 221 w_m_r(nzb:nzt+1,nys-1:nyn+1,nx-1:nx+1) ) 222 222 ENDIF 223 223 IF ( outflow_s ) THEN 224 ALLOCATE( u_m_s(nzb:nzt+1,-1:1,nxl-1:nxr+1 ,-2:-1), &225 v_m_s(nzb:nzt+1,-1:1,nxl-1:nxr+1 ,-2:-1), &226 w_m_s(nzb:nzt+1,-1:1,nxl-1:nxr+1 ,-2:-1) )224 ALLOCATE( u_m_s(nzb:nzt+1,-1:1,nxl-1:nxr+1), & 225 v_m_s(nzb:nzt+1,-1:1,nxl-1:nxr+1), & 226 w_m_s(nzb:nzt+1,-1:1,nxl-1:nxr+1) ) 227 227 ENDIF 228 228 IF ( outflow_n ) THEN 229 ALLOCATE( u_m_n(nzb:nzt+1,ny-1:ny+1,nxl-1:nxr+1 ,-2:-1), &230 v_m_n(nzb:nzt+1,ny-1:ny+1,nxl-1:nxr+1 ,-2:-1), &231 w_m_n(nzb:nzt+1,ny-1:ny+1,nxl-1:nxr+1 ,-2:-1) )229 ALLOCATE( u_m_n(nzb:nzt+1,ny-1:ny+1,nxl-1:nxr+1), & 230 v_m_n(nzb:nzt+1,ny-1:ny+1,nxl-1:nxr+1), & 231 w_m_n(nzb:nzt+1,ny-1:ny+1,nxl-1:nxr+1) ) 232 232 ENDIF 233 233 … … 249 249 w_m => w_1; w => w_2; w_p => w_3; tw_m => w_3 250 250 251 IF ( moisture.OR. passive_scalar ) THEN251 IF ( humidity .OR. passive_scalar ) THEN 252 252 qsws_m => qsws_1; qsws => qsws_2 253 253 qswst_m => qswst_1; qswst => qswst_2 254 254 q_m => q_1; q => q_2; q_p => q_3; tq_m => q_3 255 IF ( moisture) vpt_m => vpt_1; vpt => vpt_2255 IF ( humidity ) vpt_m => vpt_1; vpt => vpt_2 256 256 IF ( cloud_physics ) ql => ql_1 257 257 IF ( cloud_droplets ) THEN … … 276 276 w => w_1; w_p => w_2; tw_m => w_3; w_m => w_3 277 277 278 IF ( moisture.OR. passive_scalar ) THEN278 IF ( humidity .OR. passive_scalar ) THEN 279 279 qsws => qsws_1 280 280 qswst => qswst_1 281 281 q => q_1; q_p => q_2; tq_m => q_3; q_m => q_3 282 IF ( moisture) vpt => vpt_1282 IF ( humidity ) vpt => vpt_1 283 283 IF ( cloud_physics ) ql => ql_1 284 284 IF ( cloud_droplets ) THEN … … 309 309 km(:,j,i) = km1d 310 310 pt(:,j,i) = pt_init 311 ENDDO312 ENDDO313 DO i = nxl-1, nxr+uxrp+1314 DO j = nys-1, nyn+1315 311 u(:,j,i) = u1d 316 ENDDO317 ENDDO318 DO i = nxl-1, nxr+1319 DO j = nys-1, nyn+vynp+1320 312 v(:,j,i) = v1d 321 313 ENDDO 322 314 ENDDO 323 315 324 IF ( moisture.OR. passive_scalar ) THEN316 IF ( humidity .OR. passive_scalar ) THEN 325 317 DO i = nxl-1, nxr+1 326 318 DO j = nys-1, nyn+1 … … 368 360 !-- This could actually be computed more accurately in the 1D model. 369 361 !-- Update when opportunity arises! 370 IF ( moisture.OR. passive_scalar ) qs = 0.0362 IF ( humidity .OR. passive_scalar ) qs = 0.0 371 363 372 364 ! … … 419 411 DO j = nys-1, nyn+1 420 412 pt(:,j,i) = pt_init 421 ENDDO422 ENDDO423 DO i = nxl-1, nxr+uxrp+1424 DO j = nys-1, nyn+1425 413 u(:,j,i) = u_init 426 ENDDO427 ENDDO428 DO i = nxl-1, nxr+1429 DO j = nys-1, nyn+vynp+1430 414 v(:,j,i) = v_init 431 415 ENDDO 432 416 ENDDO 417 433 418 ! 434 419 !-- Set initial horizontal velocities at the lowest computational grid levels … … 458 443 ENDIF 459 444 460 IF ( moisture.OR. passive_scalar ) THEN445 IF ( humidity .OR. passive_scalar ) THEN 461 446 DO i = nxl-1, nxr+1 462 447 DO j = nys-1, nyn+1 … … 482 467 usws = 0.0 483 468 vsws = 0.0 484 IF ( moisture.OR. passive_scalar ) qs = 0.0469 IF ( humidity .OR. passive_scalar ) qs = 0.0 485 470 486 471 ! … … 499 484 ! 500 485 !-- Calculate virtual potential temperature 501 IF ( moisture) vpt = pt * ( 1.0 + 0.61 * q )486 IF ( humidity ) vpt = pt * ( 1.0 + 0.61 * q ) 502 487 503 488 ! … … 515 500 516 501 517 IF ( moisture) THEN502 IF ( humidity ) THEN 518 503 ! 519 504 !-- Store initial profile of total water content, virtual potential … … 564 549 ! 565 550 !-- Determine the near-surface water flux 566 IF ( moisture.OR. passive_scalar ) THEN551 IF ( humidity .OR. passive_scalar ) THEN 567 552 IF ( constant_waterflux ) THEN 568 553 qsws = surface_waterflux … … 585 570 IF ( ASSOCIATED( tswst_m ) ) tswst_m = tswst 586 571 587 IF ( moisture.OR. passive_scalar ) THEN572 IF ( humidity .OR. passive_scalar ) THEN 588 573 qswst = 0.0 589 574 IF ( ASSOCIATED( qswst_m ) ) qswst_m = qswst … … 610 595 ENDIF 611 596 612 IF ( moisture.OR. passive_scalar ) THEN597 IF ( humidity .OR. passive_scalar ) THEN 613 598 IF ( .NOT. constant_waterflux ) THEN 614 599 qsws = 0.0 … … 709 694 !-- If required, change the surface humidity/scalar at the start of the 3D 710 695 !-- run 711 IF ( ( moisture.OR. passive_scalar ) .AND. &696 IF ( ( humidity .OR. passive_scalar ) .AND. & 712 697 q_surface_initial_change /= 0.0 ) THEN 713 698 q(nzb,:,:) = q(nzb,:,:) + q_surface_initial_change … … 722 707 !-- remove the divergences from the velocity field 723 708 IF ( create_disturbances ) THEN 724 CALL disturb_field( nzb_u_inner, tend, u , uxrp, 0)725 CALL disturb_field( nzb_v_inner, tend, v , 0, vynp)709 CALL disturb_field( nzb_u_inner, tend, u ) 710 CALL disturb_field( nzb_v_inner, tend, v ) 726 711 n_sor = nsor_ini 727 712 CALL pres … … 746 731 e_p = e; pt_p = pt; u_p = u; v_p = v; w_p = w 747 732 748 IF ( moisture.OR. passive_scalar ) THEN733 IF ( humidity .OR. passive_scalar ) THEN 749 734 IF ( ASSOCIATED( q_m ) ) q_m = q 750 735 IF ( timestep_scheme(1:5) == 'runge' ) tq_m = 0.0 751 736 q_p = q 752 IF ( moisture.AND. ASSOCIATED( vpt_m ) ) vpt_m = vpt737 IF ( humidity .AND. ASSOCIATED( vpt_m ) ) vpt_m = vpt 753 738 ENDIF 754 739 … … 756 741 !-- Initialize old timelevels needed for radiation boundary conditions 757 742 IF ( outflow_l ) THEN 758 u_m_l(:,:,:,-2) = u(:,:,-1:1) 759 v_m_l(:,:,:,-2) = v(:,:,-1:1) 760 w_m_l(:,:,:,-2) = w(:,:,-1:1) 761 u_m_l(:,:,:,-1) = u(:,:,-1:1) 762 v_m_l(:,:,:,-1) = v(:,:,-1:1) 763 w_m_l(:,:,:,-1) = w(:,:,-1:1) 743 u_m_l(:,:,:) = u(:,:,-1:1) 744 v_m_l(:,:,:) = v(:,:,-1:1) 745 w_m_l(:,:,:) = w(:,:,-1:1) 764 746 ENDIF 765 747 IF ( outflow_r ) THEN 766 u_m_r(:,:,:,-2) = u(:,:,nx-1:nx+1) 767 v_m_r(:,:,:,-2) = v(:,:,nx-1:nx+1) 768 w_m_r(:,:,:,-2) = w(:,:,nx-1:nx+1) 769 u_m_r(:,:,:,-1) = u(:,:,nx-1:nx+1) 770 v_m_r(:,:,:,-1) = v(:,:,nx-1:nx+1) 771 w_m_r(:,:,:,-1) = w(:,:,nx-1:nx+1) 748 u_m_r(:,:,:) = u(:,:,nx-1:nx+1) 749 v_m_r(:,:,:) = v(:,:,nx-1:nx+1) 750 w_m_r(:,:,:) = w(:,:,nx-1:nx+1) 772 751 ENDIF 773 752 IF ( outflow_s ) THEN 774 u_m_s(:,:,:,-2) = u(:,-1:1,:) 775 v_m_s(:,:,:,-2) = v(:,-1:1,:) 776 w_m_s(:,:,:,-2) = w(:,-1:1,:) 777 u_m_s(:,:,:,-1) = u(:,-1:1,:) 778 v_m_s(:,:,:,-1) = v(:,-1:1,:) 779 w_m_s(:,:,:,-1) = w(:,-1:1,:) 753 u_m_s(:,:,:) = u(:,-1:1,:) 754 v_m_s(:,:,:) = v(:,-1:1,:) 755 w_m_s(:,:,:) = w(:,-1:1,:) 780 756 ENDIF 781 757 IF ( outflow_n ) THEN 782 u_m_n(:,:,:,-2) = u(:,ny-1:ny+1,:) 783 v_m_n(:,:,:,-2) = v(:,ny-1:ny+1,:) 784 w_m_n(:,:,:,-2) = w(:,ny-1:ny+1,:) 785 u_m_n(:,:,:,-1) = u(:,ny-1:ny+1,:) 786 v_m_n(:,:,:,-1) = v(:,ny-1:ny+1,:) 787 w_m_n(:,:,:,-1) = w(:,ny-1:ny+1,:) 758 u_m_n(:,:,:) = u(:,ny-1:ny+1,:) 759 v_m_n(:,:,:) = v(:,ny-1:ny+1,:) 760 w_m_n(:,:,:) = w(:,ny-1:ny+1,:) 788 761 ENDIF 789 762 … … 803 776 !-- including ghost points) 804 777 e_p = e; pt_p = pt; u_p = u; v_p = v; w_p = w 805 IF ( moisture.OR. passive_scalar ) q_p = q778 IF ( humidity .OR. passive_scalar ) q_p = q 806 779 807 780 ELSE
Note: See TracChangeset
for help on using the changeset viewer.