From 0c1fe236b4988a1b22c90513140781fd84f9e343 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Mon, 7 Mar 2016 17:12:37 -0500 Subject: [PATCH 1/9] fixed issue with multiple allocation of param%outputID (was done every line) --- code/plastic_isotropic.f90 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/plastic_isotropic.f90 b/code/plastic_isotropic.f90 index fe4c7a7f5..da4198007 100644 --- a/code/plastic_isotropic.f90 +++ b/code/plastic_isotropic.f90 @@ -167,7 +167,7 @@ subroutine plastic_isotropic_init(fileUnit) allocate(plastic_isotropic_Noutput(maxNinstance), source=0_pInt) allocate(param(maxNinstance)) ! one container of parameters per instance - + rewind(fileUnit) phase = 0_pInt do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partPhase) ! wind forward to @@ -184,14 +184,13 @@ subroutine plastic_isotropic_init(fileUnit) if (IO_getTag(line,'[',']') /= '') then ! next section phase = phase + 1_pInt ! advance section counter if (phase_plasticity(phase) == PLASTICITY_ISOTROPIC_ID) then - instance = phase_plasticityInstance(phase) - + instance = phase_plasticityInstance(phase) ! count instances of my constitutive law + allocate(param(instance)%outputID(phase_Noutput(phase))) ! allocate space for IDs of every requested output endif cycle ! skip to next line endif if (phase > 0_pInt) then; if (phase_plasticity(phase) == PLASTICITY_ISOTROPIC_ID) then ! one of my phases. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran instance = phase_plasticityInstance(phase) ! which instance of my plasticity is present phase - allocate(param(instance)%outputID(phase_Noutput(phase))) ! allocate space for IDs of every requested output chunkPos = IO_stringPos(line) tag = IO_lc(IO_stringValue(line,chunkPos,1_pInt)) ! extract key extmsg = trim(tag)//' ('//PLASTICITY_ISOTROPIC_label//')' ! prepare error message identifier From 761e698dfd19f974bdb4bc2f5dbdacfb5943e444 Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 8 Mar 2016 04:13:33 +0100 Subject: [PATCH 2/9] updated version information after successful test of revision3813-1056-g0c1fe23 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index d2a79f7f5..325c6feb2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -revision3813-1054-gefde4d3 +revision3813-1056-g0c1fe23 From 4dfd59a9e26b5228bb1bfb6d656394da03d33c3b Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Mon, 7 Mar 2016 22:12:02 -0500 Subject: [PATCH 3/9] output complete microstructure and texture info instead of limiting to grainIDs used in geometry --- .../pre/geom_fromVoronoiTessellation.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/processing/pre/geom_fromVoronoiTessellation.py b/processing/pre/geom_fromVoronoiTessellation.py index ee29f4536..c7a860e79 100755 --- a/processing/pre/geom_fromVoronoiTessellation.py +++ b/processing/pre/geom_fromVoronoiTessellation.py @@ -276,29 +276,29 @@ for name in filenames: grid = np.vstack(meshgrid2(x, y, z)).reshape(3,-1).T indices = laguerreTessellation(grid, coords, weights, grains, options.nonperiodic, options.cpus) -# --- write header --------------------------------------------------------------------------------- +# --- write header ------------------------------------------------------------------------ - grainIDs = np.intersect1d(grainIDs,indices) - info['microstructures'] = len(grainIDs) + usedGrainIDs = np.intersect1d(grainIDs,indices) + info['microstructures'] = len(usedGrainIDs) if info['homogenization'] == 0: info['homogenization'] = options.homogenization damask.util.croak(['grid a b c: %s'%(' x '.join(map(str,info['grid']))), - 'size x y z: %s'%(' x '.join(map(str,info['size']))), - 'origin x y z: %s'%(' : '.join(map(str,info['origin']))), - 'homogenization: %i'%info['homogenization'], - 'microstructures: %i%s'%(info['microstructures'], + 'size x y z: %s'%(' x '.join(map(str,info['size']))), + 'origin x y z: %s'%(' : '.join(map(str,info['origin']))), + 'homogenization: %i'%info['homogenization'], + 'microstructures: %i%s'%(info['microstructures'], (' out of %i'%NgrainIDs if NgrainIDs != info['microstructures'] else '')), - ]) + ]) config_header = [] - formatwidth = 1+int(math.log10(info['microstructures'])) + formatwidth = 1+int(math.log10(NgrainIDs)) - phase = options.phase * np.ones(info['microstructures'],'i') + phase = options.phase * np.ones(NgrainIDs,'i') if int(options.secondphase*info['microstructures']) > 0: - phase[0:int(options.secondphase*info['microstructures'])] += 1 - randomSeed = int(os.urandom(4).encode('hex'), 16) if options.randomSeed is None \ - else options.randomSeed # random seed for second phase + phase[0:int(options.secondphase*info['microstructures'])] += 1 # alter fraction 'options.secondphase' of used grainIDs + randomSeed = options.randomSeed if options.randomSeed \ + else int(os.urandom(4).encode('hex'), 16) # random seed for second phase np.random.seed(randomSeed) np.random.shuffle(phase) config_header += ['# random seed (phase shuffling): {}'.format(randomSeed)] @@ -312,7 +312,7 @@ for name in filenames: if hasEulers: config_header += [''] for ID in grainIDs: - eulerID = np.nonzero(grains == ID)[0][0] # find first occurrence of this grain id + eulerID = np.nonzero(grains == ID)[0][0] # find first occurrence of this grain id config_header += ['[Grain%s]'%(str(ID).zfill(formatwidth)), '(gauss)\tphi1 %g\tPhi %g\tphi2 %g\tscatter 0.0\tfraction 1.0'%tuple(eulers[eulerID]) ] From e1d4e51170f02c05498d40de9106e5aa81148a3f Mon Sep 17 00:00:00 2001 From: Franz Roters Date: Tue, 8 Mar 2016 10:54:06 +0100 Subject: [PATCH 4/9] updated version string for release --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 325c6feb2..46b105a30 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -revision3813-1056-g0c1fe23 +v2.0.0 From 26fa0fff72a6ebec33109ed0c9565c9dabea48d4 Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 8 Mar 2016 16:13:40 +0100 Subject: [PATCH 5/9] updated version information after successful test of v2.0.0-3-g618e352 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 46b105a30..2bc4b2cfc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.0 +v2.0.0-3-g618e352 From fa9411e998a4b93e4a70bc628ce46df9b1e8cdf0 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Tue, 8 Mar 2016 13:55:12 -0500 Subject: [PATCH 6/9] fixed mixed-up descriptions of relative and absolute tolerances in spectral part --- config/numerics.config | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/numerics.config b/config/numerics.config index 62adb552f..24241b8c4 100644 --- a/config/numerics.config +++ b/config/numerics.config @@ -54,12 +54,12 @@ discrepancyPower_RGC 5.0 fixed_seed 0 # put any number larger than zero, integer, if you want to have a pseudo random distribution ## spectral parameters ## -err_div_tolAbs 1.0e-3 # relative tolerance for fulfillment of stress equilibrium -err_div_tolRel 5.0e-4 # absolute tolerance for fulfillment of stress equilibrium -err_curl_tolAbs 1.0e-12 # relative tolerance for fulfillment of strain compatibility -err_curl_tolRel 5.0e-4 # absolute tolerance for fulfillment of strain compatibility -err_stress_tolrel 0.01 # relative tolerance for fulfillment of stress BC -err_stress_tolabs 1.0e3 # absolute tolerance for fulfillment of stress BC +err_div_tolAbs 1.0e-3 # absolute tolerance for fulfillment of stress equilibrium +err_div_tolRel 5.0e-4 # relative tolerance for fulfillment of stress equilibrium +err_curl_tolAbs 1.0e-12 # absolute tolerance for fulfillment of strain compatibility +err_curl_tolRel 5.0e-4 # relative tolerance for fulfillment of strain compatibility +err_stress_tolAbs 1.0e3 # absolute tolerance for fulfillment of stress BC +err_stress_tolRel 0.01 # relative tolerance for fulfillment of stress BC fftw_timelimit -1.0 # timelimit of plan creation for FFTW, see manual on www.fftw.org, Default -1.0: disable timelimit rotation_tol 1.0e-12 # tolerance of rotation specified in loadcase, Default 1.0e-12: first guess fftw_plan_mode FFTW_PATIENT # reads the planing-rigor flag, see manual on www.fftw.org, Default FFTW_PATIENT: use patient planner flag From 2296929344948406032843f030384ca4edd36286 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Tue, 8 Mar 2016 18:38:56 -0500 Subject: [PATCH 7/9] added symlink info for PETSC_DIR (if present) --- DAMASK_env.sh | 3 ++- DAMASK_env.zsh | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/DAMASK_env.sh b/DAMASK_env.sh index bfb5c12df..ad3c59dea 100644 --- a/DAMASK_env.sh +++ b/DAMASK_env.sh @@ -53,7 +53,8 @@ if [ ! -z "$PS1" ]; then [[ "x$SOLVER" != "x" ]] && echo "Spectral Solver $SOLVER" [[ "x$PROCESSING" != "x" ]] && echo "Post Processing $PROCESSING" echo "Multithreading DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" - [[ "x$PETSC_DIR" != "x" ]] && echo "PETSc location $PETSC_DIR" + [[ "x$PETSC_DIR" != "x" ]] && echo "PETSc location $PETSC_DIR" && \ + [[ `readlink -f $PETSC_DIR` == $PETSC_DIR ]] || echo " ~~> "`readlink -f $PETSC_DIR` [[ "x$PETSC_ARCH" != "x" ]] && echo "PETSc architecture $PETSC_ARCH" echo "MSC.Marc/Mentat $MSC_ROOT" echo diff --git a/DAMASK_env.zsh b/DAMASK_env.zsh index 521bfe8e1..5cf5b30f8 100644 --- a/DAMASK_env.zsh +++ b/DAMASK_env.zsh @@ -51,7 +51,8 @@ if [ ! -z "$PS1" ]; then [[ "x$SOLVER" != "x" ]] && echo "Spectral Solver $SOLVER" [[ "x$PROCESSING" != "x" ]] && echo "Post Processing $PROCESSING" echo "Multithreading DAMASK_NUM_THREADS=$DAMASK_NUM_THREADS" - [[ "x$PETSC_DIR" != "x" ]] && echo "PETSc location $PETSC_DIR" + [[ "x$PETSC_DIR" != "x" ]] && echo "PETSc location $PETSC_DIR" && \ + [[ `readlink -f $PETSC_DIR` == $PETSC_DIR ]] || echo " ~~> "`readlink -f $PETSC_DIR` [[ "x$PETSC_ARCH" != "x" ]] && echo "PETSc architecture $PETSC_ARCH" echo "MSC.Marc/Mentat $MSC_ROOT" echo From 976803ba0b7d45557ff9df76d589f433c615aa88 Mon Sep 17 00:00:00 2001 From: Franz Roters Date: Wed, 9 Mar 2016 15:36:11 +0100 Subject: [PATCH 8/9] corrected error discovered by Haiming Zhang --- code/IO.f90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/IO.f90 b/code/IO.f90 index 1a36269c5..57eb23cb5 100644 --- a/code/IO.f90 +++ b/code/IO.f90 @@ -1237,8 +1237,7 @@ character(len=300) pure function IO_extractValue(pair,key) IO_extractValue = '' myChunk = scan(pair,SEP) - if (myChunk > 0 .and. pair(:myChunk-1) == key(:myChunk-1)) & - IO_extractValue = pair(myChunk+1:) ! extract value if key matches + if (myChunk > 0 .and. pair(:myChunk-1) == key) IO_extractValue = pair(myChunk+1:) ! extract value if key matches end function IO_extractValue From 20fe46a030cbb424cbb833067571beef06238da4 Mon Sep 17 00:00:00 2001 From: Philip Eisenlohr Date: Wed, 9 Mar 2016 11:40:12 -0500 Subject: [PATCH 9/9] corrected logical mask for reporting stress in load cases --- code/DAMASK_spectral.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/DAMASK_spectral.f90 b/code/DAMASK_spectral.f90 index 728b0fd6c..3f4d6764e 100644 --- a/code/DAMASK_spectral.f90 +++ b/code/DAMASK_spectral.f90 @@ -329,7 +329,7 @@ program DAMASK_spectral errorID = 838_pInt ! no rotation is allowed by stress BC write(6,'(2x,a)') 'stress / GPa:' do i = 1_pInt, 3_pInt; do j = 1_pInt, 3_pInt - if(loadCases(currentLoadCase)%deformation%maskLogical(i,j)) then + if(loadCases(currentLoadCase)%P%maskLogical(i,j)) then write(6,'(2x,f12.7)',advance='no') loadCases(currentLoadCase)%P%values(i,j)*1e-9_pReal else write(6,'(2x,12a)',advance='no') ' * '