Changeset 4097 for trunk


Ignore:
Timestamp:
Mar 4, 2026, 8:01:15 AM (2 weeks ago)
Author:
emillour
Message:

Generic PCM:
Code tidying: turn dtridgl.F into util_tridiagonal_matrix_solver.F90, and also
turn rad_tridiagonal_matrix_solver.F into a module.
EM

Location:
trunk/LMDZ.GENERIC
Files:
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/changelog.txt

    r4083 r4097  
    21972197and then broadcast the information (works for both MPI and OpenMP).
    21982198
     2199== 04/03/2026 == EM
     2200Code tidying: turn dtridgl.F into util_tridiagonal_matrix_solver.F90, and also
     2201turn rad_tridiagonal_matrix_solver.F into a module.
     2202
  • trunk/LMDZ.GENERIC/libf/phygeneric/rad_correlatedk_fluxes_solver_stellar.F

    r4077 r4097  
    4545
    4646      use radinc_h, only: L_TAUMAX, L_NLAYRAD, L_NLEVRAD, L_LEVELS
     47      use rad_tridiagonal_matrix_solver_mod, only:
     48     &                    rad_tridiagonal_matrix_solver
    4749
    4850      implicit none
  • trunk/LMDZ.GENERIC/libf/phygeneric/rad_correlatedk_fluxes_solver_thermal.F

    r4077 r4097  
    1313      use radcommon_h, only: planckir
    1414      use comcstfi_mod, only: pi
     15      use rad_tridiagonal_matrix_solver_mod, only:
     16     &                        rad_tridiagonal_matrix_solver
    1517     
    1618      IMPLICIT NONE
  • trunk/LMDZ.GENERIC/libf/phygeneric/rad_tridiagonal_matrix_solver.F

    r4077 r4097  
     1      MODULE rad_tridiagonal_matrix_solver_mod
     2     
     3      IMPLICIT NONE
     4     
     5      CONTAINS
     6     
    17      SUBROUTINE rad_tridiagonal_matrix_solver(NL,
    28     *           GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,
    39     *           BTOP,BSURF,RSF,XK1,XK2)
    410
     11      USE util_tridiagonal_matrix_solver_mod, ONLY: DTRIDGL
    512C  GCM2.0  Feb 2003
    613C
    714C DOUBLE PRECISION VERSION OF SOLVER
    815
    9 !!      PARAMETER (NMAX=201)
    10       IMPLICIT REAL*8  (A-H,O-Z)
    11       DIMENSION GAMA(NL),CP(NL),CM(NL),CPM1(NL),CMM1(NL),XK1(NL),
    12      *          XK2(NL),E1(NL),E2(NL),E3(NL),E4(NL)
    13       DIMENSION AF(2*NL),BF(2*NL),CF(2*NL),DF(2*NL),XK(2*NL)
     16      IMPLICIT NONE
     17
     18      INTEGER,INTENT(IN) :: NL
     19      REAL*8,INTENT(IN) :: GAMA(NL),CP(NL),CM(NL)
     20      REAL*8,INTENT(IN) :: CPM1(NL),CMM1(NL)
     21      REAL*8,INTENT(OUT) :: XK1(NL), XK2(NL)
     22      REAL*8,INTENT(IN) :: E1(NL),E2(NL),E3(NL),E4(NL)
     23      REAL*8,INTENT(IN) :: BTOP, BSURF, RSF
     24      REAL*8 :: AF(2*NL),BF(2*NL),CF(2*NL),DF(2*NL),XK(2*NL)
     25
    1426C*********************************************************
    1527C* THIS SUBROUTINE SOLVES FOR THE COEFFICIENTS OF THE    *
     
    3850C*********************************************************
    3951
     52      INTEGER :: L,LM1,LM2
     53      INTEGER :: N
     54      INTEGER :: I
    4055C======================================================================C
    4156
     
    8398C     ***UNMIX THE COEFFICIENTS****
    8499
    85       DO 28 N=1,NL
     100      DO N=1,NL
    86101        XK1(N) = XK(2*N-1)+XK(2*N)
    87102        XK2(N) = XK(2*N-1)-XK(2*N)
     
    92107C       BE TREATED CAREFULLY
    93108
    94         IF(XK2(N) .EQ. 0.0) GO TO 28
     109        IF(XK2(N) .EQ. 0.0) CONTINUE
    95110c        IF (ABS (XK2(N)/XK(2*N-1)) .LT. 1.E-30) XK2(N)=0.0
    96111
    97112        IF (ABS (XK2(N)/(XK(2*N-1)+1.e-20)) .LT. 1.E-30) XK2(N)=0.0   ! For debug only (with -Ktrap=fp option)
    98113
     114      ENDDO
     115 
     116      END SUBROUTINE rad_tridiagonal_matrix_solver
    99117
    100    28 CONTINUE
    101  
    102       RETURN
    103       END
     118      END MODULE rad_tridiagonal_matrix_solver_mod
  • trunk/LMDZ.GENERIC/libf/phygeneric/util_tridiagonal_matrix_solver.F90

    r4096 r4097  
     1module util_tridiagonal_matrix_solver_mod
     2
     3implicit none
     4
     5contains
     6
    17      SUBROUTINE DTRIDGL(L,AF,BF,CF,DF,XK)
    28
    3 C  GCM2.0  Feb 2003
     9!  GCM2.0  Feb 2003
    410
    5 C     DOUBLE PRECISION VERSION OF TRIDGL
     11!     DOUBLE PRECISION VERSION OF TRIDGL
    612
    7 !!      PARAMETER (NMAX=201)
    8       IMPLICIT REAL*8  (A-H,O-Z)
    9       DIMENSION AF(L),BF(L),CF(L),DF(L),XK(L)
    10       DIMENSION AS(2*L),DS(2*L)
     13      REAL*8,INTENT(IN) :: AF(L),BF(L),CF(L),DF(L)
     14      REAL*8,INTENT(OUT) :: XK(L)
     15      INTEGER,INTENT(IN) :: L
    1116
    12 C*    THIS SUBROUTINE SOLVES A SYSTEM OF TRIDIAGIONAL MATRIX
    13 C*    EQUATIONS. THE FORM OF THE EQUATIONS ARE:
    14 C*    A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = D(I)
    15 C*    WHERE I=1,L  LESS THAN 103.
    16 C* ..............REVIEWED -CP........
     17!*    THIS SUBROUTINE SOLVES A SYSTEM OF TRIDIAGIONAL MATRIX
     18!*    EQUATIONS. THE FORM OF THE EQUATIONS ARE:
     19!*    A(I)*X(I-1) + B(I)*X(I) + C(I)*X(I+1) = D(I)
     20!* ..............REVIEWED -CP........
    1721
    18 C======================================================================C
     22      REAL*8 :: AS(2*L),DS(2*L)
     23      REAL*8 :: XKB,X
     24      INTEGER :: I
     25
     26!======================================================================C
    1927
    2028      AS(L) = AF(L)/BF(L)
     
    3341      END DO
    3442
    35       RETURN
    36       END
     43      END SUBROUTINE DTRIDGL
     44
     45end module util_tridiagonal_matrix_solver_mod
Note: See TracChangeset for help on using the changeset viewer.