root / src / Expand.f90 @ 4
Historique | Voir | Annoter | Télécharger (1,14 ko)
1 |
SUBROUTINE Expand(List,Idx,Dim) |
---|---|
2 |
|
3 |
! This subroutine expands a list entered in a compacted form |
4 |
! ie 1 -10 => 1 2 3 4 5 6 7 8 9 10 |
5 |
|
6 |
use VarTypes |
7 |
|
8 |
INTEGER(KINT), INTENT(IN) :: Dim |
9 |
INTEGER(KINT), INTENT(INOUT) :: List(Dim) |
10 |
INTEGER(KINT), INTENT(INOUT) :: Idx |
11 |
|
12 |
LOGICAL, ALLOCATABLE :: FTmp(:) ! Dim |
13 |
LOGICAL :: Debug |
14 |
INTEGER(KINT) :: i |
15 |
|
16 |
INTERFACE |
17 |
function valid(string) result (isValid) |
18 |
CHARACTER(*), intent(in) :: string |
19 |
logical :: isValid |
20 |
END function VALID |
21 |
|
22 |
END INTERFACE |
23 |
|
24 |
Debug=valid('Expand') |
25 |
|
26 |
Allocate(FTmp(Dim)) |
27 |
FTmp=.FALSE. |
28 |
|
29 |
Idx=1 |
30 |
|
31 |
DO WHILE (List(Idx).NE.0) |
32 |
If (List(Idx).LT.0) THEN |
33 |
DO I=List(Idx-1),abs(List(Idx)) |
34 |
IF (.NOT.FTmp(I)) THEN |
35 |
FTmp(I)=.TRUE. |
36 |
END IF |
37 |
END DO |
38 |
ELSEIF (.NOT.FTmp(List(Idx))) THEN |
39 |
FTmp(List(Idx))=.TRUE. |
40 |
END IF |
41 |
Idx=Idx+1 |
42 |
END DO |
43 |
|
44 |
if (debug) WRITE(*,*) "DBG Expand, List",List |
45 |
|
46 |
! We convert List into non compacted form |
47 |
Idx=1 |
48 |
DO I=1,Dim |
49 |
If(Ftmp(I)) THEN |
50 |
List(Idx)=I |
51 |
Idx=Idx+1 |
52 |
END IF |
53 |
END DO |
54 |
List(Idx)=0 |
55 |
Idx=Idx-1 |
56 |
|
57 |
DEALLOCATE(Ftmp) |
58 |
|
59 |
END SUBROUTINE Expand |