Changeset 97 for palm/trunk/SOURCE/check_parameters.f90
- Timestamp:
- Jun 21, 2007 8:23:15 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/check_parameters.f90
r96 r97 4 4 ! Actual revisions: 5 5 ! ----------------- 6 ! Initial salinity profile is calculated. 6 ! Initial salinity profile is calculated, salinity boundary conditions are 7 ! checked, 7 8 ! z_max_do1d is checked only in case of ocean = .f., 8 ! +initial temperature profile for the ocean version, 9 ! +initial temperature and geostrophic velocity profiles for the ocean version, 10 ! use_pt_reference renamed use_reference 9 11 ! 10 12 ! Former revisions: … … 163 165 WRITE( action, '(A,A)' ) 'timestep_scheme = ', timestep_scheme 164 166 ENDIF 167 IF ( momentum_advec == 'ups-scheme' ) THEN 168 WRITE( action, '(A,A)' ) 'momentum_advec = ', momentum_advec 169 ENDIF 165 170 IF ( action /= ' ' ) THEN 166 171 IF ( myid == 0 ) THEN … … 447 452 i = 1 448 453 gradient = 0.0 449 ug_vertical_gradient_level_ind(1) = 0 450 ug(0) = ug_surface 451 DO k = 1, nzt+1 452 IF ( ug_vertical_gradient_level(i) < zu(k) .AND. & 453 ug_vertical_gradient_level(i) >= 0.0 ) THEN 454 gradient = ug_vertical_gradient(i) / 100.0 455 ug_vertical_gradient_level_ind(i) = k - 1 456 i = i + 1 457 IF ( i > 10 ) THEN 458 IF ( myid == 0 ) THEN 459 PRINT*, '+++ check_parameters: upper bound 10 of array', & 460 ' "ug_vertical_gradient_level_ind" exceeded' 461 ENDIF 462 CALL local_stop 463 ENDIF 464 ENDIF 465 IF ( gradient /= 0.0 ) THEN 466 IF ( k /= 1 ) THEN 467 ug(k) = ug(k-1) + dzu(k) * gradient 454 455 IF ( .NOT. ocean ) THEN 456 457 ug_vertical_gradient_level_ind(1) = 0 458 ug(0) = ug_surface 459 DO k = 1, nzt+1 460 IF ( ug_vertical_gradient_level(i) < zu(k) .AND. & 461 ug_vertical_gradient_level(i) >= 0.0 ) THEN 462 gradient = ug_vertical_gradient(i) / 100.0 463 ug_vertical_gradient_level_ind(i) = k - 1 464 i = i + 1 465 IF ( i > 10 ) THEN 466 IF ( myid == 0 ) THEN 467 PRINT*, '+++ check_parameters: upper bound 10 of array', & 468 ' "ug_vertical_gradient_level_ind" exceeded' 469 ENDIF 470 CALL local_stop 471 ENDIF 472 ENDIF 473 IF ( gradient /= 0.0 ) THEN 474 IF ( k /= 1 ) THEN 475 ug(k) = ug(k-1) + dzu(k) * gradient 476 ELSE 477 ug(k) = ug_surface + 0.5 * dzu(k) * gradient 478 ENDIF 468 479 ELSE 469 ug(k) = ug_surface + 0.5 * dzu(k) * gradient 470 ENDIF 471 ELSE 472 ug(k) = ug(k-1) 473 ENDIF 474 ENDDO 480 ug(k) = ug(k-1) 481 ENDIF 482 ENDDO 483 484 ELSE 485 486 ug_vertical_gradient_level_ind(1) = nzt+1 487 DO k = nzt, 0, -1 488 IF ( ug_vertical_gradient_level(i) > zu(k) .AND. & 489 ug_vertical_gradient_level(i) <= 0.0 ) THEN 490 gradient = ug_vertical_gradient(i) / 100.0 491 ug_vertical_gradient_level_ind(i) = k + 1 492 i = i + 1 493 IF ( i > 10 ) THEN 494 IF ( myid == 0 ) THEN 495 PRINT*, '+++ check_parameters: upper bound 10 of array', & 496 ' "ug_vertical_gradient_level_ind" exceeded' 497 ENDIF 498 CALL local_stop 499 ENDIF 500 ENDIF 501 IF ( gradient /= 0.0 ) THEN 502 IF ( k /= nzt ) THEN 503 ug(k) = ug(k+1) - dzu(k+1) * gradient 504 ELSE 505 ug(k) = ug_surface - 0.5 * dzu(k+1) * gradient 506 ug(k+1) = ug_surface + 0.5 * dzu(k+1) * gradient 507 ENDIF 508 ELSE 509 ug(k) = ug(k+1) 510 ENDIF 511 ENDDO 512 513 ENDIF 475 514 476 515 u_init = ug … … 478 517 ! 479 518 !-- In case of no given gradients for ug, choose a vanishing gradient 480 IF ( ug_vertical_gradient_level(1) == - 1.0) THEN519 IF ( ug_vertical_gradient_level(1) == -9999999.9 ) THEN 481 520 ug_vertical_gradient_level(1) = 0.0 482 521 ENDIF … … 488 527 i = 1 489 528 gradient = 0.0 490 vg_vertical_gradient_level_ind(1) = 0 491 vg(0) = vg_surface 492 DO k = 1, nzt+1 493 IF ( vg_vertical_gradient_level(i) < zu(k) .AND. & 494 vg_vertical_gradient_level(i) >= 0.0 ) THEN 495 gradient = vg_vertical_gradient(i) / 100.0 496 vg_vertical_gradient_level_ind(i) = k - 1 497 i = i + 1 498 IF ( i > 10 ) THEN 499 IF ( myid == 0 ) THEN 500 PRINT*, '+++ check_parameters: upper bound 10 of array', & 501 ' "vg_vertical_gradient_level_ind" exceeded' 502 ENDIF 503 CALL local_stop 504 ENDIF 505 ENDIF 506 IF ( gradient /= 0.0 ) THEN 507 IF ( k /= 1 ) THEN 508 vg(k) = vg(k-1) + dzu(k) * gradient 529 530 IF ( .NOT. ocean ) THEN 531 532 vg_vertical_gradient_level_ind(1) = 0 533 vg(0) = vg_surface 534 DO k = 1, nzt+1 535 IF ( vg_vertical_gradient_level(i) < zu(k) .AND. & 536 vg_vertical_gradient_level(i) >= 0.0 ) THEN 537 gradient = vg_vertical_gradient(i) / 100.0 538 vg_vertical_gradient_level_ind(i) = k - 1 539 i = i + 1 540 IF ( i > 10 ) THEN 541 IF ( myid == 0 ) THEN 542 PRINT*, '+++ check_parameters: upper bound 10 of array', & 543 ' "vg_vertical_gradient_level_ind" exceeded' 544 ENDIF 545 CALL local_stop 546 ENDIF 547 ENDIF 548 IF ( gradient /= 0.0 ) THEN 549 IF ( k /= 1 ) THEN 550 vg(k) = vg(k-1) + dzu(k) * gradient 551 ELSE 552 vg(k) = vg_surface + 0.5 * dzu(k) * gradient 553 ENDIF 509 554 ELSE 510 vg(k) = vg_surface + 0.5 * dzu(k) * gradient 511 ENDIF 512 ELSE 513 vg(k) = vg(k-1) 514 ENDIF 515 ENDDO 555 vg(k) = vg(k-1) 556 ENDIF 557 ENDDO 558 559 ELSE 560 561 vg_vertical_gradient_level_ind(1) = 0 562 DO k = nzt, 0, -1 563 IF ( vg_vertical_gradient_level(i) > zu(k) .AND. & 564 vg_vertical_gradient_level(i) <= 0.0 ) THEN 565 gradient = vg_vertical_gradient(i) / 100.0 566 vg_vertical_gradient_level_ind(i) = k + 1 567 i = i + 1 568 IF ( i > 10 ) THEN 569 IF ( myid == 0 ) THEN 570 PRINT*, '+++ check_parameters: upper bound 10 of array', & 571 ' "vg_vertical_gradient_level_ind" exceeded' 572 ENDIF 573 CALL local_stop 574 ENDIF 575 ENDIF 576 IF ( gradient /= 0.0 ) THEN 577 IF ( k /= nzt ) THEN 578 vg(k) = vg(k+1) - dzu(k+1) * gradient 579 ELSE 580 vg(k) = vg_surface - 0.5 * dzu(k+1) * gradient 581 vg(k+1) = vg_surface + 0.5 * dzu(k+1) * gradient 582 ENDIF 583 ELSE 584 vg(k) = vg(k+1) 585 ENDIF 586 ENDDO 587 588 ENDIF 516 589 517 590 v_init = vg … … 519 592 ! 520 593 !-- In case of no given gradients for vg, choose a vanishing gradient 521 IF ( vg_vertical_gradient_level(1) == - 1.0) THEN594 IF ( vg_vertical_gradient_level(1) == -9999999.9 ) THEN 522 595 vg_vertical_gradient_level(1) = 0.0 523 596 ENDIF … … 707 780 708 781 ! 709 !-- Reference temperature to be used in buoyancy terms 710 IF ( pt_reference /= 9999999.9 ) use_pt_reference = .TRUE. 782 !-- Ocean runs always use reference values in the buoyancy term. Therefore 783 !-- set the reference temperature equal to the surface temperature. 784 IF ( ocean .AND. pt_reference == 9999999.9 ) pt_reference = pt_surface 785 786 ! 787 !-- Reference value has to be used in buoyancy terms 788 IF ( pt_reference /= 9999999.9 ) use_reference = .TRUE. 789 790 ! 791 !-- Sign of buoyancy/stability terms 792 IF ( ocean ) atmos_ocean_sign = -1.0 793 794 ! 795 !-- Ocean version is using flux boundary conditions at the top 796 IF ( ocean ) use_top_fluxes = .TRUE. 711 797 712 798 ! … … 1020 1106 1021 1107 IF ( top_salinityflux == 9999999.9 ) constant_top_salinityflux = .FALSE. 1108 IF ( ibc_sa_t == 1 .AND. top_salinityflux == 9999999.9 ) THEN 1109 IF ( myid == 0 ) THEN 1110 PRINT*, '+++ check_parameters:' 1111 PRINT*, ' boundary_condition: bc_sa_t = ', bc_sa_t 1112 PRINT*, ' requires to set top_salinityflux ' 1113 ENDIF 1114 CALL local_stop 1115 ENDIF 1022 1116 1023 1117 ! … … 2474 2568 ! 2475 2569 !-- Determine upper and lower hight level indices for random perturbations 2476 IF ( disturbance_level_b == -1.0 ) THEN 2477 disturbance_level_b = zu(nzb+3) 2478 disturbance_level_ind_b = nzb + 3 2570 IF ( disturbance_level_b == -9999999.9 ) THEN 2571 IF ( ocean ) THEN 2572 disturbance_level_b = zu((nzt*2)/3) 2573 disturbance_level_ind_b = ( nzt * 2 ) / 3 2574 ELSE 2575 disturbance_level_b = zu(nzb+3) 2576 disturbance_level_ind_b = nzb + 3 2577 ENDIF 2479 2578 ELSEIF ( disturbance_level_b < zu(3) ) THEN 2480 2579 IF ( myid == 0 ) PRINT*, '+++ check_parameters: disturbance_level_b=',& … … 2496 2595 ENDIF 2497 2596 2498 IF ( disturbance_level_t == -1.0 ) THEN 2499 disturbance_level_t = zu(nzt/3) 2500 disturbance_level_ind_t = nzt / 3 2597 IF ( disturbance_level_t == -9999999.9 ) THEN 2598 IF ( ocean ) THEN 2599 disturbance_level_t = zu(nzt-3) 2600 disturbance_level_ind_t = nzt - 3 2601 ELSE 2602 disturbance_level_t = zu(nzt/3) 2603 disturbance_level_ind_t = nzt / 3 2604 ENDIF 2501 2605 ELSEIF ( disturbance_level_t > zu(nzt-2) ) THEN 2502 2606 IF ( myid == 0 ) PRINT*, '+++ check_parameters: disturbance_level_t=',&
Note: See TracChangeset
for help on using the changeset viewer.