Skip to content
Snippets Groups Projects
modd_refn.f90 3.55 KiB
Newer Older
  • Learn to ignore specific revisions
  • !-----------------------------------------------------------------
    !--------------- special set of characters for RCS information
    !-----------------------------------------------------------------
    ! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_refn.f90,v $ $Revision: 1.2.4.1 $
    ! MASDEV4_7 modd 2006/06/27 12:51:57
    !-----------------------------------------------------------------
    !     #################
          MODULE MODD_REF_n
    !     #################
    !
    !!****  *MODD_REF$n* - declaration of reference state  variables
    !!
    !!    PURPOSE
    !!    -------
    !       The purpose of this declarative module is to declare  the variables
    !     which concern the reference state, used for the anelastic 
    !     approximation. 
    !
    !!
    !!**  IMPLICIT ARGUMENTS
    !!    ------------------
    !!      None 
    !!
    !!    REFERENCE
    !!    ---------
    !!      Book2 of documentation of Meso-NH (module MODD_REFn)
    !!      Technical Specifications Report of the Meso-NH (chapters 2 and 3)
    !!
    !!    AUTHOR
    !!    ------
    !!	V. Ducrocq   *Meteo France*
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original    05/05/94                      
    !!      Modification   03/01/95  (Lafore)  To add the reference mass variables                      
    !!      Modification   09/02/95  (Masson)  To add LINMASS
    !!      Modification   25/07/97  (Stein)   To add XRVREF
    !-------------------------------------------------------------------------------
    !
    !*       0.   DECLARATIONS
    !             ------------
    !
    USE MODD_PARAMETERS, ONLY: JPMODELMAX
    IMPLICIT NONE
    
    TYPE REF_t
    !          
      REAL, DIMENSION(:,:,:), POINTER :: XRHODREF=>NULL()! dry density for ref. state 
      REAL, DIMENSION(:,:,:), POINTER :: XTHVREF=>NULL() ! Thetav for ref. state 
      REAL, DIMENSION(:,:,:), POINTER :: XRVREF=>NULL()  ! mixing Ratio for Vapor computed
                                                        ! for the REFerence state
      REAL, DIMENSION(:,:,:), POINTER :: XEXNREF=>NULL() ! Exner function for ref. state 
    !
      REAL, DIMENSION(:,:,:), POINTER :: XRHODJ=>NULL()  ! ( rhod J ) = dry density 
                  ! for reference state * Jacobian of the GCS transformation.
      REAL                          ::  XREFMASS     ! Total mass of the ref.
                                                        ! state
      REAL                          ::  XMASS_O_PHI0 ! Mass / Phi0
      REAL                          ::  XLINMASS     ! Lineic mass for open
                                                        ! boundaries
    ! 
    END TYPE REF_t
    
    TYPE(REF_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: REF_MODEL
    
    REAL, DIMENSION(:,:,:), POINTER :: XRHODREF=>NULL()
    REAL, DIMENSION(:,:,:), POINTER :: XTHVREF=>NULL()
    REAL, DIMENSION(:,:,:), POINTER :: XRVREF=>NULL()
    REAL, DIMENSION(:,:,:), POINTER :: XEXNREF=>NULL()
    
    !!$REAL, DIMENSION(:,:,:), POINTER :: XRHODJ=>NULL()
    REAL, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: XRHODJ
    !$acc declare mirror (XRHODJ)
    
    REAL, POINTER :: XREFMASS=>NULL()
    REAL, POINTER :: XMASS_O_PHI0=>NULL()
    REAL, POINTER :: XLINMASS=>NULL()
    
    CONTAINS
    
    SUBROUTINE REF_GOTO_MODEL(KFROM, KTO)
    INTEGER, INTENT(IN) :: KFROM, KTO
    !
    ! Save current state for allocated arrays
    REF_MODEL(KFROM)%XRHODREF=>XRHODREF
    REF_MODEL(KFROM)%XTHVREF=>XTHVREF
    REF_MODEL(KFROM)%XRVREF=>XRVREF
    REF_MODEL(KFROM)%XEXNREF=>XEXNREF
    REF_MODEL(KFROM)%XRHODJ=>XRHODJ
    !
    ! Current model is set to model KTO
    XRHODREF=>REF_MODEL(KTO)%XRHODREF
    XTHVREF=>REF_MODEL(KTO)%XTHVREF
    XRVREF=>REF_MODEL(KTO)%XRVREF
    XEXNREF=>REF_MODEL(KTO)%XEXNREF
    
    !!$XRHODJ=>REF_MODEL(KTO)%XRHODJ
    
    XREFMASS=>REF_MODEL(KTO)%XREFMASS
    XMASS_O_PHI0=>REF_MODEL(KTO)%XMASS_O_PHI0
    XLINMASS=>REF_MODEL(KTO)%XLINMASS
    
    END SUBROUTINE REF_GOTO_MODEL
    
    END MODULE MODD_REF_n