tpm_trans.F90 Source File


This file depends on

sourcefile~~tpm_trans.f90~~EfferentGraph sourcefile~tpm_trans.f90 tpm_trans.F90 sourcefile~growing_allocator_mod.f90 growing_allocator_mod.F90 sourcefile~tpm_trans.f90->sourcefile~growing_allocator_mod.f90 sourcefile~parkind_ectrans.f90 parkind_ectrans.F90 sourcefile~tpm_trans.f90->sourcefile~parkind_ectrans.f90

Files dependent on this one

sourcefile~~tpm_trans.f90~~AfferentGraph sourcefile~tpm_trans.f90 tpm_trans.F90 sourcefile~asre1b_mod.f90 asre1b_mod.F90 sourcefile~asre1b_mod.f90->sourcefile~tpm_trans.f90 sourcefile~asre1bad_mod.f90 asre1bad_mod.F90 sourcefile~asre1bad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~cdmap_mod.f90 cdmap_mod.F90 sourcefile~cdmap_mod.f90->sourcefile~tpm_trans.f90 sourcefile~cdmap_mod.f90~2 cdmap_mod.F90 sourcefile~cdmap_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~dir_trans.f90 dir_trans.F90 sourcefile~dir_trans.f90->sourcefile~tpm_trans.f90 sourcefile~dir_trans_ctl_mod.f90 dir_trans_ctl_mod.F90 sourcefile~dir_trans.f90->sourcefile~dir_trans_ctl_mod.f90 sourcefile~dir_trans.f90~2 dir_trans.F90 sourcefile~dir_trans.f90~2->sourcefile~tpm_trans.f90 sourcefile~dir_trans.f90~2->sourcefile~dir_trans_ctl_mod.f90 sourcefile~dir_trans_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltdir_mod.f90 ltdir_mod.F90 sourcefile~dir_trans_ctl_mod.f90->sourcefile~ltdir_mod.f90 sourcefile~trgtol_mod.f90 trgtol_mod.F90 sourcefile~dir_trans_ctl_mod.f90->sourcefile~trgtol_mod.f90 sourcefile~dir_transad.f90~2 dir_transad.F90 sourcefile~dir_transad.f90~2->sourcefile~tpm_trans.f90 sourcefile~dir_trans_ctlad_mod.f90 dir_trans_ctlad_mod.F90 sourcefile~dir_transad.f90~2->sourcefile~dir_trans_ctlad_mod.f90 sourcefile~fourier_in_mod.f90 fourier_in_mod.F90 sourcefile~fourier_in_mod.f90->sourcefile~tpm_trans.f90 sourcefile~fourier_inad_mod.f90 fourier_inad_mod.F90 sourcefile~fourier_inad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~fourier_out_mod.f90 fourier_out_mod.F90 sourcefile~fourier_out_mod.f90->sourcefile~tpm_trans.f90 sourcefile~fourier_outad_mod.f90 fourier_outad_mod.F90 sourcefile~fourier_outad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~fsc_mod.f90 fsc_mod.F90 sourcefile~fsc_mod.f90->sourcefile~tpm_trans.f90 sourcefile~fsc_mod.f90~2 fsc_mod.F90 sourcefile~fsc_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~fscad_mod.f90 fscad_mod.F90 sourcefile~fscad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~fspgl_int_mod.f90 fspgl_int_mod.F90 sourcefile~fspgl_int_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ftdir_ctl_mod.f90 ftdir_ctl_mod.F90 sourcefile~ftdir_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ftdir_ctl_mod.f90->sourcefile~fourier_out_mod.f90 sourcefile~ftdir_ctl_mod.f90->sourcefile~trgtol_mod.f90 sourcefile~ftinv_ctl_mod.f90 ftinv_ctl_mod.F90 sourcefile~ftinv_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ftinv_ctl_mod.f90->sourcefile~fourier_in_mod.f90 sourcefile~ftinv_ctl_mod.f90->sourcefile~fsc_mod.f90 sourcefile~trltog_mod.f90 trltog_mod.F90 sourcefile~ftinv_ctl_mod.f90->sourcefile~trltog_mod.f90 sourcefile~ftinv_ctlad_mod.f90 ftinv_ctlad_mod.F90 sourcefile~ftinv_ctlad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ftinv_ctlad_mod.f90->sourcefile~fourier_inad_mod.f90 sourcefile~ftinv_ctlad_mod.f90->sourcefile~fscad_mod.f90 sourcefile~ftinv_ctlad_mod.f90->sourcefile~trgtol_mod.f90 sourcefile~gpnorm_trans.f90 gpnorm_trans.F90 sourcefile~gpnorm_trans.f90->sourcefile~tpm_trans.f90 sourcefile~gpnorm_trans.f90->sourcefile~trgtol_mod.f90 sourcefile~gpnorm_trans_ctl_mod.f90 gpnorm_trans_ctl_mod.F90 sourcefile~gpnorm_trans_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~gpnorm_trans_ctl_mod.f90->sourcefile~trgtol_mod.f90 sourcefile~gpnorm_trans_gpu.f90 gpnorm_trans_gpu.F90 sourcefile~gpnorm_trans_gpu.f90->sourcefile~tpm_trans.f90 sourcefile~gpnorm_trans_gpu.f90->sourcefile~trgtol_mod.f90 sourcefile~inigptr_mod.f90 inigptr_mod.F90 sourcefile~inigptr_mod.f90->sourcefile~tpm_trans.f90 sourcefile~inigptr_mod.f90~2 inigptr_mod.F90 sourcefile~inigptr_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~inv_trans.f90 inv_trans.F90 sourcefile~inv_trans.f90->sourcefile~tpm_trans.f90 sourcefile~inv_trans_ctl_mod.f90 inv_trans_ctl_mod.F90 sourcefile~inv_trans.f90->sourcefile~inv_trans_ctl_mod.f90 sourcefile~inv_trans.f90~2 inv_trans.F90 sourcefile~inv_trans.f90~2->sourcefile~tpm_trans.f90 sourcefile~inv_trans.f90~2->sourcefile~inv_trans_ctl_mod.f90 sourcefile~inv_trans_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~inv_trans_ctl_mod.f90->sourcefile~fsc_mod.f90 sourcefile~ltinv_mod.f90 ltinv_mod.F90 sourcefile~inv_trans_ctl_mod.f90->sourcefile~ltinv_mod.f90 sourcefile~inv_trans_ctl_mod.f90->sourcefile~trltog_mod.f90 sourcefile~inv_trans_ctl_mod.f90~2 inv_trans_ctl_mod.F90 sourcefile~inv_trans_ctl_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~inv_trans_ctl_mod.f90~2->sourcefile~ftinv_ctl_mod.f90 sourcefile~ltinv_ctl_mod.f90 ltinv_ctl_mod.F90 sourcefile~inv_trans_ctl_mod.f90~2->sourcefile~ltinv_ctl_mod.f90 sourcefile~inv_trans_ctlad_mod.f90 inv_trans_ctlad_mod.F90 sourcefile~inv_trans_ctlad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~inv_trans_ctlad_mod.f90->sourcefile~ftinv_ctlad_mod.f90 sourcefile~ltinv_ctlad_mod.f90 ltinv_ctlad_mod.F90 sourcefile~inv_trans_ctlad_mod.f90->sourcefile~ltinv_ctlad_mod.f90 sourcefile~inv_transad.f90~2 inv_transad.F90 sourcefile~inv_transad.f90~2->sourcefile~tpm_trans.f90 sourcefile~inv_transad.f90~2->sourcefile~inv_trans_ctlad_mod.f90 sourcefile~ltdir_ctl_mod.f90 ltdir_ctl_mod.F90 sourcefile~ltdir_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltdir_ctl_mod.f90->sourcefile~ltdir_mod.f90 sourcefile~ltdir_ctlad_mod.f90 ltdir_ctlad_mod.F90 sourcefile~ltdir_ctlad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltdirad_mod.f90 ltdirad_mod.F90 sourcefile~ltdir_ctlad_mod.f90->sourcefile~ltdirad_mod.f90 sourcefile~ltdir_mod.f90->sourcefile~tpm_trans.f90 sourcefile~updsp_mod.f90 updsp_mod.F90 sourcefile~ltdir_mod.f90->sourcefile~updsp_mod.f90 sourcefile~ltdir_mod.f90~2 ltdir_mod.F90 sourcefile~ltdir_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~ltdir_mod.f90~2->sourcefile~cdmap_mod.f90 sourcefile~ltdir_mod.f90~2->sourcefile~updsp_mod.f90 sourcefile~prfi2_mod.f90 prfi2_mod.F90 sourcefile~ltdir_mod.f90~2->sourcefile~prfi2_mod.f90 sourcefile~ltinv_ctl_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltinv_ctl_mod.f90->sourcefile~ltinv_mod.f90 sourcefile~ltinv_ctlad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltinvad_mod.f90 ltinvad_mod.F90 sourcefile~ltinv_ctlad_mod.f90->sourcefile~ltinvad_mod.f90 sourcefile~ltinv_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltinv_mod.f90~2 ltinv_mod.F90 sourcefile~ltinv_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~ltinv_mod.f90~2->sourcefile~asre1b_mod.f90 sourcefile~ltinv_mod.f90~2->sourcefile~cdmap_mod.f90 sourcefile~ltinv_mod.f90~2->sourcefile~fspgl_int_mod.f90 sourcefile~ltinvad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~ltinvad_mod.f90->sourcefile~asre1bad_mod.f90 sourcefile~prfi2b_mod.f90 prfi2b_mod.F90 sourcefile~prfi2b_mod.f90->sourcefile~tpm_trans.f90 sourcefile~prfi2bad_mod.f90 prfi2bad_mod.F90 sourcefile~prfi2bad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~trans_end.f90 trans_end.F90 sourcefile~trans_end.f90->sourcefile~tpm_trans.f90 sourcefile~trans_end.f90~2 trans_end.F90 sourcefile~trans_end.f90~2->sourcefile~tpm_trans.f90 sourcefile~trgtol_mod.f90->sourcefile~tpm_trans.f90 sourcefile~trgtol_mod.f90~2 trgtol_mod.F90 sourcefile~trgtol_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~trgtol_mod.f90~2->sourcefile~inigptr_mod.f90 sourcefile~trltog_mod.f90->sourcefile~tpm_trans.f90 sourcefile~trltog_mod.f90~2 trltog_mod.F90 sourcefile~trltog_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~trltog_mod.f90~2->sourcefile~inigptr_mod.f90 sourcefile~updsp_mod.f90->sourcefile~tpm_trans.f90 sourcefile~updsp_mod.f90~2 updsp_mod.F90 sourcefile~updsp_mod.f90~2->sourcefile~tpm_trans.f90 sourcefile~updspad_mod.f90 updspad_mod.F90 sourcefile~updspad_mod.f90->sourcefile~tpm_trans.f90 sourcefile~asre1_mod.f90 asre1_mod.F90 sourcefile~asre1_mod.f90->sourcefile~asre1b_mod.f90 sourcefile~asre1ad_mod.f90 asre1ad_mod.F90 sourcefile~asre1ad_mod.f90->sourcefile~asre1bad_mod.f90 sourcefile~dir_trans_ctl_mod.f90~2 dir_trans_ctl_mod.F90 sourcefile~dir_trans_ctl_mod.f90~2->sourcefile~ftdir_ctl_mod.f90 sourcefile~dir_trans_ctl_mod.f90~2->sourcefile~ltdir_ctl_mod.f90 sourcefile~dir_trans_ctlad_mod.f90->sourcefile~ltdir_ctlad_mod.f90 sourcefile~ftdir_ctlad_mod.f90 ftdir_ctlad_mod.F90 sourcefile~dir_trans_ctlad_mod.f90->sourcefile~ftdir_ctlad_mod.f90 sourcefile~ftdir_ctlad_mod.f90->sourcefile~fourier_outad_mod.f90 sourcefile~ftdir_ctlad_mod.f90->sourcefile~trltog_mod.f90 sourcefile~gpnorm_trans.f90~2 gpnorm_trans.F90 sourcefile~gpnorm_trans.f90~2->sourcefile~gpnorm_trans_ctl_mod.f90 sourcefile~ltdirad_mod.f90->sourcefile~updspad_mod.f90 sourcefile~prfi2ad_mod.f90 prfi2ad_mod.F90 sourcefile~ltdirad_mod.f90->sourcefile~prfi2ad_mod.f90 sourcefile~prfi2_mod.f90->sourcefile~prfi2b_mod.f90 sourcefile~prfi2ad_mod.f90->sourcefile~prfi2bad_mod.f90

