From 540428aab7868bec93ed90b5016cfb7aef3823c0 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 19:06:17 +0200 Subject: [PATCH 01/24] works also for ifort --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f488ec37..f6870137f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,7 +148,7 @@ else () set(OPENMP "${OPENMP}") endif () -# syntax check only (mainly for pre-receive hook, works only with gfortran) +# syntax check only (mainly for pre-receive hook) if (CMAKE_BUILD_TYPE STREQUAL "SYNTAXONLY") set (BUILDCMD_POST "${BUILDCMD_POST} -fsyntax-only") endif () From f1b4d81fb41f50f7911e3e1a29b41aa91d61a792 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 19:11:36 +0200 Subject: [PATCH 02/24] simplified --- .../pre/geom_fromVoronoiTessellation.py | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/processing/pre/geom_fromVoronoiTessellation.py b/processing/pre/geom_fromVoronoiTessellation.py index 3ecf7c099..edcbe83dc 100755 --- a/processing/pre/geom_fromVoronoiTessellation.py +++ b/processing/pre/geom_fromVoronoiTessellation.py @@ -21,36 +21,42 @@ def findClosestSeed(seeds, weights, point): return np.argmin(np.sum((np.broadcast_to(point,(len(seeds),3))-seeds)**2,axis=1) - weights) -def Laguerre_tessellation(grid, seeds, grains, size, periodic, weights, cpus): +def Laguerre_tessellation(grid, size, seeds, weights, origin = np.zeros(3), periodic = True, cpus = 2): if periodic: weights_p = np.tile(weights,27).flatten(order='F') # Laguerre weights (1,2,3,1,2,3,...,1,2,3) seeds_p = np.vstack((seeds -np.array([size[0],0.,0.]),seeds, seeds +np.array([size[0],0.,0.]))) seeds_p = np.vstack((seeds_p-np.array([0.,size[1],0.]),seeds_p,seeds_p+np.array([0.,size[1],0.]))) seeds_p = np.vstack((seeds_p-np.array([0.,0.,size[2]]),seeds_p,seeds_p+np.array([0.,0.,size[2]]))) + coords = damask.grid_filters.cell_coord0(grid*3,size*3,-origin-size).reshape(-1,3,order='F') else: weights_p = weights.flatten() seeds_p = seeds + coords = damask.grid_filters.cell_coord0(grid,size,-origin).reshape(-1,3,order='F') if cpus > 1: - default_args = partial(findClosestSeed,seeds_p,weights_p) - pool = multiprocessing.Pool(processes = cpus) # initialize workers - result = pool.map_async(default_args, [point for point in grid]) # evaluate function in parallel + pool = multiprocessing.Pool(processes = cpus) + result = pool.map_async(partial(findClosestSeed,seeds_p,weights_p), [coord for coord in coords]) pool.close() pool.join() - closestSeeds = np.array(result.get()).flatten() + closest_seed = np.array(result.get()) else: - closestSeeds= np.array([findClosestSeed(seeds_p,weights_p,point) for point in grid]) + closest_seed= np.array([findClosestSeed(seeds_p,weights_p,coord) for coord in coords]) - return grains[closestSeeds%seeds.shape[0]] + if periodic: + closest_seed = closest_seed.reshape(grid[2]*3,grid[1]*3,grid[0]*3) + return closest_seed[grid[2]:grid[2]*2,grid[1]:grid[1]*2,grid[0]:grid[0]*2]%seeds.shape[0] + else: + return closest_seed -def Voronoi_tessellation(grid, seeds, grains, size, periodic = True): +def Voronoi_tessellation(grid, size, seeds, origin = np.zeros(3), periodic = True): + coords = damask.grid_filters.cell_coord0(grid,size,-origin).reshape(-1,3,order='F') KDTree = spatial.cKDTree(seeds,boxsize=size) if periodic else spatial.cKDTree(seeds) - devNull,closestSeeds = KDTree.query(grid) + devNull,closest_seed = KDTree.query(coords) - return grains[closestSeeds] + return closest_seed # -------------------------------------------------------------------- @@ -191,13 +197,11 @@ for name in filenames: if options.eulers in table.labels: eulers = table.get(options.eulers) - coords = damask.grid_filters.cell_coord0(grid,size,-origin).reshape(-1,3,order='F') - if options.laguerre: - indices = Laguerre_tessellation(coords,seeds,grains,size,options.periodic, - table.get(options.weight),options.cpus) + indices = grains[Laguerre_tessellation(grid,size,seeds,table.get(options.weight),origin, + options.periodic,options.cpus)] else: - indices = Voronoi_tessellation (coords,seeds,grains,size,options.periodic) + indices = grains[Voronoi_tessellation (grid,size,seeds,origin,options.periodic)] config_header = [] if options.config: From e61c1a027b2d326c595baf5d0de5d41a0936e00b Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 19:12:23 +0200 Subject: [PATCH 03/24] avoid detour via shell --- python/damask/_geom.py | 97 +++++++++++++++++++++++++++++++++++---- python/tests/test_Geom.py | 21 +++++++++ 2 files changed, 109 insertions(+), 9 deletions(-) diff --git a/python/damask/_geom.py b/python/damask/_geom.py index 6bc92e300..797b9dc81 100644 --- a/python/damask/_geom.py +++ b/python/damask/_geom.py @@ -1,11 +1,15 @@ import sys from io import StringIO +import multiprocessing +from functools import partial import numpy as np -from scipy import ndimage +from scipy import ndimage,spatial from . import VTK from . import util +from . import Environment +from . import grid_filters class Geom: @@ -50,7 +54,7 @@ class Geom: def update(self,microstructure=None,size=None,origin=None,rescale=False): """ - Updates microstructure and size. + Update microstructure and size. Parameters ---------- @@ -113,7 +117,7 @@ class Geom: def set_comments(self,comments): """ - Replaces all existing comments. + Replace all existing comments. Parameters ---------- @@ -127,7 +131,7 @@ class Geom: def add_comments(self,comments): """ - Appends comments to existing comments. + Append comments to existing comments. Parameters ---------- @@ -140,7 +144,7 @@ class Geom: def set_microstructure(self,microstructure): """ - Replaces the existing microstructure representation. + Replace the existing microstructure representation. Parameters ---------- @@ -159,7 +163,7 @@ class Geom: def set_size(self,size): """ - Replaces the existing size information. + Replace the existing size information. Parameters ---------- @@ -179,7 +183,7 @@ class Geom: def set_origin(self,origin): """ - Replaces the existing origin information. + Replace the existing origin information. Parameters ---------- @@ -196,7 +200,7 @@ class Geom: def set_homogenization(self,homogenization): """ - Replaces the existing homogenization index. + Replace the existing homogenization index. Parameters ---------- @@ -264,7 +268,7 @@ class Geom: @staticmethod def from_file(fname): """ - Reads a geom file. + Read a geom file. Parameters ---------- @@ -325,6 +329,81 @@ class Geom: return Geom(microstructure.reshape(grid),size,origin,homogenization,comments) + @staticmethod + def _find_closest_seed(seeds, weights, point): + return np.argmin(np.sum((np.broadcast_to(point,(len(seeds),3))-seeds)**2,axis=1) - weights) + @staticmethod + def from_Laguerre_tessellation(grid,size,seeds,weights,periodic=True): + """ + Generate geometry from Laguerre tessellation. + + Parameters + ---------- + grid : numpy.ndarray of shape (3) + number of grid points in x,y,z direction. + size : list or numpy.ndarray of shape (3) + physical size of the microstructure in meter. + seeds : numpy.ndarray of shape (:,3) + position of the seed points in meter. All points need to lay within the box. + weights : numpy.ndarray of shape (seeds.shape[0]) + weights of the seeds. Setting all weights to 1.0 gives a standard Voronoi tessellation. + periodic : Boolean, optional + perform a periodic tessellation. Defaults to True. + + """ + if periodic: + weights_p = np.tile(weights,27).flatten(order='F') # Laguerre weights (1,2,3,1,2,3,...,1,2,3) + seeds_p = np.vstack((seeds -np.array([size[0],0.,0.]),seeds, seeds +np.array([size[0],0.,0.]))) + seeds_p = np.vstack((seeds_p-np.array([0.,size[1],0.]),seeds_p,seeds_p+np.array([0.,size[1],0.]))) + seeds_p = np.vstack((seeds_p-np.array([0.,0.,size[2]]),seeds_p,seeds_p+np.array([0.,0.,size[2]]))) + coords = grid_filters.cell_coord0(grid*3,size*3,-size).reshape(-1,3,order='F') + + else: + weights_p = weights.flatten() + seeds_p = seeds + coords = grid_filters.cell_coord0(grid,size).reshape(-1,3,order='F') + + pool = multiprocessing.Pool(processes = int(Environment().options['DAMASK_NUM_THREADS'])) + result = pool.map_async(partial(Geom._find_closest_seed,seeds_p,weights_p), [coord for coord in coords]) + pool.close() + pool.join() + microstructure = np.array(result.get()) + + if periodic: + microstructure = microstructure.reshape(grid[0]*3,grid[1]*3,grid[2]*3) + microstructure = microstructure[grid[0]:grid[0]*2,grid[1]:grid[1]*2,grid[2]:grid[2]*2]%seeds.shape[0] + else: + microstructure = microstructure.reshape(grid) + + #comments = 'geom.py:from_Laguerre_tessellation v{}'.format(version) + return Geom(microstructure+1,size,homogenization=1) + + + @staticmethod + def from_Voronoi_tessellation(grid,size,seeds,periodic=True): + """ + Generate geometry from Voronoi tessellation. + + Parameters + ---------- + grid : numpy.ndarray of shape (3) + number of grid points in x,y,z direction. + size : list or numpy.ndarray of shape (3) + physical size of the microstructure in meter. + seeds : numpy.ndarray of shape (:,3) + position of the seed points in meter. All points need to lay within the box. + periodic : Boolean, optional + perform a periodic tessellation. Defaults to True. + + """ + coords = grid_filters.cell_coord0(grid,size).reshape(-1,3,order='F') + KDTree = spatial.cKDTree(seeds,boxsize=size) if periodic else spatial.cKDTree(seeds) + devNull,microstructure = KDTree.query(coords) + + #comments = 'geom.py:from_Voronoi_tessellation v{}'.format(version) + return Geom(microstructure.reshape(grid)+1,size,homogenization=1) + + def to_file(self,fname,pack=None): """ Writes a geom file. diff --git a/python/tests/test_Geom.py b/python/tests/test_Geom.py index a6fd57cb6..1b1529e80 100644 --- a/python/tests/test_Geom.py +++ b/python/tests/test_Geom.py @@ -97,3 +97,24 @@ class TestGeom: reference = os.path.join(reference_dir,'scale_{}.geom'.format(tag)) if update: modified.to_file(reference) assert geom_equal(modified,Geom.from_file(reference)) + + @pytest.mark.parametrize('periodic',[(True),(False)]) + def test_tessellation(self,periodic): + grid = np.random.randint(10,20,3) + size = np.random.random(3) + 1.0 + N_seeds= np.random.randint(10,30) + seeds = np.random.rand(N_seeds,3) * np.broadcast_to(size,(N_seeds,3)) + Voronoi = Geom.from_Voronoi_tessellation( grid,size,seeds, periodic) + Laguerre = Geom.from_Laguerre_tessellation(grid,size,seeds,np.ones(N_seeds),periodic) + assert geom_equal(Laguerre,Voronoi) + + def test_Laguerre(self): + grid = np.random.randint(10,20,3) + size = np.random.random(3) + 1.0 + N_seeds= np.random.randint(10,30) + seeds = np.random.rand(N_seeds,3) * np.broadcast_to(size,(N_seeds,3)) + weights= np.full((N_seeds),-np.inf) + ms = np.random.randint(1, N_seeds+1) + weights[ms-1] = np.random.random() + Laguerre = Geom.from_Laguerre_tessellation(grid,size,seeds,weights,np.random.random()>0.5) + assert np.all(Laguerre.microstructure == ms) From 7b7ac294ca5d19f9c427b16a3d4181a7f1b61484 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 19:13:29 +0200 Subject: [PATCH 04/24] volatile seems to make sense here the value can be changed surprisingly --- src/DAMASK_interface.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DAMASK_interface.f90 b/src/DAMASK_interface.f90 index 6d5cbbdb6..04106d040 100644 --- a/src/DAMASK_interface.f90 +++ b/src/DAMASK_interface.f90 @@ -25,7 +25,7 @@ module DAMASK_interface implicit none private - logical, public, protected :: & + logical, volatile, public, protected :: & SIGTERM, & !< termination signal SIGUSR1, & !< 1. user-defined signal SIGUSR2 !< 2. user-defined signal From b6596a0310b97b6477ca956ec0fd144ac2f12928 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 19:17:24 +0200 Subject: [PATCH 05/24] compiler can do the counting --- src/lattice.f90 | 22 +++++++++++----------- src/math.f90 | 16 +++++++--------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/lattice.f90 b/src/lattice.f90 index 31a73d7d6..120c58a15 100644 --- a/src/lattice.f90 +++ b/src/lattice.f90 @@ -18,16 +18,16 @@ module lattice !-------------------------------------------------------------------------------------------------- ! face centered cubic - integer, dimension(2), parameter :: & + integer, dimension(*), parameter :: & FCC_NSLIPSYSTEM = [12, 6] !< # of slip systems per family for fcc - integer, dimension(1), parameter :: & + integer, dimension(*), parameter :: & FCC_NTWINSYSTEM = [12] !< # of twin systems per family for fcc - integer, dimension(1), parameter :: & + integer, dimension(*), parameter :: & FCC_NTRANSSYSTEM = [12] !< # of transformation systems per family for fcc - integer, dimension(1), parameter :: & + integer, dimension(*), parameter :: & FCC_NCLEAVAGESYSTEM = [3] !< # of cleavage systems per family for fcc integer, parameter :: & @@ -109,13 +109,13 @@ module lattice !-------------------------------------------------------------------------------------------------- ! body centered cubic - integer, dimension(2), parameter :: & + integer, dimension(*), parameter :: & BCC_NSLIPSYSTEM = [12, 12] !< # of slip systems per family for bcc - integer, dimension(1), parameter :: & + integer, dimension(*), parameter :: & BCC_NTWINSYSTEM = [12] !< # of twin systems per family for bcc - integer, dimension(1), parameter :: & + integer, dimension(*), parameter :: & BCC_NCLEAVAGESYSTEM = [3] !< # of cleavage systems per family for bcc integer, parameter :: & @@ -187,10 +187,10 @@ module lattice !-------------------------------------------------------------------------------------------------- ! hexagonal - integer, dimension(6), parameter :: & + integer, dimension(*), parameter :: & HEX_NSLIPSYSTEM = [3, 3, 3, 6, 12, 6] !< # of slip systems per family for hex - integer, dimension(4), parameter :: & + integer, dimension(*), parameter :: & HEX_NTWINSYSTEM = [6, 6, 6, 6] !< # of slip systems per family for hex integer, parameter :: & @@ -280,7 +280,7 @@ module lattice !-------------------------------------------------------------------------------------------------- ! body centered tetragonal - integer, dimension(13), parameter :: & + integer, dimension(*), parameter :: & BCT_NSLIPSYSTEM = [2, 2, 2, 4, 2, 4, 2, 2, 4, 8, 4, 8, 8 ] !< # of slip systems per family for bct (Sn) Bieler J. Electr Mater 2009 integer, parameter :: & @@ -362,7 +362,7 @@ module lattice !-------------------------------------------------------------------------------------------------- ! orthorhombic - integer, dimension(3), parameter :: & + integer, dimension(*), parameter :: & ORT_NCLEAVAGESYSTEM = [1, 1, 1] !< # of cleavage systems per family for ortho integer, parameter :: & diff --git a/src/math.f90 b/src/math.f90 index a296dce31..b48037c65 100644 --- a/src/math.f90 +++ b/src/math.f90 @@ -30,14 +30,12 @@ module math 1.0_pReal,0.0_pReal,0.0_pReal, & 0.0_pReal,1.0_pReal,0.0_pReal, & 0.0_pReal,0.0_pReal,1.0_pReal & - ],[3,3]) !< 3x3 Identity + ],shape(math_I3)) !< 3x3 Identity - real(pReal), dimension(6), parameter, private :: & - NRMMANDEL = [& - 1.0_pReal, 1.0_pReal, 1.0_pReal, & - sqrt(2.0_pReal), sqrt(2.0_pReal), sqrt(2.0_pReal) ] !< forward weighting for Mandel notation + real(pReal), dimension(*), parameter, private :: & + NRMMANDEL = [1.0_pReal, 1.0_pReal,1.0_pReal, sqrt(2.0_pReal), sqrt(2.0_pReal), sqrt(2.0_pReal)] !< forward weighting for Mandel notation - real(pReal), dimension(6), parameter, private :: & + real(pReal), dimension(*), parameter, private :: & INVNRMMANDEL = 1.0_pReal/NRMMANDEL !< backward weighting for Mandel notation integer, dimension (2,6), parameter, private :: & @@ -48,7 +46,7 @@ module math 1,2, & 2,3, & 1,3 & - ],[2,6]) !< arrangement in Nye notation. + ],shape(MAPNYE)) !< arrangement in Nye notation. integer, dimension (2,6), parameter, private :: & MAPVOIGT = reshape([& @@ -58,7 +56,7 @@ module math 2,3, & 1,3, & 1,2 & - ],[2,6]) !< arrangement in Voigt notation + ],shape(MAPVOIGT)) !< arrangement in Voigt notation integer, dimension (2,9), parameter, private :: & MAPPLAIN = reshape([& @@ -71,7 +69,7 @@ module math 3,1, & 3,2, & 3,3 & - ],[2,9]) !< arrangement in Plain notation + ],shape(MAPPLAIN)) !< arrangement in Plain notation interface math_eye module procedure math_identity2nd From 08ad9d1d571f26d920c6d3b777a7b0e0150fdb4d Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 19:18:06 +0200 Subject: [PATCH 06/24] was mixed up --- src/grid/spectral_utilities.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/grid/spectral_utilities.f90 b/src/grid/spectral_utilities.f90 index 55375ee32..66426fc9a 100644 --- a/src/grid/spectral_utilities.f90 +++ b/src/grid/spectral_utilities.f90 @@ -1056,14 +1056,15 @@ subroutine utilities_updateCoords(F) call MPI_Irecv(IPfluct_padded(:,:,:,grid3+2),c,MPI_DOUBLE,rank_t,0,PETSC_COMM_WORLD,r,ierr) if(ierr /=0) call IO_error(894, ext_msg='update_IPcoords/MPI_Irecv') call MPI_Wait(r,s,ierr) + if(ierr /=0) call IO_error(894, ext_msg='update_IPcoords/MPI_Wait') ! send top layer to process above - if(ierr /=0) call IO_error(894, ext_msg='update_IPcoords/MPI_Wait') call MPI_Isend(IPfluct_padded(:,:,:,grid3+1),c,MPI_DOUBLE,rank_t,0,PETSC_COMM_WORLD,r,ierr) if(ierr /=0) call IO_error(894, ext_msg='update_IPcoords/MPI_Isend') call MPI_Irecv(IPfluct_padded(:,:,:,1), c,MPI_DOUBLE,rank_b,0,PETSC_COMM_WORLD,r,ierr) if(ierr /=0) call IO_error(894, ext_msg='update_IPcoords/MPI_Irecv') call MPI_Wait(r,s,ierr) + if(ierr /=0) call IO_error(894, ext_msg='update_IPcoords/MPI_Wait') !-------------------------------------------------------------------------------------------------- ! calculate nodal displacements From ba5538516c80737545ae3c87d56a036edd10a3c4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 20:04:24 +0200 Subject: [PATCH 07/24] simplified --- src/math.f90 | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/math.f90 b/src/math.f90 index b48037c65..b0852e8d4 100644 --- a/src/math.f90 +++ b/src/math.f90 @@ -485,21 +485,19 @@ function math_invSym3333(A) real(pReal),dimension(3,3,3,3),intent(in) :: A - integer :: ierr integer, dimension(6) :: ipiv6 real(pReal), dimension(6,6) :: temp66 real(pReal), dimension(6*(64+2)) :: work - logical :: error + integer :: ierr_i, ierr_f external :: & dgetrf, & dgetri temp66 = math_sym3333to66(A) - call dgetrf(6,6,temp66,6,ipiv6,ierr) - error = (ierr /= 0) - call dgetri(6,temp66,6,ipiv6,work,size(work,1),ierr) - error = error .or. (ierr /= 0) - if (error) then + call dgetrf(6,6,temp66,6,ipiv6,ierr_i) + call dgetri(6,temp66,6,ipiv6,work,size(work,1),ierr_f) + + if (ierr_i /= 0 .or. ierr_f /= 0) then call IO_error(400, ext_msg = 'math_invSym3333') else math_invSym3333 = math_66toSym3333(temp66) From 2a37acfe5eaa8ff83d61bac797bd15e36b0f48f3 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 20:04:51 +0200 Subject: [PATCH 08/24] store data where it is needed --- src/DAMASK_marc.f90 | 5 ++++- src/FEsolving.f90 | 10 +--------- src/homogenization.f90 | 2 ++ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/DAMASK_marc.f90 b/src/DAMASK_marc.f90 index fe01301c9..9fd41459b 100644 --- a/src/DAMASK_marc.f90 +++ b/src/DAMASK_marc.f90 @@ -43,6 +43,9 @@ module DAMASK_interface logical, protected, public :: symmetricSolver character(len=*), parameter, public :: INPUTFILEEXTENSION = '.dat' + logical, dimension(:,:), public, allocatable :: & + calcMode !< calculate or collect (ping pong scheme) + public :: & DAMASK_interface_init, & getSolverJobName @@ -102,7 +105,6 @@ function getSolverJobName() character(len=*), parameter :: pathSep = achar(47)//achar(92) ! forward and backward slash integer :: extPos - inputName='' inquire(5, name=inputName) ! determine inputfile extPos = len_trim(inputName)-4 getSolverJobName=inputName(scan(inputName,pathSep,back=.true.)+1:extPos) @@ -179,6 +181,7 @@ subroutine hypela2(d,g,e,de,s,t,dt,ngens,m,nn,kcus,matus,ndi,nshear,disp, & use FEsolving use debug use discretization_marc + use homogenization use CPFEM implicit none diff --git a/src/FEsolving.f90 b/src/FEsolving.f90 index cce95a07e..3fc1482d3 100644 --- a/src/FEsolving.f90 +++ b/src/FEsolving.f90 @@ -4,20 +4,12 @@ !> @brief global variables for flow control !-------------------------------------------------------------------------------------------------- module FEsolving - + implicit none public - logical :: & - terminallyIll = .false. !< at least one material point is terminally ill - integer, dimension(2) :: & FEsolving_execElem, & !< for ping-pong scheme always whole range, otherwise one specific element FEsolving_execIP !< for ping-pong scheme always range to max IP, otherwise one specific IP - -#if defined(Marc4DAMASK) - logical, dimension(:,:), allocatable :: & - calcMode !< do calculation or simply collect when using ping pong scheme -#endif end module FEsolving diff --git a/src/homogenization.f90 b/src/homogenization.f90 index b657dfe3e..a9b173831 100644 --- a/src/homogenization.f90 +++ b/src/homogenization.f90 @@ -29,6 +29,8 @@ module homogenization !-------------------------------------------------------------------------------------------------- ! General variables for the homogenization at a material point + logical, public :: & + terminallyIll = .false. !< at least one material point is terminally ill real(pReal), dimension(:,:,:,:), allocatable, public :: & materialpoint_F0, & !< def grad of IP at start of FE increment materialpoint_F, & !< def grad of IP to be reached at end of FE increment From 9c90aa5acb622a38c5bf587648066819a2d5f8b4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 20:07:09 +0200 Subject: [PATCH 09/24] polishing --- python/tests/test_Geom.py | 2 +- src/constitutive_plastic_nonlocal.f90 | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/python/tests/test_Geom.py b/python/tests/test_Geom.py index 1b1529e80..c098603c6 100644 --- a/python/tests/test_Geom.py +++ b/python/tests/test_Geom.py @@ -28,7 +28,7 @@ def reference_dir(reference_dir_base): class TestGeom: - + def test_update(self,default): modified = copy.deepcopy(default) modified.update( diff --git a/src/constitutive_plastic_nonlocal.f90 b/src/constitutive_plastic_nonlocal.f90 index 58218ac00..f872e3846 100644 --- a/src/constitutive_plastic_nonlocal.f90 +++ b/src/constitutive_plastic_nonlocal.f90 @@ -16,15 +16,15 @@ submodule(constitutive) plastic_nonlocal kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin ! storage order of dislocation types - integer, dimension(8), parameter :: & + integer, dimension(*), parameter :: & sgl = [1,2,3,4,5,6,7,8] !< signed (single) - integer, dimension(5), parameter :: & + integer, dimension(*), parameter :: & edg = [1,2,5,6,9], & !< edge scr = [3,4,7,8,10] !< screw - integer, dimension(4), parameter :: & + integer, dimension(*), parameter :: & mob = [1,2,3,4], & !< mobile imm = [5,6,7,8] !< immobile (blocked) - integer, dimension(2), parameter :: & + integer, dimension(*), parameter :: & dip = [9,10], & !< dipole imm_edg = imm(1:2), & !< immobile edge imm_scr = imm(3:4) !< immobile screw @@ -1611,7 +1611,7 @@ end subroutine stateInit !-------------------------------------------------------------------------------------------------- !> @brief calculates kinetics !-------------------------------------------------------------------------------------------------- -subroutine kinetics(v, dv_dtau, dv_dtauNS, tau, tauNS, tauThreshold, c, Temperature, instance) +pure subroutine kinetics(v, dv_dtau, dv_dtauNS, tau, tauNS, tauThreshold, c, Temperature, instance) integer, intent(in) :: & c, & !< dislocation character (1:edge, 2:screw) @@ -1726,7 +1726,7 @@ end subroutine kinetics !> @brief returns copy of current dislocation densities from state !> @details raw values is rectified !-------------------------------------------------------------------------------------------------- -function getRho(instance,of,ip,el) +pure function getRho(instance,of,ip,el) integer, intent(in) :: instance, of,ip,el real(pReal), dimension(param(instance)%sum_N_sl,10) :: getRho @@ -1751,7 +1751,7 @@ end function getRho !> @brief returns copy of current dislocation densities from state !> @details raw values is rectified !-------------------------------------------------------------------------------------------------- -function getRho0(instance,of,ip,el) +pure function getRho0(instance,of,ip,el) integer, intent(in) :: instance, of,ip,el real(pReal), dimension(param(instance)%sum_N_sl,10) :: getRho0 From e334674a06bc5c8667264634f1d4efaf31c15ecb Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 20:28:54 +0200 Subject: [PATCH 10/24] test bycristal tessellation --- python/tests/test_Geom.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/python/tests/test_Geom.py b/python/tests/test_Geom.py index c098603c6..f988179fa 100644 --- a/python/tests/test_Geom.py +++ b/python/tests/test_Geom.py @@ -99,7 +99,7 @@ class TestGeom: assert geom_equal(modified,Geom.from_file(reference)) @pytest.mark.parametrize('periodic',[(True),(False)]) - def test_tessellation(self,periodic): + def test_tessellation_approaches(self,periodic): grid = np.random.randint(10,20,3) size = np.random.random(3) + 1.0 N_seeds= np.random.randint(10,30) @@ -108,7 +108,7 @@ class TestGeom: Laguerre = Geom.from_Laguerre_tessellation(grid,size,seeds,np.ones(N_seeds),periodic) assert geom_equal(Laguerre,Voronoi) - def test_Laguerre(self): + def test_Laguerre_weights(self): grid = np.random.randint(10,20,3) size = np.random.random(3) + 1.0 N_seeds= np.random.randint(10,30) @@ -118,3 +118,16 @@ class TestGeom: weights[ms-1] = np.random.random() Laguerre = Geom.from_Laguerre_tessellation(grid,size,seeds,weights,np.random.random()>0.5) assert np.all(Laguerre.microstructure == ms) + + @pytest.mark.parametrize('approach',[('Laguerre'),('Voronoi')]) + def test_tessellate_bicrystal(self,approach): + grid = np.random.randint(5,10,3)*2 + size = grid.astype(np.float) + seeds = np.vstack((size*np.array([0.5,0.25,0.5]),size*np.array([0.5,0.75,0.5]))) + microstructure = np.ones(grid) + microstructure[:,grid[1]//2:,:] = 2 + if approach == 'Laguerre': + geom = Geom.from_Laguerre_tessellation(grid,size,seeds,np.ones(2),np.random.random()>0.5) + elif approach == 'Voronoi': + geom = Geom.from_Voronoi_tessellation(grid,size,seeds, np.random.random()>0.5) + assert np.all(geom.microstructure == microstructure) From 11e58bcc2f44b86894de7a6104b147336aa64be3 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 22:37:48 +0200 Subject: [PATCH 11/24] not needed why debugging allocate? --- src/homogenization.f90 | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/homogenization.f90 b/src/homogenization.f90 index a9b173831..50331cbdd 100644 --- a/src/homogenization.f90 +++ b/src/homogenization.f90 @@ -173,22 +173,6 @@ subroutine homogenization_init write(6,'(/,a)') ' <<<+- homogenization init -+>>>'; flush(6) - if (iand(debug_level(debug_homogenization), debug_levelBasic) /= 0) then - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_dPdF: ', shape(materialpoint_dPdF) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_F0: ', shape(materialpoint_F0) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_F: ', shape(materialpoint_F) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subF0: ', shape(materialpoint_subF0) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subF: ', shape(materialpoint_subF) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_P: ', shape(materialpoint_P) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subFrac: ', shape(materialpoint_subFrac) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subStep: ', shape(materialpoint_subStep) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_subdt: ', shape(materialpoint_subdt) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_requested: ', shape(materialpoint_requested) - write(6,'(a32,1x,7(i8,1x))') 'materialpoint_converged: ', shape(materialpoint_converged) - write(6,'(a32,1x,7(i8,1x),/)') 'materialpoint_doneAndHappy: ', shape(materialpoint_doneAndHappy) - endif - flush(6) - if (debug_g < 1 .or. debug_g > homogenization_Ngrains(material_homogenizationAt(debug_e))) & call IO_error(602,ext_msg='constituent', el=debug_e, g=debug_g) From 7eeb5db15ff9c3cdadbd4285eaabb14553417919 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 22:41:47 +0200 Subject: [PATCH 12/24] intention clearer slip/twin/trans happens in untwinned/untransformed volume, shear banding is independent of that --- src/constitutive_plastic_dislotwin.f90 | 34 ++++++++++++-------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/constitutive_plastic_dislotwin.f90 b/src/constitutive_plastic_dislotwin.f90 index d36e08846..21fe555f2 100644 --- a/src/constitutive_plastic_dislotwin.f90 +++ b/src/constitutive_plastic_dislotwin.f90 @@ -568,7 +568,22 @@ module subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of) + ddot_gamma_dtau_slip(i) * prm%P_sl(k,l,i) * prm%P_sl(m,n,i) enddo slipContribution - !ToDo: Why do this before shear banding? + call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_twin,ddot_gamma_dtau_twin) + twinContibution: do i = 1, prm%sum_N_tw + Lp = Lp + dot_gamma_twin(i)*prm%P_tw(1:3,1:3,i) + forall (k=1:3,l=1:3,m=1:3,n=1:3) & + dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & + + ddot_gamma_dtau_twin(i)* prm%P_tw(k,l,i)*prm%P_tw(m,n,i) + enddo twinContibution + + call kinetics_trans(Mp,T,dot_gamma_sl,instance,of,dot_gamma_tr,ddot_gamma_dtau_trans) + transContibution: do i = 1, prm%sum_N_tr + Lp = Lp + dot_gamma_tr(i)*prm%P_tr(1:3,1:3,i) + forall (k=1:3,l=1:3,m=1:3,n=1:3) & + dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & + + ddot_gamma_dtau_trans(i)* prm%P_tr(k,l,i)*prm%P_tr(m,n,i) + enddo transContibution + Lp = Lp * f_unrotated dLp_dMp = dLp_dMp * f_unrotated @@ -598,23 +613,6 @@ module subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dMp,Mp,T,instance,of) endif shearBandingContribution - call kinetics_twin(Mp,T,dot_gamma_sl,instance,of,dot_gamma_twin,ddot_gamma_dtau_twin) - twinContibution: do i = 1, prm%sum_N_tw - Lp = Lp + dot_gamma_twin(i)*prm%P_tw(1:3,1:3,i) * f_unrotated - forall (k=1:3,l=1:3,m=1:3,n=1:3) & - dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & - + ddot_gamma_dtau_twin(i)* prm%P_tw(k,l,i)*prm%P_tw(m,n,i) * f_unrotated - enddo twinContibution - - call kinetics_trans(Mp,T,dot_gamma_sl,instance,of,dot_gamma_tr,ddot_gamma_dtau_trans) - transContibution: do i = 1, prm%sum_N_tr - Lp = Lp + dot_gamma_tr(i)*prm%P_tr(1:3,1:3,i) * f_unrotated - forall (k=1:3,l=1:3,m=1:3,n=1:3) & - dLp_dMp(k,l,m,n) = dLp_dMp(k,l,m,n) & - + ddot_gamma_dtau_trans(i)* prm%P_tr(k,l,i)*prm%P_tr(m,n,i) * f_unrotated - enddo transContibution - - end associate end subroutine plastic_dislotwin_LpAndItsTangent From 396d428af73f4d1fb50c462700ef2deb8cfe5e44 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 23:09:43 +0200 Subject: [PATCH 13/24] bugfix: works for all cuboids, not just cubes --- processing/pre/geom_fromVoronoiTessellation.py | 4 ++-- python/damask/_geom.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/processing/pre/geom_fromVoronoiTessellation.py b/processing/pre/geom_fromVoronoiTessellation.py index edcbe83dc..31e8caa7b 100755 --- a/processing/pre/geom_fromVoronoiTessellation.py +++ b/processing/pre/geom_fromVoronoiTessellation.py @@ -44,8 +44,8 @@ def Laguerre_tessellation(grid, size, seeds, weights, origin = np.zeros(3), peri closest_seed= np.array([findClosestSeed(seeds_p,weights_p,coord) for coord in coords]) if periodic: - closest_seed = closest_seed.reshape(grid[2]*3,grid[1]*3,grid[0]*3) - return closest_seed[grid[2]:grid[2]*2,grid[1]:grid[1]*2,grid[0]:grid[0]*2]%seeds.shape[0] + closest_seed = closest_seed.reshape(grid*3) + return closest_seed[grid[0]:grid[0]*2,grid[1]:grid[1]*2,grid[2]:grid[2]*2]%seeds.shape[0] else: return closest_seed diff --git a/python/damask/_geom.py b/python/damask/_geom.py index 797b9dc81..7288be6cb 100644 --- a/python/damask/_geom.py +++ b/python/damask/_geom.py @@ -370,7 +370,7 @@ class Geom: microstructure = np.array(result.get()) if periodic: - microstructure = microstructure.reshape(grid[0]*3,grid[1]*3,grid[2]*3) + microstructure = microstructure.reshape(grid*3) microstructure = microstructure[grid[0]:grid[0]*2,grid[1]:grid[1]*2,grid[2]:grid[2]*2]%seeds.shape[0] else: microstructure = microstructure.reshape(grid) From bcbdd87870229921eb42b785d8dd367bce6d293d Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 29 Mar 2020 23:50:09 +0200 Subject: [PATCH 14/24] base substitution on original microstructure --- processing/pre/geom_translate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processing/pre/geom_translate.py b/processing/pre/geom_translate.py index 2d4279821..1d08c23dc 100755 --- a/processing/pre/geom_translate.py +++ b/processing/pre/geom_translate.py @@ -52,7 +52,7 @@ for name in filenames: geom = damask.Geom.from_file(StringIO(''.join(sys.stdin.read())) if name is None else name) substituted = geom.get_microstructure() - for old,new in zip(sub[0::2],sub[1::2]): substituted[substituted==old] = new # substitute microstructure indices + for old,new in zip(sub[0::2],sub[1::2]): substituted[geom.microstructure==old] = new # substitute microstructure indices substituted += options.microstructure # constant shift damask.util.croak(geom.update(substituted,origin=geom.get_origin()+options.origin)) From 2f52165e0a604fcdfe7575dd41b41ad5e02bd028 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Mon, 30 Mar 2020 22:14:45 +0200 Subject: [PATCH 15/24] for test coverage reports using pytest --- python/.coveragerc | 2 ++ python/.gitignore | 1 + 2 files changed, 3 insertions(+) create mode 100644 python/.coveragerc diff --git a/python/.coveragerc b/python/.coveragerc new file mode 100644 index 000000000..c712d2595 --- /dev/null +++ b/python/.coveragerc @@ -0,0 +1,2 @@ +[run] +omit = tests/* diff --git a/python/.gitignore b/python/.gitignore index 1cb7eb8a5..7c60e1af8 100644 --- a/python/.gitignore +++ b/python/.gitignore @@ -1,3 +1,4 @@ *.pyc dist damask.egg-info +.coverage From 6ef7410e5a899002ebaf06c6beb2dc8d284c0292 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 31 Mar 2020 11:04:06 +0200 Subject: [PATCH 16/24] testing VTK wrappers --- python/damask/_vtk.py | 2 +- python/tests/test_VTK.py | 48 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 python/tests/test_VTK.py diff --git a/python/damask/_vtk.py b/python/damask/_vtk.py index c11e07b4d..4505a5ebc 100644 --- a/python/damask/_vtk.py +++ b/python/damask/_vtk.py @@ -72,7 +72,7 @@ class VTK: connectivity : numpy.ndarray of np.dtype = int Cell connectivity (0-based), first dimension determines #Cells, second dimension determines #Nodes/Cell. cell_type : str - Name of the vtk.vtkCell subclass. Tested for TRIANGLE, QUAD, and HEXAHEDRON. + Name of the vtk.vtkCell subclass. Tested for TRIANGLE, QUAD, TETRA, and HEXAHEDRON. """ vtk_nodes = vtk.vtkPoints() diff --git a/python/tests/test_VTK.py b/python/tests/test_VTK.py new file mode 100644 index 000000000..ef4090da5 --- /dev/null +++ b/python/tests/test_VTK.py @@ -0,0 +1,48 @@ +import os +import sys + +import pytest +import numpy as np + +from damask import VTK + +@pytest.fixture +def reference_dir(reference_dir_base): + """Directory containing reference results.""" + return os.path.join(reference_dir_base,'Result') + +class TestVTK: + + def test_rectilinearGrid(self,tmp_path): + grid = np.random.randint(5,10,3)*2 + size = np.random.random(3) + 1.0 + origin = np.random.random(3) + v = VTK.from_rectilinearGrid(grid,size,origin) + s = v.__repr__() + v.write(os.path.join(tmp_path,'rectilinearGrid')) + v = VTK.from_file(os.path.join(tmp_path,'rectilinearGrid.vtr')) + assert(s == v.__repr__()) + + def test_polyData(self,tmp_path): + points = np.random.rand(3,100) + v = VTK.from_polyData(points) + s = v.__repr__() + v.write(os.path.join(tmp_path,'polyData')) + v = VTK.from_file(os.path.join(tmp_path,'polyData.vtp')) + assert(s == v.__repr__()) + + @pytest.mark.parametrize('cell_type,n',[ + ('VTK_hexahedron',8), + ('TETRA',4), + ('quad',4), + ('VTK_TRIANGLE',3) + ] + ) + def test_unstructuredGrid(self,tmp_path,cell_type,n): + nodes = np.random.rand(n,3) + connectivity = np.random.choice(np.arange(n),n,False).reshape(-1,n) + v = VTK.from_unstructuredGrid(nodes,connectivity,cell_type) + s = v.__repr__() + v.write(os.path.join(tmp_path,'unstructuredGrid')) + v = VTK.from_file(os.path.join(tmp_path,'unstructuredGrid.vtu')) + assert(s == v.__repr__()) From 01818cba80df0f80745cefcb0d394af9de56700b Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 31 Mar 2020 11:05:25 +0200 Subject: [PATCH 17/24] tuples not needed for single arguments --- python/tests/test_Geom.py | 18 +++++++++--------- python/tests/test_VTK.py | 1 - 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/python/tests/test_Geom.py b/python/tests/test_Geom.py index f988179fa..0f8c10066 100644 --- a/python/tests/test_Geom.py +++ b/python/tests/test_Geom.py @@ -72,7 +72,7 @@ class TestGeom: if update: modified.to_file(reference) assert geom_equal(modified,Geom.from_file(reference)) - @pytest.mark.parametrize('stencil',[(1),(2),(3),(4)]) + @pytest.mark.parametrize('stencil',[1,2,3,4]) def test_clean(self,default,update,reference_dir,stencil): modified = copy.deepcopy(default) modified.clean(stencil) @@ -82,12 +82,12 @@ class TestGeom: assert geom_equal(modified,Geom.from_file(reference)) @pytest.mark.parametrize('grid',[ - ((10,11,10)), - ([10,13,10]), - (np.array((10,10,10))), - (np.array((8, 10,12))), - (np.array((5, 4, 20))), - (np.array((10,20,2)) ) + (10,11,10), + [10,13,10], + np.array((10,10,10)), + np.array((8, 10,12)), + np.array((5, 4, 20)), + np.array((10,20,2)) ] ) def test_scale(self,default,update,reference_dir,grid): @@ -98,7 +98,7 @@ class TestGeom: if update: modified.to_file(reference) assert geom_equal(modified,Geom.from_file(reference)) - @pytest.mark.parametrize('periodic',[(True),(False)]) + @pytest.mark.parametrize('periodic',[True,False]) def test_tessellation_approaches(self,periodic): grid = np.random.randint(10,20,3) size = np.random.random(3) + 1.0 @@ -119,7 +119,7 @@ class TestGeom: Laguerre = Geom.from_Laguerre_tessellation(grid,size,seeds,weights,np.random.random()>0.5) assert np.all(Laguerre.microstructure == ms) - @pytest.mark.parametrize('approach',[('Laguerre'),('Voronoi')]) + @pytest.mark.parametrize('approach',['Laguerre','Voronoi']) def test_tessellate_bicrystal(self,approach): grid = np.random.randint(5,10,3)*2 size = grid.astype(np.float) diff --git a/python/tests/test_VTK.py b/python/tests/test_VTK.py index ef4090da5..627ea4007 100644 --- a/python/tests/test_VTK.py +++ b/python/tests/test_VTK.py @@ -1,5 +1,4 @@ import os -import sys import pytest import numpy as np From 6254063b4b1154f80fcbaf5b7ac54cc3fe8d6d3d Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Tue, 31 Mar 2020 12:52:46 +0200 Subject: [PATCH 18/24] not used --- processing/pre/geom_fromVoronoiTessellation.py | 1 - 1 file changed, 1 deletion(-) diff --git a/processing/pre/geom_fromVoronoiTessellation.py b/processing/pre/geom_fromVoronoiTessellation.py index 31e8caa7b..df40176d8 100755 --- a/processing/pre/geom_fromVoronoiTessellation.py +++ b/processing/pre/geom_fromVoronoiTessellation.py @@ -192,7 +192,6 @@ for name in filenames: grains = table.get(options.microstructure) if options.microstructure in table.labels else np.arange(len(seeds))+1 grainIDs = np.unique(grains).astype('i') - NgrainIDs = len(grainIDs) if options.eulers in table.labels: eulers = table.get(options.eulers) From c5e81a7e9667b8fcdef5d45648759b3c33172ad5 Mon Sep 17 00:00:00 2001 From: Test User Date: Wed, 1 Apr 2020 18:45:53 +0200 Subject: [PATCH 19/24] [skip ci] updated version information after successful test of v2.0.3-2204-gdb1f2151 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index c52ff1832..d111f6358 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.3-2194-g369682aa +v2.0.3-2204-gdb1f2151 From f174dd6aa74a3f99aedcc9c35343bda73dd6f3be Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 2 Apr 2020 09:50:02 +0200 Subject: [PATCH 20/24] PETSc 3.13 is out grid solver still works, mesh solver is still broken --- src/DAMASK_interface.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DAMASK_interface.f90 b/src/DAMASK_interface.f90 index 6d5cbbdb6..8893c9e80 100644 --- a/src/DAMASK_interface.f90 +++ b/src/DAMASK_interface.f90 @@ -13,7 +13,7 @@ #define INTEL_MIN 1700 #define PETSC_MAJOR 3 #define PETSC_MINOR_MIN 10 -#define PETSC_MINOR_MAX 12 +#define PETSC_MINOR_MAX 13 module DAMASK_interface use, intrinsic :: iso_fortran_env From a25e163ab97c38506c846b5cc9aa0ff8b702f478 Mon Sep 17 00:00:00 2001 From: Test User Date: Thu, 2 Apr 2020 14:37:53 +0200 Subject: [PATCH 21/24] [skip ci] updated version information after successful test of v2.0.3-2206-gf174dd6a --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index d111f6358..43d4d275b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.3-2204-gdb1f2151 +v2.0.3-2206-gf174dd6a From 5e9ff7947bfbd8ef1d122cc412b517fef7df9b75 Mon Sep 17 00:00:00 2001 From: Franz Roters Date: Fri, 3 Apr 2020 14:01:35 +0200 Subject: [PATCH 22/24] [skip ci] plastic_dotstate always before source_dotstate --- src/crystallite.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/crystallite.f90 b/src/crystallite.f90 index fb12c439b..efa066696 100644 --- a/src/crystallite.f90 +++ b/src/crystallite.f90 @@ -1359,10 +1359,10 @@ subroutine integrateStateRK4 logical :: & nonlocalBroken - real(pReal), dimension(constitutive_source_maxSizeDotState,4,maxval(phase_Nsources)) :: source_RK4dotState real(pReal), dimension(constitutive_plasticity_maxSizeDotState,4) :: plastic_RK4dotState + real(pReal), dimension(constitutive_source_maxSizeDotState,4,maxval(phase_Nsources)) :: source_RK4dotState nonlocalBroken = .false. - !$OMP PARALLEL DO PRIVATE(sizeDotState,p,c,source_RK4dotState,plastic_RK4dotState) + !$OMP PARALLEL DO PRIVATE(sizeDotState,p,c,plastic_RK4dotState,source_RK4dotState) do e = FEsolving_execElem(1),FEsolving_execElem(2) do i = FEsolving_execIP(1),FEsolving_execIP(2) do g = 1,homogenization_Ngrains(material_homogenizationAt(e)) @@ -1526,8 +1526,8 @@ subroutine integrateStateRKCK45 sizeDotState logical :: & nonlocalBroken - real(pReal), dimension(constitutive_source_maxSizeDotState,6,maxval(phase_Nsources)) :: source_RKdotState real(pReal), dimension(constitutive_plasticity_maxSizeDotState,6) :: plastic_RKdotState + real(pReal), dimension(constitutive_source_maxSizeDotState,6,maxval(phase_Nsources)) :: source_RKdotState nonlocalBroken = .false. !$OMP PARALLEL DO PRIVATE(sizeDotState,p,c,plastic_RKdotState,source_RKdotState) From 407fb12f8c269050e7a7e33b2c957da9221175ee Mon Sep 17 00:00:00 2001 From: Test User Date: Fri, 3 Apr 2020 18:28:16 +0200 Subject: [PATCH 23/24] [skip ci] updated version information after successful test of v2.0.3-2223-g8631653f --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 43d4d275b..d2968346e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.3-2206-gf174dd6a +v2.0.3-2223-g8631653f From a86f00d82752dc0bf1139ab1428e3c9ab0bb87c1 Mon Sep 17 00:00:00 2001 From: Test User Date: Sun, 5 Apr 2020 02:20:26 +0200 Subject: [PATCH 24/24] [skip ci] updated version information after successful test of v2.0.3-2243-gbb03483b --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index d2968346e..2d8aa9597 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.3-2223-g8631653f +v2.0.3-2243-gbb03483b