2011-04-07 12:50:28 +05:30
! Copyright 2011 Max-Planck-Institut für Eisenforschung GmbH
2011-04-04 19:39:54 +05:30
!
! This file is part of DAMASK,
2011-04-07 12:50:28 +05:30
! the Düsseldorf Advanced MAterial Simulation Kit.
2011-04-04 19:39:54 +05:30
!
! DAMASK is free software: you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation, either version 3 of the License, or
! (at your option) any later version.
!
! DAMASK is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with DAMASK. If not, see <http://www.gnu.org/licenses/>.
!
!##############################################################
2010-09-23 13:35:50 +05:30
!* $Id$
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
!********************************************************************
2011-05-11 22:31:03 +05:30
MODULE DAMASK_interface
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
use prec , only : pInt , pReal
2011-11-04 01:02:11 +05:30
implicit none
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
character ( len = 64 ) , parameter :: FEsolver = 'Spectral'
2011-01-07 18:26:45 +05:30
character ( len = 5 ) , parameter :: InputFileExtension = '.geom'
character ( len = 4 ) , parameter :: LogFileExtension = '.log' !until now, we don't have a log file. But IO.f90 requires it
2011-11-04 01:02:11 +05:30
character ( len = 1024 ) :: geometryParameter , loadcaseParameter
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
CONTAINS
!********************************************************************
! initialize interface module
!
!********************************************************************
2011-05-11 22:31:03 +05:30
subroutine DAMASK_interface_init ( )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
implicit none
2011-11-04 01:02:11 +05:30
character ( len = 1024 ) commandLine
2011-11-07 23:55:10 +05:30
integer ( pInt ) :: i , start = 0_pInt , length = 0_pInt
2011-11-04 01:02:11 +05:30
2011-10-18 14:55:17 +05:30
call get_command ( commandLine )
2011-11-04 01:02:11 +05:30
2011-10-18 14:55:17 +05:30
do i = 1 , len ( commandLine ) ! remove capitals
if ( 64 < iachar ( commandLine ( i : i ) ) . and . iachar ( commandLine ( i : i ) ) < 91 ) commandLine ( i : i ) = achar ( iachar ( commandLine ( i : i ) ) + 32 )
enddo
start = index ( commandLine , '-g' , . true . ) + 3_pInt ! search for '-g' and jump to first char of geometry
if ( index ( commandLine , '--geom' , . true . ) > 0 ) then ! if '--geom' is found, use that (contains '-g')
start = index ( commandLine , '--geom' , . true . ) + 7_pInt
endif
if ( index ( commandLine , '--geometry' , . true . ) > 0 ) then ! again, now searching for --geometry'
start = index ( commandLine , '--geometry' , . true . ) + 11_pInt
endif
2011-11-07 16:34:57 +05:30
if ( start == 3_pInt ) stop 'No Geometry specified, terminating DAMASK' ! Could not find valid keyword (position 0 +3). Functions from IO.f90 are not available
2011-10-18 14:55:17 +05:30
length = index ( commandLine ( start : len ( commandLine ) ) , ' ' , . false . )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
2011-10-18 14:55:17 +05:30
call get_command ( commandLine ) ! may contain capitals
2011-11-04 01:02:11 +05:30
geometryParameter = '' ! should be empty
geometryParameter ( 1 : length ) = commandLine ( start : start + length )
2011-10-18 14:55:17 +05:30
2011-11-04 01:02:11 +05:30
do i = 1 , len ( commandLine ) ! remove capitals
if ( 64 < iachar ( commandLine ( i : i ) ) . and . iachar ( commandLine ( i : i ) ) < 91 ) commandLine ( i : i ) = achar ( iachar ( commandLine ( i : i ) ) + 32 )
enddo
2011-11-07 16:34:57 +05:30
start = index ( commandLine , '-l' , . true . ) + 3_pInt ! search for '-l' and jump forward iby 3 to given name
2011-11-04 01:02:11 +05:30
if ( index ( commandLine , '--load' , . true . ) > 0 ) then ! if '--load' is found, use that (contains '-l')
start = index ( commandLine , '--load' , . true . ) + 7_pInt
endif
if ( index ( commandLine , '--loadcase' , . true . ) > 0 ) then ! again, now searching for --loadcase'
start = index ( commandLine , '--loadcase' , . true . ) + 11_pInt
endif
2011-11-07 16:34:57 +05:30
if ( start == 3_pInt ) stop 'No Loadcase specified, terminating DAMASK' ! Could not find valid keyword (position 0 +3). Functions from IO.f90 are not available
2011-11-04 01:02:11 +05:30
length = index ( commandLine ( start : len ( commandLine ) ) , ' ' , . false . )
call get_command ( commandLine ) ! may contain capitals
loadcaseParameter = '' ! should be empty
loadcaseParameter ( 1 : length ) = commandLine ( start : start + length )
!$OMP CRITICAL (write2out)
write ( 6 , * )
write ( 6 , * ) '<<<+- DAMASK_spectral_interface init -+>>>'
write ( 6 , * ) '$Id$'
write ( 6 , * )
write ( 6 , * ) 'Geometry Parameter: ' , trim ( geometryParameter )
write ( 6 , * ) 'Loadcase Parameter: ' , trim ( loadcaseParameter )
write ( 6 , * )
!$OMP END CRITICAL (write2out)
endsubroutine DAMASK_interface_init
!********************************************************************
! extract working directory from loadcase file
! possibly based on current working dir
!********************************************************************
function getSolverWorkingDirectoryName ( )
use prec , only : pInt
implicit none
character ( len = 1024 ) cwd , getSolverWorkingDirectoryName
character ( len = * ) , parameter :: pathSep = achar ( 47 ) / / achar ( 92 ) !forwardslash, backwardslash
if ( scan ( geometryParameter , pathSep ) == 1 ) then ! absolute path given as command line argument
getSolverWorkingDirectoryName = geometryParameter ( 1 : scan ( geometryParameter , pathSep , back = . true . ) )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
else
call getcwd ( cwd )
2011-11-04 01:02:11 +05:30
getSolverWorkingDirectoryName = trim ( cwd ) / / '/' / / geometryParameter ( 1 : scan ( geometryParameter , pathSep , back = . true . ) )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
endif
getSolverWorkingDirectoryName = rectifyPath ( getSolverWorkingDirectoryName )
2011-10-18 14:55:17 +05:30
2011-08-01 23:40:55 +05:30
endfunction getSolverWorkingDirectoryName
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
!********************************************************************
2011-01-07 18:26:45 +05:30
! basename of geometry file from command line arguments
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
!
!********************************************************************
function getSolverJobName ( )
implicit none
2011-11-04 01:02:11 +05:30
2011-10-18 14:55:17 +05:30
character ( 1024 ) :: getSolverJobName
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
2011-02-21 20:07:38 +05:30
getSolverJobName = trim ( getModelName ( ) ) / / '_' / / trim ( getLoadCase ( ) )
2011-10-18 14:55:17 +05:30
2011-08-01 23:40:55 +05:30
endfunction getSolverJobName
2011-02-21 20:07:38 +05:30
!********************************************************************
! basename of geometry file from command line arguments
!
!********************************************************************
function getModelName ( )
use prec , only : pInt
implicit none
2011-11-04 01:02:11 +05:30
character ( 1024 ) getModelName , cwd
2011-08-01 15:41:32 +05:30
character ( len = * ) , parameter :: pathSep = achar ( 47 ) / / achar ( 92 ) ! forwardslash, backwardslash
2011-11-04 01:02:11 +05:30
integer ( pInt ) :: posExt , posSep
2011-10-18 14:55:17 +05:30
2011-11-04 01:02:11 +05:30
posExt = scan ( geometryParameter , '.' , back = . true . )
posSep = scan ( geometryParameter , pathSep , back = . true . )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
2011-11-04 01:02:11 +05:30
if ( posExt < = posSep ) posExt = len_trim ( geometryParameter ) + 1 ! no extension present
getModelName = geometryParameter ( 1 : posExt - 1 ) ! path to geometry file (excl. extension)
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
2011-02-21 20:07:38 +05:30
if ( scan ( getModelName , pathSep ) / = 1 ) then ! relative path given as command line argument
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
call getcwd ( cwd )
2011-02-21 20:07:38 +05:30
getModelName = rectifyPath ( trim ( cwd ) / / '/' / / getModelName )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
else
2011-02-21 20:07:38 +05:30
getModelName = rectifyPath ( getModelName )
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
endif
2011-02-21 20:07:38 +05:30
getModelName = makeRelativePath ( getSolverWorkingDirectoryName ( ) , &
getModelName )
2011-10-18 14:55:17 +05:30
2011-08-01 23:40:55 +05:30
endfunction getModelName
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
2011-02-07 20:05:42 +05:30
!********************************************************************
! name of load case file exluding extension
!
!********************************************************************
function getLoadCase ( )
use prec , only : pInt
implicit none
2011-11-04 01:02:11 +05:30
character ( 1024 ) getLoadCase
2011-08-01 15:41:32 +05:30
character ( len = * ) , parameter :: pathSep = achar ( 47 ) / / achar ( 92 ) ! forwardslash, backwardslash
2011-11-04 01:02:11 +05:30
integer ( pInt ) posExt , posSep
2011-02-07 20:05:42 +05:30
2011-11-04 01:02:11 +05:30
posExt = scan ( loadcaseParameter , '.' , back = . true . )
posSep = scan ( loadcaseParameter , pathSep , back = . true . )
2011-02-07 20:05:42 +05:30
2011-11-04 01:02:11 +05:30
if ( posExt < = posSep ) posExt = len_trim ( loadcaseParameter ) + 1 ! no extension present
getLoadCase = loadcaseParameter ( posSep + 1 : posExt - 1 ) ! name of load case file exluding extension
2011-02-07 20:05:42 +05:30
2011-08-01 23:40:55 +05:30
endfunction getLoadCase
2011-02-07 20:05:42 +05:30
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
!********************************************************************
! relative path of loadcase from command line arguments
!
!********************************************************************
function getLoadcaseName ( )
use prec , only : pInt
implicit none
2011-11-04 01:02:11 +05:30
character ( len = 1024 ) getLoadcaseName , cwd
2011-08-01 15:41:32 +05:30
character ( len = * ) , parameter :: pathSep = achar ( 47 ) / / achar ( 92 ) ! forwardslash, backwardslash
2011-11-04 01:02:11 +05:30
integer ( pInt ) posExt , posSep
posExt = 0_pInt
2011-10-18 14:55:17 +05:30
2011-11-04 01:02:11 +05:30
getLoadcaseName = loadcaseParameter
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
posExt = scan ( getLoadcaseName , '.' , back = . true . )
posSep = scan ( getLoadcaseName , pathSep , back = . true . )
if ( posExt < = posSep ) getLoadcaseName = trim ( getLoadcaseName ) / / ( '.load' ) ! no extension present
if ( scan ( getLoadcaseName , pathSep ) / = 1 ) then ! relative path given as command line argument
call getcwd ( cwd )
getLoadcaseName = rectifyPath ( trim ( cwd ) / / '/' / / getLoadcaseName )
else
getLoadcaseName = rectifyPath ( getLoadcaseName )
endif
getLoadcaseName = makeRelativePath ( getSolverWorkingDirectoryName ( ) , &
getLoadcaseName )
2011-08-01 23:40:55 +05:30
endfunction getLoadcaseName
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
!********************************************************************
! remove ../ and ./ from path
!
!********************************************************************
function rectifyPath ( path )
use prec , only : pInt
implicit none
character ( len = * ) path
character ( len = len_trim ( path ) ) rectifyPath
integer ( pInt ) i , j , k , l
!remove ./ from path
l = len_trim ( path )
rectifyPath = path
2011-09-13 21:24:06 +05:30
do i = l , 3 , - 1
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
if ( rectifyPath ( i - 1 : i ) == './' . and . rectifyPath ( i - 2 : i - 2 ) / = '.' ) &
rectifyPath ( i - 1 : l ) = rectifyPath ( i + 1 : l ) / / ' '
enddo
!remove ../ and corresponding directory from rectifyPath
l = len_trim ( rectifyPath )
i = index ( rectifyPath ( i : l ) , '../' )
j = 0_pInt
do while ( i > j )
j = scan ( rectifyPath ( : i - 2 ) , '/' , back = . true . )
rectifyPath ( j + 1 : l ) = rectifyPath ( i + 3 : l ) / / repeat ( ' ' , 2 + i - j )
i = j + index ( rectifyPath ( j + 1 : l ) , '../' )
enddo
if ( len_trim ( rectifyPath ) == 0 ) rectifyPath = '/'
2011-08-01 23:40:55 +05:30
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
endfunction rectifyPath
!********************************************************************
! relative path from absolute a to absolute b
!
!********************************************************************
function makeRelativePath ( a , b )
use prec , only : pInt
implicit none
character ( len = * ) :: a , b
character ( len = 1024 ) :: makeRelativePath
integer ( pInt ) i , posLastCommonSlash , remainingSlashes
posLastCommonSlash = 0
remainingSlashes = 0
do i = 1 , min ( 1024 , len_trim ( a ) , len_trim ( b ) )
if ( a ( i : i ) / = b ( i : i ) ) exit
if ( a ( i : i ) == '/' ) posLastCommonSlash = i
enddo
do i = posLastCommonSlash + 1 , len_trim ( a )
if ( a ( i : i ) == '/' ) remainingSlashes = remainingSlashes + 1
enddo
makeRelativePath = repeat ( '../' , remainingSlashes ) / / b ( posLastCommonSlash + 1 : len_trim ( b ) )
2011-08-01 23:40:55 +05:30
added fftw3 as fft(library will not versioned, should be in a linkable folder) , did some corrections on the code, splitted main file up (allows use of makefile), added makefile
changes on mpie_spectral.f90:
new structure, changed variable names, now using defgrad instead of disgrad, cleaned up, removed augmented Lagrange.
ToDo: Implement Augmented Lagrange again (but then a working version), implement Large strain, think about complex-to real-transform backwards, try to implement MP-support
2010-08-27 22:09:38 +05:30
endfunction makeRelativePath
2011-10-18 14:55:17 +05:30
END MODULE