Ignore:
Timestamp:
Jan 30, 2018 2:12:54 PM (6 years ago)
Author:
suehring
Message:

Nesting for chemical species implemented; Bugfix passive scalar boundary condition after anterpolation; Timeseries output of surface temperature; Enable initialization of 3D topography (was commented out so far)

File:
1 edited

Legend:

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

    r2718 r2773  
    2525! -----------------
    2626! $Id$
     27! - Nesting for chemical species
     28! - Bugfix in setting boundary condition at downward-facing walls for passive
     29!   scalar
     30! - Some formatting adjustments
     31!
     32! 2718 2018-01-02 08:49:38Z maronga
    2733! Corrected "Former revisions" section
    2834!
     
    220226
    221227    USE control_parameters,                                                     &
    222         ONLY:  cloud_physics, coupling_char, dt_3d, dz, humidity,               &
     228        ONLY:  air_chemistry, cloud_physics, coupling_char, dt_3d, dz, humidity,&
    223229               message_string, microphysics_morrison, microphysics_seifert,     &
    224230               nest_bound_l, nest_bound_r, nest_bound_s, nest_bound_n,          &
     
    226232               simulated_time, topography, volume_flow
    227233
    228     USE cpulog,                                                                 &
     234    USE chem_modules,                                                          &
     235        ONLY:  nspec
     236
     237    USE chemistry_model_mod,                                                   &
     238        ONLY:  chem_species, spec_conc_2
     239
     240    USE cpulog,                                                                &
    229241        ONLY:  cpu_log, log_point_s
    230242
    231     USE grid_variables,                                                         &
     243    USE grid_variables,                                                        &
    232244        ONLY:  dx, dy
    233245
    234     USE indices,                                                                &
    235         ONLY:  nbgp, nx, nxl, nxlg, nxlu, nxr, nxrg, ny, nyn, nyng, nys, nysg,  &
     246    USE indices,                                                               &
     247        ONLY:  nbgp, nx, nxl, nxlg, nxlu, nxr, nxrg, ny, nyn, nyng, nys, nysg, &
    236248               nysv, nz, nzb, nzt, wall_flags_0
    237249
     
    245257#endif
    246258
    247     USE pegrid,                                                                 &
    248         ONLY:  collective_wait, comm1dx, comm1dy, comm2d, myid, myidx, myidy,   &
     259    USE pegrid,                                                                &
     260        ONLY:  collective_wait, comm1dx, comm1dy, comm2d, myid, myidx, myidy,  &
    249261               numprocs
    250262
    251     USE pmc_child,                                                              &
    252         ONLY:  pmc_childinit, pmc_c_clear_next_array_list,                      &
    253                pmc_c_getnextarray, pmc_c_get_2d_index_list, pmc_c_getbuffer,    &
    254                pmc_c_putbuffer, pmc_c_setind_and_allocmem,                      &
     263    USE pmc_child,                                                             &
     264        ONLY:  pmc_childinit, pmc_c_clear_next_array_list,                     &
     265               pmc_c_getnextarray, pmc_c_get_2d_index_list, pmc_c_getbuffer,   &
     266               pmc_c_putbuffer, pmc_c_setind_and_allocmem,                     &
    255267               pmc_c_set_dataarray, pmc_set_dataarray_name
    256268
    257     USE pmc_general,                                                            &
     269    USE pmc_general,                                                           &
    258270        ONLY:  da_namelen
    259271
    260     USE pmc_handle_communicator,                                                &
    261         ONLY:  pmc_get_model_info, pmc_init_model, pmc_is_rootmodel,            &
     272    USE pmc_handle_communicator,                                               &
     273        ONLY:  pmc_get_model_info, pmc_init_model, pmc_is_rootmodel,           &
    262274               pmc_no_namelist_found, pmc_parent_for_child
    263275
    264     USE pmc_mpi_wrapper,                                                        &
    265         ONLY:  pmc_bcast, pmc_recv_from_child, pmc_recv_from_parent,            &
     276    USE pmc_mpi_wrapper,                                                       &
     277        ONLY:  pmc_bcast, pmc_recv_from_child, pmc_recv_from_parent,           &
    266278               pmc_send_to_child, pmc_send_to_parent
    267279
    268     USE pmc_parent,                                                             &
    269         ONLY:  pmc_parentinit, pmc_s_clear_next_array_list, pmc_s_fillbuffer,   &
    270                pmc_s_getdata_from_buffer, pmc_s_getnextarray,                   &
    271                pmc_s_setind_and_allocmem, pmc_s_set_active_data_array,          &
     280    USE pmc_parent,                                                            &
     281        ONLY:  pmc_parentinit, pmc_s_clear_next_array_list, pmc_s_fillbuffer,  &
     282               pmc_s_getdata_from_buffer, pmc_s_getnextarray,                  &
     283               pmc_s_setind_and_allocmem, pmc_s_set_active_data_array,         &
    272284               pmc_s_set_dataarray, pmc_s_set_2d_index_list
    273285
    274286#endif
    275287
    276     USE surface_mod,                                                            &
     288    USE surface_mod,                                                           &
    277289        ONLY:  get_topography_top_index_ji, surf_def_h, surf_lsm_h, surf_usm_h
    278290
     
    338350    REAL(wp), SAVE, DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  ncc  !:
    339351    REAL(wp), SAVE, DIMENSION(:,:,:), ALLOCATABLE, TARGET ::  sc   !:
     352
     353    REAL(wp), SAVE, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET ::  chem_spec_c   !< child coarse data array for chemical species
     354
    340355!
    341356!-- Child interpolation coefficients and child-array indices to be
     
    651666    INTEGER(iwp) ::  m                !:
    652667    INTEGER(iwp) ::  mm               !:
     668    INTEGER(iwp) ::  n = 1            !< running index for chemical species
    653669    INTEGER(iwp) ::  nest_overlap     !:
    654670    INTEGER(iwp) ::  nomatch          !:
     
    836852       CALL pmc_s_clear_next_array_list
    837853       DO  WHILE ( pmc_s_getnextarray( child_id, myname ) )
    838           CALL pmci_set_array_pointer( myname, child_id = child_id,             &
    839                                        nz_cl = nz_cl )
     854          IF ( INDEX( TRIM( myname ), 'chem_' ) /= 0 )  THEN             
     855             CALL pmci_set_array_pointer( myname, child_id = child_id,         &
     856                                          nz_cl = nz_cl, n = n )
     857             n = n + 1
     858          ELSE
     859             CALL pmci_set_array_pointer( myname, child_id = child_id,         &
     860                                          nz_cl = nz_cl )
     861          ENDIF
    840862       ENDDO
    841863       CALL pmc_s_setind_and_allocmem( child_id )
     
    965987 SUBROUTINE pmci_setup_child
    966988
     989
    967990#if defined( __parallel )
    968991    IMPLICIT NONE
    969992
    970     CHARACTER(LEN=da_namelen) ::  myname     !:
    971 
    972     INTEGER(iwp) ::  i          !:
    973     INTEGER(iwp) ::  ierr       !:
    974     INTEGER(iwp) ::  icl        !:
    975     INTEGER(iwp) ::  icr        !:
    976     INTEGER(iwp) ::  j          !:
    977     INTEGER(iwp) ::  jcn        !:
    978     INTEGER(iwp) ::  jcs        !:
     993    CHARACTER(LEN=da_namelen) ::  myname     !<
     994
     995    INTEGER(iwp) ::  i          !<
     996    INTEGER(iwp) ::  ierr       !<
     997    INTEGER(iwp) ::  icl        !<
     998    INTEGER(iwp) ::  icr        !<
     999    INTEGER(iwp) ::  j          !<
     1000    INTEGER(iwp) ::  jcn        !<
     1001    INTEGER(iwp) ::  jcs        !<
     1002    INTEGER(iwp) ::  n          !< running index for number of chemical species
    9791003
    9801004    INTEGER(iwp), DIMENSION(5) ::  val        !:
     
    10281052       IF ( passive_scalar )  THEN
    10291053          CALL pmc_set_dataarray_name( 'coarse', 's'  ,'fine', 's',  ierr )
     1054       ENDIF
     1055
     1056       IF ( air_chemistry )  THEN
     1057          DO  n = 1, nspec
     1058             CALL pmc_set_dataarray_name( 'coarse',                            &
     1059                                          'chem_' //                           &
     1060                                          TRIM( chem_species(n)%name ),        &
     1061                                         'fine',                               &
     1062                                          'chem_' //                           &
     1063                                          TRIM( chem_species(n)%name ),        &
     1064                                          ierr )
     1065          ENDDO
    10301066       ENDIF
    10311067
     
    11161152!--    TO_DO: Klaus: better explain the above comment (what is child content?)
    11171153       CALL  pmc_c_clear_next_array_list
     1154
     1155       n = 1
    11181156       DO  WHILE ( pmc_c_getnextarray( myname ) )
    11191157!--       Note that cg%nz is not th eoriginal nz of parent, but the highest
    1120 !--       parent-grid level needed for nesting.           
    1121           CALL pmci_create_child_arrays ( myname, icl, icr, jcs, jcn, cg%nz )
     1158!--       parent-grid level needed for nesting.
     1159!--       Please note, in case of chemical species an additional parameter
     1160!--       need to be passed, which is required to set the pointer correctly
     1161!--       to the chemical-species data structure. Hence, first check if current
     1162!--       variable is a chemical species. If so, pass index id of respective
     1163!--       species and increment this subsequently.
     1164          IF ( INDEX( TRIM( myname ), 'chem_' ) /= 0 )  THEN             
     1165             CALL pmci_create_child_arrays ( myname, icl, icr, jcs, jcn, cg%nz, n )
     1166             n = n + 1
     1167          ELSE
     1168             CALL pmci_create_child_arrays ( myname, icl, icr, jcs, jcn, cg%nz )
     1169          ENDIF
    11221170       ENDDO
    11231171       CALL pmc_c_setind_and_allocmem
     
    27852833
    27862834
    2787  SUBROUTINE pmci_set_array_pointer( name, child_id, nz_cl )
     2835 SUBROUTINE pmci_set_array_pointer( name, child_id, nz_cl, n )
    27882836
    27892837    IMPLICIT NONE
     
    27912839    INTEGER, INTENT(IN)          ::  child_id    !:
    27922840    INTEGER, INTENT(IN)          ::  nz_cl       !:
     2841    INTEGER, INTENT(IN),OPTIONAL ::  n           !< index of chemical species
     2842
    27932843    CHARACTER(LEN=*), INTENT(IN) ::  name        !:
    27942844
     
    28192869    IF ( TRIM(name) == "nc" )  p_3d => nc
    28202870    IF ( TRIM(name) == "s"  )  p_3d => s
     2871    IF ( INDEX( TRIM(name), "chem_" ) /= 0 )  p_3d => chem_species(n)%conc
     2872
    28212873!
    28222874!-- Next line is just an example for a 2D array (not active for coupling!)
     
    28552907    IF ( TRIM(name) == "nc" )  p_3d_sec => nc_2
    28562908    IF ( TRIM(name) == "s"  )  p_3d_sec => s_2
     2909    IF ( INDEX( TRIM(name), "chem_" ) /= 0 )  p_3d_sec => spec_conc_2(:,:,:,n)
    28572910
    28582911    IF ( ASSOCIATED( p_3d ) )  THEN
     
    28832936
    28842937
    2885  SUBROUTINE pmci_create_child_arrays( name, is, ie, js, je, nzc  )
     2938 SUBROUTINE pmci_create_child_arrays( name, is, ie, js, je, nzc, n )
    28862939
    28872940    IMPLICIT NONE
     
    28952948    INTEGER(iwp), INTENT(IN) ::  nzc     !:  Note that nzc is cg%nz
    28962949
     2950    INTEGER(iwp), INTENT(IN), OPTIONAL ::  n  !< number of chemical species
     2951
    28972952#if defined( __parallel )
    28982953    INTEGER(iwp) ::  ierr    !:
     
    29082963!-- List of array names, which can be coupled
    29092964    IF ( TRIM( name ) == "u" )  THEN
    2910        IF ( .NOT. ALLOCATED( uc ) )  ALLOCATE( uc(0:nzc+1, js:je, is:ie) )
     2965       IF ( .NOT. ALLOCATED( uc ) )  ALLOCATE( uc(0:nzc+1,js:je,is:ie) )
    29112966       p_3d => uc
    29122967    ELSEIF ( TRIM( name ) == "v" )  THEN
    2913        IF ( .NOT. ALLOCATED( vc ) )  ALLOCATE( vc(0:nzc+1, js:je, is:ie) )
     2968       IF ( .NOT. ALLOCATED( vc ) )  ALLOCATE( vc(0:nzc+1,js:je,is:ie) )
    29142969       p_3d => vc
    29152970    ELSEIF ( TRIM( name ) == "w" )  THEN
    2916        IF ( .NOT. ALLOCATED( wc ) )  ALLOCATE( wc(0:nzc+1, js:je, is:ie) )
     2971       IF ( .NOT. ALLOCATED( wc ) )  ALLOCATE( wc(0:nzc+1,js:je,is:ie) )
    29172972       p_3d => wc
    29182973    ELSEIF ( TRIM( name ) == "e" )  THEN
    2919        IF ( .NOT. ALLOCATED( ec ) )  ALLOCATE( ec(0:nzc+1, js:je, is:ie) )
     2974       IF ( .NOT. ALLOCATED( ec ) )  ALLOCATE( ec(0:nzc+1,js:je,is:ie) )
    29202975       p_3d => ec
    29212976    ELSEIF ( TRIM( name ) == "pt")  THEN
    2922        IF ( .NOT. ALLOCATED( ptc ) ) ALLOCATE( ptc(0:nzc+1, js:je, is:ie) )
     2977       IF ( .NOT. ALLOCATED( ptc ) )  ALLOCATE( ptc(0:nzc+1,js:je,is:ie) )
    29232978       p_3d => ptc
    29242979    ELSEIF ( TRIM( name ) == "q")  THEN
    2925        IF ( .NOT. ALLOCATED( q_c ) ) ALLOCATE( q_c(0:nzc+1, js:je, is:ie) )
     2980       IF ( .NOT. ALLOCATED( q_c ) )  ALLOCATE( q_c(0:nzc+1,js:je,is:ie) )
    29262981       p_3d => q_c
    29272982    ELSEIF ( TRIM( name ) == "qc")  THEN
    2928        IF ( .NOT. ALLOCATED( qcc ) ) ALLOCATE( qcc(0:nzc+1, js:je, is:ie) )
     2983       IF ( .NOT. ALLOCATED( qcc ) )  ALLOCATE( qcc(0:nzc+1,js:je,is:ie) )
    29292984       p_3d => qcc
    29302985    ELSEIF ( TRIM( name ) == "qr")  THEN
    2931        IF ( .NOT. ALLOCATED( qrc ) ) ALLOCATE( qrc(0:nzc+1, js:je, is:ie) )
     2986       IF ( .NOT. ALLOCATED( qrc ) )  ALLOCATE( qrc(0:nzc+1,js:je,is:ie) )
    29322987       p_3d => qrc
    29332988    ELSEIF ( TRIM( name ) == "nr")  THEN
    2934        IF ( .NOT. ALLOCATED( nrc ) ) ALLOCATE( nrc(0:nzc+1, js:je, is:ie) )
     2989       IF ( .NOT. ALLOCATED( nrc ) )  ALLOCATE( nrc(0:nzc+1,js:je,is:ie) )
    29352990       p_3d => nrc
    29362991    ELSEIF ( TRIM( name ) == "nc")  THEN
    2937        IF ( .NOT. ALLOCATED( ncc ) ) ALLOCATE( ncc(0:nzc+1, js:je, is:ie) )
     2992       IF ( .NOT. ALLOCATED( ncc ) )  ALLOCATE( ncc(0:nzc+1,js:je,is:ie) )
    29382993       p_3d => ncc
    29392994    ELSEIF ( TRIM( name ) == "s")  THEN
    2940        IF ( .NOT. ALLOCATED( sc ) ) ALLOCATE( sc(0:nzc+1, js:je, is:ie) )
     2995       IF ( .NOT. ALLOCATED( sc ) )  ALLOCATE( sc(0:nzc+1,js:je,is:ie) )
    29412996       p_3d => sc
     2997    ELSEIF ( TRIM( name(1:5) ) == "chem_" )  THEN
     2998       IF ( .NOT. ALLOCATED( chem_spec_c ) )                                   &
     2999          ALLOCATE( chem_spec_c(0:nzc+1,js:je,is:ie,1:nspec) )
     3000       p_3d => chem_spec_c(:,:,:,n)
    29423001    !ELSEIF (trim(name) == "z0") then
    29433002       !IF (.not.allocated(z0c))  allocate(z0c(js:je, is:ie))
     
    30013060    IMPLICIT NONE
    30023061
    3003     INTEGER(iwp) ::  i          !:
    3004     INTEGER(iwp) ::  icl        !:
    3005     INTEGER(iwp) ::  icr        !:
    3006     INTEGER(iwp) ::  j          !:
    3007     INTEGER(iwp) ::  jcn        !:
    3008     INTEGER(iwp) ::  jcs        !:
    3009     INTEGER(iwp) ::  k          !:
    3010 
    3011     REAL(wp) ::  waittime       !:
     3062    INTEGER(iwp) ::  i          !<
     3063    INTEGER(iwp) ::  icl        !<
     3064    INTEGER(iwp) ::  icr        !<
     3065    INTEGER(iwp) ::  j          !<
     3066    INTEGER(iwp) ::  jcn        !<
     3067    INTEGER(iwp) ::  jcs        !<
     3068    INTEGER(iwp) ::  k          !<
     3069    INTEGER(iwp) ::  n          !< running index for chemical species
     3070
     3071    REAL(wp) ::  waittime       !<
    30123072
    30133073!
     
    30633123          CALL pmci_interp_tril_all ( s, sc, ico, jco, kco, r1xo, r2xo, r1yo,   &
    30643124                                      r2yo, r1zo, r2zo, 's' )
     3125       ENDIF
     3126
     3127       IF ( air_chemistry )  THEN
     3128          DO  n = 1, nspec
     3129             CALL pmci_interp_tril_all ( chem_species(n)%conc,                 &
     3130                                         chem_spec_c(:,:,:,n),                 &
     3131                                         ico, jco, kco, r1xo, r2xo, r1yo,      &
     3132                                         r2yo, r1zo, r2zo, 's' )
     3133          ENDDO
    30653134       ENDIF
    30663135
     
    37073776     
    37083777       IMPLICIT NONE
     3778
     3779       INTEGER(iwp) ::  n          !< running index for number of chemical species
    37093780     
    37103781!
     
    37873858             ENDIF
    37883859
     3860             IF ( air_chemistry )  THEN
     3861                DO  n = 1, nspec
     3862                   CALL pmci_interp_tril_lr( chem_species(n)%conc,              &
     3863                                             chem_spec_c(:,:,:,n),              &
     3864                                             ico, jco, kco, r1xo, r2xo,         &
     3865                                             r1yo, r2yo, r1zo, r2zo,            &
     3866                                             logc_u_l, logc_ratio_u_l,          &
     3867                                             nzt_topo_nestbc_l, 'l', 's' )
     3868                ENDDO
     3869             ENDIF
     3870
    37893871             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    37903872                CALL pmci_extrap_ifoutflow_lr( u, 'l', 'u' )
     
    38183900                IF ( passive_scalar )  THEN
    38193901                   CALL pmci_extrap_ifoutflow_lr( s, 'l', 's' )
     3902                ENDIF
     3903
     3904                IF ( air_chemistry )  THEN
     3905                   DO  n = 1, nspec
     3906                      CALL pmci_extrap_ifoutflow_lr( chem_species(n)%conc,     &
     3907                                                     'l', 's' )
     3908                   ENDDO
    38203909                ENDIF
    38213910
     
    39033992                                          nzt_topo_nestbc_r, 'r', 's' )
    39043993
     3994             IF ( air_chemistry )  THEN
     3995                DO  n = 1, nspec
     3996                   CALL pmci_interp_tril_lr( chem_species(n)%conc,             &
     3997                                             chem_spec_c(:,:,:,n),             &
     3998                                             ico, jco, kco, r1xo, r2xo,        &
     3999                                             r1yo, r2yo, r1zo, r2zo,           &
     4000                                             logc_u_r, logc_ratio_u_r,         &
     4001                                             nzt_topo_nestbc_r, 'r', 's' )
     4002                ENDDO
     4003             ENDIF
     4004
    39054005             ENDIF
    39064006
     
    39324032                IF ( passive_scalar )  THEN
    39334033                   CALL pmci_extrap_ifoutflow_lr( s, 'r', 's' )
     4034                ENDIF
     4035
     4036                IF ( air_chemistry )  THEN
     4037                   DO  n = 1, nspec
     4038                      CALL pmci_extrap_ifoutflow_lr( chem_species(n)%conc,     &
     4039                                                     'r', 's' )
     4040                   ENDDO
    39344041                ENDIF
    39354042             ENDIF
     
    40104117             ENDIF
    40114118
     4119             IF ( air_chemistry )  THEN
     4120                DO  n = 1, nspec
     4121                   CALL pmci_interp_tril_sn( chem_species(n)%conc,              &
     4122                                             chem_spec_c(:,:,:,n),              &
     4123                                             ico, jco, kco, r1xo, r2xo,         &
     4124                                             r1yo, r2yo, r1zo, r2zo,            &
     4125                                             logc_u_s, logc_ratio_u_s,          &
     4126                                             nzt_topo_nestbc_s, 's', 's' )
     4127                ENDDO
     4128             ENDIF
     4129
    40124130             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    40134131                CALL pmci_extrap_ifoutflow_sn( u, 's', 'u' )
     
    40384156                IF ( passive_scalar )  THEN
    40394157                   CALL pmci_extrap_ifoutflow_sn( s,  's', 's' )
     4158                ENDIF
     4159
     4160                IF ( air_chemistry )  THEN
     4161                   DO  n = 1, nspec
     4162                      CALL pmci_extrap_ifoutflow_sn( chem_species(n)%conc,     &
     4163                                                     's', 's' )
     4164                   ENDDO
    40404165                ENDIF
    40414166
     
    41204245             ENDIF
    41214246
     4247             IF ( air_chemistry )  THEN
     4248                DO  n = 1, nspec
     4249                   CALL pmci_interp_tril_sn( chem_species(n)%conc,              &
     4250                                             chem_spec_c(:,:,:,n),              &
     4251                                             ico, jco, kco, r1xo, r2xo,         &
     4252                                             r1yo, r2yo, r1zo, r2zo,            &
     4253                                             logc_u_n, logc_ratio_u_n,          &
     4254                                             nzt_topo_nestbc_n, 'n', 's' )
     4255                ENDDO
     4256             ENDIF
     4257
    41224258             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    41234259                CALL pmci_extrap_ifoutflow_sn( u, 'n', 'u' )
     
    41474283                IF ( passive_scalar )  THEN
    41484284                   CALL pmci_extrap_ifoutflow_sn( s,  'n', 's' )
     4285                ENDIF
     4286
     4287                IF ( air_chemistry )  THEN
     4288                   DO  n = 1, nspec
     4289                      CALL pmci_extrap_ifoutflow_sn( chem_species(n)%conc,     &
     4290                                                     'n', 's' )
     4291                   ENDDO
    41494292                ENDIF
    41504293
     
    42034346       ENDIF
    42044347
     4348       IF ( air_chemistry )  THEN
     4349          DO  n = 1, nspec
     4350             CALL pmci_interp_tril_t( chem_species(n)%conc,                    &
     4351                                      chem_spec_c(:,:,:,n),                    &
     4352                                      ico, jco, kco, r1xo, r2xo,               &
     4353                                      r1yo, r2yo, r1zo, r2zo,                  &
     4354                                      's' )
     4355          ENDDO
     4356       ENDIF
     4357
    42054358       IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    42064359
     
    42354388          ENDIF
    42364389
     4390          IF ( air_chemistry )  THEN
     4391             DO  n = 1, nspec
     4392                CALL pmci_extrap_ifoutflow_t( chem_species(n)%conc, 's' )
     4393             ENDDO
     4394          ENDIF
     4395
    42374396       ENDIF
    42384397
     
    42474406!--   Note that TKE is not anterpolated.
    42484407      IMPLICIT NONE
     4408
     4409      INTEGER(iwp) ::  n          !< running index for number of chemical species
     4410
     4411
    42494412
    42504413      CALL pmci_anterp_tophat( u,  uc,  kctu, iflu, ifuu, jflo, jfuo, kflo,    &
     
    42904453         CALL pmci_anterp_tophat( s, sc, kctu, iflo, ifuo, jflo, jfuo, kflo,   &
    42914454                                  kfuo, ijfc_s, kfc_s, 's' )
     4455      ENDIF
     4456
     4457      IF ( air_chemistry )  THEN
     4458         DO  n = 1, nspec
     4459            CALL pmci_anterp_tophat( chem_species(n)%conc,                     &
     4460                                     chem_spec_c(:,:,:,n),                     &
     4461                                     kctu, iflo, ifuo, jflo, jfuo, kflo,       &
     4462                                     kfuo, ijfc_s, kfc_s, 's' )
     4463         ENDDO
    42924464      ENDIF
    42934465
     
    52015373 SUBROUTINE pmci_boundary_conds
    52025374
     5375    USE chem_modules,                                                          &
     5376        ONLY:  ibc_cs_b
     5377
    52035378    USE control_parameters,                                                    &
    52045379        ONLY:  ibc_pt_b, ibc_q_b, ibc_s_b, ibc_uv_b
     
    52135388    INTEGER(iwp) ::  k  !< Index along z-direction
    52145389    INTEGER(iwp) ::  m  !< Running index for surface type
     5390    INTEGER(iwp) ::  n  !< running index for number of chemical species
    52155391   
    52165392!
     
    53385514             j = bc_h(1)%j(m)
    53395515             k = bc_h(1)%k(m)
    5340              s(k-1,j,i) = s(k,j,i)
     5516             s(k+1,j,i) = s(k,j,i)
    53415517          ENDDO 
    53425518       ENDIF
    53435519    ENDIF
     5520!
     5521!-- Set Neumann boundary conditions for chemical species
     5522    IF ( air_chemistry )  THEN
     5523       IF ( ibc_cs_b == 1 )  THEN
     5524          DO  n = 1, nspec
     5525             DO  m = 1, bc_h(0)%ns
     5526                i = bc_h(0)%i(m)           
     5527                j = bc_h(0)%j(m)
     5528                k = bc_h(0)%k(m)
     5529                chem_species(n)%conc(k-1,j,i) = chem_species(n)%conc(k,j,i)
     5530             ENDDO
     5531             DO  m = 1, bc_h(1)%ns
     5532                i = bc_h(1)%i(m)           
     5533                j = bc_h(1)%j(m)
     5534                k = bc_h(1)%k(m)
     5535                chem_species(n)%conc(k+1,j,i) = chem_species(n)%conc(k,j,i)
     5536             ENDDO
     5537          ENDDO
     5538       ENDIF
     5539    ENDIF
    53445540
    53455541 END SUBROUTINE pmci_boundary_conds
Note: See TracChangeset for help on using the changeset viewer.