Ignore:
Timestamp:
Oct 26, 2016 11:15:40 AM (8 years ago)
Author:
knoop
Message:

Anelastic approximation implemented

File:
1 edited

Legend:

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

    r2032 r2037  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Anelastic approximation implemented
    2323!
    2424! Former revisions:
     
    432432    USE netcdf_interface,                                                      &
    433433        ONLY:  dopr_unit, do2d_unit, do3d_unit, netcdf_data_format,            &
    434                netcdf_data_format_string
     434               netcdf_data_format_string, dots_unit, heatflux_output_unit,     &
     435               waterflux_output_unit, momentumflux_output_unit
    435436
    436437    USE particle_attributes
     
    837838
    838839    ENDIF
     840
     841!
     842!-- Check approximation
     843    IF ( TRIM( approximation ) /= 'boussinesq'   .AND.   &
     844         TRIM( approximation ) /= 'anelastic' )  THEN
     845       message_string = 'unknown approximation: approximation = "' //    &
     846                        TRIM( approximation ) // '"'
     847       CALL message( 'check_parameters', 'PA0000', 1, 2, 0, 6, 0 )
     848    ENDIF
     849
     850!
     851!-- Check approximation requirements
     852    IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
     853         TRIM( momentum_advec ) /= 'ws-scheme' )  THEN
     854       message_string = 'Anelastic approximation requires: ' //                &
     855                        'momentum_advec = "ws-scheme"'
     856       CALL message( 'check_parameters', 'PA0000', 1, 2, 0, 6, 0 )
     857    ENDIF
     858    IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
     859         TRIM( psolver ) == 'multigrid' )  THEN
     860       message_string = 'Anelastic approximation currently only supports: ' // &
     861                        'psolver = "poisfft", ' // &
     862                        'psolver = "sor" and ' // &
     863                        'psolver = "multigrid_noopt"'
     864       CALL message( 'check_parameters', 'PA0000', 1, 2, 0, 6, 0 )
     865    ENDIF
     866    IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
     867         conserve_volume_flow )  THEN
     868       message_string = 'Anelastic approximation is not allowed with:' //      &
     869                        'conserve_volume_flow = .TRUE.'
     870       CALL message( 'check_parameters', 'PA0000', 1, 2, 0, 6, 0 )
     871    ENDIF
     872
     873!
     874!-- Check flux input mode
     875    IF ( TRIM( flux_input_mode ) /= 'dynamic'    .AND.   &
     876         TRIM( flux_input_mode ) /= 'kinematic'  .AND.   &
     877         TRIM( flux_input_mode ) /= 'approximation-specific' )  THEN
     878       message_string = 'unknown flux input mode: flux_input_mode = "' //      &
     879                        TRIM( flux_input_mode ) // '"'
     880       CALL message( 'check_parameters', 'PA0000', 1, 2, 0, 6, 0 )
     881    ENDIF
     882!-- Set flux input mode according to approximation if applicable
     883    IF ( TRIM( flux_input_mode ) == 'approximation-specific' )  THEN
     884       IF ( TRIM( approximation ) == 'anelastic' )  THEN
     885          flux_input_mode = 'dynamic'
     886       ELSEIF ( TRIM( approximation ) == 'boussinesq' )  THEN
     887          flux_input_mode = 'kinematic'
     888       ENDIF
     889    ENDIF
     890
     891!
     892!-- Check flux output mode
     893    IF ( TRIM( flux_output_mode ) /= 'dynamic'    .AND.   &
     894         TRIM( flux_output_mode ) /= 'kinematic'  .AND.   &
     895         TRIM( flux_output_mode ) /= 'approximation-specific' )  THEN
     896       message_string = 'unknown flux output mode: flux_output_mode = "' //    &
     897                        TRIM( flux_output_mode ) // '"'
     898       CALL message( 'check_parameters', 'PA0000', 1, 2, 0, 6, 0 )
     899    ENDIF
     900!-- Set flux output mode according to approximation if applicable
     901    IF ( TRIM( flux_output_mode ) == 'approximation-specific' )  THEN
     902       IF ( TRIM( approximation ) == 'anelastic' )  THEN
     903          flux_output_mode = 'dynamic'
     904       ELSEIF ( TRIM( approximation ) == 'boussinesq' )  THEN
     905          flux_output_mode = 'kinematic'
     906       ENDIF
     907    ENDIF
     908
     909!
     910!-- set the flux output units according to flux_output_mode
     911    IF ( TRIM( flux_output_mode ) == 'kinematic' ) THEN
     912        heatflux_output_unit              = 'K m/s'
     913        waterflux_output_unit             = 'kg/kg m/s'
     914        momentumflux_output_unit          = 'm2/s2'
     915    ELSEIF ( TRIM( flux_output_mode ) == 'dynamic' ) THEN
     916        heatflux_output_unit              = 'W/m2'
     917        waterflux_output_unit             = 'W/m2'
     918        momentumflux_output_unit          = 'N/m2'
     919    ENDIF
     920
     921!-- set time series output units for fluxes
     922    dots_unit(14:16) = heatflux_output_unit
     923    dots_unit(21)    = waterflux_output_unit
     924    dots_unit(19:20) = momentumflux_output_unit
    839925
    840926!
     
    21152201          CASE ( 'w"u"' )
    21162202             dopr_index(i) = 12
    2117              dopr_unit(i)  = 'm2/s2'
     2203             dopr_unit(i)  = TRIM ( momentumflux_output_unit )
    21182204             hom(:,2,12,:) = SPREAD( zw, 2, statistic_regions+1 )
    21192205             IF ( constant_flux_layer )  hom(nzb,2,12,:) = zu(1)
     
    21212207          CASE ( 'w*u*' )
    21222208             dopr_index(i) = 13
    2123              dopr_unit(i)  = 'm2/s2'
     2209             dopr_unit(i)  = TRIM ( momentumflux_output_unit )
    21242210             hom(:,2,13,:) = SPREAD( zw, 2, statistic_regions+1 )
    21252211
    21262212          CASE ( 'w"v"' )
    21272213             dopr_index(i) = 14
    2128              dopr_unit(i)  = 'm2/s2'
     2214             dopr_unit(i)  = TRIM ( momentumflux_output_unit )
    21292215             hom(:,2,14,:) = SPREAD( zw, 2, statistic_regions+1 )
    21302216             IF ( constant_flux_layer )  hom(nzb,2,14,:) = zu(1)
     
    21322218          CASE ( 'w*v*' )
    21332219             dopr_index(i) = 15
    2134              dopr_unit(i)  = 'm2/s2'
     2220             dopr_unit(i)  = TRIM ( momentumflux_output_unit )
    21352221             hom(:,2,15,:) = SPREAD( zw, 2, statistic_regions+1 )
    21362222
    21372223          CASE ( 'w"pt"' )
    21382224             dopr_index(i) = 16
    2139              dopr_unit(i)  = 'K m/s'
     2225             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    21402226             hom(:,2,16,:) = SPREAD( zw, 2, statistic_regions+1 )
    21412227
    21422228          CASE ( 'w*pt*' )
    21432229             dopr_index(i) = 17
    2144              dopr_unit(i)  = 'K m/s'
     2230             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    21452231             hom(:,2,17,:) = SPREAD( zw, 2, statistic_regions+1 )
    21462232
    21472233          CASE ( 'wpt' )
    21482234             dopr_index(i) = 18
    2149              dopr_unit(i)  = 'K m/s'
     2235             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    21502236             hom(:,2,18,:) = SPREAD( zw, 2, statistic_regions+1 )
    21512237
    21522238          CASE ( 'wu' )
    21532239             dopr_index(i) = 19
    2154              dopr_unit(i)  = 'm2/s2'
     2240             dopr_unit(i)  = TRIM ( momentumflux_output_unit )
    21552241             hom(:,2,19,:) = SPREAD( zw, 2, statistic_regions+1 )
    21562242             IF ( constant_flux_layer )  hom(nzb,2,19,:) = zu(1)
     
    21582244          CASE ( 'wv' )
    21592245             dopr_index(i) = 20
    2160              dopr_unit(i)  = 'm2/s2'
     2246             dopr_unit(i)  = TRIM ( momentumflux_output_unit )
    21612247             hom(:,2,20,:) = SPREAD( zw, 2, statistic_regions+1 )
    21622248             IF ( constant_flux_layer )  hom(nzb,2,20,:) = zu(1)
     
    21642250          CASE ( 'w*pt*BC' )
    21652251             dopr_index(i) = 21
    2166              dopr_unit(i)  = 'K m/s'
     2252             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    21672253             hom(:,2,21,:) = SPREAD( zw, 2, statistic_regions+1 )
    21682254
    21692255          CASE ( 'wptBC' )
    21702256             dopr_index(i) = 22
    2171              dopr_unit(i)  = 'K m/s'
     2257             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    21722258             hom(:,2,22,:) = SPREAD( zw, 2, statistic_regions+1 )
    21732259
     
    23352421          CASE ( 'w"vpt"' )
    23362422             dopr_index(i) = 45
    2337              dopr_unit(i)  = 'K m/s'
     2423             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    23382424             hom(:,2,45,:) = SPREAD( zw, 2, statistic_regions+1 )
    23392425
    23402426          CASE ( 'w*vpt*' )
    23412427             dopr_index(i) = 46
    2342              dopr_unit(i)  = 'K m/s'
     2428             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    23432429             hom(:,2,46,:) = SPREAD( zw, 2, statistic_regions+1 )
    23442430
    23452431          CASE ( 'wvpt' )
    23462432             dopr_index(i) = 47
    2347              dopr_unit(i)  = 'K m/s'
     2433             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    23482434             hom(:,2,47,:) = SPREAD( zw, 2, statistic_regions+1 )
    23492435
     
    23562442             ELSE
    23572443                dopr_index(i) = 48
    2358                 dopr_unit(i)  = 'kg/kg m/s'
     2444                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    23592445                hom(:,2,48,:) = SPREAD( zw, 2, statistic_regions+1 )
    23602446             ENDIF
     
    23682454             ELSE
    23692455                dopr_index(i) = 49
    2370                 dopr_unit(i)  = 'kg/kg m/s'
     2456                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    23712457                hom(:,2,49,:) = SPREAD( zw, 2, statistic_regions+1 )
    23722458             ENDIF
     
    23802466             ELSE
    23812467                dopr_index(i) = 50
    2382                 dopr_unit(i)  = 'kg/kg m/s'
     2468                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    23832469                hom(:,2,50,:) = SPREAD( zw, 2, statistic_regions+1 )
    23842470             ENDIF
     
    24232509             IF ( humidity  .AND.  .NOT.  cloud_physics )  THEN
    24242510                dopr_index(i) = 48
    2425                 dopr_unit(i)  = 'kg/kg m/s'
     2511                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    24262512                hom(:,2,48,:) = SPREAD( zw, 2, statistic_regions+1 )
    24272513             ELSEIF ( humidity  .AND.  cloud_physics )  THEN
    24282514                dopr_index(i) = 51
    2429                 dopr_unit(i)  = 'kg/kg m/s'
     2515                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    24302516                hom(:,2,51,:) = SPREAD( zw, 2, statistic_regions+1 )
    24312517             ELSE
     
    24412527             THEN
    24422528                dopr_index(i) = 49
    2443                 dopr_unit(i)  = 'kg/kg m/s'
     2529                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    24442530                hom(:,2,49,:) = SPREAD( zw, 2, statistic_regions+1 )
    24452531             ELSEIF( humidity .AND. cloud_physics ) THEN
    24462532                dopr_index(i) = 52
    2447                 dopr_unit(i)  = 'kg/kg m/s'
     2533                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    24482534                hom(:,2,52,:) = SPREAD( zw, 2, statistic_regions+1 )
    24492535             ELSE
     
    24582544             IF ( humidity  .AND.  .NOT.  cloud_physics )  THEN
    24592545                dopr_index(i) = 50
    2460                 dopr_unit(i)  = 'kg/kg m/s'
     2546                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    24612547                hom(:,2,50,:) = SPREAD( zw, 2, statistic_regions+1 )
    24622548             ELSEIF ( humidity  .AND.  cloud_physics )  THEN
    24632549                dopr_index(i) = 53
    2464                 dopr_unit(i)  = 'kg/kg m/s'
     2550                dopr_unit(i)  = TRIM ( waterflux_output_unit )
    24652551                hom(:,2,53,:) = SPREAD( zw, 2, statistic_regions+1 )
    24662552             ELSE
     
    25032589          CASE ( 'u"pt"' )
    25042590             dopr_index(i) = 58
    2505              dopr_unit(i)  = 'K m/s'
     2591             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    25062592             hom(:,2,58,:) = SPREAD( zu, 2, statistic_regions+1 )
    25072593
    25082594          CASE ( 'u*pt*' )
    25092595             dopr_index(i) = 59
    2510              dopr_unit(i)  = 'K m/s'
     2596             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    25112597             hom(:,2,59,:) = SPREAD( zu, 2, statistic_regions+1 )
    25122598
    25132599          CASE ( 'upt_t' )
    25142600             dopr_index(i) = 60
    2515              dopr_unit(i)  = 'K m/s'
     2601             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    25162602             hom(:,2,60,:) = SPREAD( zu, 2, statistic_regions+1 )
    25172603
    25182604          CASE ( 'v"pt"' )
    25192605             dopr_index(i) = 61
    2520              dopr_unit(i)  = 'K m/s'
     2606             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    25212607             hom(:,2,61,:) = SPREAD( zu, 2, statistic_regions+1 )
    25222608             
    25232609          CASE ( 'v*pt*' )
    25242610             dopr_index(i) = 62
    2525              dopr_unit(i)  = 'K m/s'
     2611             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    25262612             hom(:,2,62,:) = SPREAD( zu, 2, statistic_regions+1 )
    25272613
    25282614          CASE ( 'vpt_t' )
    25292615             dopr_index(i) = 63
    2530              dopr_unit(i)  = 'K m/s'
     2616             dopr_unit(i)  = TRIM ( heatflux_output_unit )
    25312617             hom(:,2,63,:) = SPREAD( zu, 2, statistic_regions+1 )
    25322618
     
    26212707          CASE ( 'hyp' )
    26222708             dopr_index(i) = 72
    2623              dopr_unit(i)  = 'dbar'
     2709             dopr_unit(i)  = 'hPa'
    26242710             hom(:,2,72,:) = SPREAD( zu, 2, statistic_regions+1 )
     2711
     2712          CASE ( 'rho_air' )
     2713             dopr_index(i)  = 121
     2714             dopr_unit(i)   = 'kg/m3'
     2715             hom(:,2,121,:) = SPREAD( zu, 2, statistic_regions+1 )
     2716
     2717          CASE ( 'rho_air_zw' )
     2718             dopr_index(i)  = 122
     2719             dopr_unit(i)   = 'kg/m3'
     2720             hom(:,2,122,:) = SPREAD( zw, 2, statistic_regions+1 )
    26252721
    26262722          CASE ( 'nr' )
Note: See TracChangeset for help on using the changeset viewer.