Source Code

! (C) Copyright 2000- ECMWF.
! (C) Copyright 2000- Meteo-France.
! (C) Copyright 2022- NVIDIA.
! 
! This software is licensed under the terms of the Apache Licence Version 2.0
! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
! In applying this licence, ECMWF does not waive the privileges and immunities
! granted to it by virtue of its status as an intergovernmental organisation
! nor does it submit to any jurisdiction.
!

MODULE TPM_TRANS

! Module to contain variables "local" to a specific call to a transform

!
USE PARKIND_ECTRANS  ,ONLY : JPIM,   JPRBT
USE GROWING_ALLOCATOR_MOD, ONLY: GROWING_ALLOCATION_TYPE
USE ISO_C_BINDING, ONLY: C_INT8_T

IMPLICIT NONE

SAVE

!INTEGER_M :: NF_UV      ! Number of u-v fields (spectral/fourier space)
!INTEGER_M :: NF_SCALARS ! Number of scalar fields (spectral/fourier space)
!INTEGER_M :: NF_SCDERS  ! Number of fields for derivatives of scalars
                        ! (inverse transform, spectral/fourier space)
!INTEGER_M :: NF_OUT_LT  ! Number of fields that comes out of Inverse
                        ! Legendre transform
INTEGER(KIND=JPIM) :: NF_SC2  ! Number of fields in "SPSC2" arrays.
INTEGER(KIND=JPIM) :: NF_SC3A ! Number of fields in "SPSC3A" arrays.
INTEGER(KIND=JPIM) :: NF_SC3B ! Number of fields in "SPSC3B" arrays.

