Ignore:
Timestamp:
Mar 27, 2018 3:52:42 PM (3 years ago)
Author:
suehring
Message:

Nesting in RANS-LES and RANS-RANS mode enabled; synthetic turbulence generator at all lateral boundaries in nesting or non-cyclic forcing mode; revised Inifor initialization in nesting mode

File:
1 edited

Legend:

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

    r2718 r2938  
    2525! -----------------
    2626! $Id$
     27! Further improvements for nesting in larger-scale model
     28!
     29! 2863 2018-03-08 11:36:25Z suehring
    2730! Corrected "Former revisions" section
    2831!
     
    210213       ENDIF
    211214!
    212 !--       Top boundary
     215!--    Top boundary
    213216       k = nzt
    214217       DO  i = nxl, nxr
     
    235238          ENDDO
    236239       ENDDO
     240
     241write(9,*) "w correction", w_correct
     242flush(9)
    237243
    238244    END SUBROUTINE forcing_bc_mass_conservation
     
    581587!--    identical to the Inifor grid. At the top boundary an extrapolation is
    582588!--    not possible.
    583        IF ( ANY( zu(1:nzt+1) /= force%zu_atmos(1:force%nzu) ) )  THEN
    584           DO  i = nxlu, nxr
    585              DO  j = nys, nyn
    586                 u(nzt+1,j,i) = force%u_top(0,j,i) + ddt_lsf * t_ref *          &
    587                            ( force%u_top(1,j,i) - force%u_top(0,j,i) ) *       &
    588                               MERGE( 1.0_wp, 0.0_wp,                           &
    589                                      BTEST( wall_flags_0(nzt+1,j,i), 1 ) )
    590              ENDDO
    591           ENDDO
    592 
    593           DO  i = nxl, nxr
    594              DO  j = nysv, nyn
    595                 v(nzt+1,j,i) = force%v_top(0,j,i) + ddt_lsf * t_ref *          &
    596                            ( force%v_top(1,j,i) - force%v_top(0,j,i) ) *       &
    597                               MERGE( 1.0_wp, 0.0_wp,                           &
    598                                      BTEST( wall_flags_0(nzt+1,j,i), 2 ) )
    599              ENDDO
    600           ENDDO
    601 
     589       DO  i = nxlu, nxr
     590          DO  j = nys, nyn
     591             u(nzt+1,j,i) = force%u_top(0,j,i) + ddt_lsf * t_ref *             &
     592                        ( force%u_top(1,j,i) - force%u_top(0,j,i) ) *          &
     593                           MERGE( 1.0_wp, 0.0_wp,                             &
     594                                  BTEST( wall_flags_0(nzt+1,j,i), 1 ) )
     595          ENDDO
     596       ENDDO
     597
     598       DO  i = nxl, nxr
     599          DO  j = nysv, nyn
     600             v(nzt+1,j,i) = force%v_top(0,j,i) + ddt_lsf * t_ref *             &
     601                        ( force%v_top(1,j,i) - force%v_top(0,j,i) ) *          &
     602                           MERGE( 1.0_wp, 0.0_wp,                              &
     603                                  BTEST( wall_flags_0(nzt+1,j,i), 2 ) )
     604          ENDDO
     605       ENDDO
     606
     607       DO  i = nxl, nxr
     608          DO  j = nys, nyn
     609             w(nzt:nzt+1,j,i) = force%w_top(0,j,i) + ddt_lsf * t_ref *         &
     610                        ( force%w_top(1,j,i) - force%w_top(0,j,i) ) *          &
     611                           MERGE( 1.0_wp, 0.0_wp,                              &
     612                                  BTEST( wall_flags_0(nzt:nzt+1,j,i), 3 ) )
     613          ENDDO
     614       ENDDO
     615
     616
     617       IF ( .NOT. neutral )  THEN
    602618          DO  i = nxl, nxr
    603619             DO  j = nys, nyn
    604                 w(nzt:nzt+1,j,i) = force%w_top(0,j,i) + ddt_lsf * t_ref *      &
    605                            ( force%w_top(1,j,i) - force%w_top(0,j,i) ) *       &
    606                               MERGE( 1.0_wp, 0.0_wp,                           &
    607                                      BTEST( wall_flags_0(nzt:nzt+1,j,i), 3 ) )
    608              ENDDO
    609           ENDDO
    610 
    611 
    612           IF ( .NOT. neutral )  THEN
    613              DO  i = nxl, nxr
    614                 DO  j = nys, nyn
    615                    pt(nzt+1,j,i) = force%pt_top(0,j,i) + ddt_lsf * t_ref *     &
    616                            ( force%pt_top(1,j,i) - force%pt_top(0,j,i) )
    617                 ENDDO
    618              ENDDO
    619           ENDIF
    620 
    621           IF ( humidity )  THEN
    622              DO  i = nxl, nxr
    623                 DO  j = nys, nyn
    624                    q(nzt+1,j,i) = force%q_top(0,j,i) + ddt_lsf * t_ref *       &
    625                            ( force%q_top(1,j,i) - force%q_top(0,j,i) )
    626                 ENDDO
    627              ENDDO
    628           ENDIF
     620                pt(nzt+1,j,i) = force%pt_top(0,j,i) + ddt_lsf * t_ref *        &
     621                        ( force%pt_top(1,j,i) - force%pt_top(0,j,i) )
     622             ENDDO
     623          ENDDO
     624       ENDIF
     625
     626       IF ( humidity )  THEN
     627          DO  i = nxl, nxr
     628             DO  j = nys, nyn
     629                q(nzt+1,j,i) = force%q_top(0,j,i) + ddt_lsf * t_ref *          &
     630                        ( force%q_top(1,j,i) - force%q_top(0,j,i) )
     631             ENDDO
     632          ENDDO
     633       ENDIF
     634!
     635!--    At the edges( left-south, left-north, right-south and right-north) set
     636!--    data on ghost points.
     637       IF ( force_bound_l  .AND.  force_bound_s )  THEN
     638          DO  i = 1, nbgp
     639             u(:,nys-i,nxlg:nxl)   = u(:,nys,nxlg:nxl)
     640             w(:,nys-i,nxlg:nxl-1) = w(:,nys,nxlg:nxl-1)
     641             IF ( .NOT. neutral )  pt(:,nys-i,nxlg:nxl-1) = pt(:,nys,nxlg:nxl-1)
     642             IF ( humidity )       q(:,nys-i,nxlg:nxl-1)  = q(:,nys,nxlg:nxl-1)
     643          ENDDO
     644          DO  i = 1, nbgp+1
     645             v(:,nysv-i,nxlg:nxl-1) = v(:,nysv,nxlg:nxl-1)
     646          ENDDO
     647       ENDIF
     648       IF ( force_bound_l  .AND.  force_bound_n )  THEN
     649          DO  i = 1, nbgp
     650             u(:,nyn+i,nxlg:nxl)   = u(:,nyn,nxlg:nxl)
     651             v(:,nyn+i,nxlg:nxl-1) = v(:,nyn,nxlg:nxl-1)
     652             w(:,nyn+i,nxlg:nxl-1) = w(:,nyn,nxlg:nxl-1)
     653             IF ( .NOT. neutral )  pt(:,nyn+i,nxlg:nxl-1) = pt(:,nyn,nxlg:nxl-1)
     654             IF ( humidity )       q(:,nyn+i,nxlg:nxl-1)  = q(:,nyn,nxlg:nxl-1)
     655          ENDDO
     656       ENDIF
     657       IF ( force_bound_r  .AND.  force_bound_s )  THEN
     658          DO  i = 1, nbgp
     659             u(:,nys-i,nxr+1:nxrg) = u(:,nys,nxr+1:nxrg)
     660             w(:,nys-i,nxr+1:nxrg) = w(:,nys,nxr+1:nxrg)
     661             IF ( .NOT. neutral )  pt(:,nys-i,nxr+1:nxrg) = pt(:,nys,nxr+1:nxrg)
     662             IF ( humidity )       q(:,nys-i,nxr+1:nxrg)  = q(:,nys,nxr+1:nxrg)
     663          ENDDO
     664          DO  i = 1, nbgp+1
     665             v(:,nysv-i,nxr+1:nxrg) = v(:,nysv,nxr+1:nxrg)
     666          ENDDO
     667       ENDIF
     668       IF ( force_bound_r  .AND.  force_bound_n )  THEN
     669          DO  i = 1, nbgp
     670             u(:,nyn+i,nxr+1:nxrg) = u(:,nyn,nxr+1:nxrg)
     671             v(:,nyn+i,nxr+1:nxrg) = v(:,nyn,nxr+1:nxrg)
     672             w(:,nyn+i,nxr+1:nxrg) = w(:,nyn,nxr+1:nxrg)
     673             IF ( .NOT. neutral )  pt(:,nyn+i,nxr+1:nxrg) = pt(:,nyn,nxr+1:nxrg)
     674             IF ( humidity )       q(:,nyn+i,nxr+1:nxrg)  = q(:,nyn,nxr+1:nxrg)
     675          ENDDO
    629676       ENDIF
    630677!
     
    941988    SUBROUTINE lsf_init
    942989
     990       USE control_parameters,                                                 &
     991           ONLY:  bc_lr_cyc, bc_ns_cyc
     992
    943993       USE netcdf_data_input_mod,                                              &
    944994           ONLY:  netcdf_data_input_lsf 
     
    9751025
    9761026       IF ( forcing )  THEN
     1027!
     1028!--       Allocate arrays for geostrophic wind components. Arrays will
     1029!--       incorporate 2 time levels in order to interpolate in between. Please
     1030!--       note, forcing using geostrophic wind components is only required in
     1031!--       case of cyclic boundary conditions.
     1032          IF ( bc_lr_cyc  .AND.  bc_ns_cyc )  THEN
     1033             ALLOCATE( force%ug(0:1,nzb:nzt+1) )
     1034             ALLOCATE( force%vg(0:1,nzb:nzt+1) )
     1035          ENDIF
    9771036!
    9781037!--       Allocate arrays for reading boundary values. Arrays will incorporate 2
Note: See TracChangeset for help on using the changeset viewer.