From b0ce55de7ad27509359a754514b48a11940fba1c Mon Sep 17 00:00:00 2001 From: Sharan Roongta Date: Wed, 1 Jul 2020 19:54:14 +0200 Subject: [PATCH] store debug options once --- src/CPFEM.f90 | 41 ++++++++++++++++++---------- src/crystallite.f90 | 66 ++++++++++++++++++++++++++++----------------- 2 files changed, 68 insertions(+), 39 deletions(-) diff --git a/src/CPFEM.f90 b/src/CPFEM.f90 index 683d725ee..a5c644969 100644 --- a/src/CPFEM.f90 +++ b/src/CPFEM.f90 @@ -50,7 +50,18 @@ module CPFEM end type tNumerics type(tNumerics), private :: num - + + type, private :: tDebugOptions + logical :: & + basic, & + extensive + integer:: & + element, & + ip + end type tDebugOptions + + type(tDebugOptions), private :: debug + public :: & CPFEM_general, & CPFEM_initAll, & @@ -108,10 +119,18 @@ subroutine CPFEM_init num_commercialFEM => numerics_root%get('commercialFEM',defaultVal=emptyDict) num%iJacoStiffness = num_commercialFEM%get_asInt('ijacostiffness',defaultVal=1) if (num%iJacoStiffness < 1) call IO_error(301,ext_msg='iJacoStiffness') + !------------------------------------------------------------------------------ +! read debug options debug_CPFEM => debug_root%get('cpfem',defaultVal=emptyList) - if(debug_CPFEM%contains('basic')) then + debug%basic = debug_CPFEM%contains('basic') + debug%extensive = debug_CPFEM%contains('extensive') + debug%selective = debug_CPFEM%contains('selective') + debug%element = debug_root%get_asInt('element',defaultVal = 1) + debug%ip = debug_root%get_asInt('integrationpoint',defaultVal = 1) + + if(debug%basic) then write(6,'(a32,1x,6(i8,1x))') 'CPFEM_cs: ', shape(CPFEM_cs) write(6,'(a32,1x,6(i8,1x))') 'CPFEM_dcsdE: ', shape(CPFEM_dcsdE) write(6,'(a32,1x,6(i8,1x),/)') 'CPFEM_dcsdE_knownGood: ', shape(CPFEM_dcsdE_knownGood) @@ -149,16 +168,11 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature_inp, dt, elFE, ip, cauchyS real(pReal), parameter :: ODD_STRESS = 1e15_pReal, & !< return value for stress if terminallyIll ODD_JACOBIAN = 1e50_pReal !< return value for jacobian if terminallyIll - class(tNode), pointer :: & - debug_CPFEM - elCP = mesh_FEM2DAMASK_elem(elFE) - debug_CPFEM => debug_root%get('cpfem',defaultVal=emptyList) - if (debug_CPFEM%contains('basic') & - .and. elCP == debug_root%get_asInt('element',defaultVal=1) & - .and. ip == debug_root%get_asInt('integrationpoint',defaultVal=1)) then + if (debug%basic .and. elCP == debug%element & + .and. ip == debug%ip) then write(6,'(/,a)') '#############################################' write(6,'(a1,a22,1x,i8,a13)') '#','element', elCP, '#' write(6,'(a1,a22,1x,i8,a13)') '#','ip', ip, '#' @@ -196,7 +210,7 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature_inp, dt, elFE, ip, cauchyS updateJaco = mod(cycleCounter,num%iJacoStiffness) == 0 FEsolving_execElem = elCP FEsolving_execIP = ip - if (debug_CPFEM%contains('extensive')) & + if (debug%extensive) & write(6,'(a,i8,1x,i2)') '<< CPFEM >> calculation for elFE ip ',elFE,ip call materialpoint_stressAndItsTangent(updateJaco, dt) @@ -233,10 +247,9 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature_inp, dt, elFE, ip, cauchyS endif terminalIllness endif validCalculation - if (debug_CPFEM%contains('extensive') & - .and. ((debug_root%get_asInt('element',defaultVal=1) == elCP & - .and. debug_root%get_asInt('integrationpoint',defaultVal=1) == ip) & - .or. .not. debug_CPFEM%contains('selective'))) then + if (debug%extensive & + .and. (debug%element == elCP .and. debug%ip == ip) & + .or. .not. debug%selective) then write(6,'(a,i8,1x,i2,/,12x,6(f10.3,1x)/)') & '<< CPFEM >> stress/MPa at elFE ip ', elFE, ip, CPFEM_cs(1:6,ip,elCP)*1.0e-6_pReal write(6,'(a,i8,1x,i2,/,6(12x,6(f10.3,1x)/))') & diff --git a/src/crystallite.f90 b/src/crystallite.f90 index c609463b6..a3130cb7e 100644 --- a/src/crystallite.f90 +++ b/src/crystallite.f90 @@ -98,6 +98,22 @@ module crystallite type(tNumerics) :: num ! numerics parameters. Better name? +#ifdef DEBUG + type :: tDebugOptions + logical :: & + basic, & + extensive, & + selective + integer :: & + element, & + ip, & + grain + end type tDebugOptions + + type(tDebugOptions) :: debug + +#endif + procedure(integrateStateFPI), pointer :: integrateState public :: & @@ -135,6 +151,17 @@ subroutine crystallite_init write(6,'(/,a)') ' <<<+- crystallite init -+>>>' +#ifdef DEBUG + debug_crystallite => debug_root%get('crystallite', defaultVal=emptyList) + debug%basic = debug_crystallite%contains('basic') + debug%extensive = debug_crystallite%contains('extensive') + debug%selective = debug_crystallite%contains('selective') + debug%element = debug_root%get_asInt('element', defaultVal=1) + debug%ip = debug_root%get_asInt('integrationpoint', defaultVal=1) + debug%grain = debug_root%get_asInt('grain', defaultVal=1) + +#endif + cMax = homogenization_maxNgrains iMax = discretization_nIP eMax = discretization_nElem @@ -271,8 +298,7 @@ subroutine crystallite_init call crystallite_stressTangent #ifdef DEBUG - debug_crystallite => debug_root%get('crystallite',defaultVal=emptyList) - if (debug_crystallite%contains('basic')) then + if (debug%basic) then write(6,'(a42,1x,i10)') ' # of elements: ', eMax write(6,'(a42,1x,i10)') ' # of integration points/element: ', iMax write(6,'(a42,1x,i10)') 'max # of constituents/integration point: ', cMax @@ -298,38 +324,28 @@ function crystallite_stress() i, & !< counter in integration point loop e, & !< counter in element loop startIP, endIP, & - s, & - debug_e, & - debug_g, & - debug_i + s logical, dimension(homogenization_maxNgrains,discretization_nIP,discretization_nElem) :: todo !ToDo: need to set some values to false for different Ngrains - class(tNode), pointer :: & - debug_crystallite - todo = .false. -#ifdef DEBUG - debug_e = debug_root%get_asInt('element',defaultVal=1) - debug_i = debug_root%get_asInt('integrationpoint',defaultVal=1) - debug_g = debug_root%get_asInt('grain',defaultVal=1) - debug_crystallite => debug_root%get('crystallite',defaultVal=emptyList) - if (debug_crystallite%contains('selective') & - .and. FEsolving_execElem(1) <= debug_e & - .and. debug_e <= FEsolving_execElem(2)) then +#ifdef DEBUG + if (debug%selective & + .and. FEsolving_execElem(1) <= debug%element & + .and. debug%element <= FEsolving_execElem(2)) then write(6,'(/,a,i8,1x,i2,1x,i3)') '<< CRYST stress >> boundary and initial values at el ip ipc ', & - debug_e,debug_i, debug_g + debug%element,debug%ip, debug%grain write(6,'(a,/,3(12x,3(f14.9,1x)/))') '<< CRYST stress >> F ', & - transpose(crystallite_partionedF(1:3,1:3,debug_g,debug_i,debug_e)) + transpose(crystallite_partionedF(1:3,1:3,debug%grain,debug%ip,debug%element)) write(6,'(a,/,3(12x,3(f14.9,1x)/))') '<< CRYST stress >> F0 ', & - transpose(crystallite_partionedF0(1:3,1:3,debug_g,debug_i,debug_e)) + transpose(crystallite_partionedF0(1:3,1:3,debug%grain,debug%ip,debug%element)) write(6,'(a,/,3(12x,3(f14.9,1x)/))') '<< CRYST stress >> Fp0', & - transpose(crystallite_partionedFp0(1:3,1:3,debug_g,debug_i,debug_e)) + transpose(crystallite_partionedFp0(1:3,1:3,debug%grain,debug%ip,debug%element)) write(6,'(a,/,3(12x,3(f14.9,1x)/))') '<< CRYST stress >> Fi0', & - transpose(crystallite_partionedFi0(1:3,1:3,debug_g,debug_i,debug_e)) + transpose(crystallite_partionedFi0(1:3,1:3,debug%grain,debug%ip,debug%element)) write(6,'(a,/,3(12x,3(f14.9,1x)/))') '<< CRYST stress >> Lp0', & - transpose(crystallite_partionedLp0(1:3,1:3,debug_g,debug_i,debug_e)) + transpose(crystallite_partionedLp0(1:3,1:3,debug%grain,debug%ip,debug%element)) write(6,'(a,/,3(12x,3(f14.9,1x)/))') '<< CRYST stress >> Li0', & - transpose(crystallite_partionedLi0(1:3,1:3,debug_g,debug_i,debug_e)) + transpose(crystallite_partionedLi0(1:3,1:3,debug%grain,debug%ip,debug%element)) endif #endif @@ -375,7 +391,7 @@ function crystallite_stress() NiterationCrystallite = NiterationCrystallite + 1 #ifdef DEBUG - if (debug_crystallite%contains('extensive')) & + if (debug%extensive) & write(6,'(a,i6)') '<< CRYST stress >> crystallite iteration ',NiterationCrystallite #endif !$OMP PARALLEL DO PRIVATE(formerSubStep)