!LOGICAL   :: LUV        ! uv fields requested
!LOGICAL   :: LSCALAR    ! scalar fields requested
LOGICAL   :: LVORGP     ! vorticity requested
LOGICAL   :: LDIVGP     ! divergence requested
LOGICAL   :: LUVDER     ! E-W derivatives of U and V requested
LOGICAL   :: LSCDERS    ! derivatives of scalar variables are req.
LOGICAL   :: LATLON     ! lat-lon output requested

!INTEGER_M :: NLEI2 ! 8*NF_UV + 2*NF_SCALARS + 2*NF_SCDERS (dimension in
                   ! inverse  Legendre transform)
!INTEGER_M :: NLED2 ! 2*NF_FS (dimension in direct Legendre transform)

!INTEGER_M :: NF_FS    ! Total number of fields in Fourier space

!INTEGER_M :: NF_GP        ! Total number of field in grid-point space
!INTEGER_M :: NF_UV_G      ! Global version of NF_UV (grid-point space)
!INTEGER_M :: NF_SCALARS_G ! Global version of NF_SCALARS (grid-point space)

REAL(KIND=JPRBT), ALLOCATABLE :: FOUBUF_IN(:)  ! Fourier buffer
REAL(KIND=JPRBT), ALLOCATABLE :: FOUBUF(:)     ! Fourier buffer

INTEGER(KIND=JPIM) :: NPROMA  ! Blocking factor for gridpoint input/output
INTEGER(KIND=JPIM) :: NGPBLKS ! Number of NPROMA blocks

LOGICAL :: LGPNORM = .FALSE.  ! indicates whether transform is being done for gpnorm

! This is used in fourier space and in spectral space. It's reused among
! the transforms because we cannot reallocate - the captured graphs
! should not be modified. Hence, we keep it if it is large enough, otherwise
! we adapt the size. After 2 iterations this should lead to constant runtimes
! (the first iteration is used to get the max buffer size, the second iteration
! is going to recreate the graphs if needed)
TYPE(GROWING_ALLOCATION_TYPE) :: GROWING_ALLOCATION

END MODULE TPM_TRANS