576 & ilo, ihi, jlo, jhi, nz, nbt_in,
577 & istr_in, iend_in, jstr_in, jend_in,
578 & use_po4, use_carbon, use_oxygen, use_odu,
579 & use_denit, use_biosed, use_bulk,
580 & use_rivdon, use_talknc,
581 & pco2air_kind, co2_sc_kind, o2_sc_kind,
582 & bioiter_in, dt_sec, rho0_in, cp_in,
583 & p_AttSW, p_AttChl, p_PARfrac, p_Vp0, p_I_thNH4, p_D_p5NH4,
584 & p_NitriR, p_K_NO3, p_K_NH4, p_K_PO4, p_K_Phy, p_Chl2C_m,
585 & p_ChlMin, p_PhyCN, p_R_P2N, p_PhyIP, p_PhyIS, p_PhyMin,
586 & p_PhyMR, p_ZooAE_N, p_ZooCN, p_ZooBM, p_ZooER, p_ZooGR,
587 & p_ZooMin, p_ZooMR, p_LDeRRN, p_LDeRRC, p_CoagR, p_SDeRRN,
588 & p_SDeRRC, p_RDeRRN, p_RDeRRC,
589 & p_wPhy, p_wLDet, p_wSDet, p_pCO2air,
590 & rmask, Hz, z_r, z_w, srflx, sustr, svstr, uwind, vwind, pH,
592 & dbg_level, dbg_i, dbg_j)
593 &
bind(C, name="fennel_bridge_advance_c")
601 integer(C_INT),
VALUE,
intent(in) :: ilo, ihi, jlo, jhi, nz
602 integer(C_INT),
VALUE,
intent(in) :: nbt_in
603 integer(C_INT),
VALUE,
intent(in) :: istr_in, iend_in
604 integer(C_INT),
VALUE,
intent(in) :: jstr_in, jend_in
605 integer(C_INT),
VALUE,
intent(in) :: use_po4, use_carbon
606 integer(C_INT),
VALUE,
intent(in) :: use_oxygen, use_odu
607 integer(C_INT),
VALUE,
intent(in) :: use_denit, use_biosed
608 integer(C_INT),
VALUE,
intent(in) :: use_bulk
609 integer(C_INT),
VALUE,
intent(in) :: use_rivdon, use_talknc
610 integer(C_INT),
VALUE,
intent(in) :: pco2air_kind
611 integer(C_INT),
VALUE,
intent(in) :: co2_sc_kind, o2_sc_kind
612 integer(C_INT),
VALUE,
intent(in) :: bioiter_in
613 real(C_DOUBLE),
VALUE,
intent(in) :: dt_sec, rho0_in, cp_in
614 real(C_DOUBLE),
VALUE,
intent(in) :: p_AttSW, p_AttChl, p_PARfrac
615 real(C_DOUBLE),
VALUE,
intent(in) :: p_Vp0, p_I_thNH4, p_D_p5NH4
616 real(C_DOUBLE),
VALUE,
intent(in) :: p_NitriR, p_K_NO3, p_K_NH4
617 real(C_DOUBLE),
VALUE,
intent(in) :: p_K_PO4, p_K_Phy, p_Chl2C_m
618 real(C_DOUBLE),
VALUE,
intent(in) :: p_ChlMin, p_PhyCN, p_R_P2N
619 real(C_DOUBLE),
VALUE,
intent(in) :: p_PhyIP, p_PhyIS, p_PhyMin
620 real(C_DOUBLE),
VALUE,
intent(in) :: p_PhyMR, p_ZooAE_N, p_ZooCN
621 real(C_DOUBLE),
VALUE,
intent(in) :: p_ZooBM, p_ZooER, p_ZooGR
622 real(C_DOUBLE),
VALUE,
intent(in) :: p_ZooMin, p_ZooMR, p_LDeRRN
623 real(C_DOUBLE),
VALUE,
intent(in) :: p_LDeRRC, p_CoagR, p_SDeRRN
624 real(C_DOUBLE),
VALUE,
intent(in) :: p_SDeRRC
625 real(C_DOUBLE),
VALUE,
intent(in) :: p_RDeRRN, p_RDeRRC
626 real(C_DOUBLE),
VALUE,
intent(in) :: p_wPhy, p_wLDet
627 real(C_DOUBLE),
VALUE,
intent(in) :: p_wSDet, p_pCO2air
628 integer(C_INT),
VALUE,
intent(in) :: dbg_level, dbg_i, dbg_j
630 real(C_DOUBLE),
intent(in) :: rmask(ilo:ihi,jlo:jhi)
631 real(C_DOUBLE),
intent(in) :: Hz(ilo:ihi,jlo:jhi,nz)
632 real(C_DOUBLE),
intent(in) :: z_r(ilo:ihi,jlo:jhi,nz)
633 real(C_DOUBLE),
intent(in) :: z_w(ilo:ihi,jlo:jhi,0:nz)
634 real(C_DOUBLE),
intent(in) :: srflx(ilo:ihi,jlo:jhi)
640 real(C_DOUBLE),
intent(in) :: sustr(ilo:ihi+1,jlo:jhi+1)
641 real(C_DOUBLE),
intent(in) :: svstr(ilo:ihi+1,jlo:jhi+1)
642 real(C_DOUBLE),
intent(in) :: uwind(ilo:ihi,jlo:jhi)
643 real(C_DOUBLE),
intent(in) :: vwind(ilo:ihi,jlo:jhi)
644 real(C_DOUBLE),
intent(inout) :: pH(ilo:ihi,jlo:jhi)
645 real(C_DOUBLE),
intent(in) ::
646 & t_nstp(ilo:ihi,jlo:jhi,nz,nbt_in+2)
647 real(C_DOUBLE),
intent(inout) ::
648 & t_nnew(ilo:ihi,jlo:jhi,nz,nbt_in+2)
650 integer,
parameter :: ng = 1
651 integer,
parameter :: tile = 0
652 integer,
parameter :: kstp = 1
653 integer,
parameter :: knew = 2
655 integer :: i, j, k, itrc, ntrc
657 real(r8),
allocatable :: t(:,:,:,:,:)
667 dt(ng)=real(dt_sec,
r8)
671 bounds(ng)%Istr(tile)=istr_in
672 bounds(ng)%Iend(tile)=iend_in
673 bounds(ng)%Jstr(tile)=jstr_in
674 bounds(ng)%Jend(tile)=jend_in
689 CALL initialize_biology
692 & use_oxygen, use_odu, use_denit,
693 & use_biosed, use_bulk, use_rivdon,
694 & use_talknc, pco2air_kind,
695 & co2_sc_kind, o2_sc_kind)
703 bioiter(ng)=bioiter_in
704 attsw(ng)=real(p_attsw,
r8)
705 attchl(ng)=real(p_attchl,
r8)
706 parfrac(ng)=real(p_parfrac,
r8)
707 vp0(ng)=real(p_vp0,
r8)
708 i_thnh4(ng)=real(p_i_thnh4,
r8)
709 d_p5nh4(ng)=real(p_d_p5nh4,
r8)
710 nitrir(ng)=real(p_nitrir,
r8)
711 k_no3(ng)=real(p_k_no3,
r8)
712 k_nh4(ng)=real(p_k_nh4,
r8)
713 k_po4(ng)=real(p_k_po4,
r8)
714 k_phy(ng)=real(p_k_phy,
r8)
715 chl2c_m(ng)=real(p_chl2c_m,
r8)
716 chlmin(ng)=real(p_chlmin,
r8)
717 phycn(ng)=real(p_phycn,
r8)
718 r_p2n(ng)=real(p_r_p2n,
r8)
719 phyip(ng)=real(p_phyip,
r8)
720 phyis(ng)=real(p_phyis,
r8)
721 phymin(ng)=real(p_phymin,
r8)
722 phymr(ng)=real(p_phymr,
r8)
723 zooae_n(ng)=real(p_zooae_n,
r8)
724 zoocn(ng)=real(p_zoocn,
r8)
725 zoobm(ng)=real(p_zoobm,
r8)
726 zooer(ng)=real(p_zooer,
r8)
727 zoogr(ng)=real(p_zoogr,
r8)
728 zoomin(ng)=real(p_zoomin,
r8)
729 zoomr(ng)=real(p_zoomr,
r8)
730 lderrn(ng)=real(p_lderrn,
r8)
731 lderrc(ng)=real(p_lderrc,
r8)
732 coagr(ng)=real(p_coagr,
r8)
733 sderrn(ng)=real(p_sderrn,
r8)
734 sderrc(ng)=real(p_sderrc,
r8)
735 rderrn(ng)=real(p_rderrn,
r8)
736 rderrc(ng)=real(p_rderrc,
r8)
737 wphy(ng)=real(p_wphy,
r8)
738 wldet(ng)=real(p_wldet,
r8)
739 wsdet(ng)=real(p_wsdet,
r8)
740 pco2air(ng)=real(p_pco2air,
r8)
747 allocate ( t(ilo:ihi,jlo:jhi,nz,3,ntrc) )
753 t(i,j,k,kstp,itrc)=real(t_nstp(i,j,k,itrc),
r8)
754 t(i,j,k,knew,itrc)=real(t_nnew(i,j,k,itrc),
r8)
755 t(i,j,k,3,itrc)=0.0_r8
765 CALL biology_tile (ng, tile,
766 & ilo, ihi, jlo, jhi, nz, ntrc,
767 & ilo, ihi, jlo, jhi,
772 & hz, z_r, z_w, srflx,
773#if defined CARBON || defined OXYGEN
795 t_nnew(i,j,k,itrc)=real(t(i,j,k,knew,itrc),c_double)
809 & use_oxygen, use_odu, use_denit,
810 & use_biosed, use_bulk, use_rivdon,
811 & use_talknc, pco2air_kind,
812 & co2_sc_kind, o2_sc_kind)
819 integer,
intent(in) :: nbt_in
820 integer,
intent(in) :: use_po4, use_carbon, use_oxygen, use_odu
821 integer,
intent(in) :: use_denit, use_biosed, use_bulk
822 integer,
intent(in) :: use_rivdon, use_talknc
823 integer,
intent(in) :: pco2air_kind, co2_sc_kind, o2_sc_kind
827 integer :: want_po4, want_carbon, want_oxygen, want_odu
828 integer :: want_denit, want_biosed, want_bulk
829 integer :: want_rivdon, want_talknc
830 integer :: want_pco2air, want_co2_sc, want_o2_sc
853#ifdef TALK_NONCONSERV
856#if defined PCO2AIR_DATA
858#elif defined PCO2AIR_SECULAR
864#if defined RW14_OXYGEN_SC
866#elif defined OCMIP_OXYGEN_SC
881#ifdef DENITRIFICATION
892 IF (use_po4.ne.want_po4) bad=.true.
893 IF (use_carbon.ne.want_carbon) bad=.true.
894 IF (use_oxygen.ne.want_oxygen) bad=.true.
895 IF (use_odu.ne.want_odu) bad=.true.
896 IF (use_denit.ne.want_denit) bad=.true.
897 IF (use_biosed.ne.want_biosed) bad=.true.
898 IF (use_bulk.ne.want_bulk) bad=.true.
899 IF (use_rivdon.ne.want_rivdon) bad=.true.
900 IF (use_talknc.ne.want_talknc) bad=.true.
901 IF (pco2air_kind.ne.want_pco2air) bad=.true.
902 IF (co2_sc_kind.ne.want_co2_sc) bad=.true.
903 IF (o2_sc_kind.ne.want_o2_sc) bad=.true.
904 IF (nbt_in.ne.
nbt) bad=.true.
939 10
format (/,
' FENNEL BRIDGE: runtime option set does not match the',
940 &
' compiled ROMS CPP set.',/,
941 &
' Comparing these two paths would be invalid.',//,
942 & 3x,
'option',11x,
'runtime',3x,
'compiled')
943 30
format (/,
' Edit Source/Biology/Fortran/remora_bio_cppdefs.h to',
944 &
' match the case, then rebuild.',/)
void fennel_bridge_advance_c(int ilo, int ihi, int jlo, int jhi, int nz, int nbt, int istr, int iend, int jstr, int jend, int use_po4, int use_carbon, int use_oxygen, int use_odu, int use_denit, int use_biosed, int use_bulk, int use_rivdon, int use_talknc, int pco2air_kind, int co2_sc_kind, int o2_sc_kind, int bioiter, double dt_sec, double rho0, double cp_heat, double p_AttSW, double p_AttChl, double p_PARfrac, double p_Vp0, double p_I_thNH4, double p_D_p5NH4, double p_NitriR, double p_K_NO3, double p_K_NH4, double p_K_PO4, double p_K_Phy, double p_Chl2C_m, double p_ChlMin, double p_PhyCN, double p_R_P2N, double p_PhyIP, double p_PhyIS, double p_PhyMin, double p_PhyMR, double p_ZooAE_N, double p_ZooCN, double p_ZooBM, double p_ZooER, double p_ZooGR, double p_ZooMin, double p_ZooMR, double p_LDeRRN, double p_LDeRRC, double p_CoagR, double p_SDeRRN, double p_SDeRRC, double p_RDeRRN, double p_RDeRRC, double p_wPhy, double p_wLDet, double p_wSDet, double p_pCO2air, const double *rmask, const double *Hz, const double *z_r, const double *z_w, const double *srflx, const double *sustr, const double *svstr, const double *uwind, const double *vwind, double *pH, const double *t_nstp, double *t_nnew, int dbg_level, int dbg_i, int dbg_j)