Ignore:
Timestamp:
Oct 7, 2015 11:56:08 PM (6 years ago)
Author:
knoop
Message:

Code annotations made doxygen readable

File:
1 edited

Legend:

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

    r1407 r1682  
    1  MODULE tridia_solver
    2 
     1!> @file tridia_solver.f90
    32!--------------------------------------------------------------------------------!
    43! This file is part of PALM.
     
    2019! Current revisions:
    2120! ------------------
    22 !
     21! Code annotations made doxygen readable
    2322!
    2423! Former revisions:
     
    6463! Description:
    6564! ------------
    66 ! solves the linear system of equations:
    67 !
    68 ! -(4 pi^2(i^2/(dx^2*nnx^2)+j^2/(dy^2*nny^2))+
    69 !   1/(dzu(k)*dzw(k))+1/(dzu(k-1)*dzw(k)))*p(i,j,k)+
    70 ! 1/(dzu(k)*dzw(k))*p(i,j,k+1)+1/(dzu(k-1)*dzw(k))*p(i,j,k-1)=d(i,j,k)
    71 !
    72 ! by using the Thomas algorithm
    73 !------------------------------------------------------------------------------!
     65!> solves the linear system of equations:
     66!>
     67!> -(4 pi^2(i^2/(dx^2*nnx^2)+j^2/(dy^2*nny^2))+
     68!>   1/(dzu(k)*dzw(k))+1/(dzu(k-1)*dzw(k)))*p(i,j,k)+
     69!> 1/(dzu(k)*dzw(k))*p(i,j,k+1)+1/(dzu(k-1)*dzw(k))*p(i,j,k-1)=d(i,j,k)
     70!>
     71!> by using the Thomas algorithm
     72!------------------------------------------------------------------------------!
     73 MODULE tridia_solver
     74 
    7475
    7576    USE indices,                                                               &
     
    8384    IMPLICIT NONE
    8485
    85     REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ddzuw !:
     86    REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  ddzuw !<
    8687
    8788    PRIVATE
     
    100101
    101102
     103!------------------------------------------------------------------------------!
     104! Description:
     105! ------------
     106!> @todo Missing subroutine description.
     107!------------------------------------------------------------------------------!
    102108    SUBROUTINE tridia_init
    103109
     
    109115       IMPLICIT NONE
    110116
    111        INTEGER(iwp) ::  k !:
     117       INTEGER(iwp) ::  k !<
    112118
    113119       ALLOCATE( ddzuw(0:nz-1,3) )
     
    129135
    130136
     137!------------------------------------------------------------------------------!
     138! Description:
     139! ------------
     140!> Computes the i- and j-dependent component of the matrix
     141!> Provide the constant coefficients of the tridiagonal matrix for solution
     142!> of the Poisson equation in Fourier space.
     143!> The coefficients are computed following the method of
     144!> Schmidt et al. (DFVLR-Mitteilung 84-15), which departs from Stephan
     145!> Siano's original version by discretizing the Poisson equation,
     146!> before it is Fourier-transformed.
     147!------------------------------------------------------------------------------!
    131148    SUBROUTINE maketri
    132149
    133 !------------------------------------------------------------------------------!
    134 ! Computes the i- and j-dependent component of the matrix
    135 !------------------------------------------------------------------------------!
    136150
    137151          USE arrays_3d,                                                       &
     
    152166          IMPLICIT NONE
    153167
    154           INTEGER(iwp) ::  i    !:
    155           INTEGER(iwp) ::  j    !:
    156           INTEGER(iwp) ::  k    !:
    157           INTEGER(iwp) ::  nnxh !:
    158           INTEGER(iwp) ::  nnyh !:
    159 
    160           REAL(wp)    ::  ll(nxl_z:nxr_z,nys_z:nyn_z) !:
     168          INTEGER(iwp) ::  i    !<
     169          INTEGER(iwp) ::  j    !<
     170          INTEGER(iwp) ::  k    !<
     171          INTEGER(iwp) ::  nnxh !<
     172          INTEGER(iwp) ::  nnyh !<
     173
     174          REAL(wp)    ::  ll(nxl_z:nxr_z,nys_z:nyn_z) !<
    161175          !$acc declare create( ll )
    162176
     
    164178          nnxh = ( nx + 1 ) / 2
    165179          nnyh = ( ny + 1 ) / 2
    166 
    167 !
    168 !--       Provide the constant coefficients of the tridiagonal matrix for solution
    169 !--       of the Poisson equation in Fourier space.
    170 !--       The coefficients are computed following the method of
    171 !--       Schmidt et al. (DFVLR-Mitteilung 84-15), which departs from Stephan
    172 !--       Siano's original version by discretizing the Poisson equation,
    173 !--       before it is Fourier-transformed.
    174180
    175181          !$acc kernels present( tric )
     
    235241
    236242
     243!------------------------------------------------------------------------------!
     244! Description:
     245! ------------
     246!> Substitution (Forward and Backward) (Thomas algorithm)
     247!------------------------------------------------------------------------------!
    237248    SUBROUTINE tridia_substi( ar )
    238249
    239 !------------------------------------------------------------------------------!
    240 ! Substitution (Forward and Backward) (Thomas algorithm)
    241 !------------------------------------------------------------------------------!
    242250
    243251          USE arrays_3d,                                                       &
     
    251259          IMPLICIT NONE
    252260
    253           INTEGER(iwp) ::  i !:
    254           INTEGER(iwp) ::  j !:
    255           INTEGER(iwp) ::  k !:
    256 
    257           REAL(wp)     ::  ar(nxl_z:nxr_z,nys_z:nyn_z,1:nz) !:
    258 
    259           REAL(wp), DIMENSION(nxl_z:nxr_z,nys_z:nyn_z,0:nz-1)   ::  ar1 !:
     261          INTEGER(iwp) ::  i !<
     262          INTEGER(iwp) ::  j !<
     263          INTEGER(iwp) ::  k !<
     264
     265          REAL(wp)     ::  ar(nxl_z:nxr_z,nys_z:nyn_z,1:nz) !<
     266
     267          REAL(wp), DIMENSION(nxl_z:nxr_z,nys_z:nyn_z,0:nz-1)   ::  ar1 !<
    260268          !$acc declare create( ar1 )
    261269
     
    316324
    317325
     326!------------------------------------------------------------------------------!
     327! Description:
     328! ------------
     329!> Substitution (Forward and Backward) (Thomas algorithm)
     330!------------------------------------------------------------------------------!
    318331    SUBROUTINE tridia_substi_overlap( ar, jj )
    319332
    320 !------------------------------------------------------------------------------!
    321 ! Substitution (Forward and Backward) (Thomas algorithm)
    322 !------------------------------------------------------------------------------!
    323333
    324334          USE arrays_3d,                                                       &
     
    332342          IMPLICIT NONE
    333343
    334           INTEGER(iwp) ::  i  !:
    335           INTEGER(iwp) ::  j  !:
    336           INTEGER(iwp) ::  jj !:
    337           INTEGER(iwp) ::  k  !:
    338 
    339           REAL(wp)     ::  ar(nxl_z:nxr_z,nys_z:nyn_z,1:nz) !:
    340 
    341           REAL(wp), DIMENSION(nxl_z:nxr_z,nys_z:nyn_z,0:nz-1) ::  ar1 !:
     344          INTEGER(iwp) ::  i  !<
     345          INTEGER(iwp) ::  j  !<
     346          INTEGER(iwp) ::  jj !<
     347          INTEGER(iwp) ::  k  !<
     348
     349          REAL(wp)     ::  ar(nxl_z:nxr_z,nys_z:nyn_z,1:nz) !<
     350
     351          REAL(wp), DIMENSION(nxl_z:nxr_z,nys_z:nyn_z,0:nz-1) ::  ar1 !<
    342352          !$acc declare create( ar1 )
    343353
     
    399409
    400410
     411!------------------------------------------------------------------------------!
     412! Description:
     413! ------------
     414!> Splitting of the tridiagonal matrix (Thomas algorithm)
     415!------------------------------------------------------------------------------!
    401416    SUBROUTINE split
    402417
    403 !------------------------------------------------------------------------------!
    404 ! Splitting of the tridiagonal matrix (Thomas algorithm)
    405 !------------------------------------------------------------------------------!
    406418
    407419          USE arrays_3d,                                                       &
     
    412424          IMPLICIT NONE
    413425
    414           INTEGER(iwp) ::  i !:
    415           INTEGER(iwp) ::  j !:
    416           INTEGER(iwp) ::  k !:
     426          INTEGER(iwp) ::  i !<
     427          INTEGER(iwp) ::  j !<
     428          INTEGER(iwp) ::  k !<
    417429!
    418430!--       Splitting
     
    443455
    444456
     457!------------------------------------------------------------------------------!
     458! Description:
     459! ------------
     460!> Solves the linear system of equations for a 1d-decomposition along x (see
     461!> tridia)
     462!>
     463!> @attention when using the intel compilers older than 12.0, array tri must
     464!>            be passed as an argument to the contained subroutines. Otherwise
     465!>            addres faults will occur. This feature can be activated with
     466!>            cpp-switch __intel11
     467!>            On NEC, tri should not be passed (except for routine substi_1dd)
     468!>            because this causes very bad performance.
     469!------------------------------------------------------------------------------!
     470 
    445471    SUBROUTINE tridia_1dd( ddx2, ddy2, nx, ny, j, ar, tri_for_1d )
    446472
    447 !------------------------------------------------------------------------------!
    448 ! Solves the linear system of equations for a 1d-decomposition along x (see
    449 ! tridia)
    450 !
    451 ! Attention:  when using the intel compilers older than 12.0, array tri must
    452 !             be passed as an argument to the contained subroutines. Otherwise
    453 !             addres faults will occur. This feature can be activated with
    454 !             cpp-switch __intel11
    455 !             On NEC, tri should not be passed (except for routine substi_1dd)
    456 !             because this causes very bad performance.
    457 !------------------------------------------------------------------------------!
    458473
    459474       USE arrays_3d,                                                          &
     
    467482       IMPLICIT NONE
    468483
    469        INTEGER(iwp) ::  i                  !:
    470        INTEGER(iwp) ::  j                  !:
    471        INTEGER(iwp) ::  k                  !:
    472        INTEGER(iwp) ::  nnyh               !:
    473        INTEGER(iwp) ::  nx                 !:
    474        INTEGER(iwp) ::  ny                 !:
    475        INTEGER(iwp) ::  omp_get_thread_num !:
    476        INTEGER(iwp) ::  tn                 !:
    477 
    478        REAL(wp)     ::  ddx2 !:
    479        REAL(wp)     ::  ddy2 !:
    480 
    481        REAL(wp), DIMENSION(0:nx,1:nz)     ::  ar         !:
    482        REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !:
     484       INTEGER(iwp) ::  i                  !<
     485       INTEGER(iwp) ::  j                  !<
     486       INTEGER(iwp) ::  k                  !<
     487       INTEGER(iwp) ::  nnyh               !<
     488       INTEGER(iwp) ::  nx                 !<
     489       INTEGER(iwp) ::  ny                 !<
     490       INTEGER(iwp) ::  omp_get_thread_num !<
     491       INTEGER(iwp) ::  tn                 !<
     492
     493       REAL(wp)     ::  ddx2 !<
     494       REAL(wp)     ::  ddy2 !<
     495
     496       REAL(wp), DIMENSION(0:nx,1:nz)     ::  ar         !<
     497       REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !<
    483498
    484499
     
    525540    CONTAINS
    526541
     542
     543!------------------------------------------------------------------------------!
     544! Description:
     545! ------------
     546!> computes the i- and j-dependent component of the matrix
     547!------------------------------------------------------------------------------!
    527548#if defined( __intel11 )
    528549       SUBROUTINE maketri_1dd( j, tri_for_1d )
     
    531552#endif
    532553
    533 !------------------------------------------------------------------------------!
    534 ! computes the i- and j-dependent component of the matrix
    535 !------------------------------------------------------------------------------!
    536 
    537554          USE constants,                                                       &
    538555              ONLY:  pi
     
    542559          IMPLICIT NONE
    543560
    544           INTEGER(iwp) ::  i    !:
    545           INTEGER(iwp) ::  j    !:
    546           INTEGER(iwp) ::  k    !:
    547           INTEGER(iwp) ::  nnxh !:
    548 
    549           REAL(wp)     ::  a !:
    550           REAL(wp)     ::  c !:
    551 
    552           REAL(wp), DIMENSION(0:nx) ::  l !:
     561          INTEGER(iwp) ::  i    !<
     562          INTEGER(iwp) ::  j    !<
     563          INTEGER(iwp) ::  k    !<
     564          INTEGER(iwp) ::  nnxh !<
     565
     566          REAL(wp)     ::  a !<
     567          REAL(wp)     ::  c !<
     568
     569          REAL(wp), DIMENSION(0:nx) ::  l !<
    553570
    554571#if defined( __intel11 )
    555           REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !:
     572          REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !<
    556573#endif
    557574
     
    599616
    600617
     618!------------------------------------------------------------------------------!
     619! Description:
     620! ------------
     621!> Splitting of the tridiagonal matrix (Thomas algorithm)
     622!------------------------------------------------------------------------------!
    601623#if defined( __intel11 )
    602624       SUBROUTINE split_1dd( tri_for_1d )
     
    605627#endif
    606628
    607 !------------------------------------------------------------------------------!
    608 ! Splitting of the tridiagonal matrix (Thomas algorithm)
    609 !------------------------------------------------------------------------------!
    610629
    611630          IMPLICIT NONE
    612631
    613           INTEGER(iwp) ::  i !:
    614           INTEGER(iwp) ::  k !:
     632          INTEGER(iwp) ::  i !<
     633          INTEGER(iwp) ::  k !<
    615634
    616635#if defined( __intel11 )
    617           REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !:
     636          REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !<
    618637#endif
    619638
     
    634653
    635654
     655!------------------------------------------------------------------------------!
     656! Description:
     657! ------------
     658!> Substitution (Forward and Backward) (Thomas algorithm)
     659!------------------------------------------------------------------------------!
    636660       SUBROUTINE substi_1dd( ar, tri_for_1d )
    637661
    638 !------------------------------------------------------------------------------!
    639 ! Substitution (Forward and Backward) (Thomas algorithm)
    640 !------------------------------------------------------------------------------!
    641662
    642663          IMPLICIT NONE
    643664
    644           INTEGER(iwp) ::  i !:
    645           INTEGER(iwp) ::  k !:
    646 
    647           REAL(wp), DIMENSION(0:nx,nz)       ::  ar         !:
    648           REAL(wp), DIMENSION(0:nx,0:nz-1)   ::  ar1        !:
    649           REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !:
     665          INTEGER(iwp) ::  i !<
     666          INTEGER(iwp) ::  k !<
     667
     668          REAL(wp), DIMENSION(0:nx,nz)       ::  ar         !<
     669          REAL(wp), DIMENSION(0:nx,0:nz-1)   ::  ar1        !<
     670          REAL(wp), DIMENSION(5,0:nx,0:nz-1) ::  tri_for_1d !<
    650671
    651672!
Note: See TracChangeset for help on using the changeset viewer.