diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 443cc90c89b8e2334d857c58da2debd59bc87cab..ab1df4010e98ed77652cbd31491cc93db90531ac 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -275,12 +275,13 @@ CHARACTER(LEN=*), INTENT(IN) :: HMNHNAME !Name of the field to find INTEGER, INTENT(OUT):: KID !Index of the field INTEGER, INTENT(OUT):: KRESP !Return-code ! -INTEGER :: JI +INTEGER :: IDX,JI +INTEGER :: ICOUNT +INTEGER,SAVE :: IFIRSTGUESS=1 !Store first field to test ! -!PW: TODO: to optimize -!Ideas : +!PW: TODO: possible optimizations: ! * Classement alphanumerique + index vers 1er champ commencant par caractere -! * Classement dans l'ordre des ecritures + stockage dernier hit + reboucler depuis le debut +! * Classement dans l'ordre des ecritures + stockage dernier hit + reboucler depuis le debut => DONE ! IF (.NOT.LFIELDLIST_ISINIT) THEN PRINT *,'FATAL: FIND_FIELD_ID_FROM_MNHNAME: TFIELDLIST not yet initialized' @@ -289,19 +290,30 @@ END IF ! KID = 0 KRESP = 0 -! -DO JI = 1,MAXFIELDS - IF (TRIM(TFIELDLIST(JI)%CMNHNAME)=='') EXIT !Last entry - IF (TRIM(TFIELDLIST(JI)%CMNHNAME)==TRIM(HMNHNAME)) THEN - KID = JI +ICOUNT = 0 +IDX = IFIRSTGUESS +! +DO + ICOUNT = ICOUNT + 1 + IF (TRIM(TFIELDLIST(IDX)%CMNHNAME)=='') THEN !Last entry + IDX = 1 + ELSE IF (TRIM(TFIELDLIST(IDX)%CMNHNAME)==TRIM(HMNHNAME)) THEN + KID = IDX EXIT + ELSE + IDX = IDX + 1 + IF (IDX>MAXFIELDS) IDX = 1 END IF + IF (IDX == IFIRSTGUESS) EXIT !All entries have been tested END DO ! IF (KID==0) THEN !Field not found KRESP = -1 PRINT *,'WARNING: FIND_FIELD_ID_FROM_MNHNAME: field ',TRIM(HMNHNAME),' not known' +ELSE + IFIRSTGUESS = IDX+1 + IF (IFIRSTGUESS>MAXFIELDS) IFIRSTGUESS = 1 END IF ! END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME