Skip to content
Snippets Groups Projects
compute_frac_ice.func.h 1.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 2006-2019 CNRS, Meteo-France and Universite Paul Sabatier
    !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
    !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
    !MNH_LIC for details. version 1.
    
          ELEMENTAL SUBROUTINE COMPUTE_FRAC_ICE(HFRAC_ICE,PFRAC_ICE,PT,KERR)
    
    ! ******* TO BE INCLUDED IN THE *CONTAINS* OF A SUBROUTINE, IN ORDER TO EASE AUTOMATIC INLINING ******
    ! => Don't use drHook !!!
    
    !
    !!****  *COMPUTE_FRAC_ICE* - computes ice fraction
    
    !!    AUTHOR
    !!    ------
    !!      Julien PERGAUD      * Meteo-France *
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original         13/03/06
    !!      S. Riette        April 2011 optimisation
    !!      S. Riette        08/2016 add option O
    
    !!      R. El Khatib     12-Aug-2021 written as a include file
    
    !
    !! --------------------------------------------------------------------------
    USE MODD_NEB, ONLY : XTMINMIX, XTMAXMIX
    USE MODD_CST, ONLY : XTT
    !
    IMPLICIT NONE
    !
    
    CHARACTER(LEN=1), INTENT(IN)    :: HFRAC_ICE       ! scheme to use
    REAL,             INTENT(IN)    :: PT              ! temperature
    REAL,             INTENT(INOUT) :: PFRAC_ICE       ! Ice fraction (1 for ice only, 0 for liquid only)
    INTEGER,          INTENT(OUT)   :: KERR            ! Error code in return
    
    !
    !------------------------------------------------------------------------
    
    !                1. Compute FRAC_ICE
    !
    
    SELECT CASE(HFRAC_ICE)
      CASE ('T') !using Temperature
    
        PFRAC_ICE = MAX( 0., MIN(1., (( XTMAXMIX - PT ) / ( XTMAXMIX - XTMINMIX )) ) ) ! freezing interval
    
      CASE ('O') !using Temperature with old formulae
    
        PFRAC_ICE = MAX( 0., MIN(1., (( XTT - PT ) / 40.) ) ) ! freezing interval
    
      CASE ('N') !No ice
    
      CASE ('S') !Same as previous
        ! (almost) nothing to do
    
        PFRAC_ICE = MAX( 0., MIN(1., PFRAC_ICE ) )
    
      CASE DEFAULT
    
    END SELECT
    
    END SUBROUTINE COMPUTE_FRAC_ICE