21 |
#include "PARAMS.h" |
#include "PARAMS.h" |
22 |
#include "GRID.h" |
#include "GRID.h" |
23 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
24 |
#ifdef USE_QSW |
c for Qsw and/or surfaceForcingT |
25 |
|
c choice which field to take pCO2 from for pCO2limit |
26 |
|
c this assumes we use Ttendency from offline |
27 |
#include "FFIELDS.h" |
#include "FFIELDS.h" |
|
#endif |
|
28 |
#ifdef ALLOW_LONGSTEP |
#ifdef ALLOW_LONGSTEP |
29 |
#include "LONGSTEP.h" |
#include "LONGSTEP.h" |
30 |
#endif |
#endif |
44 |
#include "WAVEBANDS_PARAMS.h" |
#include "WAVEBANDS_PARAMS.h" |
45 |
#endif |
#endif |
46 |
|
|
47 |
|
|
48 |
C === Global variables === |
C === Global variables === |
49 |
c tracers |
c tracers |
50 |
_RL Ptr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy,nDarwin) |
_RL Ptr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy,nDarwin) |
95 |
#ifdef DAR_RADTRANS |
#ifdef DAR_RADTRANS |
96 |
integer iday,iyr,imon,isec,lp,wd,mydate(4) |
integer iday,iyr,imon,isec,lp,wd,mydate(4) |
97 |
_RL Edwsf(tlam),Eswsf(tlam) |
_RL Edwsf(tlam),Eswsf(tlam) |
98 |
_RL Edz(tlam,Nr),Esz(tlam,Nr),Euz(tlam,Nr),Eutop(tlam,Nr) |
_RL Edz(tlam,Nr),Esz(tlam,Nr),Euz(tlam,Nr) |
99 |
|
_RL Estop(tlam,Nr),Eutop(tlam,Nr) |
100 |
_RL tirrq(nr) |
_RL tirrq(nr) |
101 |
_RL tirrwq(tlam,nr) |
_RL tirrwq(tlam,nr) |
102 |
|
_RL amp1(tlam,nr), amp2(tlam,nr) |
103 |
_RL solz |
_RL solz |
104 |
_RL rmud |
_RL rmud |
105 |
_RL actot,bctot,bbctot |
_RL actot,bctot,bbctot |
106 |
_RL apart_k(Nr,tlam),bpart_k(Nr,tlam),bbpart_k(Nr,tlam) |
_RL apart_k(Nr,tlam),bpart_k(Nr,tlam),bbpart_k(Nr,tlam) |
107 |
_RL bt_k(Nr,tlam), bb_k(Nr,tlam) |
_RL bt_k(Nr,tlam), bb_k(Nr,tlam) |
108 |
|
_RL discEs, discEu |
109 |
|
INTEGER idiscEs,jdiscEs,kdiscEs,ldiscEs |
110 |
|
INTEGER idiscEu,jdiscEu,kdiscEu,ldiscEu |
111 |
#else |
#else |
112 |
_RL PARwdn(tlam) |
_RL PARwdn(tlam) |
113 |
#endif |
#endif |
201 |
_RL PSiupl |
_RL PSiupl |
202 |
_RL Tlocal |
_RL Tlocal |
203 |
_RL Slocal |
_RL Slocal |
204 |
|
_RL pCO2local |
205 |
_RL Qswlocal |
_RL Qswlocal |
206 |
_RL NH4l |
_RL NH4l |
207 |
_RL NO2l |
_RL NO2l |
334 |
enddo |
enddo |
335 |
ENDDO |
ENDDO |
336 |
ENDDO |
ENDDO |
337 |
|
|
338 |
|
#ifdef DAR_RADTRANS |
339 |
|
idiscEs = 0 |
340 |
|
jdiscEs = 0 |
341 |
|
kdiscEs = 0 |
342 |
|
ldiscEs = 0 |
343 |
|
idiscEu = 0 |
344 |
|
jdiscEu = 0 |
345 |
|
kdiscEu = 0 |
346 |
|
ldiscEu = 0 |
347 |
|
discEs = 0. |
348 |
|
discEu = 0. |
349 |
|
#endif |
350 |
c |
c |
351 |
c bio-chemical time loop |
c bio-chemical time loop |
352 |
c-------------------------------------------------- |
c-------------------------------------------------- |
642 |
bt_k(k,ilam) = bw(ilam) + bctot + bpart_k(k,ilam) |
bt_k(k,ilam) = bw(ilam) + bctot + bpart_k(k,ilam) |
643 |
bb_k(k,ilam) = darwin_bbw*bw(ilam)+bbctot+bbpart_k(k,ilam) |
bb_k(k,ilam) = darwin_bbw*bw(ilam)+bbctot+bbpart_k(k,ilam) |
644 |
bb_k(k,ilam) = MAX(darwin_bbmin, bb_k(k,ilam)) |
bb_k(k,ilam) = MAX(darwin_bbmin, bb_k(k,ilam)) |
645 |
|
c initialize output variables |
646 |
|
Edz(ilam,k) = 0.0 |
647 |
|
Esz(ilam,k) = 0.0 |
648 |
|
Euz(ilam,k) = 0.0 |
649 |
|
Estop(ilam,k) = 0.0 |
650 |
|
Eutop(ilam,k) = 0.0 |
651 |
|
amp1(ilam,k) = 0.0 |
652 |
|
amp2(ilam,k) = 0.0 |
653 |
ENDDO |
ENDDO |
654 |
ENDDO |
ENDDO |
655 |
|
|
656 |
#ifdef DAR_RADTRANS_ITERATIVE |
IF (darwin_radtrans_niter.GE.0) THEN |
657 |
call MONOD_RADTRANS_ITER( |
call MONOD_RADTRANS_ITER( |
658 |
I dz_k,rmud,Edwsf,Eswsf,a_k,bt_k,bb_k, |
I dz_k,rmud,Edwsf,Eswsf,a_k,bt_k,bb_k, |
659 |
I darwin_radtrans_kmax,darwin_radtrans_niter, |
I darwin_radtrans_kmax,darwin_radtrans_niter, |
660 |
O Edz,Esz,Euz,Eutop, |
O Edz,Esz,Euz,Eutop, |
661 |
O tirrq,tirrwq, |
O tirrq,tirrwq, |
662 |
|
O amp1,amp2, |
663 |
I myThid) |
I myThid) |
664 |
#else |
ELSEIF (darwin_radtrans_niter.EQ.-1) THEN |
665 |
c dzlocal ????? |
c dzlocal ????? |
666 |
call MONOD_RADTRANS( |
call MONOD_RADTRANS( |
667 |
I drF,rmud,Edwsf,Eswsf,a_k,bt_k,bb_k, |
I drF,rmud,Edwsf,Eswsf,a_k,bt_k,bb_k, |
668 |
O Edz,Esz,Euz,Eutop, |
O Edz,Esz,Euz,Eutop, |
669 |
O tirrq,tirrwq, |
O tirrq,tirrwq, |
670 |
I myThid) |
I myThid) |
671 |
|
ELSE |
672 |
|
call MONOD_RADTRANS_DIRECT( |
673 |
|
I dz_k,rmud,Edwsf,Eswsf,a_k,bt_k,bb_k, |
674 |
|
I darwin_radtrans_kmax, |
675 |
|
O Edz,Esz,Euz,Estop,Eutop, |
676 |
|
O tirrq,tirrwq, |
677 |
|
O amp1,amp2, |
678 |
|
I myThid) |
679 |
|
#ifdef DAR_CHECK_IRR_CONT |
680 |
|
IF( dz_k(1) .GT. 0.0 )THEN |
681 |
|
DO ilam = 1,tlam |
682 |
|
IF(Eswsf(ilam).GE.darwin_radmodThresh .OR. |
683 |
|
& Edwsf(ilam).GE.darwin_radmodThresh ) THEN |
684 |
|
IF(ABS(Estop(ilam,1)-Eswsf(ilam)) .GT. discEs )THEN |
685 |
|
discEs = ABS(Estop(ilam,1)-Eswsf(ilam)) |
686 |
|
idiscEs = i |
687 |
|
jdiscEs = j |
688 |
|
kdiscEs = 1 |
689 |
|
ldiscEs = ilam |
690 |
|
ENDIF |
691 |
|
DO k=1,darwin_radtrans_kmax-1 |
692 |
|
IF(ABS(Estop(ilam,k+1)-Esz(ilam,k)) .GT. discEs)THEN |
693 |
|
discEs = ABS(Estop(ilam,k+1)-Esz(ilam,k)) |
694 |
|
idiscEs = i |
695 |
|
jdiscEs = j |
696 |
|
kdiscEs = k+1 |
697 |
|
ldiscEs = ilam |
698 |
|
ENDIF |
699 |
|
IF(ABS(Eutop(ilam,k+1)-Euz(ilam,k)) .GT. discEu)THEN |
700 |
|
discEu = ABS(Eutop(ilam,k+1)-Euz(ilam,k)) |
701 |
|
idiscEu = i |
702 |
|
jdiscEu = j |
703 |
|
kdiscEu = k+1 |
704 |
|
ldiscEu = ilam |
705 |
|
ENDIF |
706 |
|
ENDDO |
707 |
|
ENDIF |
708 |
|
ENDDO |
709 |
|
ENDIF |
710 |
#endif |
#endif |
711 |
|
ENDIF |
712 |
c |
c |
713 |
c uses chl from prev timestep (as wavebands does) |
c uses chl from prev timestep (as wavebands does) |
714 |
c keep like this in case need to consider upwelling irradiance as affecting the grid box above |
c keep like this in case need to consider upwelling irradiance as affecting the grid box above |
880 |
Slocal = salt(i,j,k,bi,bj) |
Slocal = salt(i,j,k,bi,bj) |
881 |
#endif |
#endif |
882 |
|
|
883 |
|
c choice where to get pCO2 from |
884 |
|
c taking from igsm dic run - fed through Tflux array |
885 |
|
c pCO2local=surfaceForcingT(i,j,bi,bj) |
886 |
|
c or from darwin carbon module |
887 |
|
#ifdef ALLOW_CARBON |
888 |
|
pCO2local=pCO2(i,j,bi,bj) |
889 |
|
#else |
890 |
|
pCO2local=280. _d -6 |
891 |
|
#endif |
892 |
|
|
893 |
freefu = max(freefe(i,j,k),0. _d 0) |
freefu = max(freefe(i,j,k),0. _d 0) |
894 |
if (k.eq.1) then |
if (k.eq.1) then |
895 |
inputFel = inputFe(i,j,bi,bj) |
inputFel = inputFe(i,j,bi,bj) |
1006 |
I pofeupl, psiupl, |
I pofeupl, psiupl, |
1007 |
I PARl, |
I PARl, |
1008 |
I Tlocal, Slocal, |
I Tlocal, Slocal, |
1009 |
|
I pCO2local, |
1010 |
I freefu, inputFel, |
I freefu, inputFel, |
1011 |
I bottom, dzlocal, |
I bottom, dzlocal, |
1012 |
O Rstarl, RNstarl, |
O Rstarl, RNstarl, |
1402 |
Euave(i,j,k,bi,bj,ilam)=Euave(i,j,k,bi,bj,ilam)+ |
Euave(i,j,k,bi,bj,ilam)=Euave(i,j,k,bi,bj,ilam)+ |
1403 |
& Euz(ilam,k-1)*dtplankton |
& Euz(ilam,k-1)*dtplankton |
1404 |
endif |
endif |
1405 |
|
Estave(i,j,k,bi,bj,ilam)=Estave(i,j,k,bi,bj,ilam)+ |
1406 |
|
& Estop(ilam,k)*dtplankton |
1407 |
Eutave(i,j,k,bi,bj,ilam)=Eutave(i,j,k,bi,bj,ilam)+ |
Eutave(i,j,k,bi,bj,ilam)=Eutave(i,j,k,bi,bj,ilam)+ |
1408 |
& Eutop(ilam,k)*dtplankton |
& Eutop(ilam,k)*dtplankton |
1409 |
enddo |
enddo |
1410 |
#endif |
#endif |
1411 |
|
#ifdef DAR_DIAG_IRR_AMPS |
1412 |
|
do ilam = 1,tlam |
1413 |
|
amp1ave(i,j,k,bi,bj,ilam)=amp1ave(i,j,k,bi,bj,ilam)+ |
1414 |
|
& amp1(ilam,k)*dtplankton |
1415 |
|
amp2ave(i,j,k,bi,bj,ilam)=amp2ave(i,j,k,bi,bj,ilam)+ |
1416 |
|
& amp2(ilam,k)*dtplankton |
1417 |
|
enddo |
1418 |
|
#endif |
1419 |
#ifdef DAR_DIAG_ABSORP |
#ifdef DAR_DIAG_ABSORP |
1420 |
do ilam = 1,tlam |
do ilam = 1,tlam |
1421 |
aave(i,j,k,bi,bj,ilam)=aave(i,j,k,bi,bj,ilam)+ |
aave(i,j,k,bi,bj,ilam)=aave(i,j,k,bi,bj,ilam)+ |
1440 |
& bbpart_k(k,ilam)*dtplankton |
& bbpart_k(k,ilam)*dtplankton |
1441 |
enddo |
enddo |
1442 |
#endif |
#endif |
1443 |
|
#ifdef DAR_RADTRANS |
1444 |
|
if (k.eq.1) then |
1445 |
|
rmudave(i,j,bi,bj)=rmudave(i,j,bi,bj)+ |
1446 |
|
& rmud*dtplankton |
1447 |
|
endif |
1448 |
|
#endif |
1449 |
#ifdef DAR_DIAG_RSTAR |
#ifdef DAR_DIAG_RSTAR |
1450 |
do np=1,npmax |
do np=1,npmax |
1451 |
Rstarave(i,j,k,bi,bj,np)=Rstarave(i,j,k,bi,bj,np)+ |
Rstarave(i,j,k,bi,bj,np)=Rstarave(i,j,k,bi,bj,np)+ |
1551 |
C itistime |
C itistime |
1552 |
#endif |
#endif |
1553 |
|
|
1554 |
|
#ifdef DAR_CHECK_IRR_CONT |
1555 |
|
i = myXGlobalLo-1+(bi-1)*sNx+idiscEs |
1556 |
|
j = myYGlobalLo-1+(bj-1)*sNy+jdiscEs |
1557 |
|
write(6,'(I4.4,X,A,4(X,I4),1PE24.16)')myProcId,'max Es disc', |
1558 |
|
& i,j,kdiscEs,ldiscEs,discEs |
1559 |
|
i = myXGlobalLo-1+(bi-1)*sNx+idiscEu |
1560 |
|
j = myYGlobalLo-1+(bj-1)*sNy+jdiscEu |
1561 |
|
write(6,'(I4.4,X,A,4(X,I4),1PE24.16)')myProcId,'max Eu disc', |
1562 |
|
& i,j,kdiscEu,ldiscEu,discEu |
1563 |
|
#endif |
1564 |
|
|
1565 |
COJ fill diagnostics |
COJ fill diagnostics |
1566 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
1567 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |