Changeset 2084 for palm/trunk/SOURCE


Ignore:
Timestamp:
Dec 9, 2016 3:59:42 PM (7 years ago)
Author:
knoop
Message:

Bugfix: Multigrid now usable with anelastic approximation

Location:
palm/trunk/SOURCE
Files:
2 edited

Legend:

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

    r2053 r2084  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Removed anelastic + multigrid error message
    2323!
    2424! Former revisions:
     
    874874                        'momentum_advec = "ws-scheme"'
    875875       CALL message( 'check_parameters', 'PA0447', 1, 2, 0, 6, 0 )
    876     ENDIF
    877     IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
    878          TRIM( psolver ) == 'multigrid' )  THEN
    879        message_string = 'Anelastic approximation currently only supports: ' // &
    880                         'psolver = "poisfft", ' // &
    881                         'psolver = "sor" and ' // &
    882                         'psolver = "multigrid_noopt"'
    883        CALL message( 'check_parameters', 'PA0448', 1, 2, 0, 6, 0 )
    884876    ENDIF
    885877    IF ( TRIM( approximation ) == 'anelastic'   .AND.   &
  • palm/trunk/SOURCE/poismg_mod.f90

    r2074 r2084  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Bugfix: missing rho_air_mg even/odd sorting implemented
    2323!
    2424! Former revisions:
     
    108108    REAL(wp), DIMENSION(:,:), SAVE, ALLOCATABLE ::  f1_mg_b, f2_mg_b, f3_mg_b  !< blocked version of f1_mg ...
    109109
     110    REAL(wp), DIMENSION(:,:), SAVE, ALLOCATABLE ::  rho_air_mg_b               !< blocked version of rho_air_mg
     111
    110112    INTERFACE poismg
    111113       MODULE PROCEDURE poismg
     
    315317                kp1 = k-ind_even_odd
    316318                r(k,j,i) = f_mg(k,j,i)                                         &
    317                       - rho_air_mg(k,l) * ddx2_mg(l) *                         &
     319                      - rho_air_mg_b(k,l) * ddx2_mg(l) *                         &
    318320                      ( p_mg(k,j,i+1) +  p_mg(k,j,i-1)  )                      &
    319                       - rho_air_mg(k,l) * ddy2_mg(l) *                         &
     321                      - rho_air_mg_b(k,l) * ddy2_mg(l) *                         &
    320322                      ( p_mg(k,j+1,i) + p_mg(k,j-1,i)  )                       &
    321323                      - f2_mg_b(k,l) * p_mg(kp1,j,i)                           &
     
    328330                kp1 = k+ind_even_odd+1
    329331                r(k,j,i) = f_mg(k,j,i)                                         &
    330                       - rho_air_mg(k,l) * ddx2_mg(l) *                         &
     332                      - rho_air_mg_b(k,l) * ddx2_mg(l) *                         &
    331333                      ( p_mg(k,j,i+1) +  p_mg(k,j,i-1)  )                      &
    332                       - rho_air_mg(k,l) * ddy2_mg(l) *                         &
     334                      - rho_air_mg_b(k,l) * ddy2_mg(l) *                         &
    333335                      ( p_mg(k,j+1,i) + p_mg(k,j-1,i)  )                       &
    334336                      - f2_mg_b(k,l) * p_mg(kp1,j,i)                           &
     
    761763                         kp1 = k-ind_even_odd
    762764                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    763                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     765                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    764766                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    765                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     767                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    766768                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    767769                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    780782                         kp1 = k-ind_even_odd
    781783                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    782                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     784                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    783785                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    784                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     786                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    785787                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    786788                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    799801                         kp1 = k+ind_even_odd+1
    800802                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    801                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     803                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    802804                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    803                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     805                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    804806                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    805807                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    818820                         kp1 = k+ind_even_odd+1
    819821                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    820                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     822                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    821823                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    822                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     824                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    823825                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    824826                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    849851                         j   = jj
    850852                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    851                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     853                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    852854                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    853                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     855                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    854856                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    855857                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    858860                         j = jj+2
    859861                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    860                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     862                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    861863                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    862                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     864                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    863865                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    864866                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    875877                         j   = jj
    876878                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    877                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     879                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    878880                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    879                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     881                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    880882                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    881883                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    884886                         j = jj+2
    885887                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    886                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     888                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    887889                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    888                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     890                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    889891                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    890892                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    901903                         j   = jj
    902904                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    903                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     905                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    904906                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    905                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     907                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    906908                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    907909                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    910912                         j = jj+2
    911913                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    912                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     914                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    913915                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    914                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     916                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    915917                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    916918                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    927929                         j   = jj
    928930                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    929                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     931                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    930932                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    931                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     933                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    932934                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    933935                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    936938                         j = jj+2
    937939                         p_mg(k,j,i) = 1.0_wp / f1_mg_b(k,l) * (               &
    938                                  rho_air_mg(k,l) * ddx2_mg(l) *                &
     940                                 rho_air_mg_b(k,l) * ddx2_mg(l) *                &
    939941                               ( p_mg(k,j,i+1) + p_mg(k,j,i-1) )               &
    940                                + rho_air_mg(k,l) * ddy2_mg(l) *                &
     942                               + rho_air_mg_b(k,l) * ddy2_mg(l) *                &
    941943                               ( p_mg(k,j+1,i) + p_mg(k,j-1,i) )               &
    942944                               + f2_mg_b(k,l) * p_mg(kp1,j,i)                  &
     
    17531755
    17541756       USE arrays_3d,                                                          &
    1755            ONLY:  f1_mg, f2_mg, f3_mg
     1757           ONLY:  f1_mg, f2_mg, f3_mg, rho_air_mg
    17561758
    17571759       USE control_parameters,                                                 &
     
    17791781       ALLOCATE( f1_mg_b(nzb:nzt+1,maximum_grid_level),                        &
    17801782                 f2_mg_b(nzb:nzt+1,maximum_grid_level),                        &
    1781                  f3_mg_b(nzb:nzt+1,maximum_grid_level) )
     1783                 f3_mg_b(nzb:nzt+1,maximum_grid_level),                        &
     1784                 rho_air_mg_b(nzb:nzt+1,maximum_grid_level) )
    17821785
    17831786!
     
    18001803                                          f3_mg_b(nzb:nzt_mg(grid_level)+1,l), &
    18011804                                          l )
     1805          CALL sort_k_to_even_odd_blocks( rho_air_mg(nzb+1:nzt_mg(grid_level),l),   &
     1806                                          rho_air_mg_b(nzb:nzt_mg(grid_level)+1,l), &
     1807                                          l )
    18021808       ENDDO
    18031809
Note: See TracChangeset for help on using the changeset viewer.