Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dom #6

Draft
wants to merge 12 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/biogeophys/Waterlnd2atmType.F90
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ module Waterlnd2atmType
real(r8), pointer :: qflx_rofice_grc (:) ! rof ice forcing, grc level
real(r8), pointer :: qflx_liq_from_ice_col(:) ! liquid runoff from converted ice runoff
real(r8), pointer :: qirrig_grc (:) ! irrigation flux
real(r8), pointer :: qflx_rofdoc_grc (:) ! rof DOC

contains

Expand Down Expand Up @@ -136,6 +137,10 @@ subroutine InitAllocate(this, bounds, tracer_vars)
container = tracer_vars, &
bounds = bounds, subgrid_level = subgrid_level_gridcell, &
ival=ival)
call AllocateVar1d(var = this%qflx_rofdoc_grc, name = 'qflx_rofdoc_grc', &
container = tracer_vars, &
bounds = bounds, subgrid_level = subgrid_level_gridcell, &
ival=ival)

end subroutine InitAllocate

Expand Down
7 changes: 7 additions & 0 deletions src/cpl/nuopc/lnd_import_export.F90
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ module lnd_import_export
character(*), parameter :: Fall_voc = 'Fall_voc'
character(*), parameter :: Fall_fire = 'Fall_fire'
character(*), parameter :: Sl_fztop = 'Sl_fztop'
character(*), parameter :: Flrl_rofdoc = 'Flrl_rofdoc'
character(*), parameter :: Flrl_rofsur = 'Flrl_rofsur'
character(*), parameter :: Flrl_rofsub = 'Flrl_rofsub'
character(*), parameter :: Flrl_rofgwl = 'Flrl_rofgwl'
Expand Down Expand Up @@ -298,6 +299,7 @@ subroutine advertise_fields(gcomp, flds_scalar_name, glc_present, cism_evolve, r
call fldlist_add(fldsFrLnd_num, fldsFrlnd, Flrl_rofsub)
call fldlist_add(fldsFrLnd_num, fldsFrlnd, Flrl_rofi )
call fldlist_add(fldsFrLnd_num, fldsFrlnd, Flrl_irrig )
call fldlist_add(fldsFrLnd_num, fldsFrlnd, Flrl_rofdoc)
end if

! export to glc if appropriate
Expand Down Expand Up @@ -894,6 +896,11 @@ subroutine export_fields( gcomp, bounds, glc_present, rof_prognostic, &
call state_setexport_1d(exportState, Flrl_rofsub, data1d(begg:), init_spval=.true., rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
end if
if (fldchk(exportState, Flrl_rofdoc)) then
call state_setexport_1d(exportState, Flrl_rofdoc, waterlnd2atmbulk_inst%qflx_rofdoc_grc(begg:), &
init_spval=.true., rc=rc)
if (ChkErr(rc,__LINE__,u_FILE_u)) return
end if

! -----------------------
! output to glc
Expand Down
2 changes: 1 addition & 1 deletion src/main/clm_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1305,7 +1305,7 @@ subroutine clm_drv(doalb, nextsw_cday, declinp1, declin, rstwr, nlend, rdate, ro
water_inst, &
energyflux_inst, solarabs_inst, drydepvel_inst, &
vocemis_inst, fireemis_inst, dust_inst, ch4_inst, glc_behavior, &
lnd2atm_inst, &
lnd2atm_inst, soilbiogeochem_carbonflux_inst, &
net_carbon_exchange_grc = net_carbon_exchange_grc(bounds_proc%begg:bounds_proc%endg))
deallocate(net_carbon_exchange_grc)
call t_stopf('lnd2atm')
Expand Down
8 changes: 7 additions & 1 deletion src/main/lnd2atmMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ module lnd2atmMod
use LandunitType , only : lun
use GridcellType , only : grc
use landunit_varcon , only : istice
use SoilBiogeochemCarbonFluxType , only : soilbiogeochem_carbonflux_type
!
! !PUBLIC TYPES:
implicit none
Expand Down Expand Up @@ -151,7 +152,7 @@ subroutine lnd2atm(bounds, &
water_inst, &
energyflux_inst, solarabs_inst, drydepvel_inst, &
vocemis_inst, fireemis_inst, dust_inst, ch4_inst, glc_behavior, &
lnd2atm_inst, &
lnd2atm_inst, soilbiogeochem_carbonflux_inst, &
net_carbon_exchange_grc)
!
! !DESCRIPTION:
Expand All @@ -177,6 +178,7 @@ subroutine lnd2atm(bounds, &
type(glc_behavior_type) , intent(in) :: glc_behavior
type(lnd2atm_type) , intent(inout) :: lnd2atm_inst
real(r8) , intent(in) :: net_carbon_exchange_grc( bounds%begg: ) ! net carbon exchange between land and atmosphere, positive for source (gC/m2/s)
type(soilbiogeochem_carbonflux_type) , intent(in) :: soilbiogeochem_carbonflux_inst
!
! !LOCAL VARIABLES:
integer :: c, g ! indices
Expand Down Expand Up @@ -335,6 +337,10 @@ subroutine lnd2atm(bounds, &
!----------------------------------------------------
! lnd -> rof
!----------------------------------------------------
call c2g( bounds, &
soilbiogeochem_carbonflux_inst%doc_col (bounds%begc:bounds%endc), &
water_inst%waterlnd2atmbulk_inst%qflx_rofdoc_grc (bounds%begg:bounds%endg), &
c2l_scale_type= 'urbanf', l2g_scale_type='unity' )

call c2g( bounds, &
water_inst%waterfluxbulk_inst%qflx_surf_col (bounds%begc:bounds%endc), &
Expand Down
141 changes: 136 additions & 5 deletions src/soilbiogeochem/SoilBiogeochemCarbonFluxType.F90

Large diffs are not rendered by default.

100 changes: 98 additions & 2 deletions src/soilbiogeochem/SoilBiogeochemDecompCascadeBGCMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,17 @@ module SoilBiogeochemDecompCascadeBGCMod
real(r8), private :: f_s2s1
real(r8), private :: f_s2s3

real(r8) :: df_l1s1
real(r8) :: df_l2s1
real(r8) :: df_l3s2
real(r8) :: df_s1s2
real(r8) :: df_s1s3
real(r8) :: df_s2s1
real(r8) :: df_s2s3
real(r8) :: df_s3s1
real(r8) :: df_cwdl2
real(r8) :: df_cwdl3

integer, private :: i_l1s1
integer, private :: i_l2s1
integer, private :: i_l3s2
Expand All @@ -88,6 +99,17 @@ module SoilBiogeochemDecompCascadeBGCMod

real(r8):: rf_cwdl3_bgc

real(r8) :: df_l1s1_bgc
real(r8) :: df_l2s1_bgc
real(r8) :: df_l3s2_bgc
real(r8) :: df_s1s2_bgc
real(r8) :: df_s1s3_bgc
real(r8) :: df_s2s1_bgc
real(r8) :: df_s2s3_bgc
real(r8) :: df_s3s1_bgc
real(r8) :: df_cwdl2_bgc
real(r8) :: df_cwdl3_bgc

real(r8):: tau_l1_bgc ! 1/turnover time of litter 1 from Century (l/18.5) (1/yr)
real(r8):: tau_l2_l3_bgc ! 1/turnover time of litter 2 and litter 3 from Century (1/4.9) (1/yr)
real(r8):: tau_s1_bgc ! 1/turnover time of SOM 1 from Century (1/7.3) (1/yr)
Expand Down Expand Up @@ -220,6 +242,56 @@ subroutine readParams ( ncid )
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%bgc_initial_Cstocks_depth=tempr

tString='bgc_df_l1s1'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_l1s1_bgc=tempr

tString='bgc_df_l2s1'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_l2s1_bgc=tempr

tString='bgc_df_l3s2'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_l3s2_bgc=tempr

tString='bgc_df_s1s2'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_s1s2_bgc=tempr

tString='bgc_df_s1s3'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_s1s3_bgc=tempr

tString='bgc_df_s2s1'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_s2s1_bgc=tempr

tString='bgc_df_s2s3'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_s2s3_bgc=tempr

tString='bgc_df_s3s1'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_s3s1_bgc=tempr

tString='bgc_df_cwdl2'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_cwdl2_bgc=tempr

tString='bgc_df_cwdl3'
call ncd_io(trim(tString),tempr, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%df_cwdl3_bgc=tempr

end subroutine readParams

!-----------------------------------------------------------------------
Expand Down Expand Up @@ -287,6 +359,18 @@ subroutine init_decompcascade_bgc(bounds, soilbiogeochem_state_inst, soilstate_i

rf_cwdl3 = params_inst%rf_cwdl3_bgc

! set doc fractions for fluxes between compartments
df_l1s1 = params_inst%df_l1s1_bgc
df_l2s1 = params_inst%df_l2s1_bgc
df_l3s2 = params_inst%df_l3s2_bgc
df_s1s2 = params_inst%df_s1s2_bgc
df_s1s3 = params_inst%df_s1s3_bgc
df_s2s1 = params_inst%df_s2s1_bgc
df_s2s3 = params_inst%df_s2s3_bgc
df_s3s1 = params_inst%df_s3s1_bgc
df_cwdl2 = params_inst%df_cwdl2_bgc
df_cwdl3 = params_inst%df_cwdl3_bgc

! set the cellulose and lignin fractions for coarse woody debris
cwd_fcel = params_inst%cwd_fcel_bgc

Expand Down Expand Up @@ -579,8 +663,9 @@ subroutine decomp_rate_constants_bgc(bounds, num_soilc, filter_soilc, &
o2stress_sat => ch4_inst%o2stress_sat_col , & ! Input: [real(r8) (:,:) ] Ratio of oxygen available to that demanded by roots, aerobes, & methanotrophs (nlevsoi)
o2stress_unsat => ch4_inst%o2stress_unsat_col , & ! Input: [real(r8) (:,:) ] Ratio of oxygen available to that demanded by roots, aerobes, & methanotrophs (nlevsoi)
finundated => ch4_inst%finundated_col , & ! Input: [real(r8) (:) ] fractional inundated area
rf_decomp_cascade => soilbiogeochem_carbonflux_inst%rf_decomp_cascade_col , & ! Output: [real(r8) (:,:,:) ] respired fraction in decomposition step (frac)
pathfrac_decomp_cascade => soilbiogeochem_carbonflux_inst%pathfrac_decomp_cascade_col , & ! Output: [real(r8) (:,:,:) ] what fraction of C passes from donor to receiver pool through a given transition (frac)
rf_decomp_cascade => soilbiogeochem_carbonflux_inst%rf_decomp_cascade_col , & ! Output: [real(r8) (:,:,:) ] respired fraction in decomposition step (frac)
df_decomp_cascade => soilbiogeochem_carbonflux_inst%df_decomp_cascade_col , & ! Output: [real(r8) (:,:,:) ] doc fraction in decomposition step (frac)
pathfrac_decomp_cascade => soilbiogeochem_carbonflux_inst%pathfrac_decomp_cascade_col , & ! Output: [real(r8) (:,:,:) ] what fraction of C passes from donor to receiver pool through a given transition (frac)
t_scalar => soilbiogeochem_carbonflux_inst%t_scalar_col , & ! Output: [real(r8) (:,:) ] soil temperature scalar for decomp
w_scalar => soilbiogeochem_carbonflux_inst%w_scalar_col , & ! Output: [real(r8) (:,:) ] soil water scalar for decomp
o_scalar => soilbiogeochem_carbonflux_inst%o_scalar_col , & ! Output: [real(r8) (:,:) ] fraction by which decomposition is limited by anoxia
Expand Down Expand Up @@ -917,6 +1002,8 @@ subroutine decomp_rate_constants_bgc(bounds, num_soilc, filter_soilc, &
pathfrac_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_cwdl3) = cwd_flig
rf_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_cwdl2) = rf_cwdl2
rf_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_cwdl3) = rf_cwdl3
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_cwdl2) = df_cwdl2
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_cwdl3) = df_cwdl3
end if
rf_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_l1s1) = rf_l1s1
rf_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_l2s1) = rf_l2s1
Expand All @@ -927,6 +1014,15 @@ subroutine decomp_rate_constants_bgc(bounds, num_soilc, filter_soilc, &
rf_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s2s3) = rf_s2s3
rf_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s3s1) = rf_s3s1

df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_l1s1) = df_l1s1
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_l2s1) = df_l2s1
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_l3s2) = df_l3s2
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s1s2) = df_s1s2
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s1s3) = df_s1s3
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s2s1) = df_s2s1
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s2s3) = df_s2s3
df_decomp_cascade(bounds%begc:bounds%endc,1:nlevdecomp,i_s3s1) = df_s3s1

