Changeset 11873
- Timestamp:
- 2019-11-07T18:15:22+01:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/field_def_nemo-oce.xml
r11587 r11873 361 361 <field id="q_dta" long_name="DTA specific humidity" standard_name="dta_qspe" unit="kg/kg" /> 362 362 <field id="coeft" long_name="ABL nudging coefficient" standard_name="coeft" unit="" /> 363 <field id="tke_abl" long_name="ABL turbulent kinetic energy" standard_name="abl_tke" unit="m2/s2" /> 364 <field id="avm_abl" long_name="ABL turbulent viscosity" standard_name="abl_avm" unit="m2/s" /> 365 <field id="avt_abl" long_name="ABL turbulent diffusivity" standard_name="abl_avt" unit="m2/s" /> 366 <field id="mxl_abl" long_name="ABL mixing length" standard_name="abl_mxl" unit="m" /> 363 367 </field_group> 364 368 -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ABL/ablmod.F90
r11586 r11873 45 45 & , ptm_su,pssu_ice,pssv_ice,pssq_ice,pcd_du_ice & 46 46 & , psen_ice, pevp_ice, pwndm_ice, pfrac_oce & 47 47 & , ptaui_ice, ptauj_ice & 48 48 #endif 49 49 & ) … … 127 127 DO jj = 1,jpj 128 128 DO ji = 1,jpi 129 130 #if defined key_si3 131 132 129 zzoce = pCd_du (ji,jj) * pwndm (ji,jj) 130 #if defined key_si3 131 zzice = pCd_du_ice(ji,jj) * pwndm_ice(ji,jj) 132 ustar2(ji,jj) = zzoce * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * zzice 133 133 #else 134 135 #endif 134 ustar2(ji,jj) = zzoce 135 #endif 136 136 END DO 137 137 END DO … … 153 153 DO jk = 3, jpkam1 154 154 DO ji = 1, jpi ! vector opt. 155 z_elem_a( ji, jk ) = - rdt_abl * Avt_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) 156 z_elem_c( ji, jk ) = - rdt_abl * Avt_abl( ji, jj, jk ) / e3w_abl( jk ) 157 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal155 z_elem_a( ji, jk ) = - rdt_abl * Avt_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 156 z_elem_c( ji, jk ) = - rdt_abl * Avt_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 157 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 158 158 END DO 159 159 END DO … … 168 168 z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) 169 169 END DO 170 170 171 171 DO jtra = 1,jptq ! loop on active tracers 172 172 173 173 DO jk = 3, jpkam1 174 DO ji = fs_2, fs_jpim1174 DO ji = 1,jpi 175 175 tq_abl ( ji, jj, jk, nt_a, jtra ) = e3t_abl(jk) * tq_abl ( ji, jj, jk, nt_n, jtra ) ! initialize right-hand-side 176 176 END DO … … 178 178 179 179 IF(jtra == jp_ta) THEN 180 DO ji = 1,jpi ! surface boundary conditionfor temperature180 DO ji = 1,jpi ! boundary conditions for temperature 181 181 zztmp1 = psen(ji, jj) 182 182 zztmp2 = psen(ji, jj) * ( psst(ji, jj) + rt0 ) 183 183 #if defined key_si3 184 184 zztmp1 = zztmp1 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * psen_ice(ji,jj) 185 185 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * psen_ice(ji,jj) * ptm_su(ji,jj) 186 186 #endif 187 z_elem_b( ji, 2) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rdt_abl * zztmp1188 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2, nt_n, jtra ) + rdt_abl * zztmp2189 187 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rdt_abl * zztmp1 188 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + rdt_abl * zztmp2 189 tq_abl ( ji, jj, jpka, nt_a, jtra ) = e3t_abl( jpka ) * tq_abl ( ji, jj, jpka, nt_n, jtra ) 190 190 END DO 191 191 ELSE 192 DO ji = 1,jpi ! surface boundary conditionfor humidity192 DO ji = 1,jpi ! boundary conditions for humidity 193 193 zztmp1 = pevp(ji, jj) 194 194 zztmp2 = pevp(ji, jj) * pssq(ji, jj) 195 195 #if defined key_si3 196 196 zztmp1 = zztmp1 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pevp_ice(ji,jj) 197 197 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pevp_ice(ji, jj) * pssq_ice(ji, jj) 198 198 #endif 199 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rdt_abl * zztmp1200 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2, nt_n, jtra ) + rdt_abl * zztmp2199 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rdt_abl * zztmp1 200 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + rdt_abl * zztmp2 201 201 tq_abl ( ji, jj, jpka, nt_a, jtra ) = e3t_abl( jpka ) * tq_abl ( ji, jj, jpka, nt_n, jtra ) 202 202 END DO … … 442 442 zcff = (1._wp-zmsk) + zmsk * zcff2 * rdt ! zcff = 1 for masked points 443 443 ! rdt = rdt_abl / nn_fsbc 444 zcff = zcff * rest_eq(ji,jj) ; z_cft( ji, jj, jk ) = zcff 445 444 zcff = zcff * rest_eq(ji,jj) 445 z_cft( ji, jj, jk ) = zcff 446 446 u_abl( ji, jj, jk, nt_a ) = (1._wp - zcff ) * u_abl( ji, jj, jk, nt_a ) & 447 447 & + zcff * pu_dta( ji, jj, jk ) … … 468 468 zcff = (1._wp-zmsk) + zmsk * zcff2 * rdt ! zcff = 1 for masked points 469 469 ! rdt = rdt_abl / nn_fsbc 470 !z_cft( ji, jj, jk ) = zcff 470 471 tq_abl( ji, jj, jk, nt_a, jp_ta ) = (1._wp - zcff ) * tq_abl( ji, jj, jk, nt_a, jp_ta ) & 471 472 & + zcff * pt_dta( ji, jj, jk ) … … 474 475 & + zcff * pq_dta( ji, jj, jk ) 475 476 476 ! z_cft( ji, jj, jk ) = zcff477 477 END DO 478 478 END DO … … 483 483 ! ! 6 *** MPI exchanges 484 484 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 485 ! 486 CALL lbc_lnk_multi( 'ablmod', u_abl(:,:,:,nt_a ), 'T', -1., v_abl(:,:,:,nt_a ), 'T', -1., kfillmode = jpfillnothing ) 487 CALL lbc_lnk_multi( 'ablmod', tq_abl(:,:,:,nt_a,jp_ta), 'T', 1., tq_abl(:,:,:,nt_a,jp_qa), 'T', 1., kfillmode = jpfillnothing ) ! ++++ this should not be needed... 488 ! 489 CALL iom_put ( 'u_abl', u_abl(:,:,2:jpka,nt_a )) 490 CALL iom_put ( 'v_abl', v_abl(:,:,2:jpka,nt_a )) 491 CALL iom_put ( 't_abl', tq_abl(:,:,2:jpka,nt_a,jp_ta)) 492 CALL iom_put ( 'q_abl', tq_abl(:,:,2:jpka,nt_a,jp_qa)) 493 CALL iom_put ( 'coeft', z_cft(:,:,2:jpka )) 494 CALL iom_put ( 'pblh', pblh(:,: )) 485 ! 486 CALL lbc_lnk_multi( 'ablmod', u_abl(:,:,:,nt_a ), 'T', -1., v_abl(:,:,:,nt_a ), 'T', -1. ) 487 ! 488 ! first ABL level 489 IF ( iom_use("uz1_abl") ) CALL iom_put ( "uz1_abl", u_abl(:,:,2,nt_a ) ) 490 IF ( iom_use("vz1_abl") ) CALL iom_put ( "vz1_abl", v_abl(:,:,2,nt_a ) ) 491 IF ( iom_use("tz1_abl") ) CALL iom_put ( "tz1_abl", tq_abl(:,:,2,nt_a,jp_ta) ) 492 IF ( iom_use("qz1_abl") ) CALL iom_put ( "qz1_abl", tq_abl(:,:,2,nt_a,jp_qa) ) 493 IF ( iom_use("uz1_dta") ) CALL iom_put ( "uz1_dta", pu_dta(:,:,2 ) ) 494 IF ( iom_use("vz1_dta") ) CALL iom_put ( "vz1_dta", pv_dta(:,:,2 ) ) 495 IF ( iom_use("tz1_dta") ) CALL iom_put ( "tz1_dta", pt_dta(:,:,2 ) ) 496 IF ( iom_use("qz1_dta") ) CALL iom_put ( "qz1_dta", pq_dta(:,:,2 ) ) 497 ! all ABL levels 498 IF ( iom_use("u_abl" ) ) CALL iom_put ( "u_abl" , u_abl(:,:,2:jpka,nt_a ) ) 499 IF ( iom_use("v_abl" ) ) CALL iom_put ( "v_abl" , v_abl(:,:,2:jpka,nt_a ) ) 500 IF ( iom_use("t_abl" ) ) CALL iom_put ( "t_abl" , tq_abl(:,:,2:jpka,nt_a,jp_ta) ) 501 IF ( iom_use("q_abl" ) ) CALL iom_put ( "q_abl" , tq_abl(:,:,2:jpka,nt_a,jp_qa) ) 502 IF ( iom_use("tke_abl") ) CALL iom_put ( "tke_abl", tke_abl(:,:,2:jpka,nt_a ) ) 503 IF ( iom_use("avm_abl") ) CALL iom_put ( "avm_abl", avm_abl(:,:,2:jpka ) ) 504 IF ( iom_use("avt_abl") ) CALL iom_put ( "avt_abl", avm_abl(:,:,2:jpka ) ) 505 IF ( iom_use("mxl_abl") ) CALL iom_put ( "mxl_abl", mxl_abl(:,:,2:jpka ) ) 506 IF ( iom_use("pblh" ) ) CALL iom_put ( "pblh" , pblh(:,: ) ) 507 ! debug (to be removed) 508 IF ( iom_use("u_dta") ) CALL iom_put ( "u_dta", pu_dta(:,:,2:jpka) ) 509 IF ( iom_use("v_dta") ) CALL iom_put ( "v_dta", pv_dta(:,:,2:jpka) ) 510 IF ( iom_use("t_dta") ) CALL iom_put ( "t_dta", pt_dta(:,:,2:jpka) ) 511 IF ( iom_use("q_dta") ) CALL iom_put ( "q_dta", pq_dta(:,:,2:jpka) ) 512 IF ( iom_use("coeft") ) CALL iom_put ( "coeft", z_cft(:,:,2:jpka) ) 513 IF( ln_geos_winds ) THEN 514 IF ( iom_use("uz1_geo") ) CALL iom_put ( "uz1_geo", pgu_dta(:,:,2 ) ) 515 IF ( iom_use("vz1_geo") ) CALL iom_put ( "vz1_geo", pgv_dta(:,:,2 ) ) 516 END IF 517 IF( ln_hpgls_frc ) THEN 518 IF ( iom_use("uz1_geo") ) CALL iom_put ( "uz1_geo", pgu_dta(:,:,2)/MAX(fft_abl(:,:),2.5e-5_wp) ) 519 IF ( iom_use("vz1_geo") ) CALL iom_put ( "vz1_geo", -pgv_dta(:,:,2)/MAX(fft_abl(:,:),2.5e-5_wp) ) 520 END IF 495 521 ! 496 522 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< … … 772 798 END IF 773 799 END DO 774 ! Optional : could add pblh smoothing if pblh is noisy horizontally ...775 !776 800 !------------- 777 801 END DO 778 802 !------------- 779 IF(ln_smth_pblh) THEN 780 CALL lbc_lnk( 'ablmod', pblh, 'T', 1.) 781 CALL smooth_pblh( pblh, msk_abl ) 782 CALL lbc_lnk( 'ablmod', pblh, 'T', 1.) 783 ENDIF 803 ! 804 ! Optional : could add pblh smoothing if pblh is noisy horizontally ... 805 IF(ln_smth_pblh) THEN 806 CALL lbc_lnk( 'ablmod', pblh, 'T', 1.) 807 CALL smooth_pblh( pblh, msk_abl ) 808 CALL lbc_lnk( 'ablmod', pblh, 'T', 1.) 809 ENDIF 784 810 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 785 811 ! ! Diagnostic mixing length computation
Note: See TracChangeset
for help on using the changeset viewer.