Ignore:
Timestamp:
May 21, 2013 11:58:22 AM (11 years ago)
Author:
fricke
Message:

Bugfix: In case of non-cyclic lateral boundary conditions, Neumann boundary conditions for the velocity components at the outflow are in fact radiation boundary conditions using the maximum phase velocity that ensures numerical stability (CFL-condition).
Logical operator use_cmax is now used instead of bc_lr_dirneu/_neudir.

File:
1 edited

Legend:

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

    r1116 r1159  
    2020! Current revisions:
    2121! -----------------
     22! Bugfix: Neumann boundary conditions for the velocity components at the
     23! outflow are in fact radiation boundary conditions using the maximum phase
     24! velocity that ensures numerical stability (CFL-condition).
     25! Hence, logical operator use_cmax is now used instead of bc_lr_dirneu/_neudir.
     26! Bugfix: In case of use_cmax at the outflow, u, v, w are replaced by
     27! u_p, v_p, w_p 
    2228!
    2329
     
    96102! Description:
    97103! ------------
    98 ! Boundary conditions for the prognostic quantities (range='main').
    99 ! In case of non-cyclic lateral boundaries the conditions for velocities at
    100 ! the outflow are set after the pressure solver has been called (range=
    101 ! 'outflow_uvw').
     104! Boundary conditions for the prognostic quantities.
    102105! One additional bottom boundary condition is applied for the TKE (=(u*)**2)
    103106! in prandtl_fluxes. The cyclic lateral boundary conditions are implicitly
     
    334337
    335338!
    336 !-- Neumann or Radiation boundary condition for the velocities at the
    337 !-- respective outflow
     339!-- Radiation boundary conditions for the velocities at the respective outflow.
     340!-- The phase velocity is either assumed to the maximum phase velocity that
     341!-- ensures numerical stability (CFL-condition) or calculated after
     342!-- Orlanski(1976) and averaged along the outflow boundary.
    338343    IF ( outflow_s )  THEN
    339344
    340        IF ( bc_ns_dirneu )  THEN
    341           u(:,-1,:) = u(:,0,:)
    342           v(:,0,:)  = v(:,1,:)
    343           w(:,-1,:) = w(:,0,:)         
    344        ELSEIF ( bc_ns_dirrad )  THEN
     345       IF ( use_cmax )  THEN
     346          u_p(:,-1,:) = u(:,0,:)
     347          v_p(:,0,:)  = v(:,1,:)
     348          w_p(:,-1,:) = w(:,0,:)         
     349       ELSEIF ( .NOT. use_cmax )  THEN
    345350
    346351          c_max = dy / dt_3d
     
    477482    IF ( outflow_n )  THEN
    478483
    479        IF ( bc_ns_neudir )  THEN
    480           u(:,ny+1,:) = u(:,ny,:)
    481           v(:,ny+1,:) = v(:,ny,:)
    482           w(:,ny+1,:) = w(:,ny,:)         
    483        ELSEIF ( bc_ns_dirrad )  THEN
     484       IF ( use_cmax )  THEN
     485          u_p(:,ny+1,:) = u(:,ny,:)
     486          v_p(:,ny+1,:) = v(:,ny,:)
     487          w_p(:,ny+1,:) = w(:,ny,:)         
     488       ELSEIF ( .NOT. use_cmax )  THEN
    484489
    485490          c_max = dy / dt_3d
     
    616621    IF ( outflow_l )  THEN
    617622
    618        IF ( bc_lr_neudir )  THEN
    619           u(:,:,-1) = u(:,:,0)
    620           v(:,:,0)  = v(:,:,1)
    621           w(:,:,-1) = w(:,:,0)         
    622        ELSEIF ( bc_ns_dirrad )  THEN
     623       IF ( use_cmax )  THEN
     624          u_p(:,:,-1) = u(:,:,0)
     625          v_p(:,:,0)  = v(:,:,1)
     626          w_p(:,:,-1) = w(:,:,0)         
     627       ELSEIF ( .NOT. use_cmax )  THEN
    623628
    624629          c_max = dx / dt_3d
     
    755760    IF ( outflow_r )  THEN
    756761
    757        IF ( bc_lr_dirneu )  THEN
    758           u(:,:,nx+1) = u(:,:,nx)
    759           v(:,:,nx+1) = v(:,:,nx)
    760           w(:,:,nx+1) = w(:,:,nx)         
    761        ELSEIF ( bc_ns_dirrad )  THEN
     762       IF ( use_cmax )  THEN
     763          u_p(:,:,nx+1) = u(:,:,nx)
     764          v_p(:,:,nx+1) = v(:,:,nx)
     765          w_p(:,:,nx+1) = w(:,:,nx)         
     766       ELSEIF ( .NOT. use_cmax )  THEN
    762767
    763768          c_max = dx / dt_3d
Note: See TracChangeset for help on using the changeset viewer.