FEM solver for vacancy diffusion

This commit is contained in:
Pratheek Shanthraj 2014-11-07 20:40:54 +00:00
parent 851a90bc29
commit 9544fe55a6
2 changed files with 19 additions and 4 deletions

View File

@ -398,14 +398,14 @@ FEM_FILES = prec.o DAMASK_interface.o FEZoo.o IO.o libs.o numerics.o debug.
FEsolving.o mesh.o material.o lattice.o \
$(DAMAGE_FILES) $(THERMAL_FILES) $(VACANCY_FILES) $(CONSTITUTIVE_FILES) \
crystallite.o $(HOMOGENIZATION_FILES) CPFEM.o \
FEM_utilities.o FEM_mech.o FEM_thermal.o FEM_damage.o
FEM_utilities.o FEM_mech.o FEM_thermal.o FEM_damage.o FEM_vacancyDiffusion.o
DAMASK_FEM.exe: DAMASK_FEM_driver.o
$(PREFIX) $(LINKERNAME) $(LINK_OPTIONS_$(F90)) $(STANDARD_CHECK_$(F90)) $(OPTIMIZATION_$(MAXOPTI)_$(F90)) \
-o DAMASK_FEM.exe DAMASK_FEM_driver.o \
$(FEM_FILES) $(LIBRARIES) $(LIB_DIRS) $(RUN_PATH) $(SUFFIX)
DAMASK_FEM_driver.o: DAMASK_FEM_driver.f90 FEM_mech.o FEM_thermal.o FEM_damage.o
DAMASK_FEM_driver.o: DAMASK_FEM_driver.f90 FEM_mech.o FEM_thermal.o FEM_damage.o FEM_vacancyDiffusion.o
$(PREFIX) $(COMPILERNAME) $(COMPILE_MAXOPTI) -c ../private/FEM/code/DAMASK_FEM_driver.f90 $(SUFFIX)
FEM_mech.o: FEM_mech.f90 \
@ -417,6 +417,9 @@ FEM_thermal.o: FEM_thermal.f90 \
FEM_damage.o: FEM_damage.f90 \
FEM_utilities.o
FEM_vacancyDiffusion.o: FEM_vacancyDiffusion.f90 \
FEM_utilities.o
FEM_utilities.o: FEM_utilities.f90 \
CPFEM.o

View File

@ -148,7 +148,15 @@ module numerics
&-thermal_pc_type ml &
&-thermal_mg_levels_ksp_type chebyshev &
&-thermal_mg_levels_ksp_chebyshev_estimate_eigenvalues 0,0.1,0,1.1 &
&-thermal_mg_levels_pc_type sor'
&-thermal_mg_levels_pc_type sor &
&-vacancy_snes_type newtonls &
&-vacancy_snes_linesearch_type cp &
&-vacancy_ksp_type fgmres &
&-vacancy_snes_atol 1e-6 &
&-vacancy_pc_type ml &
&-vacancy_mg_levels_ksp_type chebyshev &
&-vacancy_mg_levels_ksp_chebyshev_estimate_eigenvalues 0,0.1,0,1.1 &
&-vacancy_mg_levels_pc_type sor '
integer(pInt), protected, public :: &
itmaxFEM = 25_pInt, & !< maximum number of iterations
itminFEM = 2_pInt, & !< minimum number of iterations
@ -156,7 +164,8 @@ module numerics
integrationOrder = 2_pInt, &
structOrder = 2_pInt, &
thermalOrder = 2_pInt, &
damageOrder = 2_pInt
damageOrder = 2_pInt, &
vacancyDiffusionOrder = 2_pInt
#endif
public :: numerics_init
@ -413,6 +422,8 @@ subroutine numerics_init
thermalorder = IO_intValue(line,positions,2_pInt)
case ('damageorder')
damageorder = IO_intValue(line,positions,2_pInt)
case ('vacancydiffusionorder')
vacancyDiffusionOrder = IO_intValue(line,positions,2_pInt)
case ('petsc_optionsfem')
petsc_optionsFEM = trim(line(positions(4):))
#else
@ -555,6 +566,7 @@ subroutine numerics_init
write(6,'(a24,1x,i8)') ' structOrder: ',structOrder
write(6,'(a24,1x,i8)') ' thermalOrder: ',thermalOrder
write(6,'(a24,1x,i8)') ' damageOrder: ',damageOrder
write(6,'(a24,1x,i8)') ' vacancyDiffusionOrder: ',vacancyDiffusionOrder
write(6,'(a24,1x,es8.1)') ' err_struct_tolAbs: ',err_struct_tolAbs
write(6,'(a24,1x,es8.1)') ' err_struct_tolRel: ',err_struct_tolRel
write(6,'(a24,1x,es8.1)') ' err_thermal_tol: ',err_thermal_tol