Changeset 5785 for LMDZ6


Ignore:
Timestamp:
Jul 21, 2025, 10:52:25 AM (6 days ago)
Author:
rkazeroni
Message:

Decomposition of the construction of some string arrays into several stages.
This prevent issues with the Nvidia compiler (compilation or execution).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/misc/strings_mod.f90

    r5771 r5785  
    827827  IMPLICIT NONE
    828828  CHARACTER(LEN=*), INTENT(IN) :: v0(:,:), v1(:,:)
    829   CHARACTER(LEN=maxlen), ALLOCATABLE :: out(:,:), pk(:), tmp(:,:)
     829  CHARACTER(LEN=maxlen), ALLOCATABLE :: out(:,:), pk(:), pk0(:), pk1(:), tmp(:,:)
    830830  INTEGER :: n0, n1, nrow
    831831  n0 = SIZE(v0,1)
     
    833833  nrow = MAX(n0, n1)
    834834  IF(n0 == n1) THEN
    835      pk = PACK(v0, .TRUE.); pk = [pk, PACK(v1, .TRUE.)]
     835     pk0 = PACK(v0, .TRUE.); pk1 = PACK(v1, .TRUE.); pk = [pk0, pk1]
    836836  ELSE IF(n0 /= nrow) THEN
    837      ALLOCATE(tmp(nrow,SIZE(v0,2))); tmp(:,:) = ''; tmp(1:n0,:) = v0(:,:); pk = PACK(tmp, .TRUE.); pk = [pk, PACK(v1, .TRUE.)]
     837     ALLOCATE(tmp(nrow,SIZE(v0,2))); tmp(:,:) = ''; tmp(1:n0,:) = v0(:,:); pk0 = PACK(tmp, .TRUE.); pk1 = PACK(v1, .TRUE.); pk = [pk0, pk1]
    838838  ELSE
    839      ALLOCATE(tmp(nrow,SIZE(v1,2))); tmp(:,:) = ''; tmp(1:n1,:) = v1(:,:); pk = PACK(tmp, .TRUE.); pk = [PACK(v0, .TRUE.), pk]
     839     ALLOCATE(tmp(nrow,SIZE(v1,2))); tmp(:,:) = ''; tmp(1:n1,:) = v1(:,:); pk0 = PACK(tmp, .TRUE.); pk1 = PACK(v1, .TRUE.); pk = [pk0, pk1]
    840840  END IF
    841841  out = RESHAPE(pk, SHAPE=[nrow, SIZE(v0, 2) + SIZE(v1, 2)])
     
    12651265  CHARACTER(LEN=*), INTENT(IN) :: t(:,:)
    12661266  INTEGER, ALLOCATABLE :: n(:)
    1267   INTEGER :: i, j
    1268   n = [(MAXVAL([(LEN_TRIM(t(i,j)), i=1, SIZE(t,1))], DIM=1), j=1, SIZE(t,2))]
     1267  INTEGER :: i, j, nr, nc
     1268  INTEGER, ALLOCATABLE :: trimmed_len(:)
     1269  nr = SIZE(t,1)
     1270  nc = SIZE(t,2)
     1271  ALLOCATE(n(nc))
     1272  DO j = 1, nc
     1273     ALLOCATE(trimmed_len(nr))
     1274     DO i = 1, nr
     1275        trimmed_len(i) = LEN_TRIM(t(i, j))
     1276     END DO
     1277     n(j) = MAXVAL(trimmed_len)
     1278     DEALLOCATE(trimmed_len)
     1279  END DO
    12691280END FUNCTION tableCellsWidth
    12701281
     
    14121423  CHARACTER(LEN=1) :: sp = '|'                             !--- Separator
    14131424  INTEGER :: ir, ic, nr, nc, i, j, n(SIZE(d,2)), nttl, id, p
     1425  INTEGER, ALLOCATABLE :: col_len(:), trimmed_len(:)
    14141426  nr = SIZE(d, DIM=1); nc = SIZE(d, DIM=2)                 !--- Dimensions of the table
     1427  ALLOCATE(col_len(nc))
     1428  ALLOCATE(trimmed_len(nr))
    14151429  nttl = 0; IF(PRESENT(nTitle))  nttl = nTitle
    1416   n = [(MAXVAL([(LEN_TRIM(d(i,j)), i=1, nr)], DIM=1), j=1, nc)] + 2*nm
     1430  DO j = 1, nc
     1431     DO i = 1, nr
     1432        trimmed_len(i) = LEN_TRIM(d(i, j))
     1433     END DO
     1434     col_len(j) = MAXVAL(trimmed_len) + 2 * nm
     1435  END DO
     1436  n = col_len
    14171437  ALLOCATE(m(nr+1))                                        !--- Allocate the vector (+1 for header line)
    14181438  i = 1
Note: See TracChangeset for help on using the changeset viewer.