SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/spinup_max.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE SPINUP_MAX(PSPINMAX,KNBYEARSPIN,KNBYEARSOLD,KSPIN)
00003   
00004 !     #######################################################################
00005 !
00006 !
00007 !!****  *SPINUP_MAX*  
00008 !!
00009 !!    PURPOSE
00010 !!    -------
00011 !!    Number of times the accelerated subroutine is called  
00012 !!     
00013 !!**  METHOD
00014 !!    ------
00015 !!
00016 !!    EXTERNAL
00017 !!    --------
00018 !!
00019 !!    IMPLICIT ARGUMENTS
00020 !!    ------------------ 
00021 !!
00022 !!      
00023 !!    REFERENCE
00024 !!    ---------
00025 !!      
00026 !!    AUTHOR
00027 !!    ------
00028 !!      R. Alkama           * Meteo-France *
00029 !!
00030 !!    MODIFICATIONS
00031 !!    -------------
00032 !!      Original      03/26/2012
00033 !-------------------------------------------------------------------------------
00034 !
00035 !*       0.     DECLARATIONS
00036 !               ------------
00037 !
00038 !
00039 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00040 USE PARKIND1  ,ONLY : JPRB
00041 !
00042 IMPLICIT NONE
00043 !
00044 !*      0.1    declarations of arguments
00045 !
00046 !
00047 REAL,    INTENT(IN)   :: PSPINMAX  ! max number of times the accelerated subroutine
00048                                    ! is called for each time step in simulation
00049                                    ! during the acceleration procedure
00050 
00051 INTEGER, INTENT(IN)   :: KNBYEARSPIN ! spinup duration in years
00052                                      ! nbr of years needed to reach the equilibrium
00053 INTEGER, INTENT(IN)   :: KNBYEARSOLD 
00054 INTEGER, INTENT(OUT)  :: KSPIN        
00055 !                                         
00056 !                                         
00057 !
00058 !*      0.2    declarations of local variables
00059 !
00060 !
00061 REAL, PARAMETER  :: ZSPINFRAC = 0.75 ! fraction of KNBYEARSPIN period used to
00062                                      ! spin up soil at its maximum PSPINMAX
00063 REAL             :: ZSLOPE
00064 !
00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00066 !
00067 !-------------------------------------------------------------------------------
00068 !
00069 !       1.     Initializations
00070 !              ---------------
00071 !
00072 IF (LHOOK) CALL DR_HOOK('SPINUP_MAX',0,ZHOOK_HANDLE)
00073 !
00074 IF ( KNBYEARSOLD <= (ZSPINFRAC * KNBYEARSPIN))THEN
00075    !
00076    KSPIN = NINT(PSPINMAX)
00077    !
00078 ELSE IF (KNBYEARSOLD < KNBYEARSPIN)THEN
00079    !
00080    ZSLOPE  = PSPINMAX / (REAL(KNBYEARSPIN) - ZSPINFRAC * KNBYEARSPIN)
00081    !
00082    KSPIN = NINT(PSPINMAX - ZSLOPE * (KNBYEARSOLD - ZSPINFRAC * KNBYEARSPIN))
00083    !
00084    KSPIN = MAX(KSPIN,1)
00085    !
00086 ELSE
00087    KSPIN = 1
00088 ENDIF
00089 !
00090 IF (LHOOK) CALL DR_HOOK('SPINUP_MAX',1,ZHOOK_HANDLE)
00091 !
00092 !
00093 !-------------------------------------------------------------------------------
00094 !
00095 END SUBROUTINE