diff --git a/elmerice/Solvers/Adjoint/Adjoint_LinearSolver.F90 b/elmerice/Solvers/Adjoint/Adjoint_LinearSolver.F90 index db6da18ede..0ae06f8186 100644 --- a/elmerice/Solvers/Adjoint/Adjoint_LinearSolver.F90 +++ b/elmerice/Solvers/Adjoint/Adjoint_LinearSolver.F90 @@ -63,14 +63,14 @@ SUBROUTINE Adjoint_LinearSolver( Model,Solver,dt,TransientSimulation ) USE DefUtils IMPLICIT NONE !------------------------------------------------------------------------------ - TYPE(Solver_t) :: Solver + TYPE(Solver_t), TARGET :: Solver TYPE(Model_t) :: Model REAL(KIND=dp) :: dt LOGICAL :: TransientSimulation !------------------------------------------------------------------------------ ! Local variables !------------------------------------------------------------------------------ - TYPE(Solver_t),Pointer :: DSolver ! Pointer to the Direct Solver + TYPE(Solver_t),POINTER :: DSolver, PSolver ! Pointer to the Direct Solver and to adjoint solver TYPE(Variable_t), POINTER :: Sol ! Solution Variable INTEGER :: DOFs @@ -253,7 +253,8 @@ SUBROUTINE Adjoint_LinearSolver( Model,Solver,dt,TransientSimulation ) End Do EndDo - CALL FinishAssembly( Solver, ForceVector ) + PSolver => Solver + CALL FinishAssembly( PSolver, ForceVector ) Unorm = DefaultSolve() diff --git a/elmerice/Solvers/AdjointSSA/AdjointSSA_AdjointSolver.F90 b/elmerice/Solvers/AdjointSSA/AdjointSSA_AdjointSolver.F90 index a05cf36267..88732616bf 100644 --- a/elmerice/Solvers/AdjointSSA/AdjointSSA_AdjointSolver.F90 +++ b/elmerice/Solvers/AdjointSSA/AdjointSSA_AdjointSolver.F90 @@ -63,14 +63,14 @@ SUBROUTINE AdjointSSA_AdjointSolver( Model,Solver,dt,TransientSimulation ) USE DefUtils IMPLICIT NONE !------------------------------------------------------------------------------ - TYPE(Solver_t) :: Solver + TYPE(Solver_t), TARGET :: Solver TYPE(Model_t) :: Model REAL(KIND=dp) :: dt LOGICAL :: TransientSimulation !------------------------------------------------------------------------------ ! Local variables !------------------------------------------------------------------------------ - TYPE(Solver_t),Pointer :: NSSolver + TYPE(Solver_t),POINTER :: NSSolver, PSolver TYPE(Matrix_t),POINTER :: InitMat,TransMat,StiffMatrix TYPE(ValueList_t),POINTER :: BC,BF,SolverParams TYPE(ValueListEntry_t),POINTER :: NormalTangential,NormalTangentialC @@ -258,7 +258,8 @@ SUBROUTINE AdjointSSA_AdjointSolver( Model,Solver,dt,TransientSimulation ) End Do EndDo - CALL FinishAssembly( Solver, ForceVector ) + PSolver => Solver + CALL FinishAssembly( PSolver, ForceVector ) Unorm = DefaultSolve() diff --git a/elmerice/Solvers/AdjointSolver.F90 b/elmerice/Solvers/AdjointSolver.F90 index 6c60ce57c9..ff746e0818 100644 --- a/elmerice/Solvers/AdjointSolver.F90 +++ b/elmerice/Solvers/AdjointSolver.F90 @@ -56,7 +56,7 @@ SUBROUTINE AdjointSolver( Model,Solver,dt,TransientSimulation ) IMPLICIT NONE !------------------------------------------------------------------------------ - TYPE(Solver_t) :: Solver + TYPE(Solver_t), TARGET :: Solver TYPE(Model_t) :: Model @@ -65,7 +65,7 @@ SUBROUTINE AdjointSolver( Model,Solver,dt,TransientSimulation ) !------------------------------------------------------------------------------ ! Local variables !------------------------------------------------------------------------------ - TYPE(Solver_t),Pointer :: NSSolver + TYPE(Solver_t),POINTER :: NSSolver, PSolver TYPE(Matrix_t),POINTER :: InitMat,TransMat,StiffMatrix TYPE(ValueList_t),POINTER :: BC,SolverParams TYPE(Nodes_t) :: ElementNodes @@ -237,7 +237,8 @@ SUBROUTINE AdjointSolver( Model,Solver,dt,TransientSimulation ) End Do EndDo - CALL FinishAssembly( Solver, ForceVector ) + PSolver => Solver + CALL FinishAssembly( PSolver, ForceVector ) CALL DefaultDirichletBCs() diff --git a/fem/src/SolverUtils.F90 b/fem/src/SolverUtils.F90 index 74af478de8..6afea712f6 100644 --- a/fem/src/SolverUtils.F90 +++ b/fem/src/SolverUtils.F90 @@ -9998,7 +9998,7 @@ END SUBROUTINE InitializeTimestep !------------------------------------------------------------------------------ SUBROUTINE FinishAssembly( Solver, ForceVector ) !------------------------------------------------------------------------------ - TYPE(Solver_t) :: Solver + TYPE(Solver_t),POINTER :: Solver REAL(KIND=dp) :: ForceVector(:) INTEGER :: Order LOGICAL :: Found diff --git a/fem/src/modules/ArteryOutlet.F90 b/fem/src/modules/ArteryOutlet.F90 index b5d0f480e5..7ee9d6ae18 100644 --- a/fem/src/modules/ArteryOutlet.F90 +++ b/fem/src/modules/ArteryOutlet.F90 @@ -51,10 +51,10 @@ SUBROUTINE OutletCompute_Init( Model,Solver,dt,TransientSimulation ) IMPLICIT NONE !------------------------------------------------------------------------------ TYPE(Model_t) :: Model - TYPE(Solver_t) :: Solver + TYPE(Solver_t),TARGET :: Solver REAL(KIND=dp) :: dt LOGICAL :: TransientSimulation -!------------------------------------------------------------------------------ + !------------------------------------------------------------------------------ TYPE(ValueList_t), POINTER :: Params TYPE(Mesh_t), POINTER :: Mesh, PMesh @@ -100,7 +100,7 @@ SUBROUTINE OutletCompute( Model,Solver,dt,TransientSimulation ) IMPLICIT NONE !------------------------------------------------------------------------------ TYPE(Model_t) :: Model - TYPE(Solver_t):: Solver + TYPE(Solver_t), TARGET :: Solver REAL(KIND=dp) :: dt LOGICAL :: TransientSimulation @@ -114,7 +114,7 @@ SUBROUTINE OutletCompute( Model,Solver,dt,TransientSimulation ) TYPE(ValueList_t), POINTER :: Material TYPE(Variable_t), POINTER :: LVar, FlowSol TYPE(Mesh_t), POINTER :: Mesh1D, Mesh3D - TYPE(Solver_t), POINTER :: FlowSolver + TYPE(Solver_t), POINTER :: FlowSolver, PSolver INTEGER :: t, k,n,m,ie,bf_id,mat_id,prev_mat_id,istat,LocalNodes,i,j, nonliniter, l, & bc, joinnode, Connections, SolidConnections, fsstep, fsstepmax, NonlinearIter, & @@ -158,7 +158,10 @@ SUBROUTINE OutletCompute( Model,Solver,dt,TransientSimulation ) CALL Info('OutletCompute','Starting') Mesh1D => Solver % Mesh - + + PSolver => Solver +! IF (.NOT.ASSOCIATED(PSolver)) CALL FATAL('OutletCompute','Solver pointer not associated') + Wnodal => Solver % Variable % Values LocalNodes = SIZE( Wnodal ) @@ -546,7 +549,7 @@ SUBROUTINE OutletCompute( Model,Solver,dt,TransientSimulation ) ! Dirichlet boundary settings. Actually no need to call it except for ! transient simulations. !------------------------------------------------------------------------------ - CALL FinishAssembly( Solver,ForceVector ) + CALL FinishAssembly( PSolver, ForceVector ) FirstTime = .FALSE. diff --git a/fem/src/modules/DCRComplexSolve.F90 b/fem/src/modules/DCRComplexSolve.F90 index a3ff918ca7..cc7f31a3fa 100644 --- a/fem/src/modules/DCRComplexSolve.F90 +++ b/fem/src/modules/DCRComplexSolve.F90 @@ -49,7 +49,7 @@ SUBROUTINE DCRComplexSolver( Model,Solver,dt,TransientSimulation ) IMPLICIT NONE !------------------------------------------------------------------------------ - TYPE(Solver_t) :: Solver + TYPE(Solver_t),TARGET :: Solver TYPE(Model_t) :: Model REAL(KIND=dp) :: dt @@ -60,7 +60,8 @@ SUBROUTINE DCRComplexSolver( Model,Solver,dt,TransientSimulation ) TYPE(Matrix_t),POINTER :: StiffMatrix TYPE(Nodes_t) :: ElementNodes TYPE(Element_t),POINTER :: CurrentElement - + TYPE(Solver_t),POINTER :: PSolver + INTEGER, POINTER :: NodeIndexes(:) LOGICAL :: AllocationsDone = .FALSE., Bubbles, GotIt, notScalar = .TRUE., stat @@ -366,8 +367,8 @@ END FUNCTION DCRInsideResidual !------------------------------------------------------------------------------ END DO !------------------------------------------------------------------------------ - - CALL FinishAssembly( Solver, ForceVector ) + PSolver => Solver + CALL FinishAssembly( PSolver, ForceVector ) ! ! Dirichlet BCs: ! -------------- diff --git a/fem/src/modules/PhaseChangeSolve.F90 b/fem/src/modules/PhaseChangeSolve.F90 index 4abd3c670e..1b31fb4966 100644 --- a/fem/src/modules/PhaseChangeSolve.F90 +++ b/fem/src/modules/PhaseChangeSolve.F90 @@ -394,7 +394,7 @@ SUBROUTINE PhaseChangeSolve( Model,Solver,dt,TransientSimulation ) ForceVector, LocalForceVector, n, 1, SurfPerm(NodeIndexes) ) END DO - CALL FinishAssembly( Solver, ForceVector ) + CALL FinishAssembly( PSolver, ForceVector ) ! No Dirihtlet conditions here since ! One should not really try to force the phase change at some point, @@ -465,7 +465,7 @@ SUBROUTINE PhaseChangeSolve( Model,Solver,dt,TransientSimulation ) ForceVector, LocalForceVector, n, 1, SurfPerm(NodeIndexes) ) END DO - CALL FinishAssembly( Solver, ForceVector ) + CALL FinishAssembly( PSolver, ForceVector ) CALL SolveSystem( StiffMatrix, ParMatrix, ForceVector, Surface, Norm, 1, Solver ) END IF diff --git a/fem/src/modules/TransportEquation.F90 b/fem/src/modules/TransportEquation.F90 index fac7c0236c..606dae7965 100644 --- a/fem/src/modules/TransportEquation.F90 +++ b/fem/src/modules/TransportEquation.F90 @@ -75,6 +75,7 @@ SUBROUTINE TransportEquationSolver( Model, Solver, dt, TransientSimulation ) TYPE(Variable_t), POINTER :: FlowSol, Udot0Var TYPE(VariablePtr_t), POINTER :: U0Var(:) TYPE(ValueList_t), POINTER :: Material + TYPE(Solver_t), POINTER :: PSolver INTEGER :: i,j,k,p,n,t,body_id,bf_id,istat,LocalNodes,& AdvectionVariableComponents, VelocityComponents @@ -417,7 +418,8 @@ SUBROUTINE TransportEquationSolver( Model, Solver, dt, TransientSimulation ) ! Dirichlet boundary settings. Actually no need to call it except for ! transient simulations. !------------------------------------------------------------------------------ - CALL FinishAssembly( Solver, ForceVector ) + PSolver => Solver + CALL FinishAssembly( PSolver, ForceVector ) !------------------------------------------------------------------------------ ! Dirichlet boundary conditions