Ignore:
Timestamp:
Oct 3, 2018 12:04:15 PM (3 years ago)
Author:
raasch
Message:

salinity allowed to be switched off, bugfix for swapping in case of ocean mode

File:
1 edited

Legend:

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

    r3302 r3303  
    2525! -----------------
    2626! $Id$
     27! salinity allowed to be switched off
     28!
     29! 3302 2018-10-03 02:39:40Z raasch
    2730! Craik Leibovich force (Stokes drift) + wave breaking effect added
    2831!
     
    7073    INTEGER(iwp) ::  sa_vertical_gradient_level_ind(10) = -9999  !< grid index values of sa_vertical_gradient_level(s)
    7174
     75    LOGICAL ::  salinity = .TRUE.             !< switch for using salinity
    7276    LOGICAL ::  stokes_force = .FALSE.        !< switch to switch on the Stokes force
    7377    LOGICAL ::  wave_breaking = .FALSE.       !< switch to switch on wave breaking effects
     
    500504
    501505
    502     NAMELIST /ocean_parameters/  bc_sa_t, bottom_salinityflux, sa_surface,     &
    503              sa_vertical_gradient, sa_vertical_gradient_level,                 &
     506    NAMELIST /ocean_parameters/  bc_sa_t, bottom_salinityflux, salinity,       &
     507             sa_surface, sa_vertical_gradient, sa_vertical_gradient_level,     &
    504508             stokes_waveheight, stokes_wavelength, top_salinityflux,           &
    505509             wall_salinityflux, wave_breaking
     
    579583
    580584    IF ( top_salinityflux == 9999999.9_wp )  constant_top_salinityflux = .FALSE.
     585
     586    IF ( .NOT. salinity )  THEN
     587       IF ( ( bottom_salinityflux /= 0.0_wp  .AND.                             &
     588              bottom_salinityflux /= 9999999.9_wp )  .OR.                      &
     589            ( top_salinityflux /= 0.0_wp     .AND.                             &
     590              top_salinityflux /= 9999999.9_wp ) )                             &
     591       THEN
     592          message_string = 'salinityflux must not be set for ocean run ' //    &
     593                           'without salinity'
     594          CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     595       ENDIF
     596    ENDIF
    581597
    582598    IF ( ibc_sa_t == 1  .AND.  top_salinityflux == 9999999.9_wp )  THEN
     
    904920
    905921    USE indices,                                                               &
    906         ONLY: nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
     922        ONLY: nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,            &
     923              wall_flags_0
    907924
    908925    IMPLICIT NONE
     
    968985
    969986    IF ( found .AND. .NOT. resorted )  THEN
    970 !       DO  i = nxl, nxr
    971 !          DO  j = nys, nyn
    972 !             DO  k = nzb_do, nzt_do
    973 !                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
    974 !                                         REAL( fill_value, KIND = wp ),        &
    975 !                                         BTEST( wall_flags_0(k,j,i), flag_nr ) )
    976 !             ENDDO
    977 !          ENDDO
    978 !       ENDDO
     987       DO  i = nxl, nxr
     988          DO  j = nys, nyn
     989             DO  k = nzb_do, nzt_do
     990                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
     991                                         REAL( fill_value, KIND = wp ),        &
     992                                         BTEST( wall_flags_0(k,j,i), flag_nr ) )
     993             ENDDO
     994          ENDDO
     995       ENDDO
     996       resorted = .TRUE.
    979997    ENDIF
    980998 
     
    10621080          DO  j = nys, nyn
    10631081             DO  k = nzb_do, nzt_do
    1064                 local_pf(i,j,k) = MERGE(                                       &
    1065                                    to_be_resorted(k,j,i),                      &
    1066                                    REAL( fill_value, KIND = wp ),              &
    1067                                    BTEST( wall_flags_0(k,j,i), flag_nr ) )
     1082                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
     1083                                         REAL( fill_value, KIND = wp ),        &
     1084                                         BTEST( wall_flags_0(k,j,i), flag_nr ) )
    10681085             ENDDO
    10691086          ENDDO
     
    10941111       WRITE( io, 3 )  alpha_wave_breaking, timescale_wave_breaking
    10951112    ENDIF
     1113    IF ( .NOT. salinity )  WRITE( io, 4 )
    10961114
    109711151   FORMAT (//' Ocean settings:'/                                              &
     
    11031121            '        alpha:    ',F4.1/                                         &
    11041122            '        timescale:',F5.1,' s')
     11234   FORMAT ('    --> prognostic salinity equation is switched off' )
    11051124
    11061125 END SUBROUTINE ocean_header
     
    11231142
    11241143#if defined( __nopointer )
    1125     ALLOCATE( prho(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
    1126               rho_ocean(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                           &
    1127               sa(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                            &
    1128               sa_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
     1144    ALLOCATE( prho(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                             &
     1145              rho_ocean(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                        &
     1146              sa(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                               &
     1147              sa_p(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                             &
    11291148              tsa_m(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    11301149#else
    1131     ALLOCATE( prho_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                        &
    1132               rho_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                         &
    1133               sa_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
    1134               sa_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                          &
     1150    ALLOCATE( prho_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                           &
     1151              rho_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                            &
     1152              sa_1(nzb:nzt+1,nysg:nyng,nxlg:nxrg),                             &
    11351153              sa_3(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1154
     1155    IF (  salinity )  THEN
     1156       ALLOCATE( sa_2(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     1157    ENDIF
    11361158
    11371159    prho => prho_1
     
    11431165!
    11441166!-- Initial assignment of pointers
    1145     sa  => sa_1;   sa_p  => sa_2;   tsa_m  => sa_3
     1167    IF ( salinity )  THEN
     1168       sa => sa_1;  sa_p => sa_2;  tsa_m => sa_3
     1169    ELSE
     1170       sa => sa_1;  sa_p => sa_1;  tsa_m => sa_3
     1171    ENDIF
    11461172#endif
    11471173
     
    12131239!--    possible Neumann boundary condition. This is not realized for the ocean
    12141240!--    mode, therefore a dummy argument is used.
    1215        CALL init_vertical_profiles( sa_vertical_gradient_level_ind,          &
    1216                                     sa_vertical_gradient_level,              &
    1217                                     sa_vertical_gradient, sa_init,           &
    1218                                     sa_surface, dum )
     1241       IF ( salinity )  THEN
     1242          CALL init_vertical_profiles( sa_vertical_gradient_level_ind,          &
     1243                                       sa_vertical_gradient_level,              &
     1244                                       sa_vertical_gradient, sa_init,           &
     1245                                       sa_surface, dum )
     1246       ENDIF
    12191247    ENDIF
    12201248
     
    14671495!-- Compute prognostic equations for the ocean mode
    14681496!-- First, start with salinity
     1497    IF ( .NOT. salinity )  RETURN
     1498
    14691499    CALL cpu_log( log_point(37), 'sa-equation', 'start' )
    14701500
     
    16151645!-- Compute prognostic equations for the ocean mode
    16161646!-- First, start with tendency-terms for salinity
     1647    IF ( .NOT. salinity )  RETURN
     1648
    16171649    tend(:,j,i) = 0.0_wp
    16181650    IF ( timestep_scheme(1:5) == 'runge' ) &
     
    16991731
    17001732       CASE ( 0 )
    1701           sa => sa_1;    sa_p => sa_2
     1733          IF ( salinity )  THEN
     1734             sa => sa_1;    sa_p => sa_2
     1735          ENDIF
    17021736
    17031737       CASE ( 1 )
    1704           sa => sa_2;    sa_p => sa_1
     1738          IF ( salinity )  THEN
     1739             sa => sa_2;    sa_p => sa_1
     1740          ENDIF
    17051741
    17061742    END SELECT
     
    17371773       CASE ( 'bottom_salinityflux' )
    17381774          READ ( 13 )  bottom_salinityflux
     1775
     1776       CASE ( 'salinity' )
     1777          READ ( 13 )  salinity
    17391778
    17401779       CASE ( 'sa_init' )
     
    18661905    CALL wrd_write_string( 'bottom_salinityflux' )
    18671906    WRITE ( 14 )  bottom_salinityflux
     1907
     1908    CALL wrd_write_string( 'salinity' )
     1909    WRITE ( 14 )  salinity
    18681910
    18691911    CALL wrd_write_string( 'sa_init' )
Note: See TracChangeset for help on using the changeset viewer.