Ignore:
Timestamp:
Jun 1, 2007 3:25:22 PM (17 years ago)
Author:
raasch
Message:

preliminary uncomplete changes for ocean version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/check_parameters.f90

    r90 r94  
    44! Actual revisions:
    55! -----------------
    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,
    79!
    810! Former revisions:
     
    153155       ENDIF
    154156    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
    155174!
    156175!-- Check whether there are any illegal values
     
    418437       v_init  = vg_surface
    419438       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
    422442
    423443!
     
    504524
    505525!
    506 !--    If required, compute initial temperature profile using the given
    507 !--    temperature gradient
     526!--    Compute initial temperature profile using the given temperature gradients
    508527       i = 1
    509528       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
    528553             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
    535588
    536589!
    537590!--    In case of no given temperature gradients, choose gradient of neutral
    538591!--    stratification
    539        IF ( pt_vertical_gradient_level(1) == -1.0 )  THEN
     592       IF ( pt_vertical_gradient_level(1) == -9999999.9 )  THEN
    540593          pt_vertical_gradient_level(1) = 0.0
    541594       ENDIF
    542595
    543596!
    544 !--    Store temperature gradient at the top boundary for possile Neumann
     597!--    Store temperature gradient at the top boundary for possible Neumann
    545598!--    boundary condition
    546599       bc_pt_t_val = ( pt_init(nzt+1) - pt_init(nzt) ) / dzu(nzt+1)
     
    609662       ENDIF
    610663
     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
    611701    ENDIF
    612702
     
    17691859!-- y-value range of the coordinate system (PROFIL).
    17701860!-- 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
    17811873    ENDIF
    17821874
Note: See TracChangeset for help on using the changeset viewer.