end associate

end subroutine decomp_rate_constants_bgc
Expand Down
24 changes: 17 additions & 7 deletions src/soilbiogeochem/SoilBiogeochemDecompMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ subroutine SoilBiogeochemDecomp (bounds, num_soilc, filter_soilc,
!
! !USES:
use SoilBiogeochemDecompCascadeConType, only : i_atm
use abortutils , only: endrun
!
! !ARGUMENT:
type(bounds_type) , intent(in) :: bounds
Expand Down Expand Up @@ -113,6 +114,7 @@ subroutine SoilBiogeochemDecomp (bounds, num_soilc, filter_soilc,

fpi_vr => soilbiogeochem_state_inst%fpi_vr_col , & ! Input: [real(r8) (:,:) ] fraction of potential immobilization (no units)
rf_decomp_cascade => soilbiogeochem_carbonflux_inst%rf_decomp_cascade_col , & ! Input: [real(r8) (:,:,:) ] respired fraction in decomposition step (frac)
df_decomp_cascade => soilbiogeochem_carbonflux_inst%df_decomp_cascade_col , & ! Input: [real(r8) (:,:,:) ] doc fraction in decomposition step (frac)

decomp_npools_vr => soilbiogeochem_nitrogenstate_inst%decomp_npools_vr_col , & ! Input: [real(r8) (:,:,:) ] (gC/m3) vertically-resolved decomposing (litter, cwd, soil) N pools
decomp_cpools_vr => soilbiogeochem_carbonstate_inst%decomp_cpools_vr_col , & ! Input: [real(r8) (:,:,:) ] (gC/m3) vertically-resolved decomposing (litter, cwd, soil) c pools
Expand All @@ -129,6 +131,7 @@ subroutine SoilBiogeochemDecomp (bounds, num_soilc, filter_soilc,
w_scalar => soilbiogeochem_carbonflux_inst%w_scalar_col , & ! Input: [real(r8) (:,:) ] fraction by which decomposition is limited by moisture availability
c_overflow_vr => soilbiogeochem_carbonflux_inst%c_overflow_vr , & ! Input: [real(r8) (:,:,:) ] vertically-resolved C rejected by microbes that cannot process it (gC/m3/s)
decomp_cascade_hr_vr => soilbiogeochem_carbonflux_inst%decomp_cascade_hr_vr_col , & ! Output: [real(r8) (:,:,:) ] vertically-resolved het. resp. from decomposing C pools (gC/m3/s)
decomp_cascade_doc_vr => soilbiogeochem_carbonflux_inst%decomp_cascade_doc_vr_col , & ! Output: [real(r8) (:,:,:) ] vertically-resolved DOC prod. from decomposing C pools (gC/m3/s)
decomp_cascade_ctransfer_vr => soilbiogeochem_carbonflux_inst%decomp_cascade_ctransfer_vr_col , & ! Output: [real(r8) (:,:,:) ] vertically-resolved het. resp. from decomposing C pools (gC/m3/s)
phr_vr => soilbiogeochem_carbonflux_inst%phr_vr_col , & ! Input: [real(r8) (:,:) ] potential HR (gC/m3/s)
fphr => soilbiogeochem_carbonflux_inst%fphr_col & ! Output: [real(r8) (:,:) ] fraction of potential SOM + LITTER heterotrophic
Expand Down Expand Up @@ -187,13 +190,19 @@ subroutine SoilBiogeochemDecomp (bounds, num_soilc, filter_soilc,
sminn_to_denit_decomp_cascade_vr(c,j,k) = -params_inst%dnp * pmnf_decomp_cascade(c,j,k)
end if
end if
if (rf_decomp_cascade(c,j,k)+df_decomp_cascade(c,j,k) >= 1._r8) then
write(iulog,*) 'Decomposition fractions too large: c:',c,'j',j,'k', &
k,'rf_decomp_cascade',rf_decomp_cascade(c,j,k),"rf_decomp_cascade",df_decomp_cascade(c,j,k)
call endrun(msg='Decomposition fractions too large'//errMsg(sourcefile, __LINE__))
end if
decomp_cascade_hr_vr(c,j,k) = rf_decomp_cascade(c,j,k) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_ctransfer_vr(c,j,k) = (1._r8 - rf_decomp_cascade(c,j,k)) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_doc_vr(c,j,k) = df_decomp_cascade(c,j,k) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_ctransfer_vr(c,j,k) = (1._r8 - rf_decomp_cascade(c,j,k) - df_decomp_cascade(c,j,k)) * p_decomp_cpool_loss(c,j,k)
if (decomp_method == mimics_decomp) then
decomp_cascade_hr_vr(c,j,k) = min( &
p_decomp_cpool_loss(c,j,k), &
p_decomp_cpool_loss(c,j,k) - decomp_cascade_doc_vr(c,j,k), &
decomp_cascade_hr_vr(c,j,k) + c_overflow_vr(c,j,k))
decomp_cascade_ctransfer_vr(c,j,k) = max(0.0_r8, p_decomp_cpool_loss(c,j,k) - decomp_cascade_hr_vr(c,j,k))
decomp_cascade_ctransfer_vr(c,j,k) = max(0.0_r8, p_decomp_cpool_loss(c,j,k) - decomp_cascade_hr_vr(c,j,k) - decomp_cascade_doc_vr(c,j,k))
end if
if (decomp_npools_vr(c,j,cascade_donor_pool(k)) > 0._r8 .and. cascade_receiver_pool(k) /= i_atm) then
decomp_cascade_ntransfer_vr(c,j,k) = p_decomp_cpool_loss(c,j,k) / cn_decomp_pools(c,j,cascade_donor_pool(k))
Expand Down Expand Up @@ -227,13 +236,14 @@ subroutine SoilBiogeochemDecomp (bounds, num_soilc, filter_soilc,
do fc = 1,num_soilc
c = filter_soilc(fc)
!
decomp_cascade_hr_vr(c,j,k) = rf_decomp_cascade(c,j,k) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_ctransfer_vr(c,j,k) = (1._r8 - rf_decomp_cascade(c,j,k)) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_hr_vr(c,j,k) = rf_decomp_cascade(c,j,k) * (1._r8 - df_decomp_cascade(c,j,k)) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_doc_vr(c,j,k) = df_decomp_cascade(c,j,k) * (1._r8 - rf_decomp_cascade(c,j,k)) * p_decomp_cpool_loss(c,j,k)
decomp_cascade_ctransfer_vr(c,j,k) = (1._r8 - rf_decomp_cascade(c,j,k)- df_decomp_cascade(c,j,k)) * p_decomp_cpool_loss(c,j,k)
if (decomp_method == mimics_decomp) then
decomp_cascade_hr_vr(c,j,k) = min( &
p_decomp_cpool_loss(c,j,k), &
p_decomp_cpool_loss(c,j,k) - decomp_cascade_doc_vr(c,j,k), &
decomp_cascade_hr_vr(c,j,k) + c_overflow_vr(c,j,k))
decomp_cascade_ctransfer_vr(c,j,k) = max(0.0_r8, p_decomp_cpool_loss(c,j,k) - decomp_cascade_hr_vr(c,j,k))
decomp_cascade_ctransfer_vr(c,j,k) = max(0.0_r8, p_decomp_cpool_loss(c,j,k) - decomp_cascade_hr_vr(c,j,k) - decomp_cascade_doc_vr(c,j,k))
end if
!
end do
Expand Down
Loading