Ignore:
Timestamp:
Jun 21, 2007 8:23:15 AM (14 years ago)
Author:
raasch
Message:

New:
---
ocean version including prognostic equation for salinity and equation of state for seawater. Routine buoyancy can be used with both temperature and density.
+ inipar-parameters bc_sa_t, bottom_salinityflux, ocean, sa_surface, sa_vertical_gradient, sa_vertical_gradient_level, top_salinityflux

advec_s_bc, average_3d_data, boundary_conds, buoyancy, check_parameters, data_output_2d, data_output_3d, diffusion_e, flow_statistics, header, init_grid, init_3d_model, modules, netcdf, parin, production_e, prognostic_equations, read_var_list, sum_up_3d_data, swap_timelevel, time_integration, user_interface, write_var_list, write_3d_binary

New:
eqn_state_seawater, init_ocean

Changed:


inipar-parameter use_pt_reference renamed use_reference

hydro_press renamed hyp, routine calc_mean_pt_profile renamed calc_mean_profile

format adjustments for the ocean version (run_control)

advec_particles, buoyancy, calc_liquid_water_content, check_parameters, diffusion_e, diffusivities, header, init_cloud_physics, modules, production_e, prognostic_equations, run_control

Errors:


Bugfix: height above topography instead of height above level k=0 is used for calculating the mixing length (diffusion_e and diffusivities).

Bugfix: error in boundary condition for TKE removed (advec_s_bc)

advec_s_bc, diffusion_e, prognostic_equations

File:
1 edited

Legend:

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

    r96 r97  
    44! Actual revisions:
    55! -----------------
     6! Routine reneralized to be used with temperature AND density:
     7! argument theta renamed var, new argument var_reference,
     8! use_pt_reference renamed use_reference,
    69! calc_mean_pt_profile renamed calc_mean_profile
    710!
     
    4649! Call for all grid points
    4750!------------------------------------------------------------------------------!
    48     SUBROUTINE buoyancy( theta, wind_component, pr )
     51    SUBROUTINE buoyancy( var, var_reference, wind_component, pr )
    4952
    5053       USE arrays_3d
     
    5760
    5861       INTEGER ::  i, j, k, pr, wind_component
    59        REAL, DIMENSION(:,:,:), POINTER  ::  theta
     62       REAL    ::  var_reference
     63       REAL, DIMENSION(:,:,:), POINTER  ::  var
    6064
    6165
     
    6367!
    6468!--       Normal case: horizontal surface
    65           IF ( use_pt_reference )  THEN
    66              DO  i = nxl, nxr
    67                 DO  j = nys, nyn
    68                    DO  k = nzb_s_inner(j,i)+1, nzt-1
    69                       tend(k,j,i) = tend(k,j,i) + g * 0.5 * (                 &
    70                         ( theta(k,j,i)   - hom(k,1,pr,0)   ) / pt_reference + &
    71                         ( theta(k+1,j,i) - hom(k+1,1,pr,0) ) / pt_reference   &
     69          IF ( use_reference )  THEN
     70             DO  i = nxl, nxr
     71                DO  j = nys, nyn
     72                   DO  k = nzb_s_inner(j,i)+1, nzt-1
     73                      tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5 * &
     74                                                            (                  &
     75                          ( var(k,j,i)   - hom(k,1,pr,0)   ) / var_reference + &
     76                          ( var(k+1,j,i) - hom(k+1,1,pr,0) ) / var_reference   &
    7277                                                            )
    7378                   ENDDO
     
    7883                DO  j = nys, nyn
    7984                   DO  k = nzb_s_inner(j,i)+1, nzt-1
    80                       tend(k,j,i) = tend(k,j,i) + g * 0.5 * (                  &
    81                         ( theta(k,j,i)   - hom(k,1,pr,0)   ) / hom(k,1,pr,0) + &
    82                         ( theta(k+1,j,i) - hom(k+1,1,pr,0) ) / hom(k+1,1,pr,0) &
     85                      tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5 * &
     86                                                            (                  &
     87                          ( var(k,j,i)   - hom(k,1,pr,0)   ) / hom(k,1,pr,0) + &
     88                          ( var(k+1,j,i) - hom(k+1,1,pr,0) ) / hom(k+1,1,pr,0) &
    8389                                                            )
    8490                   ENDDO
     
    136142! Call for grid point i,j
    137143!------------------------------------------------------------------------------!
    138     SUBROUTINE buoyancy_ij( i, j, theta, wind_component, pr )
     144    SUBROUTINE buoyancy_ij( i, j, var, var_reference, wind_component, pr )
    139145
    140146       USE arrays_3d
     
    147153
    148154       INTEGER ::  i, j, k, pr, wind_component
    149        REAL, DIMENSION(:,:,:), POINTER  ::  theta
     155       REAL    ::  var_reference
     156       REAL, DIMENSION(:,:,:), POINTER  ::  var
    150157
    151158
     
    153160!
    154161!--       Normal case: horizontal surface
    155           IF ( use_pt_reference )  THEN
    156              DO  k = nzb_s_inner(j,i)+1, nzt-1
    157                  tend(k,j,i) = tend(k,j,i) + g * 0.5 * (                      &
    158                         ( theta(k,j,i)   - hom(k,1,pr,0)   ) / pt_reference + &
    159                         ( theta(k+1,j,i) - hom(k+1,1,pr,0) ) / pt_reference   &
    160                                                        )
    161              ENDDO
    162           ELSE
    163              DO  k = nzb_s_inner(j,i)+1, nzt-1
    164                  tend(k,j,i) = tend(k,j,i) + g * 0.5 * (                       &
    165                         ( theta(k,j,i)   - hom(k,1,pr,0)   ) / hom(k,1,pr,0) + &
    166                         ( theta(k+1,j,i) - hom(k+1,1,pr,0) ) / hom(k+1,1,pr,0) &
    167                                                        )
     162          IF ( use_reference )  THEN
     163             DO  k = nzb_s_inner(j,i)+1, nzt-1
     164                 tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5 * (   &
     165                         ( var(k,j,i)   - hom(k,1,pr,0)   ) / var_reference + &
     166                         ( var(k+1,j,i) - hom(k+1,1,pr,0) ) / var_reference   &
     167                                                                          )
     168             ENDDO
     169          ELSE
     170             DO  k = nzb_s_inner(j,i)+1, nzt-1
     171                 tend(k,j,i) = tend(k,j,i) + atmos_ocean_sign * g * 0.5 * (    &
     172                          ( var(k,j,i)   - hom(k,1,pr,0)   ) / hom(k,1,pr,0) + &
     173                          ( var(k+1,j,i) - hom(k+1,1,pr,0) ) / hom(k+1,1,pr,0) &
     174                                                                          )
    168175             ENDDO
    169176          ENDIF
Note: See TracChangeset for help on using the changeset viewer.