Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@

# FEDEM solvers Changelog

## [fedem-8.1.5.2] (2026-03-22)

### :bug: Fixed

- Issue https://github.com/openfedem/fedem-solvers/issues/49 :
Component mode calculation does not work for FE parts
containing explicit MPC-couplings between solid elements.
- Issue https://github.com/openfedem/fedem-solvers/issues/46 :
The linear equation solver does not always abort the simulation when
a singularity is detected, and may instead produce invalid results.

## [fedem-8.1.5] (2026-03-15)

### :rocket: Added
Expand All @@ -24,8 +35,9 @@

### :rocket: Added

The two points defining the state-dependent direction of a point load may
now be specified by triads in addition to points on a superelement.
- Issue https://github.com/openfedem/fedem-gui/issues/128 :
The two points defining the state-dependent direction of a point load
may now be specified by triads in addition to points on a superelement.

## [fedem-8.1.3] (2026-01-20)

Expand Down Expand Up @@ -187,3 +199,6 @@ Only the version tags are updated to align with the FEDEM GUI.
[fedem-8.0.9]: https://github.com/openfedem/fedem-solvers/compare/fedem-8.0.8...fedem-8.0.9
[fedem-8.1.0]: https://github.com/openfedem/fedem-solvers/compare/fedem-8.0.9...fedem-8.1.0
[fmu-8.1.2]: https://github.com/openfedem/fedem-solvers/compare/fedem-8.1.1...fmu-8.1.2
[fedem-8.1.3]: https://github.com/openfedem/fedem-solvers/compare/fmu-8.1.2...fedem-8.1.3
[fedem-8.1.4]: https://github.com/openfedem/fedem-solvers/compare/fedem-8.1.3...fedem-8.1.4
[fedem-8.1.5]: https://github.com/openfedem/fedem-solvers/compare/fedem-8.1.4...fedem-8.1.5
43 changes: 31 additions & 12 deletions src/vpmReducer/rigidModule.f90
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ subroutine MultiPointConstraints (MINEX,MADOF,MPAM,MPMNPC,MMNPC,TXC,TYC,TZC, &
!! Local variables
character(len=128) :: errMsg
integer :: i, j, k, l, n, iel, xel, iam, iceq, ipcur, iwarn
integer :: depDof, refC, ignoredC(3), indC(6), nenod, nW
integer :: depDof, refC, ignoredC(3), indC(7), nenod, nW
logical :: refDofs(6)
real(dp) :: sumW, epsX, X0(3), tolX(3)
integer , allocatable :: mDofs(:)
Expand Down Expand Up @@ -196,9 +196,19 @@ subroutine MultiPointConstraints (MINEX,MADOF,MPAM,MPMNPC,MMNPC,TXC,TYC,TZC, &
!! No properties defined - use default settings
refC = 123456
indC(1:3) = -1
indC(4:6) = 0
indC(4:7) = 0
else if (ierr < 0) then
goto 900
else if (refC < 0) then
!! Explicit constraints
ierr = ierr + 1 ! Index to past the end of the weight array
indC(7) = 0
do i = 7, 2, -1
if (indC(i-1) > 0) then
if (indC(i) == 0) indC(i) = ierr
ierr = indC(i-1)
end if
end do
end if

if (ffa_cmdlinearg_isTrue('useOldWAVGM')) then !TODO: Remove this later
Expand Down Expand Up @@ -238,11 +248,12 @@ subroutine MultiPointConstraints (MINEX,MADOF,MPAM,MPMNPC,MMNPC,TXC,TYC,TZC, &

if (refC >= 0) then
!! Compute constraint coefficients from the WAVGM definitions
call wavgmConstrEqn (xel,i,nenod,indC,txc,tyc,tzc, &
call wavgmConstrEqn (xel,i,nenod,indC(1:6),txc,tyc,tzc, &
& mmnpc(mpmnpc(iel):mpmnpc(iel+1)-1), &
& epsX,tolX,deltaX,work,weight,omega,ipsw,lpu)
else ! Explicit constraints (assuming 6 DOFs per independent node)
call explConstrEqn (6*nenod,indC(i),weight,omega)
else ! Explicit constraints
nw = (indC(i+1) - indC(i)) / nenod
call explConstrEqn (nenod,indC(i),nw,weight,omega)
end if

!! Find global DOF numbers for the independent DOFs
Expand Down Expand Up @@ -337,14 +348,22 @@ subroutine MultiPointConstraints (MINEX,MADOF,MPAM,MPMNPC,MMNPC,TXC,TYC,TZC, &
!> @details Assuming here that all independent nodes have six DOFs.
!> See also FFlSesamReader::readLinearDependencies(), where the
!> weight matrix is populated from the SESAM BLDEP records.
subroutine explConstrEqn (nedof,indC,weight,omega)
integer , intent(in) :: nedof, indC
subroutine explConstrEqn (nenod,i1,nndof,weight,omega)
integer , intent(in) :: nenod, i1, nndof
real(dp), intent(in) :: weight(:)
real(dp), intent(out) :: omega(:)
if (indC > 0 .and. indC+nedof-1 <= size(weight)) then
call DCOPY (nedof,weight(indC),1,omega(1),1)
else ! Assume equal weight on all DOFs
call DCOPY (nedof,1.0_dp,0,omega(1),1)
real(dp), intent(out) :: omega(6,nenod)
if (i1 < 1) then
!! Assume equal weight on all DOFs
call DCOPY (6*nenod,1.0_dp,0,omega(1,1),1)
else if (nndof >= 6) then
call DCOPY (6*nenod,weight(i1),1,omega(1,1),1)
else
k = i1
do j = 1, nenod
omega(1:nndof ,j) = weight(k:k+nndof-1)
omega(1+nndof:6,j) = 0.0_dp
k = k + nndof
end do
end if
end subroutine explConstrEqn

Expand Down
77 changes: 56 additions & 21 deletions src/vpmReducer/saveReducerModule.f90
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@
!! This file is part of FEDEM - https://openfedem.org
!!==============================================================================

!> @file saveReducerModule.f90
!>
!> @brief Save of FE model reduction data to result database files.

!!==============================================================================
!> @brief Module with subroutines for saving of FE model reduction results.
!>
!> @details This module contains a collection of subroutines for writing results
!> data from the FE model reduction process or direct linear solve
!> to the results database.

module saveReducerModule

implicit none
Expand All @@ -19,14 +30,23 @@ module saveReducerModule

contains

subroutine writeModes (chname,sam,partId,modeType,nMode,ev,sv,ierr)
!!============================================================================
!> @brief Administers writing of results database for fedem_reducer.
!>
!> @param[in] chname Name of frs-file receiving the results data
!> @param[in] sam Data for managing system matrix assembly
!> @param[in] partId Base ID of the FE part
!> @param[in] modeType Name of eigenmode item group
!> @param[in] nMode Number of eigenmodes
!> @param[in] ev Eigenvalues
!> @param[in] sv Eigenvectors
!> @param[out] ierr Error flag
!>
!> @author Knut Morten Okstad
!>
!> @date 4 Oct 2002

!!==========================================================================
!! Administer writing of results database for fedem_reducer.
!!
!! Programmer : Knut Morten Okstad
!! date/rev : 4 Oct 2002/1.0
!!==========================================================================
subroutine writeModes (chname,sam,partId,modeType,nMode,ev,sv,ierr)

use KindModule , only : dp, i8, lfnam_p
use RDBModule , only : RDBType, idatd, openRDBfile, closeRDBfile
Expand Down Expand Up @@ -102,14 +122,23 @@ subroutine writeModes (chname,sam,partId,modeType,nMode,ev,sv,ierr)
end subroutine writeModes


subroutine writeDeformation (chname,sam,partId,nlc,mlc,sv,lpu,ierr)
!!============================================================================
!> @brief Administers writing of results database for fedem_partsol.
!>
!> @param[in] chname Name of frs-file receiving the results data
!> @param[in] sam Data for managing system matrix assembly
!> @param[in] partId Base ID of the FE part
!> @param[in] nlc Number of load cases
!> @param[in] mlc Load case identifiers
!> @param[in] sv Displacement vector in equation order
!> @param[in] lpu File unit number for res-file output
!> @param[out] ierr Error flag
!>
!> @author Knut Morten Okstad
!>
!> @date 19 Mar 2018

!!==========================================================================
!! Administer writing of results database for fedem_reducer.
!!
!! Programmer : Knut Morten Okstad
!! date/rev : 19 Mar 2018/1.0
!!==========================================================================
subroutine writeDeformation (chname,sam,partId,nlc,mlc,sv,lpu,ierr)

use KindModule , only : dp, lfnam_p
use SamModule , only : SamType
Expand Down Expand Up @@ -178,14 +207,20 @@ subroutine writeDeformation (chname,sam,partId,nlc,mlc,sv,lpu,ierr)
end subroutine writeDeformation


subroutine writeModesHeader (rdb,nMode,nbit)
!!============================================================================
!> @brief Writes modal result definitions to the temporary header files.
!>
!> @param rdb Results database file for modes output
!> @param[in] nMode Number of mode shapes
!> @param[in] nbit Number of bits per real word
!>
!> @author Knut Morten Okstad
!>
!> @callergraph
!>
!> @date 4 Oct 2002

!!==========================================================================
!! Write modal result definitions to the temporary header files.
!!
!! Programmer : Knut Morten Okstad
!! date/rev : 4 Oct 2002/1.0
!!==========================================================================
subroutine writeModesHeader (rdb,nMode,nbit)

use RDBModule, only : rDBType, idatd, ivard

Expand Down
Loading
Loading