From 8fd4a0c0844f302f830b39219447ca0763d34406 Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Fri, 25 Nov 2022 12:23:14 +0100 Subject: [PATCH 1/6] petscscalar and pReal need to be equivalent --- src/prec.f90 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/prec.f90 b/src/prec.f90 index 963391c39..c56ee500b 100644 --- a/src/prec.f90 +++ b/src/prec.f90 @@ -23,8 +23,10 @@ module prec integer, parameter :: pI32 = selected_int_kind(9) !< number with at least up to +-1e9 (typically 32 bit) integer, parameter :: pI64 = selected_int_kind(18) !< number with at least up to +-1e18 (typically 64 bit) #ifdef PETSC - PetscInt, private :: dummy - integer, parameter :: pPETSCINT = kind(dummy) + PetscInt, private :: dummy_int + integer, parameter :: pPETSCINT = kind(dummy_int) + PetscScalar, private :: dummy_scalar + real(pReal), parameter :: pPETSCSCALAR = kind(dummy_scalar) #endif integer, parameter :: pSTRINGLEN = 256 !< default string length integer, parameter :: pPATHLEN = 4096 !< maximum length of a path name on linux @@ -252,7 +254,9 @@ subroutine selfTest() integer(pI64), dimension(1) :: i real(pReal), dimension(2) :: r - +#ifdef PETSC + if (pReal /= pPETSCSCALAR) error stop 'PetSC and Fortran scalar datatypes do not match' +#endif realloc_lhs_test = [1,2] if (any(realloc_lhs_test/=[1,2])) error stop 'LHS allocation' From b96576ce930f24a79891d1dafa23988b5aa2ea87 Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Fri, 25 Nov 2022 13:49:50 +0100 Subject: [PATCH 2/6] standardizing double definition across modules --- src/grid/grid_damage_spectral.f90 | 8 ++++---- src/grid/grid_mech_FEM.f90 | 12 ++++++------ src/grid/grid_mech_spectral_basic.f90 | 12 ++++++------ src/grid/grid_mech_spectral_polarisation.f90 | 14 +++++++------- src/grid/grid_thermal_spectral.f90 | 10 +++++----- src/grid/spectral_utilities.f90 | 6 +++--- src/mesh/FEM_utilities.f90 | 4 ++-- src/mesh/mesh_mech_FEM.f90 | 16 ++++++++-------- src/prec.f90 | 2 +- 9 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/grid/grid_damage_spectral.f90 b/src/grid/grid_damage_spectral.f90 index 41422bce2..91be2cdc1 100644 --- a/src/grid/grid_damage_spectral.f90 +++ b/src/grid/grid_damage_spectral.f90 @@ -72,7 +72,7 @@ subroutine grid_damage_spectral_init() PetscInt, dimension(0:worldsize-1) :: localK integer :: i, j, k, ce DM :: damage_grid - PetscScalar, dimension(:,:,:), pointer :: phi_PETSc + real(pReal), dimension(:,:,:), pointer :: phi_PETSc Vec :: uBound, lBound integer(MPI_INTEGER_KIND) :: err_MPI PetscErrorCode :: err_PETSc @@ -256,7 +256,7 @@ subroutine grid_damage_spectral_forward(cutBack) integer :: i, j, k, ce DM :: dm_local - PetscScalar, dimension(:,:,:), pointer :: phi_PETSc + real(pReal), dimension(:,:,:), pointer :: phi_PETSc PetscErrorCode :: err_PETSc @@ -292,10 +292,10 @@ subroutine formResidual(in,x_scal,r,dummy,err_PETSc) DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: & in - PetscScalar, dimension( & + real(pReal), dimension( & XG_RANGE,YG_RANGE,ZG_RANGE), intent(in) :: & x_scal - PetscScalar, dimension( & + real(pReal), dimension( & X_RANGE,Y_RANGE,Z_RANGE), intent(out) :: & r !< residual PetscObject :: dummy diff --git a/src/grid/grid_mech_FEM.f90 b/src/grid/grid_mech_FEM.f90 index 9e9f20d24..f4f0a9fb8 100644 --- a/src/grid/grid_mech_FEM.f90 +++ b/src/grid/grid_mech_FEM.f90 @@ -539,8 +539,8 @@ subroutine formResidual(da_local,x_local, & DM :: da_local Vec :: x_local, f_local - PetscScalar, pointer,dimension(:,:,:,:) :: x_scal, r - PetscScalar, dimension(8,3) :: x_elem, f_elem + real(pReal), pointer,dimension(:,:,:,:) :: x_scal, r + real(pReal), dimension(8,3) :: x_elem, f_elem PetscInt :: i, ii, j, jj, k, kk, ctr, ele PetscInt :: & PETScIter, & @@ -659,12 +659,12 @@ subroutine formJacobian(da_local,x_local,Jac_pre,Jac,dummy,err_PETSc) Vec :: x_local, coordinates Mat :: Jac_pre, Jac MatStencil,dimension(4,24) :: row, col - PetscScalar,pointer,dimension(:,:,:,:) :: x_scal - PetscScalar,dimension(24,24) :: K_ele - PetscScalar,dimension(9,24) :: BMatFull + real(pReal),pointer,dimension(:,:,:,:) :: x_scal + real(pReal),dimension(24,24) :: K_ele + real(pReal),dimension(9,24) :: BMatFull PetscInt :: i, ii, j, jj, k, kk, ctr, ce PetscInt,dimension(3),parameter :: rows = [0, 1, 2] - PetscScalar :: diag + real(pReal) :: diag PetscObject :: dummy MatNullSpace :: matnull PetscErrorCode :: err_PETSc diff --git a/src/grid/grid_mech_spectral_basic.f90 b/src/grid/grid_mech_spectral_basic.f90 index cc4c909e3..fd0e941c7 100644 --- a/src/grid/grid_mech_spectral_basic.f90 +++ b/src/grid/grid_mech_spectral_basic.f90 @@ -109,7 +109,7 @@ subroutine grid_mechanical_spectral_basic_init() real(pReal), dimension(3,3,cells(1),cells(2),cells3) :: P PetscErrorCode :: err_PETSc integer(MPI_INTEGER_KIND) :: err_MPI - PetscScalar, pointer, dimension(:,:,:,:) :: & + real(pReal), pointer, dimension(:,:,:,:) :: & F ! pointer to solution data PetscInt, dimension(0:worldsize-1) :: localK real(pReal), dimension(3,3,product(cells(1:2))*cells3) :: temp33n @@ -332,7 +332,7 @@ subroutine grid_mechanical_spectral_basic_forward(cutBack,guess,Delta_t,Delta_t_ type(tRotation), intent(in) :: & rotation_BC PetscErrorCode :: err_PETSc - PetscScalar, pointer, dimension(:,:,:,:) :: F + real(pReal), pointer, dimension(:,:,:,:) :: F call DMDAVecGetArrayF90(da,solution_vec,F,err_PETSc) @@ -397,7 +397,7 @@ end subroutine grid_mechanical_spectral_basic_forward subroutine grid_mechanical_spectral_basic_updateCoords PetscErrorCode :: err_PETSc - PetscScalar, dimension(:,:,:,:), pointer :: F + real(pReal), dimension(:,:,:,:), pointer :: F call DMDAVecGetArrayF90(da,solution_vec,F,err_PETSc) CHKERRQ(err_PETSc) @@ -415,7 +415,7 @@ subroutine grid_mechanical_spectral_basic_restartWrite PetscErrorCode :: err_PETSc integer(HID_T) :: fileHandle, groupHandle - PetscScalar, dimension(:,:,:,:), pointer :: F + real(pReal), dimension(:,:,:,:), pointer :: F call DMDAVecGetArrayF90(da,solution_vec,F,err_PETSc) CHKERRQ(err_PETSc) @@ -500,9 +500,9 @@ subroutine formResidual(in, F, & r, dummy, err_PETSc) DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: in !< DMDA info (needs to be named "in" for macros like XRANGE to work) - PetscScalar, dimension(3,3,XG_RANGE,YG_RANGE,ZG_RANGE), & + real(pReal), dimension(3,3,XG_RANGE,YG_RANGE,ZG_RANGE), & intent(in) :: F !< deformation gradient field - PetscScalar, dimension(3,3,X_RANGE,Y_RANGE,Z_RANGE), & + real(pReal), dimension(3,3,X_RANGE,Y_RANGE,Z_RANGE), & intent(out) :: r !< residuum field PetscObject :: dummy PetscErrorCode :: err_PETSc diff --git a/src/grid/grid_mech_spectral_polarisation.f90 b/src/grid/grid_mech_spectral_polarisation.f90 index f5132b082..67edf992b 100644 --- a/src/grid/grid_mech_spectral_polarisation.f90 +++ b/src/grid/grid_mech_spectral_polarisation.f90 @@ -120,7 +120,7 @@ subroutine grid_mechanical_spectral_polarisation_init() real(pReal), dimension(3,3,cells(1),cells(2),cells3) :: P PetscErrorCode :: err_PETSc integer(MPI_INTEGER_KIND) :: err_MPI - PetscScalar, pointer, dimension(:,:,:,:) :: & + real(pReal), pointer, dimension(:,:,:,:) :: & FandF_tau, & ! overall pointer to solution data F, & ! specific (sub)pointer F_tau ! specific (sub)pointer @@ -365,7 +365,7 @@ subroutine grid_mechanical_spectral_polarisation_forward(cutBack,guess,Delta_t,D type(tRotation), intent(in) :: & rotation_BC PetscErrorCode :: err_PETSc - PetscScalar, pointer, dimension(:,:,:,:) :: FandF_tau, F, F_tau + real(pReal), pointer, dimension(:,:,:,:) :: FandF_tau, F, F_tau integer :: i, j, k real(pReal), dimension(3,3) :: F_lambda33 @@ -452,7 +452,7 @@ end subroutine grid_mechanical_spectral_polarisation_forward subroutine grid_mechanical_spectral_polarisation_updateCoords PetscErrorCode :: err_PETSc - PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau + real(pReal), dimension(:,:,:,:), pointer :: FandF_tau call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,err_PETSc) CHKERRQ(err_PETSc) @@ -470,7 +470,7 @@ subroutine grid_mechanical_spectral_polarisation_restartWrite PetscErrorCode :: err_PETSc integer(HID_T) :: fileHandle, groupHandle - PetscScalar, dimension(:,:,:,:), pointer :: FandF_tau, F, F_tau + real(pReal), dimension(:,:,:,:), pointer :: FandF_tau, F, F_tau call DMDAVecGetArrayF90(da,solution_vec,FandF_tau,err_PETSc) CHKERRQ(err_PETSc) @@ -562,14 +562,14 @@ subroutine formResidual(in, FandF_tau, & r, dummy,err_PETSc) DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: in !< DMDA info (needs to be named "in" for macros like XRANGE to work) - PetscScalar, dimension(3,3,2,XG_RANGE,YG_RANGE,ZG_RANGE), & + real(pReal), dimension(3,3,2,XG_RANGE,YG_RANGE,ZG_RANGE), & target, intent(in) :: FandF_tau - PetscScalar, dimension(3,3,2,X_RANGE,Y_RANGE,Z_RANGE),& + real(pReal), dimension(3,3,2,X_RANGE,Y_RANGE,Z_RANGE),& target, intent(out) :: r !< residuum field PetscObject :: dummy PetscErrorCode :: err_PETSc - PetscScalar, pointer, dimension(:,:,:,:,:) :: & + real(pReal), pointer, dimension(:,:,:,:,:) :: & F, & F_tau, & r_F, & diff --git a/src/grid/grid_thermal_spectral.f90 b/src/grid/grid_thermal_spectral.f90 index 0c3a2b3ee..474d18196 100644 --- a/src/grid/grid_thermal_spectral.f90 +++ b/src/grid/grid_thermal_spectral.f90 @@ -74,7 +74,7 @@ subroutine grid_thermal_spectral_init() PetscInt, dimension(0:worldsize-1) :: localK integer :: i, j, k, ce DM :: thermal_grid - PetscScalar, dimension(:,:,:), pointer :: T_PETSc + real(pReal), dimension(:,:,:), pointer :: T_PETSc integer(MPI_INTEGER_KIND) :: err_MPI PetscErrorCode :: err_PETSc integer(HID_T) :: fileHandle, groupHandle @@ -249,7 +249,7 @@ subroutine grid_thermal_spectral_forward(cutBack) integer :: i, j, k, ce DM :: dm_local - PetscScalar, dimension(:,:,:), pointer :: T_PETSc + real(pReal), dimension(:,:,:), pointer :: T_PETSc PetscErrorCode :: err_PETSc @@ -288,7 +288,7 @@ subroutine grid_thermal_spectral_restartWrite PetscErrorCode :: err_PETSc DM :: dm_local integer(HID_T) :: fileHandle, groupHandle - PetscScalar, dimension(:,:,:), pointer :: T + real(pReal), dimension(:,:,:), pointer :: T call SNESGetDM(SNES_thermal,dm_local,err_PETSc); CHKERRQ(err_PETSc) @@ -319,10 +319,10 @@ subroutine formResidual(in,x_scal,r,dummy,err_PETSc) DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: & in - PetscScalar, dimension( & + real(pReal), dimension( & XG_RANGE,YG_RANGE,ZG_RANGE), intent(in) :: & x_scal - PetscScalar, dimension( & + real(pReal), dimension( & X_RANGE,Y_RANGE,Z_RANGE), intent(out) :: & r !< residual PetscObject :: dummy diff --git a/src/grid/spectral_utilities.f90 b/src/grid/spectral_utilities.f90 index 54dbf8c43..8b39c44de 100644 --- a/src/grid/spectral_utilities.f90 +++ b/src/grid/spectral_utilities.f90 @@ -42,9 +42,9 @@ module spectral_utilities !-------------------------------------------------------------------------------------------------- ! variables storing information for spectral method and FFTW - real(C_DOUBLE), dimension(:,:,:,:,:), pointer :: tensorField_real !< tensor field in real space - real(C_DOUBLE), dimension(:,:,:,:), pointer :: vectorField_real !< vector field in real space - real(C_DOUBLE), dimension(:,:,:), pointer :: scalarField_real !< scalar field in real space + real(pReal), dimension(:,:,:,:,:), pointer :: tensorField_real !< tensor field in real space + real(pReal), dimension(:,:,:,:), pointer :: vectorField_real !< vector field in real space + real(pReal), dimension(:,:,:), pointer :: scalarField_real !< scalar field in real space complex(C_DOUBLE_COMPLEX), dimension(:,:,:,:,:), pointer :: tensorField_fourier !< tensor field in Fourier space complex(C_DOUBLE_COMPLEX), dimension(:,:,:,:), pointer :: vectorField_fourier !< vector field in Fourier space complex(C_DOUBLE_COMPLEX), dimension(:,:,:), pointer :: scalarField_fourier !< scalar field in Fourier space diff --git a/src/mesh/FEM_utilities.f90 b/src/mesh/FEM_utilities.f90 index b763dd84a..de924e9ec 100644 --- a/src/mesh/FEM_utilities.f90 +++ b/src/mesh/FEM_utilities.f90 @@ -182,8 +182,8 @@ subroutine utilities_projectBCValues(localVec,section,field,comp,bcPointsIS,BCVa PetscSection :: section IS :: bcPointsIS PetscInt, pointer :: bcPoints(:) - PetscScalar, pointer :: localArray(:) - PetscScalar :: BCValue,BCDotValue,timeinc + real(pReal), pointer :: localArray(:) + real(pReal) :: BCValue,BCDotValue,timeinc PetscErrorCode :: err_PETSc diff --git a/src/mesh/mesh_mech_FEM.f90 b/src/mesh/mesh_mech_FEM.f90 index 255bf3c77..703098e44 100644 --- a/src/mesh/mesh_mech_FEM.f90 +++ b/src/mesh/mesh_mech_FEM.f90 @@ -120,8 +120,8 @@ subroutine FEM_mechanical_init(fieldBC) PetscReal :: detJ PetscReal, allocatable, target :: cellJMat(:,:) - PetscScalar, pointer, dimension(:) :: px_scal - PetscScalar, allocatable, target, dimension(:) :: x_scal + real(pReal), pointer, dimension(:) :: px_scal + real(pReal), allocatable, target, dimension(:) :: x_scal character(len=*), parameter :: prefix = 'mechFE_' PetscErrorCode :: err_PETSc @@ -369,8 +369,8 @@ subroutine FEM_mechanical_formResidual(dm_local,xx_local,f_local,dummy,err_PETSc PetscDS :: prob Vec :: x_local, f_local, xx_local PetscSection :: section - PetscScalar, dimension(:), pointer :: x_scal, pf_scal - PetscScalar, dimension(cellDof), target :: f_scal + real(pReal), dimension(:), pointer :: x_scal, pf_scal + real(pReal), dimension(cellDof), target :: f_scal PetscReal :: IcellJMat(dimPlex,dimPlex) PetscReal, dimension(:),pointer :: pV0, pCellJ, pInvcellJ, basisField, basisFieldDer PetscInt :: cellStart, cellEnd, cell, field, face, & @@ -517,10 +517,10 @@ subroutine FEM_mechanical_formJacobian(dm_local,xx_local,Jac_pre,Jac,dummy,err_P PetscReal, dimension(:), pointer :: basisField, basisFieldDer, & pV0, pCellJ, pInvcellJ - PetscScalar, dimension(:), pointer :: pK_e, x_scal + real(pReal), dimension(:), pointer :: pK_e, x_scal - PetscScalar,dimension(cellDOF,cellDOF), target :: K_e - PetscScalar,dimension(cellDOF,cellDOF) :: K_eA, K_eB + real(pReal),dimension(cellDOF,cellDOF), target :: K_e + real(pReal),dimension(cellDOF,cellDOF) :: K_eA, K_eB PetscInt :: cellStart, cellEnd, cell, field, face, & qPt, basis, comp, cidx,bcSize, m, i @@ -777,7 +777,7 @@ subroutine FEM_mechanical_updateCoords() PetscQuadrature :: mechQuad PetscReal, dimension(:), pointer :: basisField, basisFieldDer, & nodeCoords_linear !< nodal coordinates (dimPlex*Nnodes) - PetscScalar, dimension(:), pointer :: x_scal + real(pReal), dimension(:), pointer :: x_scal call SNESGetDM(mechanical_snes,dm_local,err_PETSc) CHKERRQ(err_PETSc) diff --git a/src/prec.f90 b/src/prec.f90 index c56ee500b..d0c1022fd 100644 --- a/src/prec.f90 +++ b/src/prec.f90 @@ -205,7 +205,7 @@ end function prec_bytesToC_FLOAT pure function prec_bytesToC_DOUBLE(bytes) integer(C_SIGNED_CHAR), dimension(:), intent(in) :: bytes !< byte-wise representation of a C_DOUBLE array - real(C_DOUBLE), dimension(size(bytes,kind=pI64)/(storage_size(0._C_DOUBLE,pI64)/8_pI64)) :: & + real(pReal), dimension(size(bytes,kind=pI64)/(storage_size(0._C_DOUBLE,pI64)/8_pI64)) :: & prec_bytesToC_DOUBLE From a2f898a94c3c23d73d17bce32c77ae961696518a Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Fri, 25 Nov 2022 15:12:07 +0100 Subject: [PATCH 3/6] correcting function return type, indentation --- src/grid/spectral_utilities.f90 | 2 +- src/homogenization_mechanical_RGC.f90 | 2 +- src/prec.f90 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/grid/spectral_utilities.f90 b/src/grid/spectral_utilities.f90 index 8b39c44de..1ca1d0b16 100644 --- a/src/grid/spectral_utilities.f90 +++ b/src/grid/spectral_utilities.f90 @@ -1011,7 +1011,7 @@ subroutine utilities_updateCoords(F) #endif real(pReal), dimension(3) :: step real(pReal), dimension(3,3) :: Favg - integer, dimension(3) :: me + integer, dimension(3) :: me integer, dimension(3,8) :: & neighbor = reshape([ & 0, 0, 0, & diff --git a/src/homogenization_mechanical_RGC.f90 b/src/homogenization_mechanical_RGC.f90 index 53b1ba350..d60e04cf5 100644 --- a/src/homogenization_mechanical_RGC.f90 +++ b/src/homogenization_mechanical_RGC.f90 @@ -668,7 +668,7 @@ module function RGC_updateState(P,F,avgF,dt,dPdF,ce) result(doneAndHappy) real(pReal), dimension(:,:,:), intent(out) :: F !< partitioned F per grain real(pReal), dimension(:,:), intent(in) :: avgF !< averaged F - integer, intent(in) :: & + integer, intent(in) :: & ho, & en diff --git a/src/prec.f90 b/src/prec.f90 index d0c1022fd..c56ee500b 100644 --- a/src/prec.f90 +++ b/src/prec.f90 @@ -205,7 +205,7 @@ end function prec_bytesToC_FLOAT pure function prec_bytesToC_DOUBLE(bytes) integer(C_SIGNED_CHAR), dimension(:), intent(in) :: bytes !< byte-wise representation of a C_DOUBLE array - real(pReal), dimension(size(bytes,kind=pI64)/(storage_size(0._C_DOUBLE,pI64)/8_pI64)) :: & + real(C_DOUBLE), dimension(size(bytes,kind=pI64)/(storage_size(0._C_DOUBLE,pI64)/8_pI64)) :: & prec_bytesToC_DOUBLE From c2e78158c8b31c0c7ac659a7b111ea63ce14e213 Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Mon, 5 Dec 2022 10:38:36 +0100 Subject: [PATCH 4/6] petsc macros can be omitted with use of preal --- src/grid/grid_damage_spectral.f90 | 10 ++++---- src/grid/grid_mech_spectral_basic.f90 | 13 ++++++----- src/grid/grid_mech_spectral_polarisation.f90 | 24 ++++++++------------ src/grid/grid_thermal_spectral.f90 | 12 ++++------ 4 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/grid/grid_damage_spectral.f90 b/src/grid/grid_damage_spectral.f90 index 91be2cdc1..e2542d722 100644 --- a/src/grid/grid_damage_spectral.f90 +++ b/src/grid/grid_damage_spectral.f90 @@ -288,15 +288,13 @@ end subroutine grid_damage_spectral_forward !-------------------------------------------------------------------------------------------------- !> @brief Construct the residual vector. !-------------------------------------------------------------------------------------------------- -subroutine formResidual(in,x_scal,r,dummy,err_PETSc) +subroutine formResidual(residual_subdomain,x_scal,r,dummy,err_PETSc) DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: & - in - real(pReal), dimension( & - XG_RANGE,YG_RANGE,ZG_RANGE), intent(in) :: & + residual_subdomain + real(pReal), dimension(cells(1),cells(2),cells3), intent(in) :: & x_scal - real(pReal), dimension( & - X_RANGE,Y_RANGE,Z_RANGE), intent(out) :: & + real(pReal), dimension(cells(1),cells(2),cells3), intent(out) :: & r !< residual PetscObject :: dummy PetscErrorCode, intent(out) :: err_PETSc diff --git a/src/grid/grid_mech_spectral_basic.f90 b/src/grid/grid_mech_spectral_basic.f90 index fd0e941c7..e337376ca 100644 --- a/src/grid/grid_mech_spectral_basic.f90 +++ b/src/grid/grid_mech_spectral_basic.f90 @@ -496,14 +496,15 @@ end subroutine converged !-------------------------------------------------------------------------------------------------- !> @brief Construct the residual vector. !-------------------------------------------------------------------------------------------------- -subroutine formResidual(in, F, & +subroutine formResidual(residual_subdomain, F, & r, dummy, err_PETSc) - DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: in !< DMDA info (needs to be named "in" for macros like XRANGE to work) - real(pReal), dimension(3,3,XG_RANGE,YG_RANGE,ZG_RANGE), & - intent(in) :: F !< deformation gradient field - real(pReal), dimension(3,3,X_RANGE,Y_RANGE,Z_RANGE), & - intent(out) :: r !< residuum field + DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: & + residual_subdomain !< DMDA info (needs to be named "in" for macros like XRANGE to work) + real(pReal), dimension(3,3,cells(1),cells(2),cells3), intent(in) :: & + F !< deformation gradient field + real(pReal), dimension(3,3,cells(1),cells(2),cells3), intent(out) :: & + r !< residuum field PetscObject :: dummy PetscErrorCode :: err_PETSc diff --git a/src/grid/grid_mech_spectral_polarisation.f90 b/src/grid/grid_mech_spectral_polarisation.f90 index 67edf992b..bac8696ab 100644 --- a/src/grid/grid_mech_spectral_polarisation.f90 +++ b/src/grid/grid_mech_spectral_polarisation.f90 @@ -558,14 +558,14 @@ end subroutine converged !-------------------------------------------------------------------------------------------------- !> @brief Construct the residual vector. !-------------------------------------------------------------------------------------------------- -subroutine formResidual(in, FandF_tau, & +subroutine formResidual(residual_subdomain, FandF_tau, & r, dummy,err_PETSc) - DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: in !< DMDA info (needs to be named "in" for macros like XRANGE to work) - real(pReal), dimension(3,3,2,XG_RANGE,YG_RANGE,ZG_RANGE), & - target, intent(in) :: FandF_tau - real(pReal), dimension(3,3,2,X_RANGE,Y_RANGE,Z_RANGE),& - target, intent(out) :: r !< residuum field + DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: residual_subdomain !< DMDA info (needs to be named "in" for macros like XRANGE to work) + real(pReal), dimension(3,3,2,cells(1),cells(2),cells3), target, intent(in) :: & + FandF_tau !< deformation gradient field + real(pReal), dimension(3,3,2,cells(1),cells(2),cells3), target, intent(out) :: & + r !< residuum field PetscObject :: dummy PetscErrorCode :: err_PETSc @@ -582,14 +582,10 @@ subroutine formResidual(in, FandF_tau, & i, j, k, e - F => FandF_tau(1:3,1:3,1,& - XG_RANGE,YG_RANGE,ZG_RANGE) - F_tau => FandF_tau(1:3,1:3,2,& - XG_RANGE,YG_RANGE,ZG_RANGE) - r_F => r(1:3,1:3,1,& - X_RANGE, Y_RANGE, Z_RANGE) - r_F_tau => r(1:3,1:3,2,& - X_RANGE, Y_RANGE, Z_RANGE) + F => FandF_tau(1:3,1:3,1,1:cells(1),1:cells(2),1:cells3) + F_tau => FandF_tau(1:3,1:3,2,1:cells(1),1:cells(2),1:cells3) + r_F => r(1:3,1:3,1,1:cells(1),1:cells(2),1:cells3) + r_F_tau => r(1:3,1:3,2,1:cells(1),1:cells(2),1:cells3) F_av = sum(sum(sum(F,dim=5),dim=4),dim=3) * wgt call MPI_Allreduce(MPI_IN_PLACE,F_av,9_MPI_INTEGER_KIND,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD,err_MPI) diff --git a/src/grid/grid_thermal_spectral.f90 b/src/grid/grid_thermal_spectral.f90 index 474d18196..063028ee1 100644 --- a/src/grid/grid_thermal_spectral.f90 +++ b/src/grid/grid_thermal_spectral.f90 @@ -315,16 +315,14 @@ end subroutine grid_thermal_spectral_restartWrite !-------------------------------------------------------------------------------------------------- !> @brief forms the spectral thermal residual vector !-------------------------------------------------------------------------------------------------- -subroutine formResidual(in,x_scal,r,dummy,err_PETSc) +subroutine formResidual(residual_subdomain,x_scal,r,dummy,err_PETSc) DMDALocalInfo, dimension(DMDA_LOCAL_INFO_SIZE) :: & - in - real(pReal), dimension( & - XG_RANGE,YG_RANGE,ZG_RANGE), intent(in) :: & + residual_subdomain + real(pReal), dimension(cells(1),cells(2),cells3), intent(in) :: & x_scal - real(pReal), dimension( & - X_RANGE,Y_RANGE,Z_RANGE), intent(out) :: & - r !< residual + real(pReal), dimension(cells(1),cells(2),cells3), intent(out) :: & + r !< residual PetscObject :: dummy PetscErrorCode, intent(out) :: err_PETSc From 7c6c46c2db64500c15f359a5a5cfcbed00e8cdfa Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Mon, 5 Dec 2022 10:39:42 +0100 Subject: [PATCH 5/6] return value of fftw function is defined as cdouble --- src/grid/spectral_utilities.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/grid/spectral_utilities.f90 b/src/grid/spectral_utilities.f90 index 1ca1d0b16..7947dc788 100644 --- a/src/grid/spectral_utilities.f90 +++ b/src/grid/spectral_utilities.f90 @@ -42,9 +42,9 @@ module spectral_utilities !-------------------------------------------------------------------------------------------------- ! variables storing information for spectral method and FFTW - real(pReal), dimension(:,:,:,:,:), pointer :: tensorField_real !< tensor field in real space - real(pReal), dimension(:,:,:,:), pointer :: vectorField_real !< vector field in real space - real(pReal), dimension(:,:,:), pointer :: scalarField_real !< scalar field in real space + real(C_DOUBLE), dimension(:,:,:,:,:), pointer :: tensorField_real !< tensor field in real space + real(C_DOUBLE), dimension(:,:,:,:), pointer :: vectorField_real !< vector field in real space + real(C_DOUBLE), dimension(:,:,:), pointer :: scalarField_real !< scalar field in real space complex(C_DOUBLE_COMPLEX), dimension(:,:,:,:,:), pointer :: tensorField_fourier !< tensor field in Fourier space complex(C_DOUBLE_COMPLEX), dimension(:,:,:,:), pointer :: vectorField_fourier !< vector field in Fourier space complex(C_DOUBLE_COMPLEX), dimension(:,:,:), pointer :: scalarField_fourier !< scalar field in Fourier space From e8aeb4435de7a596e7dff398fa22f5a825756b79 Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Wed, 7 Dec 2022 14:33:33 +0100 Subject: [PATCH 6/6] polishing --- src/prec.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/prec.f90 b/src/prec.f90 index c56ee500b..6a13889ba 100644 --- a/src/prec.f90 +++ b/src/prec.f90 @@ -255,7 +255,7 @@ subroutine selfTest() real(pReal), dimension(2) :: r #ifdef PETSC - if (pReal /= pPETSCSCALAR) error stop 'PetSC and Fortran scalar datatypes do not match' + if (pReal /= pPETSCSCALAR) error stop 'PetSc and Fortran scalar datatypes do not match' #endif realloc_lhs_test = [1,2] if (any(realloc_lhs_test/=[1,2])) error stop 'LHS allocation'