SURFEX v7.3
General documentation of Surfex
|
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