Closed HCJung-jbnu closed 1 year ago
ROMS의 경우 Total decayW(i,j,k,1)을 계산해서
TOPAZ의 sw_frac_zw(i,j,k) = decayW(i,j,k,1)
~/ROMS/Nonlinear/pre_step3d.F 에서 short wave fraction을 받음 -> swdk
ROMS-COBALT 참조해서 water type -> generic_TOPAZ_model.F90 의 SUB. topaz_optic에 적용
SUB. topaz_optic에서 sw_frac_zw는 ROMS의 swdk로 전달하고, PAR는 TOPAZ의 update_from_source 로 전달.
!-----------------------------------------------------------------------
! Set incoming solar shortwave radiation (degC m/s). Usually, the
! shortwave radiation from input files is Watts/m2 and then converted
! to degC m/s by multiplying by conversion factor 1/(rho0*Cp) during
! reading (Fscale). However, we are already inside ROMS kernel here
! and all the fluxes are kinematic so shortwave radiation units need
! to be degC m/s.
#ifdef ISOMIP
real(dp) :: Cp = 3974.0_r8 ! mod (4/24/06) for ICETEST
#else
real(dp) :: Cp = 3985.0_r8 ! Joules/kg/degC
#endif
!
! Mean density (Kg/m3) used when the Boussinesq approximation is
! inferred.
!
real(dp) :: rho0 = 1025.0_dp
SUBROUTINE inp_par
cff=1.0_r8/(rho0*Cp)
Fscale(idSrad,ng)=cff*Fscale(idSrad,ng) = 2.448205159592374E-007
wrk(i)=Ascl(2.448205159592374E-007)*(Afactor(1.0)*wrk(i)+Aoffset(0.0))
Photosynthetically active radiation (PAR) (0.4–0.7 μm) and shortwave radiation (SI) (0.285–2.8 μm)
! ! Calculate surface Photosynthetically Available Radiation (PAR). The ! net shortwave radiation is scaled back to Watts/m2 and multiplied by ! the fraction that is photosynthetically available, PARfrac. ! DO i=Istr,Iend PARsur(i)=PARfrac(ng)srflx(i,j)rho0*Cp END DO !
do i = isc, iec; do j = jsc, jec
f_vis(i,j)=TP(ng)%visfrac(i,j)
f_ir(i,j)=1.0-TP(ng)%visfrac(i,j)
end do; end do
do n= 1, num_diag_tracers
if ( T_diag(n)%name .eq. 'chl' ) then
do i = isc, iec; do j = jsc, jec; do k = 1, Grids%nk
chl(i,j,k)=TP(ng)%diag_trc(i,j,k,n-1)*rho0/1000.0 !!ug/kg -> mg/m3
end do; end do; end do
endif
end do
do i = isc, iec
do j = jsc, jec
TP(ng)%decayW(i,j,0)=1.0 !! k=1=TOP=surface W, k=Grids%nk=BOTTOM W
k=1
vis_irr(i,j)=TP(ng)%qsr(i,j)*f_vis(i,j)
red(i,j,k)=0.5*exp(-TP(ng)%dzt(i,j,k)*(0.225+(0.037*chl(i,j,k)**0.629)))
blue(i,j,k)=0.5*exp(-TP(ng)%dzt(i,j,k)*(0.0232+(0.074*chl(i,j,k)**0.674)))
sw_frac_zw(i,j,k)=f_vis(i,j)*(red(i,j,k)+blue(i,j,k))
sw_frac_zt(i,j,k)=0.5*(f_vis(i,j)+sw_frac_zw(i,j,k))
INTP(ng)%opacity(i,j,k)=-log(sw_frac_zw(i,j,k)/f_vis(i,j))/TP(ng)%dzt(i,j,k)
INTP(ng)%par(i,j,k)=vis_irr(i,j)*exp(-INTP(ng)%opacity(i,j,k)*TP(ng)%dzt(i,j,k)*0.5)
vis_irr(i,j)=vis_irr(i,j)*exp(-INTP(ng)%opacity(i,j,k)*TP(ng)%dzt(i,j,k))
TP(ng)%decayW(i,j,k)=(f_ir(i,j)*exp(-TP(ng)%k_ir(i,j)*ABS(TP(ng)%depth_w(i,j,k))))+red(i,j,k)+blue(i,j,k)
do k = 2, Grids%nk
red(i,j,k)=red(i,j,k-1)*exp(-TP(ng)%dzt(i,j,k)*(0.2250+(0.037*chl(i,j,k)**0.629)))
blue(i,j,k)=blue(i,j,k-1)*exp(-TP(ng)%dzt(i,j,k)*(0.0232+(0.074*chl(i,j,k)**0.674)))
sw_frac_zw(i,j,k)=f_vis(i,j)*(red(i,j,k)+blue(i,j,k)) !!<---- ROMS-optic TOTAL decayW(i,j,k,1)
sw_frac_zt(i,j,k)=0.5*(sw_frac_zw(i,j,k-1)+sw_frac_zw(i,j,k))
INTP(ng)%opacity(i,j,k)=-log(sw_frac_zw(i,j,k)/sw_frac_zw(i,j,k-1))/TP(ng)%dzt(i,j,k)
if ( ABS(TP(ng)%depth_w(i,j,k-1)) <= 200.0 ) then !!mom:200m, nemo:400m, aphotic zone depth
INTP(ng)%par(i,j,k)=vis_irr(i,j)*exp(-INTP(ng)%opacity(i,j,k)*TP(ng)%dzt(i,j,k)*0.5)
vis_irr(i,j)=vis_irr(i,j)*exp(-INTP(ng)%opacity(i,j,k)*TP(ng)%dzt(i,j,k))
TP(ng)%decayW(i,j,k)=(f_ir(i,j)*exp(-TP(ng)%k_ir(i,j)*ABS(TP(ng)%depth_w(i,j,k))))+red(i,j,k)+blue(i,j,k)
else
INTP(ng)%par(i,j,k)=0.0
vis_irr(i,j)=0.0
TP(ng)%decayW(i,j,k)=0.0
end if
end do
end do
end do
deallocate(chl, sw_frac_zt, sw_frac_zw, red, blue, f_vis, f_ir, vis_irr)
.......
# ifdef SOLAR_SOURCE
# if defined TOPAZ && defined OPTIC2TEMP_MANIZZA
!!hcjung 20230530, add TOPAZ optic
! Use the fraction of solar shortwave radiation, as computed by optic_manizza from TOPAZ,
! (at vertical W-points) penetrating water column.
DO k=0,N(ng)
DO j=Jstr,Jend
DO i=Istr,Iend
swdk(i,j,k) = TP(ng)%decayW(i,j,N(ng)-k)
END DO
END DO
ENDDO
if (tile .eq. 300) print*,'hcjung swdk',swdk(Istr+3,Jstr+3,:)
# else
.......
~/Nonlinear/main3d.F
# if defined TOPAZ
......
!!hcjung 20230704, add TOPAZ optic manizza
!
!-----------------------------------------------------------------------
! Compute fractional decay for light penetration as a function of
! Chlorophyll concentration
!-----------------------------------------------------------------------
!
DO ig=1,GridsInLayer(nl)
ng=GridNumber(ig,nl)
DO tile=last_tile(ng),first_tile(ng),-1
Istr = BOUNDS(ng)%Istr(tile); Iend = BOUNDS(ng)%Iend(tile)
Jstr = BOUNDS(ng)%Jstr(tile); Jend = BOUNDS(ng)%Jend(tile)
DO j=Jstr, Jend
DO i=Istr, Iend
TP(ng)%qsr(i,j)=FORCES(ng)%srflx(i,j)*rho0*Cp !!degC m/s -> Watts/m2
TP(ng)%visfrac(i,j)=1.0-lmd_r1(INT(MIXING(ng)%Jwtype(i,j))) !define visible and IR fraction according to variable water type
TP(ng)%k_ir(i,j)=1.0/lmd_mu1(INT(MIXING(ng)%Jwtype(i,j))) !define InfraRed decay scale according to variable water type
END DO
END DO
DO j=Jstr,Jend
DO i=Istr,Iend
DO k=1,N(ng)
TP(ng)%dzt(i,j,k)=GRID(ng)%Hz(i,j,N(ng)-k+1) !!rho point vertical thickness(m)
! TP(ng)%dzt(i,j,k)=GRID(ng)%z_w(i,j,N(ng)-k+1)-GRID(ng)%z_w(i,j,N(ng)-k)
END DO
DO k = 0, N(ng) !!In TOPAZ, 0=TOP, N(ng)=BOTTOM, as opposed to ROMS
TP(ng)%depth_w(i,j,k)=GRID(ng)%z_w(i,j,N(ng)) - GRID(ng)%z_w(i,j,N(ng)-k)
END DO
END DO
END DO
CALL topaz_optic(ng, tile, rho0)
END DO
!$OMP BARRIER
END DO
#endif
........
.....
!add Optic manizza2temp on option, hcjung 20230704
#if defined OPTIC2TEMP_MANIZZA & defined TOPAZ
!
IF (Master) WRITE (stdout,20) 'OPTIC2TEMP_MANIZZA', &
& 'Turn on manizza optic to increase sea temp'
is=LEN_TRIM(Coptions)+1
Coptions(is:is+20)=' OPTIC2TEMP_MANIZZA,'
#endif
.....
*/
/* TOPAZv2 biology model OPTIONS: **
** **
** TOPAZ if TOPAZ main model **
** PCO2AIR_DATA if pCO2 climatology from Laurent et al. (2017) **
** PCO2AIR_SECULAR if pCO2 time-depedent evolution **
** SRCSINK_OFF turn off TOPAZ source&sink term **
** CO2_FLUX_OFF turn off CO2 air-sea exchange **
** O2_FLUX_OFF turn off O2 air-sea exchange **
** OPTIC2TEMP_MANIZZA turn on minizza optic to increase sea temp **
** */
ROMS shortwave radiation?