Skip to content

Commit

Permalink
Merge branch 'devel' into glads_gl
Browse files Browse the repository at this point in the history
  • Loading branch information
RupertGladstone committed Feb 18, 2025
2 parents 4190773 + 9ef332c commit 67ce4d8
Show file tree
Hide file tree
Showing 21 changed files with 86 additions and 60 deletions.
1 change: 1 addition & 0 deletions .github/workflows/build-macos-homebrew.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ jobs:
-DCMAKE_Fortran_COMPILER=gfortran \
-DCMAKE_INSTALL_PREFIX="${GITHUB_WORKSPACE}/usr" \
-DBLA_VENDOR="OpenBLAS" \
-DUSE_MACOS_PACKAGE_MANAGER=OFF \
-DCMAKE_PREFIX_PATH="$( [ "${{ matrix.openmp }}" == "with" ] && echo "${HOMEBREW_PREFIX}/opt/libomp;")${HOMEBREW_PREFIX}/opt/openblas;${HOMEBREW_PREFIX}/opt/qt;${HOMEBREW_PREFIX}/opt/qwt" \
${{ matrix.openmp == 'with'
&& '-DWITH_OpenMP=ON \
Expand Down
5 changes: 4 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@ IF(APPLE)
SET(CMAKE_MACOSX_RPATH 1)
ENDIF()

# Allow users to ignore package managers on macOS
option(USE_MACOS_PACKAGE_MANAGER "Search for packages that are installed with Homebrew or MacPorts on macOS" ON)

#shamelessly borrowed from FreeCAD project: https://github.com/FreeCAD/FreeCAD/blob/master/cMake/FreeCAD_Helpers/SetupPython.cmake
# For building on OS X
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND USE_MACOS_PACKAGE_MANAGER)

# If the user doesn't tell us which package manager they're using
if(NOT DEFINED MACPORTS_PREFIX AND NOT DEFINED HOMEBREW_PREFIX)
Expand Down
3 changes: 2 additions & 1 deletion fem/src/Adaptive.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1085,7 +1085,8 @@ FUNCTION MMG_ReMesh( RefMesh, ErrorLimit, HValue, NodalError, &
TYPE(Mesh_t), POINTER :: Mesh, TmpMesh, GatheredMesh
INTEGER :: i,j,k,n,ierr
REAL(KIND=dp) :: Lambda
CHARACTER(LEN=MAX_NAME_LEN) :: MeshCommand, Name, MeshInputFile
CHARACTER(LEN=MAX_NAME_LEN) :: MeshCommand, Name
CHARACTER(LEN=MAX_PATH_LEN) :: MeshInputFile
LOGICAL :: Success, Rebalance, EnforceSerial
REAL(KIND=dp) :: xmax, xmin, ymax, ymin, zmax, zmin, cscale
LOGICAL :: ScaleCoord
Expand Down
3 changes: 2 additions & 1 deletion fem/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ ENDIF()

IF(WITH_AMGX)
TARGET_LINK_LIBRARIES(elmersolver Elmer::MPI_C "${AMGX_LIBRARY};${CUDA_LIBRARIES}")
ENDIF()
TARGET_INCLUDE_DIRECTORIES(elmersolver PRIVATE "${CUDA_INCLUDE_DIRS}")
ENDIF()

IF(WITH_Trilinos)
TARGET_LINK_LIBRARIES(elmersolver Elmer::MPI_CXX "${Trilinos_LIBRARIES};${ML_LIBRARIES};${Epetra_LIBRARIES};${Teuchos_LIBRARIES}")
Expand Down
21 changes: 5 additions & 16 deletions fem/src/CRSMatrix.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3488,7 +3488,7 @@ FUNCTION CRS_IncompleteLU(A,ILUn) RESULT(Status)
ELSE
Values => A % Values
END IF

IF ( .NOT. ASSOCIATED(A % ILUValues) ) THEN

IF ( ILUn == 0 ) THEN
Expand Down Expand Up @@ -4987,10 +4987,7 @@ SUBROUTINE CRS_InspectMatrix( A )
RowMax = MAXVAL( Rows )
RowN = SIZE( Rows )

PRINT *,'Rows:'
PRINT *,'size:',RowN
PRINT *,'min:',RowMin
PRINT *,'max:',RowMax
PRINT *,'Rows (size '//I2S(RowN)//') range:',RowMin, RowMax

IF( RowMin < 1 ) THEN
PRINT *,'Outliers:'
Expand All @@ -5009,12 +5006,8 @@ SUBROUTINE CRS_InspectMatrix( A )
ColMin = MINVAL( Cols )
ColMax = MAXVAL( Cols )
ColN = SIZE( Cols )

PRINT *,'Cols:'
PRINT *,'size:',ColN
PRINT *,'min:',ColMin
PRINT *,'max:',ColMax

PRINT *,'Cols (size '//I2S(ColN)//') range:',ColMin, ColMax

IF( ColMin < 1 ) THEN
PRINT *,'Outliers:'
j = 0
Expand All @@ -5034,11 +5027,7 @@ SUBROUTINE CRS_InspectMatrix( A )
ValN = SIZE( Values )
TotalSum = SUM( Values )

PRINT *,'Values:'
PRINT *,'size:',ValN
PRINT *,'min:',ValMin
PRINT *,'max:',ValMax
PRINT *,'sum:',TotalSum
PRINT *,'Values (size '//I2S(ValN)//') range:',ValMin,ValMax,TotalSum

IF( ColN /= RowMax - 1 ) THEN
PRINT *,'Conflicting max row index :',n,RowMax-1
Expand Down
1 change: 1 addition & 0 deletions fem/src/DefUtils.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3613,6 +3613,7 @@ RECURSIVE SUBROUTINE DefaultStart( USolver )
IF(SIZE(Solver % LocalSystem) < n ) DEALLOCATE(Solver % LocalSystem)
END IF
IF(.NOT. ASSOCIATED(Solver % LocalSystem ) ) THEN
CALL Info('DefaultStart','Allocating local storage of size: '//I2S(n),Level=7)
ALLOCATE( Solver % LocalSystem(n) )
Solver % LocalSystem(1:n) % eind = 0
! If the stiffness matrix is constant the 1st element gives stiffness matrix for all!
Expand Down
2 changes: 1 addition & 1 deletion fem/src/ElementDescription.F90
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ SUBROUTINE InitializeElementDescriptions()

! then the rest of them....
!--------------------------
ALLOCATE(CHARACTER(MAX_STRING_LEN)::elmer_home)
ALLOCATE(CHARACTER(MAX_PATH_LEN)::elmer_home)

tstr = 'ELMER_LIB'
CALL envir( tstr,elmer_home,k )
Expand Down
8 changes: 4 additions & 4 deletions fem/src/ElmerSolver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ SUBROUTINE ElmerSolver(initialize)

TYPE(ParEnv_t), POINTER :: ParallelEnv

CHARACTER(LEN=MAX_NAME_LEN) :: ModelName, eq
CHARACTER(LEN=MAX_STRING_LEN) :: OptionString
CHARACTER(LEN=MAX_PATH_LEN) :: ModelName
CHARACTER(LEN=MAX_STRING_LEN) :: OptionString, eq

CHARACTER(:), ALLOCATABLE :: str, PostFile, ExecCommand, OutputFile, RestartFile, &
OutputName, PostName, When
Expand All @@ -125,7 +125,7 @@ SUBROUTINE ElmerSolver(initialize)
INTEGER :: nr,ni,ExtMethod
INTEGER, ALLOCATABLE :: ipar(:)
REAL(KIND=dp), ALLOCATABLE :: rpar(:)
CHARACTER(LEN=MAX_NAME_LEN) :: MeshDir, MeshName
CHARACTER(LEN=MAX_PATH_LEN) :: MeshDir, MeshName

#ifdef HAVE_TRILINOS
INTERFACE
Expand Down Expand Up @@ -3760,7 +3760,7 @@ SUBROUTINE SaveToPost(CurrentStep)
LOGICAL :: EigAnal = .FALSE., Found
INTEGER :: i, j,k,l,n,q,CurrentStep,nlen,nlen2,timesteps,SavedEigenValues
CHARACTER(LEN=MAX_NAME_LEN) :: Simul, SaveWhich
CHARACTER(MAX_NAME_LEN) :: OutputDirectory
CHARACTER(MAX_PATH_LEN) :: OutputDirectory
TYPE(Solver_t), POINTER :: pSolver

Simul = ListGetString( CurrentModel % Simulation,'Simulation Type' )
Expand Down
6 changes: 3 additions & 3 deletions fem/src/MeshRemeshing.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1634,12 +1634,12 @@ SUBROUTINE RemeshMMG3D(Model, InMesh,OutMesh,EdgePairs,PairCount,&
END IF

IF(SaveMMGMeshes) THEN
WRITE(MeshName, '(A,i0,A)') TRIM(premmg_meshfile), time, '.mesh'
MeshName = TRIM(premmg_meshfile) // I2S(time) // '.mesh'
CALL MMG3D_SaveMesh(mmgMesh,MeshName,LEN(TRIM(MeshName)),ierr)
END IF

IF(SaveMMGSols) THEN
WRITE(SolName, '(A,i0,A)') TRIM(premmg_solfile), time, '.sol'
SolName = TRIM(premmg_solfile) // I2S(time) // '.sol'
CALL MMG3D_SaveSol(mmgMesh, mmgSol,SolName,LEN(TRIM(SolName)),ierr)
END IF

Expand Down Expand Up @@ -3072,7 +3072,7 @@ FUNCTION GET_MMG2D_MESH(MeshNumber,OutputFilename) RESULT(NewMesh)
! Initialize the new mesh stucture
NewMesh => AllocateMesh(nt + nt0,na + na0,np + np0,ParEnv%PEs > 1)
IF (MeshNumber > 0 ) THEN
WRITE(NewMesh % Name,'(A,A,I0)') TRIM(OutPutFileName),'_N',MeshNumber
NewMesh % Name = TRIM(OutPutFileName) // '_N' // I2S(MeshNumber)
ELSE
NewMesh % Name = TRIM(OutPutFileName)
END IF
Expand Down
34 changes: 26 additions & 8 deletions fem/src/ModelDescription.F90
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ FUNCTION GetProcAddr( str, Quiet, Abort ) RESULT( Proc )

INTEGER(KIND=AddrInt) :: Proc
INTEGER :: i,j,slen,q,a
CHARACTER :: Libname(MAX_NAME_LEN),Procname(MAX_NAME_LEN)
CHARACTER :: Libname(MAX_PATH_LEN),Procname(MAX_NAME_LEN)
!------------------------------------------------------------------------------

DO slen=LEN(str),1,-1
Expand Down Expand Up @@ -279,7 +279,7 @@ FUNCTION ReloadInputFile( Model, RewindFile ) RESULT(got)

INTEGER :: pos, posn
INTEGER :: iostat
CHARACTER(LEN=MAX_NAME_LEN) :: MeshDir, MeshName
CHARACTER(LEN=MAX_PATH_LEN) :: MeshDir, MeshName

IF( PRESENT( RewindFile ) ) THEN
IF( RewindFile ) THEN
Expand Down Expand Up @@ -2543,7 +2543,7 @@ FUNCTION LoadModel( ModelName,BoundariesOnly,numprocs,mype,MeshIndex) RESULT( Mo
INTEGER, TARGET :: Def_Dofs(10,6)
REAL(KIND=dp) :: MeshPower
REAL(KIND=dp), POINTER :: h(:)
CHARACTER(LEN=MAX_NAME_LEN) :: MeshDir,MeshName
CHARACTER(LEN=MAX_PATH_LEN) :: MeshDir,MeshName
CHARACTER(:), ALLOCATABLE :: Name, ElementDef, str
LOGICAL :: Parallel
TYPE(valuelist_t), POINTER :: lst
Expand Down Expand Up @@ -3002,12 +3002,21 @@ FUNCTION LoadModel( ModelName,BoundariesOnly,numprocs,mype,MeshIndex) RESULT( Mo
END IF

i = i + 1
k = i
j = 0
DO WHILE( MeshName(i:i) /= CHAR(0) )
i = i + 1
j = j + 1
END DO

IF(ALLOCATED(Model % Meshes % Name)) DEALLOCATE(Model % Meshes % Name)
ALLOCATE(CHARACTER(j)::Model % Meshes % Name)
i = k
k = 1
Model % Meshes % Name = ' '
DO WHILE( MeshName(i:i) /= CHAR(0) )
Model % Meshes % Name(k:k) = MeshName(i:i)
k = k + 1
i = i + 1
k = k + 1
END DO

! Ok, give name also to the parent meshes as they might be saved too
Expand Down Expand Up @@ -3245,9 +3254,18 @@ FUNCTION LoadModel( ModelName,BoundariesOnly,numprocs,mype,MeshIndex) RESULT( Mo

IF ( OneMeshName ) i = 0

k = 1
i = i + 1
Solver % Mesh % Name = ' '
k = i
j = 0
DO WHILE( MeshName(i:i) /= CHAR(0) )
j = j + 1
i = i + 1
END DO

IF(ALLOCATED(Solver % Mesh % Name)) DEALLOCATE(Solver % Mesh % Name)
ALLOCATE(CHARACTER(j)::Solver % Mesh % Name)
i = k
k = 1
DO WHILE( MeshName(i:i) /= CHAR(0) )
Solver % Mesh % Name(k:k) = MeshName(i:i)
k = k + 1
Expand All @@ -3269,7 +3287,7 @@ FUNCTION LoadModel( ModelName,BoundariesOnly,numprocs,mype,MeshIndex) RESULT( Mo
CALL SetCoordinateSystem( Model )

IF ( OutputPath == ' ' ) THEN
DO i=1,MAX_NAME_LEN
DO i=1,MAX_PATH_LEN
IF ( MeshDir(i:i) == CHAR(0) ) EXIT
OutputPath(i:i) = MeshDir(i:i)
END DO
Expand Down
2 changes: 1 addition & 1 deletion fem/src/SOLVER.KEYWORDS
Original file line number Diff line number Diff line change
Expand Up @@ -1087,6 +1087,7 @@ Solver:Logical: 'Convect'
Solver:Logical: 'Convective'
Solver:Logical: 'Coupled Solver'
Solver:Logical: 'Cumulative Displacements'
Solver:Logical: 'Darwin Model'
Solver:Logical: 'Discontinuous Galerkin'
Solver:Logical: 'Displace Mesh'
Solver:Logical: 'Displaced Shape'
Expand Down Expand Up @@ -1734,7 +1735,6 @@ bc:logical: '1d fluid coupling'
bc:logical: '1d structure coupling'
body:logical: 'gap down mask'
body:logical: 'gap up mask'
material:real: 'elecric conductivity'
simulation:integer: 'max output partition'
simulation:integer: 'max output thread'
simulation:logical: 'additive namespaces'
Expand Down
2 changes: 1 addition & 1 deletion fem/src/SaveUtils.F90
Original file line number Diff line number Diff line change
Expand Up @@ -936,7 +936,7 @@ SUBROUTINE SaveGmshOutput( Model,Solver,dt,Transient )

INTEGER, PARAMETER :: LENGTH = 1024
CHARACTER(LEN=LENGTH) :: Txt, FieldName, CompName
CHARACTER(MAX_NAME_LEN) :: OutputFile
CHARACTER(MAX_PATH_LEN) :: OutputFile
CHARACTER(:), ALLOCATABLE :: OutputDirectory
INTEGER :: GmshUnit
CHARACTER(*), PARAMETER :: Caller = 'SaveGmshOutput'
Expand Down
10 changes: 5 additions & 5 deletions fem/src/SolverUtils.F90
Original file line number Diff line number Diff line change
Expand Up @@ -15245,21 +15245,21 @@ END SUBROUTINE AMGXSolve
DO i=1,ParEnV % PEs
IF(i-1==me .OR. .NOT. ParEnv % IsNeighbour(i)) CYCLE

CALL MPI_BSEND(SendTo(i),1,MPI_INTEGER,i-1,1200,ELMER_COMM_WORLD,status, ierr)
CALL MPI_BSEND(SendTo(i),1,MPI_INTEGER,i-1,1200,ELMER_COMM_WORLD, ierr)
IF(Sendto(i)==0) CYCLE

CALL MPI_BSEND(APerm(SendStuff(i) % Rows),SendTo(i),MPI_INTEGER,i-1, &
1201,ELMER_COMM_WORLD,status,ierr )
1201,ELMER_COMM_WORLD,ierr )

CALL MPI_BSEND( SendStuff(i) % Size,SendTo(i),MPI_INTEGER,i-1, &
1202,ELMER_COMM_WORLD,status,ierr )
1202,ELMER_COMM_WORLD,ierr )
DO j=1,SendTo(i)
k = SendStuff(i) % Rows(j)
CALL MPI_BSEND(APerm(A % Cols(A % Rows(k):A % Rows(k+1)-1)),SendStuff(i) % Size(j), &
MPI_INTEGER,i-1, 1203,ELMER_COMM_WORLD, status, ierr )
MPI_INTEGER,i-1, 1203,ELMER_COMM_WORLD, ierr )

CALL MPI_BSEND(A % Values(A % Rows(k):A % Rows(k+1)-1),SendStuff(i) % Size(j), &
MPI_DOUBLE_PRECISION,i-1,1204,ELMER_COMM_WORLD, status, ierr )
MPI_DOUBLE_PRECISION,i-1,1204,ELMER_COMM_WORLD, ierr )
END DO
END DO

Expand Down
4 changes: 2 additions & 2 deletions fem/src/Types.F90
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ MODULE Types
USE Lua
IMPLICIT NONE

INTEGER, PARAMETER :: MAX_NAME_LEN = 128, MAX_STRING_LEN=2048
INTEGER, PARAMETER :: MAX_NAME_LEN = 128, MAX_STRING_LEN=2048, MAX_PATH_LEN=4096
! Parameter for internal blocking
INTEGER, PARAMETER :: VECTOR_BLOCK_LENGTH = 128
! Parameter for internally avoiding calls to BLAS
Expand Down Expand Up @@ -799,7 +799,7 @@ MODULE Types
END TYPE FactorsStore_t

TYPE Mesh_t
CHARACTER(MAX_NAME_LEN) :: Name
CHARACTER(:), ALLOCATABLE :: Name
TYPE(Mesh_t), POINTER :: Next => NULL(), Parent => NULL(), Child => NULL()

TYPE(Projector_t), POINTER :: Projector => NULL()
Expand Down
6 changes: 3 additions & 3 deletions fem/src/modules/Isosurface.F90
Original file line number Diff line number Diff line change
Expand Up @@ -363,14 +363,14 @@ SUBROUTINE IsosurfaceSolver( Model,Solver,dt,Transient )
NoEdges = 0
CALL Info('IsosurfaceSolver','Creating mesh edges',Level=9)
IF (.NOT.ASSOCIATED(Mesh % Edges)) THEN
NoOrigBoundaryElements = Mesh % NumberOfBoundaryElements
Mesh % NumberOfBoundaryElements = 0
IF( dim == 2 ) THEN
NoOrigBoundaryElements = Mesh % NumberOfBoundaryElements
Mesh % NumberOfBoundaryElements = 0
CALL FindMeshEdges2D(Mesh)
Mesh % NumberOfBoundaryElements = NoOrigBoundaryElements
ELSE
CALL FindMeshEdges3D(Mesh)
END IF
Mesh % NumberOfBoundaryElements = NoOrigBoundaryElements
END IF
NoEdges = Mesh % NumberOfEdges

Expand Down
11 changes: 9 additions & 2 deletions fem/src/modules/MagnetoDynamics/WhitneyAVSolver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ SUBROUTINE WhitneyAVSolver( Model,Solver,dt,Transient )
CHARACTER(LEN=MAX_NAME_LEN):: CoilCurrentName
TYPE(Variable_t), POINTER :: CoilCurrentVar
REAL(KIND=dp) :: CurrAmp
LOGICAL :: UseCoilCurrent, ElemCurrent, ElectroDynamics, EigenSystem
LOGICAL :: UseCoilCurrent, ElemCurrent, ElectroDynamics, Darwin, EigenSystem

TYPE(ValueHandle_t), SAVE :: mu_h
TYPE(Solver_t), POINTER :: pSolver
Expand Down Expand Up @@ -395,6 +395,7 @@ SUBROUTINE WhitneyAVSolver( Model,Solver,dt,Transient )
pSolver => Solver

ElectroDynamics = ListGetLogical( SolverParams, 'Electrodynamics model', Found )
Darwin = ListGetLogical( SolverParams, 'Darwin model', Found )
EigenSystem = ListGetLogical( SolverParams, 'Eigen Analysis', Found )

CALL EdgeElementStyle(SolverParams, PiolaVersion, SecondOrder )
Expand Down Expand Up @@ -2154,7 +2155,7 @@ SUBROUTINE LocalMatrix( MASS, DAMP, STIFF, FORCE, JFixFORCE, JFixVec, LOAD, &
! All terms that are added here depend on the electrical conductivity or permittivity,
! so they have an effect on a conductor only.
! --------------------------------------------------------
CONDUCTOR: IF ( SUM(ABS(C)) > AEPS .OR. ElectroDynamics ) THEN
CONDUCTOR: IF ( SUM(ABS(C)) > AEPS .OR. ElectroDynamics .OR. Darwin) THEN
IF ( Transient.OR.EigenSystem ) THEN
DO p=1,np
DO q=1,np
Expand All @@ -2167,6 +2168,9 @@ SUBROUTINE LocalMatrix( MASS, DAMP, STIFF, FORCE, JFixFORCE, JFixVec, LOAD, &
IF(ElectroDynamics) THEN
DAMP(p,q) = DAMP(p,q) + P_ip*SUM( dBasisdx(q,:)*dBasisdx(p,:) )*detJ*IP % s(t)
END IF
IF (Darwin) THEN
MASS(p,q) = MASS(p,q) + P_ip*SUM( dBasisdx(q,:)*dBasisdx(p,:) )*detJ*IP % s(t)
END IF
END DO
DO j=1,nd-np
q = j+np
Expand All @@ -2188,6 +2192,9 @@ SUBROUTINE LocalMatrix( MASS, DAMP, STIFF, FORCE, JFixFORCE, JFixVec, LOAD, &
IF(ElectroDynamics) THEN
DAMP(q,p) = DAMP(q,p) + P_ip*SUM( dBasisdx(p,:)*WBasis(j,:) )*detJ*IP % s(t)
END IF
IF (Darwin) THEN
MASS(q,p) = MASS(q,p) + P_ip*SUM( dBasisdx(p,:)*WBasis(j,:) )*detJ*IP % s(t)
END IF
END DO
END DO

Expand Down
5 changes: 3 additions & 2 deletions fem/src/modules/ShellSolver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -942,7 +942,7 @@ SUBROUTINE ReadSurfaceDirector(MeshName, NumberOfNodes, SolverPars, Director, &
!------------------------------------------------------------------------------
IMPLICIT NONE

CHARACTER(LEN=MAX_NAME_LEN), INTENT(IN) :: MeshName
CHARACTER(LEN=*), INTENT(IN) :: MeshName
INTEGER, INTENT(IN) :: NumberOfNodes
TYPE(ValueList_t), POINTER, INTENT(IN) :: SolverPars
TYPE(Variable_t), POINTER, INTENT(IN) :: Director
Expand All @@ -954,7 +954,8 @@ SUBROUTINE ReadSurfaceDirector(MeshName, NumberOfNodes, SolverPars, Director, &
REAL(KIND=dp), POINTER :: NodalDirector(:,:)
REAL(KIND=dp), POINTER :: DirectorValues(:)
REAL(KIND=dp) :: ElementDirectors(3*MaxBGElementNodes)
CHARACTER(LEN=MAX_NAME_LEN) :: DirectorFile, FormatString
CHARACTER(LEN=MAX_PATH_LEN) :: DirectorFile
CHARACTER(LEN=MAX_NAME_LEN) :: FormatString
!------------------------------------------------------------------------------
ReadNodalDirectors = .FALSE.

Expand Down
Loading

0 comments on commit 67ce4d8

Please sign in to comment.