- Timestamp:
- 2017-12-23T13:27:17+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DIU/diurnal_bulk.F90
r6010 r9168 19 19 20 20 IMPLICIT NONE 21 PRIVATE 21 22 22 23 ! Namelist parameters … … 34 35 ! ! absorbed radiation 35 36 36 PRIVATE37 37 PUBLIC diurnal_sst_bulk_init, diurnal_sst_takaya_step 38 38 39 CONTAINS 39 !!---------------------------------------------------------------------- 40 CONTAINS 40 41 41 42 SUBROUTINE diurnal_sst_bulk_init … … 43 44 !! *** ROUTINE diurnal_sst_init *** 44 45 !! 45 !! ** Purpose : Initialise the Takaya diurnal model 46 47 !!---------------------------------------------------------------------- 48 49 IMPLICIT NONE 50 51 INTEGER :: ios 52 46 !! ** Purpose : Initialise the Takaya diurnal model 47 !!---------------------------------------------------------------------- 48 INTEGER :: ios ! local integer 49 !! 53 50 NAMELIST /namdiu/ ln_diurnal, ln_diurnal_only 54 51 !!---------------------------------------------------------------------- 52 55 53 ! Read the namelist 56 54 REWIND( numnam_ref ) 57 READ ( numnam_ref, namdiu, IOSTAT = ios, ERR = 901 )58 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdiu in reference namelist', lwp )55 READ ( numnam_ref, namdiu, IOSTAT = ios, ERR = 901 ) 56 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdiu in reference namelist', lwp ) 59 57 REWIND( numnam_cfg ) 60 READ ( numnam_cfg, namdiu, IOSTAT = ios, ERR = 902 )61 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'namdiu in configuration namelist', lwp )62 63 IF 58 READ ( numnam_cfg, namdiu, IOSTAT = ios, ERR = 902 ) 59 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namdiu in configuration namelist', lwp ) 60 ! 61 IF( ln_diurnal_only .AND. ( .NOT. ln_diurnal ) ) THEN 64 62 CALL ctl_stop( "ln_diurnal_only set, but ln_diurnal = FALSE !" ) 65 63 ENDIF 66 64 67 IF ( ln_diurnal ) THEN 68 69 ! Allocate arrays 65 IF( ln_diurnal ) THEN 66 ! 70 67 ALLOCATE( x_dsst(jpi,jpj), x_solfrac(jpi,jpj) ) 71 72 ! Initialise the solar fraction 73 x_solfrac = 0._wp 74 x_dsst = 0._wp 75 76 IF ( ln_diurnal_only ) THEN 68 ! 69 x_solfrac = 0._wp ! Initialise the solar fraction 70 x_dsst = 0._wp 71 ! 72 IF( ln_diurnal_only ) THEN 77 73 CALL ctl_warn( "ln_diurnal_only set; only the diurnal component of SST will be calculated" ) 78 74 ENDIF … … 80 76 81 77 END SUBROUTINE diurnal_sst_bulk_init 82 83 SUBROUTINE diurnal_sst_takaya_step(kt, psolflux, pqflux, ptauflux, prho, p_rdt,& 78 79 80 SUBROUTINE diurnal_sst_takaya_step(kt, psolflux, pqflux, ptauflux, prho, p_rdt, & 84 81 & pla, pthick, pcoolthick, pmu, & 85 82 & p_fvel_bkginc, p_hflux_bkginc) … … 96 93 !! temperature, Takaya et al, JGR, 2010 97 94 !!---------------------------------------------------------------------- 98 99 IMPLICIT NONE 100 101 ! Dummy variables 102 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: psolflux ! solar flux (Watts) 103 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: pqflux ! heat (non-solar) 104 ! ! flux (Watts) 105 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: ptauflux ! wind stress 106 ! ! (kg/ m s^2) 107 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: prho ! water density 108 ! ! (kg/m^3) 109 REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(jpi,jpj) :: pLa 110 ! ! Langmuir number 111 REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(jpi,jpj) :: pthick 112 ! ! warm layer thickness (m) 113 REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(jpi,jpj) :: pcoolthick 114 ! ! cool skin thickness (m) 115 REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(jpi,jpj) :: pmu 116 ! ! mu parameter 117 REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(jpi,jpj) :: p_hflux_bkginc 118 ! ! optional increment to the 119 ! ! heat flux 120 REAL(wp), OPTIONAL, INTENT(IN), DIMENSION(jpi,jpj) :: p_fvel_bkginc 121 ! ! optional increment to the 122 ! ! friction velocity 123 REAL(wp), INTENT(IN) :: p_rdt ! time-step 124 125 ! Local variables 95 INTEGER , INTENT(in) :: kt ! time step 96 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: psolflux ! solar flux (Watts) 97 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pqflux ! heat (non-solar) flux (Watts) 98 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: ptauflux ! wind stress (kg/ m s^2) 99 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: prho ! water density (kg/m^3) 100 REAL(wp) , INTENT(in) :: p_rdt ! time-step 101 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: pLa ! Langmuir number 102 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: pthick ! warm layer thickness (m) 103 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: pcoolthick ! cool skin thickness (m) 104 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: pmu ! mu parameter 105 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: p_hflux_bkginc ! increment to the heat flux 106 REAL(wp), DIMENSION(jpi,jpj), OPTIONAL, INTENT(in) :: p_fvel_bkginc ! increment to the friction velocity 107 ! 108 INTEGER :: ji,jj 109 LOGICAL :: ll_calcfrac 126 110 REAL(wp), DIMENSION(jpi,jpj) :: z_fvel ! friction velocity 127 111 REAL(wp), DIMENSION(jpi,jpj) :: zthick, zcoolthick, zmu, zla 128 112 REAL(wp), DIMENSION(jpi,jpj) :: z_abflux ! absorbed flux 129 113 REAL(wp), DIMENSION(jpi,jpj) :: z_fla ! Langmuir function value 130 131 LOGICAL :: ll_calcfrac 132 133 INTEGER :: ji,jj 134 INTEGER, INTENT(IN) :: kt ! time step 114 !!---------------------------------------------------------------------- 135 115 136 116 ! Set optional arguments to their defaults 137 IF ( .NOT. PRESENT(pthick) ) THEN 138 zthick(:,:) = 3._wp 139 ELSE 140 zthick(:,:) = pthick(:,:) 141 ENDIF 142 IF ( .NOT. PRESENT(pcoolthick) ) THEN 143 zcoolthick(:,:) = 0._wp 144 ELSE 145 zcoolthick(:,:) = pcoolthick(:,:) 146 ENDIF 147 IF ( .NOT. PRESENT(pmu) ) THEN 148 zmu(:,:) = 0.3_wp 149 ELSE 150 zmu(:,:) = pmu(:,:) 151 ENDIF 152 IF ( .NOT. PRESENT(pla) ) THEN 153 zla(:,:) = 0.3_wp 154 ELSE 155 zla(:,:) = pla(:,:) 117 IF( .NOT. PRESENT( pthick ) ) THEN ; zthick(:,:) = 3._wp 118 ELSE ; zthick(:,:) = pthick(:,:) 119 ENDIF 120 IF( .NOT. PRESENT(pcoolthick) ) THEN ; zcoolthick(:,:) = 0._wp 121 ELSE ; zcoolthick(:,:) = pcoolthick(:,:) 122 ENDIF 123 IF( .NOT. PRESENT( pmu ) ) THEN ; zmu(:,:) = 0.3_wp 124 ELSE ; zmu(:,:) = pmu(:,:) 125 ENDIF 126 IF( .NOT. PRESENT(pla) ) THEN ; zla(:,:) = 0.3_wp 127 ELSE ; zla(:,:) = pla(:,:) 156 128 ENDIF 157 129 … … 161 133 DO ji = 1, jpi 162 134 IF( ( x_solfrac(ji,jj) == 0._wp ) .AND. ( tmask(ji,jj,1) == 1._wp ) ) & 163 & x_solfrac(ji,jj) = solfrac( zcoolthick(ji,jj),zthick(ji,jj) )135 & x_solfrac(ji,jj) = solfrac( zcoolthick(ji,jj),zthick(ji,jj) ) 164 136 END DO 165 137 END DO … … 195 167 196 168 ! Increment the temperature using the implicit solution 197 x_dsst(:,:) = t_imp( x_dsst(:,:), p_rdt, z_abflux(:,:), z_fvel(:,:), & 198 z_fla(:,:), zmu(:,:), zthick(:,:), prho(:,:)) 199 200 201 169 x_dsst(:,:) = t_imp( x_dsst(:,:), p_rdt, z_abflux(:,:), z_fvel(:,:), & 170 & z_fla(:,:), zmu(:,:), zthick(:,:), prho(:,:) ) 171 ! 202 172 END SUBROUTINE diurnal_sst_takaya_step 203 173
Note: See TracChangeset
for help on using the changeset viewer.