Index: LMDZ6/trunk/libf/misc/strings_mod.f90
===================================================================
--- LMDZ6/trunk/libf/misc/strings_mod.f90	(revision 5778)
+++ LMDZ6/trunk/libf/misc/strings_mod.f90	(revision 5785)
@@ -827,5 +827,5 @@
   IMPLICIT NONE
   CHARACTER(LEN=*), INTENT(IN) :: v0(:,:), v1(:,:)
-  CHARACTER(LEN=maxlen), ALLOCATABLE :: out(:,:), pk(:), tmp(:,:)
+  CHARACTER(LEN=maxlen), ALLOCATABLE :: out(:,:), pk(:), pk0(:), pk1(:), tmp(:,:)
   INTEGER :: n0, n1, nrow
   n0 = SIZE(v0,1)
@@ -833,9 +833,9 @@
   nrow = MAX(n0, n1)
   IF(n0 == n1) THEN
-     pk = PACK(v0, .TRUE.); pk = [pk, PACK(v1, .TRUE.)]
+     pk0 = PACK(v0, .TRUE.); pk1 = PACK(v1, .TRUE.); pk = [pk0, pk1]
   ELSE IF(n0 /= nrow) THEN
-     ALLOCATE(tmp(nrow,SIZE(v0,2))); tmp(:,:) = ''; tmp(1:n0,:) = v0(:,:); pk = PACK(tmp, .TRUE.); pk = [pk, PACK(v1, .TRUE.)]
+     ALLOCATE(tmp(nrow,SIZE(v0,2))); tmp(:,:) = ''; tmp(1:n0,:) = v0(:,:); pk0 = PACK(tmp, .TRUE.); pk1 = PACK(v1, .TRUE.); pk = [pk0, pk1]
   ELSE
-     ALLOCATE(tmp(nrow,SIZE(v1,2))); tmp(:,:) = ''; tmp(1:n1,:) = v1(:,:); pk = PACK(tmp, .TRUE.); pk = [PACK(v0, .TRUE.), pk]
+     ALLOCATE(tmp(nrow,SIZE(v1,2))); tmp(:,:) = ''; tmp(1:n1,:) = v1(:,:); pk0 = PACK(tmp, .TRUE.); pk1 = PACK(v1, .TRUE.); pk = [pk0, pk1]
   END IF
   out = RESHAPE(pk, SHAPE=[nrow, SIZE(v0, 2) + SIZE(v1, 2)])
@@ -1265,6 +1265,17 @@
   CHARACTER(LEN=*), INTENT(IN) :: t(:,:)
   INTEGER, ALLOCATABLE :: n(:)
-  INTEGER :: i, j
-  n = [(MAXVAL([(LEN_TRIM(t(i,j)), i=1, SIZE(t,1))], DIM=1), j=1, SIZE(t,2))]
+  INTEGER :: i, j, nr, nc
+  INTEGER, ALLOCATABLE :: trimmed_len(:)
+  nr = SIZE(t,1)
+  nc = SIZE(t,2)
+  ALLOCATE(n(nc))
+  DO j = 1, nc
+     ALLOCATE(trimmed_len(nr))
+     DO i = 1, nr
+        trimmed_len(i) = LEN_TRIM(t(i, j))
+     END DO
+     n(j) = MAXVAL(trimmed_len)
+     DEALLOCATE(trimmed_len)
+  END DO
 END FUNCTION tableCellsWidth
 
@@ -1412,7 +1423,16 @@
   CHARACTER(LEN=1) :: sp = '|'                             !--- Separator
   INTEGER :: ir, ic, nr, nc, i, j, n(SIZE(d,2)), nttl, id, p
+  INTEGER, ALLOCATABLE :: col_len(:), trimmed_len(:)
   nr = SIZE(d, DIM=1); nc = SIZE(d, DIM=2)                 !--- Dimensions of the table
+  ALLOCATE(col_len(nc))
+  ALLOCATE(trimmed_len(nr))
   nttl = 0; IF(PRESENT(nTitle))  nttl = nTitle
-  n = [(MAXVAL([(LEN_TRIM(d(i,j)), i=1, nr)], DIM=1), j=1, nc)] + 2*nm
+  DO j = 1, nc
+     DO i = 1, nr
+        trimmed_len(i) = LEN_TRIM(d(i, j))
+     END DO
+     col_len(j) = MAXVAL(trimmed_len) + 2 * nm
+  END DO
+  n = col_len
   ALLOCATE(m(nr+1))                                        !--- Allocate the vector (+1 for header line)
   i = 1
