Changeset 94 for palm/trunk/SOURCE/check_parameters.f90
- Timestamp:
- Jun 1, 2007 3:25:22 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/check_parameters.f90
r90 r94 4 4 ! Actual revisions: 5 5 ! ----------------- 6 ! 6 ! Initial salinity profile is calculated. 7 ! z_max_do1d is checked only in case of ocean = .f., 8 ! +initial temperature profile for the ocean version, 7 9 ! 8 10 ! Former revisions: … … 153 155 ENDIF 154 156 ENDIF 157 158 ! 159 !-- Check ocean setting 160 IF ( ocean ) THEN 161 action = ' ' 162 IF ( timestep_scheme(1:8) == 'leapfrog' ) THEN 163 WRITE( action, '(A,A)' ) 'timestep_scheme = ', timestep_scheme 164 ENDIF 165 IF ( action /= ' ' ) THEN 166 IF ( myid == 0 ) THEN 167 PRINT*, '+++ check_parameters:' 168 PRINT*, ' ocean = .T. does not allow ', TRIM( action ) 169 ENDIF 170 CALL local_stop 171 ENDIF 172 ENDIF 173 155 174 ! 156 175 !-- Check whether there are any illegal values … … 418 437 v_init = vg_surface 419 438 pt_init = pt_surface 420 IF ( humidity ) q_init = q_surface 421 IF ( passive_scalar ) q_init = s_surface 439 IF ( humidity ) q_init = q_surface 440 IF ( ocean ) sa_init = sa_surface 441 IF ( passive_scalar ) q_init = s_surface 422 442 423 443 ! … … 504 524 505 525 ! 506 !-- If required, compute initial temperature profile using the given 507 !-- temperature gradient 526 !-- Compute initial temperature profile using the given temperature gradients 508 527 i = 1 509 528 gradient = 0.0 510 pt_vertical_gradient_level_ind(1) = 0 511 DO k = 1, nzt+1 512 IF ( pt_vertical_gradient_level(i) < zu(k) .AND. & 513 pt_vertical_gradient_level(i) >= 0.0 ) THEN 514 gradient = pt_vertical_gradient(i) / 100.0 515 pt_vertical_gradient_level_ind(i) = k - 1 516 i = i + 1 517 IF ( i > 10 ) THEN 518 IF ( myid == 0 ) THEN 519 PRINT*, '+++ check_parameters: upper bound 10 of array', & 520 ' "pt_vertical_gradient_level_ind" exceeded' 521 ENDIF 522 CALL local_stop 523 ENDIF 524 ENDIF 525 IF ( gradient /= 0.0 ) THEN 526 IF ( k /= 1 ) THEN 527 pt_init(k) = pt_init(k-1) + dzu(k) * gradient 529 530 IF ( .NOT. ocean ) THEN 531 532 pt_vertical_gradient_level_ind(1) = 0 533 DO k = 1, nzt+1 534 IF ( pt_vertical_gradient_level(i) < zu(k) .AND. & 535 pt_vertical_gradient_level(i) >= 0.0 ) THEN 536 gradient = pt_vertical_gradient(i) / 100.0 537 pt_vertical_gradient_level_ind(i) = k - 1 538 i = i + 1 539 IF ( i > 10 ) THEN 540 IF ( myid == 0 ) THEN 541 PRINT*, '+++ check_parameters: upper bound 10 of array', & 542 ' "pt_vertical_gradient_level_ind" exceeded' 543 ENDIF 544 CALL local_stop 545 ENDIF 546 ENDIF 547 IF ( gradient /= 0.0 ) THEN 548 IF ( k /= 1 ) THEN 549 pt_init(k) = pt_init(k-1) + dzu(k) * gradient 550 ELSE 551 pt_init(k) = pt_surface + 0.5 * dzu(k) * gradient 552 ENDIF 528 553 ELSE 529 pt_init(k) = pt_init(k-1) + 0.5 * dzu(k) * gradient 530 ENDIF 531 ELSE 532 pt_init(k) = pt_init(k-1) 533 ENDIF 534 ENDDO 554 pt_init(k) = pt_init(k-1) 555 ENDIF 556 ENDDO 557 558 ELSE 559 560 pt_vertical_gradient_level_ind(1) = nzt+1 561 DO k = nzt, 0, -1 562 IF ( pt_vertical_gradient_level(i) > zu(k) .AND. & 563 pt_vertical_gradient_level(i) <= 0.0 ) THEN 564 gradient = pt_vertical_gradient(i) / 100.0 565 pt_vertical_gradient_level_ind(i) = k + 1 566 i = i + 1 567 IF ( i > 10 ) THEN 568 IF ( myid == 0 ) THEN 569 PRINT*, '+++ check_parameters: upper bound 10 of array', & 570 ' "pt_vertical_gradient_level_ind" exceeded' 571 ENDIF 572 CALL local_stop 573 ENDIF 574 ENDIF 575 IF ( gradient /= 0.0 ) THEN 576 IF ( k /= nzt ) THEN 577 pt_init(k) = pt_init(k+1) - dzu(k+1) * gradient 578 ELSE 579 pt_init(k) = pt_surface - 0.5 * dzu(k+1) * gradient 580 pt_init(k+1) = pt_surface + 0.5 * dzu(k+1) * gradient 581 ENDIF 582 ELSE 583 pt_init(k) = pt_init(k+1) 584 ENDIF 585 ENDDO 586 587 ENDIF 535 588 536 589 ! 537 590 !-- In case of no given temperature gradients, choose gradient of neutral 538 591 !-- stratification 539 IF ( pt_vertical_gradient_level(1) == - 1.0) THEN592 IF ( pt_vertical_gradient_level(1) == -9999999.9 ) THEN 540 593 pt_vertical_gradient_level(1) = 0.0 541 594 ENDIF 542 595 543 596 ! 544 !-- Store temperature gradient at the top boundary for possi le Neumann597 !-- Store temperature gradient at the top boundary for possible Neumann 545 598 !-- boundary condition 546 599 bc_pt_t_val = ( pt_init(nzt+1) - pt_init(nzt) ) / dzu(nzt+1) … … 609 662 ENDIF 610 663 664 ! 665 !-- If required, compute initial salinity profile using the given salinity 666 !-- gradients 667 IF ( ocean ) THEN 668 669 i = 1 670 gradient = 0.0 671 672 sa_vertical_gradient_level_ind(1) = nzt+1 673 DO k = nzt, 0, -1 674 IF ( sa_vertical_gradient_level(i) > zu(k) .AND. & 675 sa_vertical_gradient_level(i) <= 0.0 ) THEN 676 gradient = sa_vertical_gradient(i) / 100.0 677 sa_vertical_gradient_level_ind(i) = k + 1 678 i = i + 1 679 IF ( i > 10 ) THEN 680 IF ( myid == 0 ) THEN 681 PRINT*, '+++ check_parameters: upper bound 10 of array', & 682 ' "sa_vertical_gradient_level_ind" exceeded' 683 ENDIF 684 CALL local_stop 685 ENDIF 686 ENDIF 687 IF ( gradient /= 0.0 ) THEN 688 IF ( k /= nzt ) THEN 689 sa_init(k) = sa_init(k+1) - dzu(k+1) * gradient 690 ELSE 691 sa_init(k) = sa_surface - 0.5 * dzu(k+1) * gradient 692 sa_init(k+1) = sa_surface + 0.5 * dzu(k+1) * gradient 693 ENDIF 694 ELSE 695 sa_init(k) = sa_init(k+1) 696 ENDIF 697 ENDDO 698 699 ENDIF 700 611 701 ENDIF 612 702 … … 1769 1859 !-- y-value range of the coordinate system (PROFIL). 1770 1860 !-- x-value range determined in plot_1d. 1771 cross_uymin = 0.0 1772 IF ( z_max_do1d == -1.0 ) THEN 1773 cross_uymax = zu(nzt+1) 1774 ELSEIF ( z_max_do1d < zu(nzb+1) .OR. z_max_do1d > zu(nzt+1) ) THEN 1775 IF ( myid == 0 ) PRINT*, '+++ check_parameters: z_max_do1d=', & 1776 z_max_do1d,' must be >= ', zu(nzb+1), & 1777 ' or <= ', zu(nzt+1) 1778 CALL local_stop 1779 ELSE 1780 cross_uymax = z_max_do1d 1861 IF ( .NOT. ocean ) THEN 1862 cross_uymin = 0.0 1863 IF ( z_max_do1d == -1.0 ) THEN 1864 cross_uymax = zu(nzt+1) 1865 ELSEIF ( z_max_do1d < zu(nzb+1) .OR. z_max_do1d > zu(nzt+1) ) THEN 1866 IF ( myid == 0 ) PRINT*, '+++ check_parameters: z_max_do1d=', & 1867 z_max_do1d,' must be >= ', zu(nzb+1), & 1868 ' or <= ', zu(nzt+1) 1869 CALL local_stop 1870 ELSE 1871 cross_uymax = z_max_do1d 1872 ENDIF 1781 1873 ENDIF 1782 1874
Note: See TracChangeset
for help on using the changeset viewer.