Skip to content

Commit 265d94f

Browse files
committed
[fix] Fix the restart when there is a combination of different permutation vectors and field that is not everywhere defined. Previously the result could be a wierd union of the two permutations.
1 parent f9b3a01 commit 265d94f

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

fem/src/ModelDescription.F90

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4140,7 +4140,7 @@ SUBROUTINE LoadRestartFile( RestartFile,TimeCount,Mesh,Continuous,EOF,SolverId)
41404140
TYPE(Solver_t), POINTER :: Solver
41414141
TYPE(Variable_t), POINTER :: TimeVar, tStepVar
41424142

4143-
LOGICAL :: RestartFileOpen = .FALSE., Cont, Found, LoadThis, ThisIp, UsePerm
4143+
LOGICAL :: RestartFileOpen = .FALSE., Cont, Found, LoadThis, ThisIp, UsePerm, NewPerm
41444144
LOGICAL, SAVE :: PosFile = .FALSE.
41454145
LOGICAL, SAVE :: Binary, GotPerm, GotIt, CreateVariables
41464146
INTEGER, SAVE, ALLOCATABLE :: FileVariableInfo(:,:)
@@ -4793,7 +4793,9 @@ SUBROUTINE LoadRestartFile( RestartFile,TimeCount,Mesh,Continuous,EOF,SolverId)
47934793
END IF
47944794
END IF
47954795

4796-
4796+
NewPerm = .FALSE.
4797+
IF(UsePerm) NewPerm = ALL(Var % Perm == 0)
4798+
47974799
DO j=1, n
47984800
CALL GetValue( RestartUnit, Perm, UsePerm, j, k, Val )
47994801

@@ -4804,11 +4806,11 @@ SUBROUTINE LoadRestartFile( RestartFile,TimeCount,Mesh,Continuous,EOF,SolverId)
48044806

48054807
IF ( .NOT. UsePerm ) THEN
48064808
Var % Values(k) = Val
4807-
ELSE IF ( Var % Perm(j) > 0 ) THEN
4808-
Var % Values(Var % Perm(j)) = Val
4809-
ELSE
4809+
ELSE IF(NewPerm) THEN
48104810
Var % Perm(j) = k
48114811
Var % Values(k) = Val
4812+
ELSE IF ( Var % Perm(j) > 0 ) THEN
4813+
Var % Values(Var % Perm(j)) = Val
48124814
END IF
48134815
END DO
48144816

@@ -4985,7 +4987,11 @@ SUBROUTINE GetValue( RestartUnit, Perm, UsePerm, iNode, iPerm, Val )
49854987
REAL(dp), INTENT(OUT) :: Val
49864988

49874989
IF ( UsePerm ) THEN
4988-
iPerm = Perm(iNode)
4990+
IF(iNode > SIZE(Perm)) THEN
4991+
iPerm = 0
4992+
ELSE
4993+
iPerm = Perm(iNode)
4994+
END IF
49894995
ELSE
49904996
iPerm = iNode
49914997
END IF

0 commit comments

Comments
 (0)