added functions to read out resolution, dimension and homogenization from mesh file

This commit is contained in:
Martin Diehl 2010-06-25 11:31:05 +00:00
parent eb0cc24a8e
commit c3e51e5330
1 changed files with 76 additions and 16 deletions

View File

@ -250,10 +250,18 @@ program mpie_spectral
character(len=1024) path,line
logical, dimension(9) :: bc_maskvector
integer(pInt), parameter :: maxNchunks = 24 ! 4 identifiers, 18 values for the matrices and 2 scalars
integer(pInt), dimension (1+maxNchunks*2) :: pos
logical gotResolution,gotDimension,gotHomogenization
integer(pInt), parameter :: maxNchunksInput = 24 ! 4 identifiers, 18 values for the matrices and 2 scalars
integer(pInt), dimension (1+maxNchunksInput*2) :: posInput
integer(pInt), parameter :: maxNchunksMesh = 7 ! 4 identifiers, 3 values
integer(pInt), dimension (1+2*maxNchunksMesh) :: posMesh
real(pReal), dimension(9) :: valuevector
integer(pInt) unit, N_l, N_s, N_t, N_n, N, i,j,k,l ! numbers of identifiers, loop variables
integer(pInt) unit, N_l, N_s, N_t, N_n, N, i, j, k, l ! numbers of identifiers, loop variables
integer(pInt) a, b, c, e, homog
real(pReal) x, y, z
if (IargC() < 2) call IO_error(102)
@ -271,9 +279,9 @@ program mpie_spectral
do
read(unit,'(a1024)',END=101) line
if (IO_isBlank(line)) cycle ! skip empty lines
pos = IO_stringPos(line,maxNchunks)
do i = 1,maxNchunks,1
select case (IO_lc(IO_stringValue(line,pos,i)))
posInput = IO_stringPos(line,maxNchunksInput)
do i = 1,maxNchunksInput,1
select case (IO_lc(IO_stringValue(line,posInput,i)))
case('l','velocitygrad')
N_l = N_l+1
case('s','stress')
@ -303,29 +311,29 @@ program mpie_spectral
read(unit,'(a1024)',END=200) line
if (IO_isBlank(line)) cycle ! skip empty lines
j=j+1
pos = IO_stringPos(line,maxNchunks)
do i = 1,maxNchunks,2
select case (IO_lc(IO_stringValue(line,pos,i)))
posInput = IO_stringPos(line,maxNchunksInput)
do i = 1,maxNchunksInput,2
select case (IO_lc(IO_stringValue(line,posInput,i)))
case('l','velocitygrad')
valuevector = 0.0_pReal
forall (k = 1:9) bc_maskvector(k) = IO_stringValue(line,pos,i+k) /= '#'
forall (k = 1:9) bc_maskvector(k) = IO_stringValue(line,posInput,i+k) /= '#'
do k = 1,9
if (bc_maskvector(k)) valuevector(k) = IO_floatValue(line,pos,i+k) ! assign values for the velocity gradient matrix
if (bc_maskvector(k)) valuevector(k) = IO_floatValue(line,posInput,i+k) ! assign values for the velocity gradient matrix
enddo
bc_mask(:,:,1,j) = reshape(bc_maskvector,(/3,3/))
bc_velocityGrad(:,:,j) = reshape(valuevector,(/3,3/))
case('s','stress')
valuevector = 0.0_pReal
forall (k = 1:9) bc_maskvector(k) = IO_stringValue(line,pos,i+k) /= '#'
forall (k = 1:9) bc_maskvector(k) = IO_stringValue(line,posInput,i+k) /= '#'
do k = 1,9
if (bc_maskvector(k)) valuevector(k) = IO_floatValue(line,pos,i+k) ! assign values for the bc_stress matrix
if (bc_maskvector(k)) valuevector(k) = IO_floatValue(line,posInput,i+k) ! assign values for the bc_stress matrix
enddo
bc_mask(:,:,2,j) = reshape(bc_maskvector,(/3,3/))
bc_stress(:,:,j) = reshape(valuevector,(/3,3/))
case('t','time','delta') ! increment time
bc_timeIncrement(j) = IO_floatValue(line,pos,i+1)
bc_timeIncrement(j) = IO_floatValue(line,posInput,i+1)
case('n','incs','increments','steps') ! bc_steps
bc_steps(j) = IO_intValue(line,pos,i+1)
bc_steps(j) = IO_intValue(line,posInput,i+1)
end select
enddo
enddo
@ -346,6 +354,58 @@ program mpie_spectral
print *, ''
enddo
!read header of mesh file
a = 1_pInt
b = 1_pInt
c = 1_pInt
x = 1_pReal
y = 1_pReal
z = 1_pReal
gotResolution = .false.
gotDimension = .false.
gotHomogenization = .false.
path = getSolverJobName()
if (.not. IO_open_file(unit,path)) call IO_error(101,ext_msg=path)
rewind(unit)
do
read(unit,'(a1024)',END=100) line
if (IO_isBlank(line)) cycle ! skip empty lines
posMesh = IO_stringPos(line,maxNchunksMesh)
select case ( IO_lc(IO_StringValue(line,posMesh,1)) )
case ('dimension')
gotDimension = .true.
do i = 2,6,2
select case (IO_lc(IO_stringValue(line,posMesh,i)))
case('x')
x = IO_floatValue(line,posMesh,i+1)
case('y')
y = IO_floatValue(line,posMesh,i+1)
case('z')
z = IO_floatValue(line,posMesh,i+1)
end select
enddo
case ('homogenization')
gotHomogenization = .true.
homog = IO_intValue(line,posMesh,2)
case ('resolution')
gotResolution = .true.
do i = 2,6,2
select case (IO_lc(IO_stringValue(line,posMesh,i)))
case('a')
a = 2**IO_intValue(line,posMesh,i+1)
case('b')
b = 2**IO_intValue(line,posMesh,i+1)
case('c')
c = 2**IO_intValue(line,posMesh,i+1)
end select
enddo
end select
if (gotDimension .and. gotHomogenization .and. gotResolution) exit
enddo
temperature = 300.0_pReal
call CPFEM_general(2,math_i3,math_i3,temperature,0.0_pReal,1_pInt,1_pInt,stress,dsde)